如何用ThinkPHP封装Webhook并通过钉钉机器人发送Markdown格式告警通知?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1083个文字,预计阅读时间需要5分钟。
直接使用+cURL或+file_get_contents+发起POST请求即可,无需安装SDK。锤子机器人只认+POST+application/json+。传递过去的是标准的JSON格式,ThinkPHP自带的+Http+类或原生+cURL+都能搞定。
关键不是“能不能发”,而是「怎么发才不被钉钉拒收」——比如签名失效、timestamp 和 sign 不匹配、JSON 格式错一个逗号就 400。
- 必须带上
timestamp(毫秒时间戳)和sign(HMAC-SHA256 签名),否则返回{"errcode":310000,"errmsg":"invalid signature"} -
sign计算时,原始字符串是"<timestamp>\n<secret>"</secret></timestamp>,注意换行符\n是必须的,不是空格也不是回车 - Webhook 地址里的
access_token和sign要动态拼,不能硬编码在 URL 里再 GET 请求 —— 钉钉只接受 POST body 里带签名
Markdown 消息体怎么写才不被截断或渲染失败
钉钉对 Markdown 支持有限,不是所有 GitHub 风格都管用。
本文共计1083个文字,预计阅读时间需要5分钟。
直接使用+cURL或+file_get_contents+发起POST请求即可,无需安装SDK。锤子机器人只认+POST+application/json+。传递过去的是标准的JSON格式,ThinkPHP自带的+Http+类或原生+cURL+都能搞定。
关键不是“能不能发”,而是「怎么发才不被钉钉拒收」——比如签名失效、timestamp 和 sign 不匹配、JSON 格式错一个逗号就 400。
- 必须带上
timestamp(毫秒时间戳)和sign(HMAC-SHA256 签名),否则返回{"errcode":310000,"errmsg":"invalid signature"} -
sign计算时,原始字符串是"<timestamp>\n<secret>"</secret></timestamp>,注意换行符\n是必须的,不是空格也不是回车 - Webhook 地址里的
access_token和sign要动态拼,不能硬编码在 URL 里再 GET 请求 —— 钉钉只接受 POST body 里带签名
Markdown 消息体怎么写才不被截断或渲染失败
钉钉对 Markdown 支持有限,不是所有 GitHub 风格都管用。

