通知栏划掉就没了的烦恼

我手头的服务器定时备份脚本、GitHub Actions 构建状态、NAS 硬盘健康巡检,全都接到了我自己搭的 ntfy 推送服务上。平时手机叮叮当当弹通知挺爽,但用久了就暴露出一个大问题:系统通知栏里的消息随手一划就没了,或者积攒多了点一下“全部清除”,事后突然想查查“某个备份脚本从哪天开始报错的”、“过去一周到底发了多少次告警”,根本无从查起。

我需要的不是又一个弹窗提醒工具,而是一个能把所有 ntfy 推送安安静静存下来、随时能检索回看的集中式收件箱。

三端配合与“剥离附件防撑爆”设计

2026 年 7 月 15 日(Commit c4b7054、363004e),我立项并直接以 v1.0.0 开源发布了 「讯笺(Xunjian / ntfy Message Hub)」。整套系统分成三块互相配合:

  1. Python 常驻订阅归档服务(ntfy_store):在后台持续订阅配置的全部 ntfy 主题,实时把收到的消息写进 MySQL 数据库。考虑到有些监控脚本偶尔会往 ntfy 塞截图或二进制压缩包,为了防止大文件把数据库撑爆,归档服务在入库前会主动剥离 JSON 里的 attachment 附件字段,只把纯文本正文、标题、优先级和标签元数据干干净净地存下来。
  2. Next.js Web 浏览站:坐在电脑前排查问题时,打开浏览器就能按主题、优先级和关键词快速筛选历史告警。
  3. Jetpack Compose Material 3 原生 Android 客户端(top.lvziwang.ntfyhub):专门为手机端写了原生应用,不用每次都在手机浏览器里输网址。

同标题折叠聚合与断网离线翻阅

如果某个服务半夜抽风,每隔一分钟发一条一模一样的报错,按时间流翻起来满屏都是重复文字。于是我在 Web 端和手机端都做了一键切换**“按时间流”与“按相同标题折叠聚合”**两种视图的功能——点一下聚合,几百条重复告警立刻收拢成一行,直接显示总次数和最新触发时间。

手机客户端底层还接了 Room 本地数据库缓存。哪怕出门在外手机信号不好或者家里服务器正在重启连不上网,App 顶部会自动亮起一条温和的离线状态横幅,之前同步过的历史通知照样能流畅翻阅和搜索。