您的位置:

全方位详解钉钉webhook使用

一、简介

钉钉提供了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)