dingtalk-notice
dingtalk-notice 是一款钉钉群机器人消息推送服务。 提供 HTTP API 将消息推送到钉钉群,附带一套服务器健康监控脚本, 异常时自动合并告警并推送。适用于系统告警、CI/CD 通知、备份结果上报等自动化场景。
💡 它解决什么问题?
钉钉群机器人自带 Webhook,但直接调用需要自行处理
加签(HMAC-SHA256)、消息体组装、超时与错误处理。
本项目把这些细节封装成一个统一的 HTTP 服务,任何能发 HTTP 请求的程序
(curl、脚本、CI 流水线)都能直接接入,无需引入钉钉 SDK。
主要特性
- 零外部依赖:仅使用 Node.js 标准库(http / https / crypto),无框架、无数据库
- 文本 / Markdown 消息:支持
text与markdown两种消息类型,可 @指定成员或 @所有人 - Webhook 加签:自动计算 HMAC-SHA256 签名,兼容钉钉「自定义机器人」加签安全设置
- 可选 API 鉴权:配置 Token 后,调用需携带
Authorization: Bearer <token>,防止服务被滥用 - 来源主机标识:多台服务器共用推送服务时,通过
hostname字段区分消息来源 - 服务器监控脚本:
monitor.sh每分钟检查服务、端口、内存、磁盘,异常合并为一条告警推送 - 结构化日志与优雅关闭:请求日志支持文件写入与自动轮转,收到 SIGTERM 后等待在途请求完成再退出
适用场景
系统告警
用 monitor.sh 监控服务器健康状态,服务宕机、端口失联、
内存或磁盘超阈值时,自动把告警推到运维钉钉群。
CI/CD 通知
在 GitLab CI、GitHub Actions、Jenkins 等流水线末尾调用 /api/v1/push,
把构建、部署、发布结果实时通知到团队群。
任务结果上报
定时任务(备份、数据同步、报表生成)完成后推送结果, 成功或失败一条消息说明,无需登录服务器查看日志。
快速预览
启动服务后,向钉钉群发一条文本消息只需一行命令:
curl -X POST http://localhost:3000/api/v1/push \
-H "Content-Type: application/json" \
-d '{"msgtype":"text","content":"hello"}'
📖 下一步
想要快速上手?阅读 快速开始 文档,
从配置到发出第一条消息只需几分钟。
项目结构
Dingtalk-Notice/
├── src/
│ ├── index.js # 入口,路由 / 鉴权 / 日志
│ ├── config.js # .env 配置文件加载
│ ├── handler.js # 请求校验、消息组装
│ └── dingtalk.js # 签名计算、HTTP 发送
├── scripts/
│ ├── check.sh # 部署环境检查脚本
│ ├── install.sh # 一键部署脚本
│ ├── uninstall.sh # 卸载脚本
│ ├── monitor.sh # 服务器监控脚本
│ └── monitor.conf # 监控阈值配置
├── benchmark/
│ ├── benchmark.js # 性能基准测试脚本
│ └── svg-chart.js # SVG 图表生成器
├── deploy/
│ └── dingtalk-notice.service # systemd 单元文件
├── package.json
└── .env.example
📘 技术栈
服务端运行于 Node.js(ESM),零外部依赖,无框架、无数据库、无状态。
部署由 systemd 托管,崩溃自动重启、开机自启。