Apprise API:一个接口,打通 130+ 通知渠道

通知这件事,看起来简单,实际很烦。邮件、钉钉、Slack、Discord、Telegram、企业微信……每个系统都有自己的接口协议。项目告警要推哪里?代码部署完了要通知谁?每次接入新渠道都得重新对接一遍。

Apprise API 就是来解决这个问题的。它把 130 多种通知服务封装成了一个统一的 RESTful 接口,你只需要调一个地址,剩下的它帮你分发。目前 GitHub 上 Star 数 1,221,体量不大,但定位很准。

正文顶部截图

核心思路:网关模式

Apprise API 本质上是一个轻量级网关。它不直接发明通知协议,而是基于 Apprise 这个 Python 通知库,在上面包了一层 HTTP API。

这意味着什么?意味着你不用再操心每个通知服务的接入细节。邮件用 SMTP,Slack 用 Webhook,Discord 用 Bot Token……这些差异全部被屏蔽在网关内部。你对外只发一条 POST 请求,带上目标服务的 URL 和消息内容就行。

项目提供两种使用模式:

无状态模式:直接调用 /notify 接口,把通知地址和消息内容一次性带上。适合脚本、CI/CD 流水线这种一次性通知场景,不需要持久化任何配置。

有状态模式:先把通知配置通过 /add/{KEY} 存到服务端,以后调用 /notify/{KEY} 就能直接发。适合长期运行的服务,比如监控系统、定时任务。配置可以按标签分组,比如 devops 标签关联 Slack 和邮件,admin 标签关联短信和钉钉,发消息时指定标签就行。

README区域截图

部署简单到离谱

这项目最省心的一点是部署。一个 Docker 容器就能跑起来,默认端口 8000。

docker run --name apprise \
   -p 8000:8000 \
   -v ./config:/config \
   -d caronc/apprise:latest

镜像体积很小,支持 amd64、armv7、arm64 三种架构,树莓派也能跑。日志直接输出到 stdout,没有乱七八糟的日志文件需要管理,配合 docker logs 或 k8s 日志采集很自然。

安全方面也有考虑。容器支持只读运行、降权、cap_drop 等加固选项。还有 STRICT_MODE,开启后 Nginx 对非法请求直接不响应,配合 fail2ban 可以挡住大量扫描流量。

接口设计很实用

除了发通知,它还提供了一堆辅助接口:

  • /status 健康检查,返回 200 或 417,适合放在负载均衡后面做探活
  • /details 列出所有支持的通知服务类型
  • /json/urls/{KEY} 查看某个 KEY 下配置了多少通知地址和标签
  • /metrics Prometheus 指标端点,方便接入监控系统

消息支持 title、body、type(info/success/warning/failure)、format(text/markdown/html)几个字段。还能带附件,直接 multipart/form-data 上传文件,或者用 URL 引用远程文件。

标签语法也设计得挺灵活。空格表示 AND,逗号表示 OR,可以组合出复杂的推送策略。比如 tag=devops after-hours 表示同时带有这两个标签的服务才会收到通知。

适合什么场景

如果你是个人开发者,想在服务器上跑个统一的通知网关,把各个项目的告警集中管理,这个工具很适合。如果你在做 DevOps 平台,需要给用户提供一个标准化的通知接入层,也可以考虑把它作为底层服务。

它不支持消息队列和重试机制,通知失败直接返回 424。所以高可靠性要求的场景可能需要额外处理。但对于绝大多数中小型项目来说,直接调用一个 HTTP 接口就能发通知,已经够用了。

要求的场景可能需要额外处理。但对于绝大多数中小型项目来说,直接调用一个 HTTP 接口就能发通知,已经够用了。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐