接收

当用户@机器人时,钉钉会通过机器人开发者的HTTPS服务地址,把消息内容发送出去,报文协议如下。

HTTP HEADER

{
  "Content-Type": "application/json; charset=utf-8",
  "timestamp": "1577262236757",
  "sign":"xxxxxxxxxx"
}
参数 说明
timestamp 消息发送的时间戳,单位是毫秒。
sign 签名值。

开发者需对header中的timestamp和sign进行验证,以判断是否是来自钉钉的合法请求,避免其他仿冒钉钉调用开发者的HTTPS服务传送数据,具体验证逻辑如下:

  • timestamp 与系统当前时间戳如果相差1小时以上,则认为是非法的请求。
  • sign 与开发者自己计算的结果不一致,则认为是非法的请求。

必须当timestamp和sign同时验证通过,才能认为是来自钉钉的合法请求。

sign的计算方法

header中的timestamp + "\n" + 机器人的appSecret当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,得到最终的签名值。

HTTP BODY

{
    "conversationId": "xxx",
    "atUsers": [
        {
            "dingtalkId": "xxx",
            "staffId":"xxx"
        }
    ],
    "chatbotCorpId": "dinge8a565xxxx",
    "chatbotUserId": "$:LWCP_v1:$Cxxxxx",
    "msgId": "msg0xxxxx",
    "senderNick": "杨xx",
    "isAdmin": true,
    "senderStaffId": "user123",
    "sessionWebhookExpiredTime": 1613635652738,
    "createAt": 1613630252678,
    "senderCorpId": "dinge8a565xxxx",
    "conversationType": "2",
    "senderId": "$:LWCP_v1:$Ff09GIxxxxx",
    "conversationTitle": "机器人测试-TEST",
    "isInAtList": true,
    "sessionWebhook": "https://oapi.dingtalk.com/robot/sendBySession?session=xxxxx",
    "text": {
        "content": " 你好"
    },
    "msgtype": "text"
}
参数 是否必填 类型 说明
msgtype String 目前只支持text。
content String 消息文本。
msgId String 加密的消息ID。
createAt String 消息的时间戳,单位ms。
conversationType String 1:单聊2:群聊
conversationId String 加密的会话ID。
conversationTitle String 群聊时才有的会话标题。
senderId String 加密的发送者ID。说明 使用senderStaffId,作为发送者userid值。
senderNick String 发送者昵称。
senderCorpId String 企业内部群有的发送者当前群的企业corpId。
sessionWebhook String 当前会话的Webhook地址。
sessionWebhookExpiredTime Long 当前会话的Webhook地址过期时间。
isAdmin boolean 是否为管理员。说明 机器人发布上线后生效。
chatbotCorpId String 加密的机器人所在的企业corpId。
isInAtList boolean 是否在@列表中。
senderStaffId String 企业内部群中@该机器人的成员userid。说明 该字段在机器人发布线上版本后,才会返回。
chatbotUserId String 加密的机器人ID。
atUsers Array 被@人的信息。dingtalkId:加密的发送者ID。staffId:企业内部群有的发送者在企业内的userid。
END
本文作者:
文章标题:钉钉机器人应答机制(基于Webhook)
本文地址:https://kk.hackerjk.top/study/72.html
版权说明:若无注明,本文皆由小陈的小角落原创,转载请保留文章出处。
最后修改:2021 年 10 月 11 日 09 : 25 PM
要不?请我吃一下沙县连锁大酒店?