钉钉群发消息机器人
钉钉自定义机器人 - 后台开发,我们通过配置就好了,方便操作!
首先需要的是自定义机器人唯一的 webhook,可以通过电脑端的钉钉申请,申请完成后记录下该机器人的 webhook。如图:
点击添加机器人,选择“自定义机器人”
点击添加:
自定义她的功能名称:
完成必要的安全设置(至少选择一种),重置我已阅读并同意《自定义机器人服务及免责条款》,单击“完成”。安全设置目前有 3 种方式,设置说明见介绍。
完成安全设置后,复制出机器人的 Webhook 地址,可用于向这个群发送消息,格式如下:
`https://oapi.dingtalk.com/robot/send?access_token=XXXXXX`
注意:请保管好此 Webhook 地址,不要公布在外部网站上,避免后有安全风险。
安全设置
安全设置目前有 3 种方式:
(1)方式一,自定义关键词
最多可以设置 10 个关键字,消息中至少包含其中 1 个关键字才可以发送成功。
例如:添加了一个自定义关键字:监控报警
则这个机器人所发送的消息,必须包含监控报警 这个词,才能发送成功。
(2)方式二,加签
首先,把 timestamp +“ \ n” + 密钥当做签名密钥,使用 HmacSHA256 算法计算签名,然后进行 Base64 编码,最后再把签名参数再进行 urlEncode,得到最终的签名(需要使用 UTF-8 字符集) )。
签名计算代码示例(Python)
import time
import hmac
import hashlib
import base64
import urllib
timestamp = long(round(time.time() * 1000))
secret = 'this is secret'
secret_enc = bytes(secret).encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = bytes(string_to_sign).encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.quote_plus(base64.b64encode(hmac_code))
print(timestamp) 16print(sign)`
第二步,把 timestamp 和第一步得到的签名值分割到 URL 中。
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX×tamp=XXX&sign=XXX
(3)方式三,IP 地址(段)
设定后,只有来自 IP 地址范围内的请求才会被正常处理。支持两种设置方式:IP,IP 段,暂不支持 IPv6 的地址白名单,格式如下:
注意:安全设置的上述三种方式,需要至少设置其中一种,以进行安全保护。校正不通过的消息将会发送失败,错误如下:
1 //消息内容中不包含任何关键词
2 {
3 “ERRCODE”:310000,
4 “ERRMSG”: “关键字不是在内容”
5 }
6
7 //时间戳无效
8 {
9 “ERRCODE”:310000,
10 “ ERRMSG “:”无效时间戳“
11 }
12
13 //签名不匹配
14 {
15 ”ERRCODE“:310000,
16 ”ERRMSG“: ”符号不匹配“
17 }
18
19 // IP地址不在白名单
20 {
21 ” ERRCODE“:310000,
22 “ errmsg”:“ ip XXXX不在白名单中”
23 }
使用自定义机器人
(1)获取到 Webhook 地址后,用户可以向该地址发起 HTTP POST 请求,即可实现给该钉钉群发送消息。注意,发起 POST 请求时,必须将字符集编码设置成 UTF-8。
(2)当前自定义机器人支持文本(文本),链接(链接),markdown(markdown),ActionCard,FeedCard 消息类型,大家可以根据自己的使用场景选择合适的消息类型,达到最好的展示样式。
(3)自定义机器人发送消息时,可以通过手机号码指定“被 @人列表”。在“被 @人列表”里面的人员收到该消息时,会有 @消息提醒(免打扰会话仍然通知提醒,首屏出现“有人 @你”)。
(4)当前机器人尚不支持应答机制(该机制指的是群里成员在聊天 @机器人的时候,钉钉指定的服务地址,即传出机器人)。
下面放出发送文本信息时的代码:
webhook = web_hook
ding = chatbot.DingtalkChatbot(webhook)
ding.send_text(msg=self.message_text,is_at_all=True)
# is_at_all=True表示@all ,如果不加这个参数,钉钉群组收到消息不会@任何人。
web_hook 为定义的流程变量,赋值为上述步骤中保存的唯一标识码,形如https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
message_text 为定义的全局变量,存放想要发送的消息。
运行后截图:
good
666 啊
哈哈,强大