声明:本篇教程为原创,未经允许禁止转载,搬运请注明原作者。
老规矩,先贴地址 -> NotifyHub
项目背景
NotifyHub 项目的诞生源于我在 MovieBot 插件中开发的 通知调度中心
功能。为了让这个功能更加开放和灵活,我决定将其独立出来,以支持更多渠道和第三方接口的接入。
架构设计
经过深思熟虑,我最终确定了以 通道
作为接口层,渠道(企微、Bark、TG等)
作为应用层的架构逻辑。同时,系统支持 模板
功能,为用户提供高度的自由度,实现更便捷的第三方接口接入方案。
技术栈
- 前端:React + Vite + Shadcn
- 后端:Python + FastAPI
- 数据库:SQLite
界面预览
首页仪表板
通知通道
通知渠道
通知模板
插件管理
系统日志
系统设置
更新日志
详细配置说明
注意:以下所有说明中的
route_id
参数均以route_abcd
为例,实际使用时请根据程序生成的实际情况进行修改。
1. 通知渠道
目前系统已支持以下通知渠道:
- Bark
- Telegram
- 企业微信
- Pushdeer
- 钉钉
- Discord
- 飞书
- Server酱3
根据需求配置相应的通知渠道,并为每个渠道设置名称和描述以便识别。重要提醒:渠道名称设置后不可修改,如需修改请删除后重新添加。配置完成后,建议进行测试以确保渠道正常工作。
特别说明:钉钉、Discord、飞书三个渠道的配置相对复杂,如果不是这些渠道的重度用户,建议优先考虑其他渠道。
2. 通知通道
配置完所需的通知渠道后,可以创建通知通道来绑定相应的通知渠道,设置默认推送图片,并为通道命名以便识别。
通道使用方法
通道展示页面提供了详细的使用说明。其工作原理是开放了一个 HTTP 接口,外部程序通过调用这个接口并传递需要推送的内容,即可向该通道绑定的渠道发送指定内容。
JSON 配置方式
推送 URL:http://你的域名或IP:端口/api/service/notify
{
"route_id": "route_abcd",
"title": "测试标题",
"content": "这是一条测试内容",
"push_img_url": "https://example.com/test.jpg",
"push_link_url": "https://example.com"
}
参数说明:
route_id
:通道的唯一标识title
:推送的标题content
:推送的内容
如果外部软件支持自定义内容占位符,可将 title
与 content
的值替换为占位符,实现自定义内容推送。
可选参数:
push_img_url
:推送图片的 URL(如需推送指定图片)push_link_url
:点击跳转的 URL(如需实现推送点击跳转)
cURL 方式
curl -X POST 'http://你的域名或IP:端口/api/service/notify' \
-H 'Content-Type: application/json' \
-d '{
"route_id": "route_abcd",
"title": "测试标题",
"content": "这是一条测试内容",
"push_img_url": "https://example.com/test.jpg",
"push_link_url": "https://example.com"
}'
cURL 方式适用于自定义的 shell 脚本,同样可以将对应的参数值进行替换来发送消息到通道接口实现推送。
兼容 Bark 格式
当第三方应用仅支持 Bark 推送且不支持自定义 webhook 时,可使用此方式进行配置:
推送 URL:http://你的域名或IP:端口/api/service/notify/route_abcd
将此 URL 作为 Bark 的推送地址+推送密钥,即可实现 Bark 方式的接入推送。重要说明:此方式下,推送不仅限于 Bark 渠道,其他已绑定的渠道均可正常推送。
3. 通知模板
通知模板功能允许用户自定义推送内容格式,使用 Jinja2
模板语法,快速构建动态的指定内容进行推送。
当前程序内置了 Emby Webhook
、Pve
、Watchtower
三个软件的推送消息自动化处理,并提供可使用的模板变量,可直接使用。示例模板内容可在 Github 页面中查看,可根据需要进行修改。
配置流程:
- 配置模板后,需要在通知通道中将某一通道绑定同一类型的模板
- 程序会自动识别该通道接收到的消息,并使用对应的模板进行推送
- 使用相关格式模板时,需要根据模板类型在第三方软件中配置对应的接口地址
具体配置示例:
-
Emby Webhook:
- 接口地址:
http://你的域名或IP:端口/api/service/emby/notify/route_abcd?emby_url=<Emby服务器地址>
- 说明:将
<Emby服务器地址>
替换为实际的 NotifyHub 可访问到的 Emby 服务器域名地址,程序将获取对应的影视图片作为推送封面图
- 接口地址:
-
Pve:
- 接口地址:
http://你的域名或IP:端口/api/service/pve/notify/route_abcd
- 配置位置:PVE 的通知设置中
- 目标选择:
Gotify
- API 令牌:任意填写,不影响推送
- 接口地址:
-
Watchtower:
- 接口地址:
generic://你的域名或IP:端口/api/service/watchtower/notify/route_abcd?template=json&%24server_name=<服务器名称>&%24push_link_url=<跳转链接>
- 配置位置:Watchtower 容器环境变量
WATCHTOWER_NOTIFICATION_URL
- 额外设置:
WATCHTOWER_NOTIFICATIONS
变量设置为shoutrrr
- 参数说明:
<服务器名称>
:设置自己能识别的名称,供模板变量使用<跳转链接>
:设置点击推送跳转的地址,如不需要可删除此参数(从对应参数的&%24
部分开始删除)
- 接口地址:
默认模板功能:
除了指定第三方 API 的模板功能外,程序还提供了默认模板功能。其原理是将通道接收到的所有参数均作为 Jinja2 模板变量,组合成配置的模板内容进行推送。
示例:
请求 JSON 参数:
{
"username": "htnanako",
"date": "2025年8月8日",
"location": "广东"
}
模板内容:
{{ username }} 发送了新通知
今天是 {{ date }},{{ username }} 在 {{ location }} 发了一条通知
最终推送内容:
htnanako 发送了新通知
今天是 2025年8月8日,htnanako 在 广东 发了一条通知
4. 插件管理
当前将与程序主逻辑无强关联的功能独立为插件功能,可按需配置及使用。目前暂未开放自开发插件能力。
已内置插件:
-
企业微信回调工具
- 用途:企业微信新建应用后,配置可信 IP 需要前置完成
接收消息服务器URL
的配置 - 功能:在用户无相关功能工具时,可临时使用此插件进行一次性配置后,即可添加可信 IP
- 用途:企业微信新建应用后,配置可信 IP 需要前置完成
-
企业微信智能聊天机器人
- 来源:迁移我开发的 MovieBot 插件
企业微信Chatbot
功能 - 适配:NotifyHub 的插件架构
- 来源:迁移我开发的 MovieBot 插件
总结
NotifyHub 是一款支持多种主流推送渠道的智能通知调度平台,适用于个人和团队的消息统一分发、自动化推送、渠道管理等场景。支持通过 Web 界面灵活配置“通知渠道”(如 Telegram、Bark、企业微信等)和“通知通道”(消息路由),实现一条消息多平台同步推送,为用户提供便捷、灵活的消息推送解决方案。
核心功能特点:
- 多渠道支持:集成 Bark、Telegram、企业微信、Pushdeer、钉钉、Discord、飞书、Server酱3 等多种主流通知渠道
- 灵活配置:支持自定义通知通道、模板,满足不同场景的需求
- 模板系统:基于 Jinja2 的模板引擎,支持动态内容生成和第三方软件集成
- 简单易用:提供直观的 Web 界面,配置简单,使用便捷
- 高兼容性:支持多种调用方式,包括 JSON API、cURL 和 Bark 兼容格式等,可快速在第三方软件中进行接入
适用场景:
- 服务器监控告警
- 自动化脚本通知
- 应用状态监控
- 个人消息推送
- 团队协作通知
付费说明
NotifyHub 是一款付费软件,采用授权制使用模式。
试用申请:
- 加入 Telegram 群组申请试用码
- 试用期间仅限单通知渠道及单通知通道
- 试用期结束后需要购买授权继续使用
购买方式:
- 软件内直接购买永久授权
- 一次购买,永久使用
授权权益:
- 无限制使用所有功能
- 支持无限量通知渠道和通道
- 享受后续功能更新
- 获得技术支持服务