一、简介
钉钉提供了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> \n> ###### 10点20分发布 [天气](http://www.thinkpage.cn/)"
}
}
四、安全设置
为了保证Webhook的安全性,钉钉提供了加签功能,具体方法如下:
- 将所有要发送的数据转成字符串
- 取出当前的时间戳,单位是毫秒,比如1552920546388
- 将时间戳和HTTP请求参数中的所有数据,按字典顺序排序后,拼接在一起成一个字符串
- 将第三步拼接好的字符串进行HMAC-SHA256计算,并转换成16进制字符串
- 将第四步计算出来的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> \n> ###### 10点20分发布 [天气](http://www.thinkpage.cn/)"
}
}
response = requests.post(webhook_url, headers=headers, json=data)
print(response.text)