NotifyHub——这可能是你用过最好的通知聚合工具

黑田奈奈子 353 2025-08-08

声明:本篇教程为原创,未经允许禁止转载,搬运请注明原作者。

老规矩,先贴地址 -> NotifyHub

项目背景

NotifyHub 项目的诞生源于我在 MovieBot 插件中开发的 通知调度中心 功能。为了让这个功能更加开放和灵活,我决定将其独立出来,以支持更多渠道和第三方接口的接入。

1.png

架构设计

经过深思熟虑,我最终确定了以 通道 作为接口层,渠道(企微、Bark、TG等) 作为应用层的架构逻辑。同时,系统支持 模板 功能,为用户提供高度的自由度,实现更便捷的第三方接口接入方案。

技术栈

  • 前端:React + Vite + Shadcn
  • 后端:Python + FastAPI
  • 数据库:SQLite

界面预览

首页仪表板

2.png

通知通道

3.png

通知渠道

4.png

通知模板

5.png

插件管理

6.png

系统日志

7.png

系统设置

8.png

更新日志

9.png

详细配置说明

注意:以下所有说明中的 route_id 参数均以 route_abcd 为例,实际使用时请根据程序生成的实际情况进行修改。

1. 通知渠道

目前系统已支持以下通知渠道:

  • Bark
  • Telegram
  • 企业微信
  • Pushdeer
  • 钉钉
  • Discord
  • 飞书
  • Server酱3

根据需求配置相应的通知渠道,并为每个渠道设置名称和描述以便识别。重要提醒:渠道名称设置后不可修改,如需修改请删除后重新添加。配置完成后,建议进行测试以确保渠道正常工作。

特别说明:钉钉、Discord、飞书三个渠道的配置相对复杂,如果不是这些渠道的重度用户,建议优先考虑其他渠道。

2. 通知通道

配置完所需的通知渠道后,可以创建通知通道来绑定相应的通知渠道,设置默认推送图片,并为通道命名以便识别。

通道使用方法

通道展示页面提供了详细的使用说明。其工作原理是开放了一个 HTTP 接口,外部程序通过调用这个接口并传递需要推送的内容,即可向该通道绑定的渠道发送指定内容。

JSON 配置方式

推送 URLhttp://你的域名或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:推送的内容

如果外部软件支持自定义内容占位符,可将 titlecontent 的值替换为占位符,实现自定义内容推送。

可选参数

  • 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 时,可使用此方式进行配置:

推送 URLhttp://你的域名或IP:端口/api/service/notify/route_abcd

将此 URL 作为 Bark 的推送地址+推送密钥,即可实现 Bark 方式的接入推送。重要说明:此方式下,推送不仅限于 Bark 渠道,其他已绑定的渠道均可正常推送。

3. 通知模板

通知模板功能允许用户自定义推送内容格式,使用 Jinja2 模板语法,快速构建动态的指定内容进行推送。

当前程序内置了 Emby WebhookPveWatchtower 三个软件的推送消息自动化处理,并提供可使用的模板变量,可直接使用。示例模板内容可在 Github 页面中查看,可根据需要进行修改。

配置流程

  1. 配置模板后,需要在通知通道中将某一通道绑定同一类型的模板
  2. 程序会自动识别该通道接收到的消息,并使用对应的模板进行推送
  3. 使用相关格式模板时,需要根据模板类型在第三方软件中配置对应的接口地址

具体配置示例

  • 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. 插件管理

当前将与程序主逻辑无强关联的功能独立为插件功能,可按需配置及使用。目前暂未开放自开发插件能力。

已内置插件

  1. 企业微信回调工具

    • 用途:企业微信新建应用后,配置可信 IP 需要前置完成 接收消息服务器URL 的配置
    • 功能:在用户无相关功能工具时,可临时使用此插件进行一次性配置后,即可添加可信 IP
  2. 企业微信智能聊天机器人

    • 来源:迁移我开发的 MovieBot 插件 企业微信Chatbot 功能
    • 适配:NotifyHub 的插件架构

总结

NotifyHub 是一款支持多种主流推送渠道的智能通知调度平台,适用于个人和团队的消息统一分发、自动化推送、渠道管理等场景。支持通过 Web 界面灵活配置“通知渠道”(如 Telegram、Bark、企业微信等)和“通知通道”(消息路由),实现一条消息多平台同步推送,为用户提供便捷、灵活的消息推送解决方案。

核心功能特点:

  • 多渠道支持:集成 Bark、Telegram、企业微信、Pushdeer、钉钉、Discord、飞书、Server酱3 等多种主流通知渠道
  • 灵活配置:支持自定义通知通道、模板,满足不同场景的需求
  • 模板系统:基于 Jinja2 的模板引擎,支持动态内容生成和第三方软件集成
  • 简单易用:提供直观的 Web 界面,配置简单,使用便捷
  • 高兼容性:支持多种调用方式,包括 JSON API、cURL 和 Bark 兼容格式等,可快速在第三方软件中进行接入

适用场景:

  • 服务器监控告警
  • 自动化脚本通知
  • 应用状态监控
  • 个人消息推送
  • 团队协作通知

付费说明

NotifyHub 是一款付费软件,采用授权制使用模式。

试用申请:

  • 加入 Telegram 群组申请试用码
  • 试用期间仅限单通知渠道及单通知通道
  • 试用期结束后需要购买授权继续使用

购买方式:

  • 软件内直接购买永久授权
  • 一次购买,永久使用

授权权益:

  • 无限制使用所有功能
  • 支持无限量通知渠道和通道
  • 享受后续功能更新
  • 获得技术支持服务