钉钉群机器人与企业微信机器人消息格式有什么区别

文章导读
两者底层都是基于 HTTP POST 的 Webhook 机制,消息体均为 JSON 格式,主要区别在于安全签名参数、@人员标识字段以及部分消息模板的交互能力。
📋 目录
  1. 命令速用版
  2. 签名计算代码实战
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

两者底层都是基于 HTTP POST 的 Webhook 机制,消息体均为 JSON 格式,主要区别在于安全签名参数、@人员标识字段以及部分消息模板的交互能力。

先说结论:优先选择团队日常办公主要使用的 IM 平台,若需精准@责任人,需留意两者在用户标识配置上的差异。

  • 适合:团队日常办公主要使用的 IM 平台,确保告警能被及时看到。
  • 重点看:@人员功能是否需要额外配置用户标识,企业微信通常需要提供用户 ID。
  • 别忽略:企业微信需要企业认证,钉钉自定义机器人支持外部群但需注意 IP 白名单。

命令速用版

消息格式核心差异体现在 JSON payload 的结构和安全参数上,以下是两种平台发送文本消息的典型请求体对比:

钉钉群机器人与企业微信机器人消息格式有什么区别
# 钉钉群机器人 (Webhook + 签名)
POST https://oapi.dingtalk.com/robot/send?access_token=XXX&timestamp=XXX&sign=XXX
{
  "msgtype": "text",
  "text": { "content": "测试消息" },
  "at": { "atMobiles": ["13800000000"], "isAtAll": false }
}

# 企业微信机器人 (Webhook)
POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX
{
  "msgtype": "text",
  "text": { "content": "测试消息\n@某人" },
  "mentioned_list": ["USERID_1", "@all"]
}

注意:钉钉的@功能通常在 at 字段配置手机号或用户 ID,企业微信则在 mentioned_list 中指定用户 ID。

签名计算代码实战

若钉钉机器人开启了“签名”安全设置,请求 URL 必须携带 timestamp 和 sign 参数。以下是 Python 签名生成示例:

钉钉群机器人与企业微信机器人消息格式有什么区别
import hmac
import hashlib
import base64
import urllib.parse
import time

secret = 'SECxxxxxxxx'
timestamp = str(round(time.time() * 1000))
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
print(f"timestamp={timestamp}&sign={sign}")

将输出的 timestamp 和 sign 拼接到 Webhook URL 中即可。

钉钉群机器人与企业微信机器人消息格式有什么区别

分步处理

如果你正在选型或配置,建议按以下步骤操作:

  1. 确认办公生态:检查团队日常沟通主要在哪两个平台。如果大部分成员不在某个平台上,消息到达率会大打折扣。
  2. 创建机器人:在企业微信或钉钉的群设置中找到“群机器人”,添加自定义机器人。记录下生成的 Webhook 地址,该地址通常包含关键的 key 或 token 信息。
  3. 配置安全设置:钉钉支持签名验证 (HMAC-SHA256)、IP 白名单或关键词。为了安全,建议开启签名或 IP 白名单。企业微信主要依赖 Webhook 中的 key 保密。
  4. 编写发送逻辑:使用任意编程语言发起 HTTP POST 请求。注意设置 Content-Type 为 application/json,并将消息内容放在 body 中。

怎么验证是否生效

配置完成后,通过以下方式确认:

  1. curl 命令测试:在服务器终端直接发送请求,观察返回。
  2. curl -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"test"}}' "https://oapi.dingtalk.com/robot/send?access_token=XXX"
  3. 检查返回状态:HTTP 请求应返回 200 状态码,且响应 body 中包含错误码 0 或 success 字样。具体字段需参考各自开发者文档。
  4. 日志确认:在监控系统中点击“测试”按钮,或手动触发一条低级别告警。检查目标群聊是否收到消息,消息内容是否包含预期的告警标题和级别。

常见坑

  • IP 白名单遗漏:钉钉机器人若开启了 IP 白名单,监控服务器 IP 变动会导致发送失败。
  • @人配置错误:企业微信和飞书需要管理员权限查看用户标识填入选型,钉钉在某些平台配置下无需设置用户标识即可@。
  • 认证限制:企业微信需要企业认证,个人未认证账号可能无法创建可用机器人。
  • 地址重置规则:企业微信机器人 Webhook 地址删除后不可恢复,需重新添加;钉钉机器人移除后重新添加可获取新 Token。

参考来源