两者底层都是基于 HTTP POST 的 Webhook 机制,消息体均为 JSON 格式,主要区别在于安全签名参数、@人员标识字段以及部分消息模板的交互能力。
先说结论:优先选择团队日常办公主要使用的 IM 平台,若需精准@责任人,需留意两者在用户标识配置上的差异。
- 适合:团队日常办公主要使用的 IM 平台,确保告警能被及时看到。
- 重点看:@人员功能是否需要额外配置用户标识,企业微信通常需要提供用户 ID。
- 别忽略:企业微信需要企业认证,钉钉自定义机器人支持外部群但需注意 IP 白名单。
命令速用版
消息格式核心差异体现在 JSON payload 的结构和安全参数上,以下是两种平台发送文本消息的典型请求体对比:
# 钉钉群机器人 (Webhook + 签名)
POST https://oapi.dingtalk.com/robot/send?access_token=XXX×tamp=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 中即可。
分步处理
如果你正在选型或配置,建议按以下步骤操作:
- 确认办公生态:检查团队日常沟通主要在哪两个平台。如果大部分成员不在某个平台上,消息到达率会大打折扣。
- 创建机器人:在企业微信或钉钉的群设置中找到“群机器人”,添加自定义机器人。记录下生成的 Webhook 地址,该地址通常包含关键的 key 或 token 信息。
- 配置安全设置:钉钉支持签名验证 (HMAC-SHA256)、IP 白名单或关键词。为了安全,建议开启签名或 IP 白名单。企业微信主要依赖 Webhook 中的 key 保密。
- 编写发送逻辑:使用任意编程语言发起 HTTP POST 请求。注意设置 Content-Type 为 application/json,并将消息内容放在 body 中。
怎么验证是否生效
配置完成后,通过以下方式确认:
- curl 命令测试:在服务器终端直接发送请求,观察返回。
- 检查返回状态:HTTP 请求应返回 200 状态码,且响应 body 中包含错误码 0 或 success 字样。具体字段需参考各自开发者文档。
- 日志确认:在监控系统中点击“测试”按钮,或手动触发一条低级别告警。检查目标群聊是否收到消息,消息内容是否包含预期的告警标题和级别。
curl -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"test"}}' "https://oapi.dingtalk.com/robot/send?access_token=XXX"常见坑
- IP 白名单遗漏:钉钉机器人若开启了 IP 白名单,监控服务器 IP 变动会导致发送失败。
- @人配置错误:企业微信和飞书需要管理员权限查看用户标识填入选型,钉钉在某些平台配置下无需设置用户标识即可@。
- 认证限制:企业微信需要企业认证,个人未认证账号可能无法创建可用机器人。
- 地址重置规则:企业微信机器人 Webhook 地址删除后不可恢复,需重新添加;钉钉机器人移除后重新添加可获取新 Token。
参考来源
- 钉钉开放平台 - 自定义机器人接入:https://open.dingtalk.com/document/robots/custom-robot-access
- 企业微信开发者文档 - 群机器人:https://work.weixin.qq.com/api/doc/90000/90136/91770