接收
当用户@机器人时,钉钉会通过机器人开发者的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。 |

2 条评论
新盘首开 新盘首开 征召客户!!!
问下被@人的dingtalkId应该怎么获取~