如何使用 curl 命令测试钉钉机器人 webhook 接口连通性

文章导读
使用 curl 测试钉钉机器人 webhook 的核心是构造正确的 HTTP POST 请求,并确保请求内容符合机器人后台设置的安全策略(关键词或签名)。
📋 目录
  1. 命令速用版(关键词模式)
  2. 加签模式完整实操(Linux/Mac)
  3. Windows 环境适配说明
  4. 怎么验证是否生效
  5. 安全风险与重置
  6. 参考来源
A A

使用 curl 测试钉钉机器人 webhook 的核心是构造正确的 HTTP POST 请求,并确保请求内容符合机器人后台设置的安全策略(关键词或签名)。

先说结论:curl 适合开发和运维阶段快速验证接口连通性,但必须严格匹配钉钉后台配置的安全类型。

  • 适合:本地调试、脚本监控、CI/CD 流水线通知测试。
  • 先看:机器人后台设置的是“关键词”还是“加签”,两者 curl 写法不同。
  • 建议:测试通过后保存命令模板,正式使用时注意 secret 保密,泄露需立即重置。

命令速用版(关键词模式)

如果是“关键词”安全设置,可以直接发送包含关键词的文本:

curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "测试关键词"}}'

加签模式完整实操(Linux/Mac)

加签模式需要计算签名,以下是基于 openssl 的一键脚本示例。请替换 YOUR_TOKEN 和 YOUR_SECRET。

#!/bin/bash
TOKEN="YOUR_TOKEN"
SECRET="YOUR_SECRET"
TIMESTAMP=$(date +%s%3N)
STRING_TO_SIGN="${TIMESTAMP}\n${SECRET}"
SIGN=$(echo -n -e "${STRING_TO_SIGN}" | openssl dgst -sha256 -hmac "${SECRET}" -binary | openssl base64 | tr -d '\n')
SIGN_URL_ENCODED=$(python -c "import urllib.parse; print(urllib.parse.quote('${SIGN}'))")

curl "https://oapi.dingtalk.com/robot/send?access_token=${TOKEN}×tamp=${TIMESTAMP}&sign=${SIGN_URL_ENCODED}" \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "加签测试"}}'

注意:sign 参数必须进行 URL 编码,否则可能报错 310000。

如何使用 curl 命令测试钉钉机器人 webhook 接口连通性

Windows 环境适配说明

Windows CMD 或 PowerShell 中,curl 的单引号可能不被识别,建议改用双引号并转义内部双引号。此外,Windows 原生没有 openssl 和 date 毫秒命令,建议:

  • 使用 WSL (Windows Subsystem for Linux) 执行上述 Linux 脚本。
  • 或在 PowerShell 中使用 Invoke-RestMethod 配合 .NET 计算签名。
  • 若仅测试连通性,可暂时关闭加签验证,测试后再开启。

怎么验证是否生效

观察 curl 返回的 JSON 响应。若返回 {"errcode":0,"errmsg":"ok"} 表示成功。若 errcode 非 0,参考以下常见错误码:

错误码含义排查建议
310000签名无效检查 secret 是否复制完整,sign 是否 URL 编码
310001时间戳无效检查本地时间是否与网络时间同步,timestamp 需为毫秒
310002内容为空或关键词不匹配检查 text.content 是否包含后台设置的关键词
400请求错误检查 HTTP 方法是否为 POST,Content-Type 是否正确

安全风险与重置

若 secret 意外泄露(如提交到代码仓库),请立即进入钉钉机器人设置页面点击“重置”生成新 secret。旧 secret 会立即失效。建议在脚本中使用环境变量引用 secret,避免硬编码。

参考来源

  • 钉钉开放平台 - 自定义机器人接入:https://open.dingtalk.com/document/robots/custom-robot-access