最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人觉得阿里的pm都是脑残才会设计出这种脑残产品,不过吐槽归吐槽,该用还得用,虽然钉钉别的功能很鸡肋,但是机器人这个功能还是让人眼前一亮,属于比较极客的功能,它可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github、Gitlab等源码管理服务,实现源码更新同步;通过聚合Trello、JIRA等项目协调服务,实现项目信息同步;同事,支持Webhook协议的自定义接入,支持更多可能性,例如:将运维报警提醒、自动化测试的结果报告提醒、工作、 在本文中,我们将深入探讨如何使用Python 3.7配置和开发钉钉群自定义机器人。钉钉是一款由中国阿里巴巴集团推出的协同办公软件,虽然在用户体验上存在争议,但其机器人功能颇具吸引力,允许用户集成各种第三方服务,实现信息自动化同步。 我们需要了解钉钉机器人的基本工作原理。钉钉机器人基于Webhook协议,这是一种API概念,采用“反向API”模式,即由后端服务器主动推送数据给前端,而非等待前端请求。这使得钉钉机器人能够实时接收并处理来自不同服务的通知。 要创建自定义机器人,你需要登录PC或Mac版的钉钉客户端,并在目标群聊中找到“智能群助手”,点击“添加机器人”。请注意,目前钉钉已不再支持在手机端创建自定义机器人。在添加机器人的界面中,选择“自定义机器人”,然后设置机器人的基本信息,如名称和头像。在安全设置中,推荐使用加签方式,这是一种更安全且灵活的验证方法,它涉及到一个加签过程,确保只有经过验证的请求才能发送消息。 加签验证的过程包括以下步骤: 1. 获取当前时间戳(timestamp),以毫秒为单位。 2. 定义你的加签密钥(secret)。 3. 将密钥和时间戳转换为字节串(secret_enc 和 string_to_sign_enc)。 4. 使用HMAC-SHA256算法对字符串进行哈希运算,得到hmac_code。 5. 对哈希结果进行Base64编码,并URL编码得到签名(sign)。 有了签名,你可以通过POST请求将消息推送到钉钉机器人的Webhook地址。在发送请求时,需要设置请求头(headers),包括Content-Type(通常为application/json),以及消息体(data),其中包含msgtype(消息类型,如"text")、文本内容(在"text"字段内)以及其他可能的属性,如是否@所有人(isAtAll)。 以下是一个简单的Python 3.7示例,演示了如何构造并发送消息: ```python import time import hmac import hashlib import base64 import urllib.parse import requests import json timestamp = str(round(time.time() * 1000)) secret = '你的加签密钥' secret_enc = secret.encode('utf-8') string_to_sign = f'{timestamp}\n{secret}' string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote(base64.b64encode(hmac_code)) webhook = f'https://oapi.dingtalk.com/robot/send?access_token=你的机器人访问令牌×tamp={timestamp}&sign={sign}' data = { "msgtype": "text", "text": { "content": '这是一条测试消息' }, "isAtAll": False } headers = {'Content-Type': 'application/json'} response = requests.post(webhook, data=json.dumps(data), headers=headers) ``` 以上代码将向钉钉群发送一条纯文本消息。你可以根据需求调整消息内容和格式,如添加Markdown、图片、链接等不同类型的消息。此外,你还可以通过设置`at`字段来@特定的群成员,或者通过`isAtAll`为True来@所有人。 通过这样的方式,你可以将钉钉机器人集成到你的工作流程中,例如自动化发送GitHub或GitLab的代码更新通知,Trello或JIRA的项目进度更新,以及其他的自定义提醒,如运维报警、测试报告、日程安排等。这种方式极大地提高了工作效率,实现了跨平台信息的无缝同步。
- 粉丝: 4
- 资源: 928
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助