一、简介
钉钉提供了Webhook机制用来向钉钉群发送自定义信息。Webhook是通过一个HTTP请求向指定的URL地址发送一个JSON格式的消息体,这个消息体里可以包含群聊里要展示的信息。使用者可以通过该机制进行日常工作通知、报警等信息的推送。
二、使用方法
Webhook的使用非常简单,只需在创建群聊或单聊的时候开启Webhook机制,创建完成后即可获取到webhook地址。
三、发送消息
可以通过HTTP的POST方式,向钉钉webhook地址发送一个JSON格式的消息体来发送消息。
{ "msgtype": "text", "text": { "content": "这是一条来自机器人的消息" } }
其中,msgtype为消息类型,text表示文本,link表示链接,markdown表示Markdown格式的文本,整个消息体中,除了msgtype外,每个类型对应的JSON字段都是不同的。如果发送Markdown格式的消息,例如:
{ "msgtype": "markdown", "markdown": { "title": "杭州天气", "text": "#### 杭州天气\n> 9度,西北风1级,空气良89,相对温度73%\n\n> ![screenshot](http://image.jpg)\n> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n" } }
四、安全设置
为了保证Webhook的安全性,钉钉提供了加签功能,具体方法如下:
1、将所有要发送的数据转成字符串
2、取出当前的时间戳,单位是毫秒,比如1552920546388
3、将时间戳和HTTP请求参数中的所有数据,按字典顺序排序后,拼接在一起成一个字符串
4、将第三步拼接好的字符串进行HMAC-SHA256计算,并转换成16进制字符串
5、将第四步计算出来的HMAC-SHA256签名,添加到HTTP请求Header的X-Timestamp和X-Signature参数中
五、代码示例
下面是一个通过Python代码向钉钉webhook发送Markdown格式消息的示例代码:
import requests import time import hmac import hashlib import base64 import urllib.parse timestamp = str(round(time.time() * 1000)) secret = "your_secret" webhook_url = "your_webhook_url" string_to_sign = '{}\n{}'.format(timestamp, secret) hmac_code = hmac.new(secret.encode('utf-8'), string_to_sign.encode('utf-8'), digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) headers = { 'Content-Type': 'application/json;charset=utf-8', 'X-Timestamp': timestamp, 'X-Signature': sign } data = { "msgtype": "markdown", "markdown": { "title": "杭州天气", "text": "#### 杭州天气\n> 9度,西北风1级,空气良89,相对温度73%\n\n> ![screenshot](http://image.jpg)\n> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n" } } response = requests.post(webhook_url, headers=headers, json=data) print(response.text)