跳到主要内容

通知

Libre WebUI 为每位用户维护持久通知收件箱,使团队活动(提及、私信、共享、自动化 失败和日历提醒)在相关页面关闭时也能送达。

状态弹窗​

简短的状态消息(例如更改已保存或 Git 操作已完成)会显示在页面顶部附近。你可以用鼠标等指针设备或键盘操作 关闭 按钮来清除弹窗。鼠标悬停在弹窗上时,消息会保持显示,方便你阅读;关闭弹窗只会移除这条消息,相关操作仍保持其当前状态。

收件箱​

通知首先是数据库行:标题和正文静态加密,每用户最多 500 条(清理最旧条目), 并可通过可选来源键去重,使重复发布合并为一条而不是反复响铃。REST 接口支持列出、 统计未读、标记一条或全部已读以及删除。

实时交付通过每用户持久事件流 notify:<userId>,使用 GET /api/notifications/events(SSE)。流身份来自已认证会话,绝不取自客户端 输入;SQL 收件箱仍是真实来源:错过事件时读取列表恢复,而不是重放流。

通知来源​

类型触发条件
channel-dm有人向你发送私信
channel-mention有人在频道中 @mentions 你或回复你的消息
channel-invite你被加入频道
share有人与你共享资源
automation-failed你的自动化失败(除非选择不通知)
calendar-reminder带提醒偏移的事件到达提醒时间
work-run-finished你雇用的某个 Work 代理完成一次运行
work-run-attention已雇用代理停下来等待输入或遇到错误
work-takeoverWork 代理请求你接管其屏幕
work-approval某次 Work 运行正在等待你批准一项有副作用的操作
system实例级公告

通知始终只发给受影响用户;提及不属于频道的用户名不会产生任何内容。

通知还可以触发自动化:一项带 event 触发器的自动化会在一条所选 类型的通知到达其所有者时运行,并受每个自动化每分钟一次的冷却限制。

出站 webhook​

管理员可注册接收团队事件的 webhook 目标。

  • 出站防护。目标遵循与工具服务器相同的目的地政策:必须是精确 URL,不跟随重定向, 不允许私有或链路本地地址,除非管理员通过 TOOLS_PRIVATE_NETWORK_ALLOWLIST 明确 放行主机。每次交付都会重新解析并检查主机名。
  • 签名。配置密钥后,每次交付都带 X-Libre-Signature: sha256=<hmac>,按准确正文计算。
  • 脱敏。信封包含事件种类、通知类型、标题、标识符和时间戳。通知正文、消息内容、 提示词和文档绝不会离开实例。
  • 持久。交付作为持久任务运行,重试次数受限;接收方 5xx 会重试,4xx 被视为 接收方结论并结束。
  • 限定范围。每个目标订阅指定通知类型(或 *)。

浏览器推送​

设置 → 通知会为 Web Push 注册当前浏览器,让提及、共享、提醒和已完成工作在标签页 关闭时也能送达。实现标准且自包含:

  • VAPID (RFC 8292)。服务器使用 ES256 密钥对签名每次交付;密钥对只生成一次并 加密存储,或用 VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY 固定 (VAPID_SUBJECT 设置联系声明)。除浏览器提供商的推送端点外,不使用第三方 推送库或服务账户。
  • 加密负载 (RFC 8291)。每条消息离开实例前都用 aes128gcm 加密到设备自己的 密钥;推送服务只能转发无法读取的密文。
  • 按设备并绑定会话。订阅属于创建它的浏览器和该浏览器的认证会话;退出会话 (或“退出其他会话”)也会移除推送注册。端点加密存储并带有键控查找令牌,且必须 是公共 HTTPS 目的地。
  • 持久。推送交付作为持久任务运行并有限重试;服务报告订阅已消失(404/410) 时将其删除。
  • 负载包含通知标题、可选正文、类型和目标链接,脱敏边界与收件箱一致。

推送要求生产应用(service worker 仅在那里注册)和安全来源。同一 service worker 也提供离线外壳和可安装性:应用清单使 Libre WebUI 可安装,离线导航回退到缓存外壳, 带哈希的构建资源不可变缓存。API 流量绝不缓存。

邮件​

邮件是第三条送达通道,也是唯一需要管理员配置的一条。设置 → 用户管理 → 访问与策略 → 邮件通知保存一台外发 SMTP 服务器:主机、端口、连接安全性 (STARTTLS、隐式 TLS,或用于受信任网络的“无”)、可选凭据、发件地址,以及 用于消息内链接的公开 URL。环境变量中的 SMTP_* 环境变量为容器部署提供同样字段的初始值;在界面中保存的值优先生效。 密码以加密方式存储,绝不会返回给浏览器。发送测试会向管理员自己的地址 (或任意手动填写的地址)发送一条消息,从而在用户依赖它之前验证整条链路是通的。

管理员还可以选择浅色或深色邮件模板,并在保存前预览。默认是浅色。保存的预设适用于此实例上的每条通知和测试邮件,包括 Markdown 结果;它与每位用户的界面主题无关。预览会渲染示例内容,不会连接 SMTP、发送邮件或将作业加入队列。只有管理员可以读取或更改预设,或请求预览。内置预设会让文本、链接、代码块和按钮保持易读;不接受自定义 HTML 模板。邮件客户端仍可能根据其自身的显示设置调整颜色。

开关打开后,每位用户在设置 → 通知 → 邮件通知下选择哪些内容会送到自己的 收件箱:

  • 频道提及:有人在频道中提及你的一条消息,带预览和指向该频道的链接。
  • 自动化结果:你每次自动化运行的结果,无论成功还是失败。聊天运行会带上 助手回复本身(最多几千字符);Work 运行会带上任务的状态行;失败则带上 错误信息。链接会打开对应的聊天或任务。

两个开关默认都是关闭的,需要用户自己打开;并且只对已设置邮箱地址的账户生效—— 邮箱地址由账户持有者本人在注册时设置,或由管理员在“用户”中添加。邮件消息 通过与 Web 推送相同的持久任务运行时发出,对瞬时的中继故障有限重试,SMTP 客户端 是一个小型内置实现(EHLO、STARTTLS、AUTH PLAIN 或 LOGIN),除非模式明确设为 none,否则绝不会在未加密连接上发送凭据。每条消息都带有纯文本部分和一个采用 官网风格的 HTML 版本:Libre WebUI 字标、一张承载内容的卡片、一个珊瑚色按钮指向 目标,以及一段指回设置 → 通知的页脚。自动化结果会从 Markdown 渲染(标题、列表、 强调、代码、仅指向 http(s) 目标的链接);其余内容一律转义,唯一的外部图片是从 librewebui.org 提供的徽标。没有任何追踪。

边界​

  • 尚未实现按类型的用户偏好;自动化遵循自己的通知设置,离开频道会停止该频道通知。