Skip to content

通知中心 ​

通知中心订阅 Gately 内部的事件总线,按规则把 DDNS 变更、证书到期、WAF 拦截、进程异常等事件推送到 Webhook、Telegram、Bark、ntfy、Gotify、Pushover、Discord、Slack、Server酱、PushPlus、企业微信、钉钉、飞书和邮件。管理界面位于侧边栏「系统」分组 → 「通知中心」。

工作方式 ​

  1. 各模块在状态变化时向进程内事件总线发布事件,发布不会阻塞业务。
  2. 通知中心收到事件后逐条匹配规则:规则已启用、事件级别不低于规则的最低级别、事件类型匹配规则的事件列表。
  3. 命中的规则经过静默去重后,把消息投递到规则选择的已启用渠道。同一事件命中多条规则时,同一渠道只发送一次。
  4. 每次投递的结果(成功或失败原因)写入「最近投递」,内存中保留最近 200 条;失败同时写入模块日志。

单次投递的超时为 45 秒。

渠道 ​

点击「添加渠道」,选择类型并填写字段。所有渠道都有名称(必填)、备注和启用开关。密钥类字段保存后不再回显,编辑时留空表示保持原值。

类型必填字段可选字段
Webhook请求地址请求方法(默认 GET,可选 GET、POST、PUT、PATCH)、请求头(每行 Key: Value)、请求体、成功判定内容、超时(秒,默认 20)、跳过证书校验
TelegramBot Token、Chat IDAPI 地址(留空使用 https://api.telegram.org)
Bark设备 Key服务地址(留空使用 https://api.day.app)
企业微信机器人地址无
钉钉机器人地址签名密钥(机器人启用「加签」时填写)
飞书机器人地址签名密钥(机器人启用「签名校验」时填写)
邮件服务器、收件人,以及发件人或用户名至少填写一项加密方式、端口、用户名、密码
ntfy主题服务地址(留空使用 https://ntfy.sh)、访问令牌
Gotify服务地址、应用令牌无
Pushover应用令牌、用户 Key无
DiscordWebhook 地址无
SlackWebhook 地址无
Server酱SendKey无
PushPlusToken无

地址类字段需要以 http:// 或 https:// 开头的完整地址。

Webhook 模板变量 ​

请求地址与请求体中可以使用以下变量,写法为花括号包住变量名(也兼容 # 前缀写法):

变量内容
title标题,格式为 [Gately] 事件标题
message事件的详细描述
text完整正文,含描述、来源、级别、时间
type事件类型,如 ddns.changed
source事件来源
level级别 info、warn 或 error
timeRFC 3339 格式的时间

事件自带的附加字段(如 ip、container)也可以作为变量使用,名称与上表重复时以上表为准。地址中的变量值会做 URL 转义。

邮件 ​

加密方式取值默认端口
STARTTLSstarttls587
SSL/TLStls465
无加密none25

端口填 0 时按加密方式取默认端口。收件人可以填多个,用逗号分隔。邮件使用 UTF-8 编码的纯文本,服务器支持 AUTH 且填写了用户名时使用 PLAIN 认证;发件人留空时使用用户名。

签名与返回码 ​

  • 钉钉:填写签名密钥后,请求自动附带 timestamp 与 sign。
  • 飞书:填写签名密钥后,请求体自动附带 timestamp 与 sign。
  • 企业微信、钉钉、飞书、Bark 会检查响应中的业务返回码,HTTP 200 但业务失败时同样记为投递失败。

规则 ​

点击「添加规则」:

字段说明
名称必填
事件至少一项。可选具体事件类型,* 表示全部事件,也可以输入通配,如 ddns.*。通配采用 Go path.Match 语法
最低级别info(信息)、warn(警告)、error(错误),留空为信息。事件级别低于该值时不推送
渠道至少一个
静默(秒)同一规则下,同一来源的同类型事件在该时间内只推送一次,期间的重复事件被丢弃。0 表示不去重
启用开关

提示

WAF 拦截和上游状态变化可能频繁发生,建议为这类规则设置 300 秒以上的静默时间。

规则模板 ​

新建规则时可以点击模板预填事件、级别与静默时间,再选择渠道保存:

模板事件
关键故障DDNS 更新失败、证书续期失败、上游不可用、子进程异常退出、备份失败、容器退出
证书到期证书即将到期、续期失败(静默 24 小时)
地址变化DDNS 解析更新、STUN 地址变化
服务健康上游不可用与恢复、容器退出、子进程退出
安全与登录登录失败、IP 封禁、登录成功、访问敏感内容
配置变更管理后台的每一次配置变更

事件类型 ​

事件类型名称级别触发条件
ddns.changed动态域名:解析已更新信息DDNS 任务成功更新解析
ddns.failed动态域名:更新失败错误DDNS 任务更新失败
stun.changedSTUN:穿透地址变化信息STUN 规则的穿透地址变化
ssl.expiring证书:即将到期警告证书剩余有效期不足 7 天,同一证书每 24 小时最多提醒一次
ssl.renew_failed证书:续期失败错误证书签发或续期失败
waf.blockedWAF:拦截请求警告WAF 拦截了一个请求,附带 ip、host、path 字段
upstream.down反向代理:上游不可用错误Web 服务的某个后端被判定不可用
upstream.up反向代理:上游恢复信息不可用的后端恢复
docker.exitedDocker:容器退出警告或错误容器以非零退出码退出(警告),或因内存不足被终止(错误)
process.exited子进程异常退出错误由 Gately 托管的子进程异常退出并将自动重启,来源为该进程的日志名称
backup.done备份:完成信息定时或手动备份全部目的地成功,见配置备份
backup.failed备份:失败错误备份打包失败,或任一目的地写入失败
auth.failed认证:连续失败警告管理后台登录失败,附带 ip 字段
auth.banned认证:IP 已被封禁警告Web 服务认证连续失败触发自动封禁
login.success管理后台:登录成功信息管理后台登录成功,附带 ip、user 字段
audit.change管理后台:配置变更信息管理后台中的任意变更操作,附带 actor、ip、method、path 字段,见审计与配置历史
audit.access管理后台:访问敏感内容警告下载备份、诊断包、证书私钥或打开终端等,字段同上
notify.test测试通知信息渠道的「测试」按钮产生,不参与规则匹配

测试发送 ​

渠道卡片上的「测试」按钮会向该渠道直接发送一条标题为「测试通知」的消息,不经过规则,也不要求渠道已启用。发送成功提示「测试通知已发送」,失败时显示具体错误。测试结果同样出现在「最近投递」中,规则列显示为「测试」。

对应接口为 POST /api/notify/channels/{key}/test,可通过 API 令牌 的 notify:write 权限调用。

以 Apache-2.0 许可证开源发布。