菜单

通知提供商

相关源文件

Uptime Kuma 中的通知提供商使系统能够在监控状态更改时通过各种外部服务发送警报。该系统包含超过 70 种不同的通知提供商,涵盖电子邮件服务、消息平台、Webhook 和短信网关。本文档详细介绍了通知系统的架构、可用提供商和实现细节。

架构概述

通知系统围绕两个主要组件构建

  1. Notification 类(位于 server/notification.js)- 管理所有提供商的注册并处理通知操作
  2. NotificationProvider 基类 - 定义所有通知提供商实现的接口

来源:server/notification.js76-290 server/notification-providers/notification-provider.js

提供商注册与管理

通知提供商在 Notification.init() 方法中注册

初始化过程会创建所有通知提供商的实例,并将它们注册到 providerList 对象中

当需要发送通知时,Notification.send() 方法会查找相应的提供商并调用其 send() 方法

来源:server/notification.js86-175 server/notification.js186-192

系统集成

通知系统通过前端和后端组件的组合与 Uptime Kuma 的其余部分集成

来源:src/components/NotificationDialog.vue1-373 src/components/notifications/index.js1-154

通知流程

当监控器的状态发生变化时,通知流程遵循以下顺序

来源:server/notification.js186-192

可用的通知提供商

Uptime Kuma 包含广泛的通知提供商,分类如下

消息平台

  • Telegram
  • Discord
  • Slack
  • Microsoft Teams
  • WhatsApp (通过 Whapi, WAHA)
  • 矩阵
  • Kook
  • Pushover

电子邮件和短信

  • SMTP (电子邮件)
  • Twilio
  • ClickSend SMS
  • Octopush
  • PromoSMS
  • SendGrid

Webhook 和 API

  • 通用 Webhook
  • Home Assistant
  • PagerDuty
  • Opsgenie
  • Gotify

区域服务

  • DingDing (钉钉)
  • Feishu (飞书)
  • WeCom (企业微信)
  • PushPlus (推送加)
  • AliyunSMS (阿里云短信)

通知提供商的完整列表注册在 src/components/notifications/index.js 中,并在 server/notification.js:91-164 中实例化。

来源:server/notification.js1-75 src/components/NotificationDialog.vue113-189 src/components/notifications/index.js79-151

前端配置

通知系统的前端围绕几个 Vue 组件构建

  1. NotificationDialog.vue:用于添加、编辑和测试通知的主组件

    • 提供带有类型选择和提供商特定字段的表单
    • 通过 Socket.IO 处理保存、测试和删除操作
  2. notifications/index.js:映射通知类型与其相应表单组件的注册表

  3. 提供商特定表单:每个提供商的独立 Vue 组件,例如

    • Telegram.vue:Telegram 通知配置
    • SMTP.vue:电子邮件通知配置
    • Webhook.vue:Webhook 通知配置

以下是系统中注册的通知类型示例

类型显示名称类别
smtp电子邮件 (SMTP)通用
telegramTelegram消息传递
discordDiscord消息传递
webhookWebhookAPI
slackSlack消息传递
pushoverPushover推送通知
gotifyGotify推送通知
AliyunSMSAliyunSMS (阿里云短信服务)Regional
DingDingDingDing (钉钉自定义机器人)Regional

来源:src/components/NotificationDialog.vue1-373 src/components/notifications/index.js1-154

实现示例

SMTP 提供商

SMTP 提供商使用 nodemailer 发送电子邮件通知

SMTP 配置表单(SMTP.vue)提供了服务器设置、身份验证和消息自定义字段。

来源:server/notification-providers/smtp.js1-78 src/components/notifications/SMTP.vue1-144

Telegram 提供商

Telegram 提供商使用 Telegram Bot API 发送消息

Telegram 配置表单(Telegram.vue)包含 Bot Token、Chat ID 和消息格式化选项的字段。

来源:server/notification-providers/telegram.js1-45 src/components/notifications/Telegram.vue1-190

Webhook 提供商

Webhook 提供商向自定义端点发送 HTTP POST 请求

Webhook 配置表单(Webhook.vue)允许用户指定端点 URL、内容类型和自定义标头。

来源:server/notification-providers/webhook.js1-56 src/components/notifications/Webhook.vue1-93

消息模板系统

许多通知提供商支持使用 Liquid 模板语言自定义消息内容。这允许根据监控器和心跳数据动态生成内容。

模板系统提供以下变量

可变描述
{{ msg }}通知消息
{{ monitorJSON }}监控器的详细信息(仅适用于 UP/DOWN 通知)
{{ heartbeatJSON }}心跳的详细信息(仅适用于 UP/DOWN 通知)
{{ name }}服务名称
{{ status }}当前状态(UP/DOWN)
{{ hostnameOrURL }}监控器的主机名或 URL

前端为模板编辑提供了专用组件

  1. TemplatedInput.vue:用于单行模板输入(例如,电子邮件主题)
  2. TemplatedTextarea.vue:用于多行模板内容(例如,消息正文)

这两个组件都包含文档和变量占位符,以帮助用户创建有效的模板。

来源:src/components/TemplatedInput.vue1-76 src/components/TemplatedTextarea.vue1-81

添加新通知

要在 UI 中创建新通知

  1. 在设置菜单中点击“Notifications”(通知)
  2. 点击“Setup Notification”(设置通知)
  3. 从下拉菜单中选择通知类型
  4. 配置提供商特定的设置
  5. 可以选择启用“Default enabled”(默认启用),以应用于新监控器
  6. 可以选择启用“Apply on all existing monitors”(应用于所有现有监控器)
  7. 点击“Save”(保存)以创建通知

通知必须分配给监控器才能正常工作,这可以在创建/编辑监控器时完成,或通过使用上述选项完成。

来源:src/components/NotificationDialog.vue1-373

测试通知

通知系统包含一个测试机制,可通过通知配置对话框访问。当用户点击“Test”(测试)按钮时,系统会

  1. 通过配置的通知提供商发送测试消息
  2. 根据提供商的响应报告成功或失败
  3. 允许用户在无需等待实际监控器状态更改的情况下验证其通知设置

此功能在 testNotification Socket.IO 事件处理程序和 NotificationDialog.vue 文件中的 test 方法中实现。

来源: src/components/NotificationDialog.vue304-311