前言说明:
在日常服务器或网站监控中,Check酱 是一款轻量级的可视化监控工具,它支持通过 Webhook 推送告警通知。与此同时,Synology Chat 是很多人内部协作首选的聊天平台。如果你希望:
监控结果自动通知到 Chat 群组
支持格式化展示多个字段
自动换行、美化结构,避免“堆一团”
本文将教你如何通过一个轻量级的 Docker webhook 转发服务,将 Check酱 的 webhook 完美适配 Synology Chat,由于Synology Chat无法直接接受json格式请求需要需要咱们自己搭建一套转发服务。
项目亮点:
支持
Check酱
webhook 的JSON
或payload=
格式;自动解析字段并转为中文别名(如
url
→ “目标地址”);多行字段(如
value
/html
)支持🔸
图标并换行美观显示;兼容 Synology Chat 的换行规范(使用
\n
);容器化部署,一键启动,稳定可靠!
整体架构:
Check酱 ➝ Webhook (POST) ➝ 转发器 (Flask + Docker) ➝ Synology Chat Webhook
环境准备:
群晖设置:
打开 Synology Chat
点击头像 → 整合 → 传入 Webhook
新建 webhook,记录其 URL,例如:
https://yourdomain:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=xxxxxxxx
转发部署(Docker)
我们使用 Python + Flask 编写一个简洁的转发服务,自动将接收到的 Check酱 webhook 转为 Chat 所需格式。
拓展知识:
Check酱自定义脚本:脚本类型(JavaScript Node16.15.0)结果变量一定是要stdout命名
const https = require('https'); // 从环境变量中读取 URL const url = process.env.URL; https.get(url, (res) => { let raw = ''; res.on('data', chunk => raw += chunk); res.on('end', () => { try { const json = JSON.parse(raw); if (!json.data || !Array.isArray(json.data)) { console.error('返回的数据格式不正确'); process.exit(1); } // 取前 10 条数据,并提取 title、hot_value、label_desc、url const stdout = json.data .slice(0, 10) .map(item => ({ title: item.title, hot_value: item.hot_value, label_desc: item.label_desc, url: item.url })); // 输出到 stdout,作为监控任务返回值 console.log(JSON.stringify(stdout, null, 2)); } catch (e) { console.error('解析 JSON 失败:', e.message); } }); }).on('error', err => { console.error('请求失败:', err.message); });
宝塔通知:
配置页面和位置 宝塔面板 - 设置 - 告警通知 - 自定义消息通道 - 添加
通知消息内容展示:
哪吒通知:
项目:https://github.com/nezhahq/nezha
位置:后台管理 - 通知 - 添加 -请求体 输入
写法:实时出站:{{ printf \"%.2f\" (div #SERVER.NETOUTSPEED# 1048576) }} MB/s (字节转兆)
{ "title": "🚨 #SERVER.NAME#", "desp": "⚠️ 异常通知\n\n💻 ==基本信息:==\n\n-> 名称:#SERVER.NAME#\n-> IP地址:#SERVER.IP#\n-> IPv4:#SERVER.IPV4#\n\n📊 ==资源情况:==\n\n-> CPU使用:#SERVER.CPU#%\n\n🌐 ==网络流量:==\n\n-> 实时入站:{{ printf \"%.2f\" (div #SERVER.NETINSPEED# 1048576) }} MB/s\n-> 实时出站:{{ printf \"%.2f\" (div #SERVER.NETOUTSPEED# 1048576) }} MB/s\n-> 总入流量:{{ printf \"%.2f\" (div #SERVER.TRANSFERIN# 1048576) }} MB\n-> 总出流量:{{ printf \"%.2f\" (div #SERVER.TRANSFEROUT# 1048576) }} MB\n\n📈 ==系统负载:==\n\n-> 1 分钟:#SERVER.LOAD1#\n-> 5 分钟:#SERVER.LOAD5#\n-> 15 分钟:#SERVER.LOAD15#" }
其他通知:
✅ 1. 标准平铺结构(普通KV)
{ "id": 101, "name": "服务器1", "cpu": 85, "memory": "70%", "status": "运行中" }
✅ 2. 多级嵌套结构(dict 套 dict 或 list)
{ "name": "服务A", "value": { "CPU": "88%", "Memory": { "Total": "8GB", "Used": "5.5GB" } } }
✅ 3. 字符串形式的嵌套 JSON(字符串内是 JSON)
{ "value": "{\"cpu\": 90, \"mem\": \"8GB\", \"disk\": {\"used\": 40}}" }
✅ 4. 包含 HTML 或换行标签的内容
{ "info": "<p>服务器状态<br>温度:75°C<br>正常</p>" }
✅ 5. 包含表达式字段(如监控计算值)
{ "NETIN": 10485760, "text": "实时入网速:{{ printf \"%.2f\" (div #NETIN# 1048576) }} MB/s" }
✅ 6. Check酱类格式(包含 link/html/data)
{ "id": 998, "title": "页面变动", "html": "<html>...</html>", "link": "https://example.com", "data": "{\"变化\": \"新增字段\"}" }
👉 html
、link
、data
会被自动跳过或特殊处理,避免污染通知信息。
✅ 7. List 格式(作为顶层或字段)
{ "value": [ {"item": "A", "count": 5}, {"item": "B", "count": 8} ] } 👉 会列出所有条目,并自动编号,如: 🔹 第 1 项: 🔸 item: A 🔸 count: 5
✅ 8. 空值处理
{} 👉 会显示 📭 收到空数据,避免报错。
✅ 特殊规则支持
✅ 英文键支持百度翻译;
✅ 自定义键名映射(通过
KEY_MAPPING_JSON
);✅ 支持任意层级的数据深度;
✅ ChatGPT 聊天支持纯文本或代码智能判断。
✅覆盖了 99% 的 webhook 场景,特别适合以下平台推送格式:
✅ Check酱;
✅ 哪吒监控;
✅ UptimeRobot、Zabbix、Grafana;
✅ Jenkins/GitHub Webhook;
✅ Prometheus AlertManager;
✅ 自定义 JSON 通知等。
转发总结:
通过本教程,我们实现了:
✅ Check酱 webhook 与 Synology Chat 的无缝对接
✅ 自动格式化与美化通知内容
✅ 兼容多种 webhook 格式(payload / json / form)
✅ 基于 Docker 快速部署,无依赖
✅ 支持宝塔面板的消息webhook通知
✅ 兼容哪吒面板流量计算转换的webhook通知
- ✅ 常见单位自动换算功能
本站镜像:
可以联系站长付费一键代搭服务
更新日志:
2025年7月23日
修复了:网络速度转换 (B/s → Mb/s) 流量数据转换 (B → GB) # KB → MB# MB → GB 按 1024 递进
2025年7月20日
更新了:常见单位换算功能网络速度转换 (B/s → Mb/s) 流量数据转换 (B → GB) # KB → MB# MB → GB
2025年7月18日
更新了:哪吒面板webhook通知流量算法转换
2025年7月3日
更新了:支持宝塔面板通知到Synology Chat
2025年7月2日
更新了:支持字段自动映射
更新了:字段支持百度翻译
修复了:多层级index时提示无法转换的问题
修复了:多种json数据格式的支持
原创声明:本文章为原创内容,所有文章均由博主亲自撰写,严格遵循原创原则。我们承诺不使用任何人工智能生成的内容,所发布的每一篇文章都经过深思熟虑,旨在为读者提供真实、有价值的观点和信息。我们坚信原创才是知识分享的根本,致力于为广大读者呈现最具真实性和独特性的文章。感谢您的支持与关注,欢迎持续关注我们的原创内容。