前言说明:
在日常服务器或网站监控中,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数据格式的支持
原创声明:本文章为原创内容,所有文章均由博主亲自撰写,严格遵循原创原则。我们承诺不使用任何人工智能生成的内容,所发布的每一篇文章都经过深思熟虑,旨在为读者提供真实、有价值的观点和信息。我们坚信原创才是知识分享的根本,致力于为广大读者呈现最具真实性和独特性的文章。感谢您的支持与关注,欢迎持续关注我们的原创内容。


浙江省宁波市 2F
试试
陕西省咸阳市 1F
很棒!