dingtalk-notice

dingtalk-notice 是一款钉钉群机器人消息推送服务。 提供 HTTP API 将消息推送到钉钉群,附带一套服务器健康监控脚本, 异常时自动合并告警并推送。适用于系统告警、CI/CD 通知、备份结果上报等自动化场景。

💡 它解决什么问题?
钉钉群机器人自带 Webhook,但直接调用需要自行处理 加签(HMAC-SHA256)、消息体组装、超时与错误处理。 本项目把这些细节封装成一个统一的 HTTP 服务,任何能发 HTTP 请求的程序 (curl、脚本、CI 流水线)都能直接接入,无需引入钉钉 SDK。

主要特性

  • 零外部依赖:仅使用 Node.js 标准库(http / https / crypto),无框架、无数据库
  • 文本 / Markdown 消息:支持 textmarkdown 两种消息类型,可 @指定成员或 @所有人
  • 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 托管,崩溃自动重启、开机自启。