Files
2026-07-27 16:46:15 +08:00

44 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 通知目标与真实派发链路审计
日期2026-07-23
范围:事件中心 → 自动化执行动作 → 通知记录 → 外部渠道派发
## 健康度
已从“规则只保存渠道名、外部通知重新入队后无人消费”提升为端到端可审计链路。自动化只能选择服务端声明就绪的渠道和接收组;站内信写入即送达,外部通知由独立派发器租约领取,只有可信网关返回非空服务商消息 ID 才标记发送成功。生产短信、邮件和企业通讯仍需配置真实网关并完成签名 canary本轮没有伪造第三方送达结论。
## 发现与修复
1. 原动作页只有“仅记录 / 站内通知 / 高优先级通知”,没有接收人或接收组,却显示“真实可用”;现在改为渠道与接收组矩阵,未配置网关的渠道不可选择。
2. 规则新增 `notificationTargets[]`,保存 `{channel, recipientId, label}` 引用;旧 `notificationChannels` 继续作为兼容字段并由目标归一化生成。外部渠道没有目标时服务端拒绝发布。
3. 目标目录由 `ALERT_NOTIFICATION_TARGETS_JSON` 提供,前端只读取不含手机号、邮箱、网关 URL 和密钥的安全引用目录。
4. 新增独立 `alert-notification-dispatcher`:使用 `FOR UPDATE SKIP LOCKED`、有界批次和过期租约领取 `reserved` 记录,避免多实例重复发送。
5. 网关请求包含 HMAC-SHA256 签名、时间戳、通知 ID 和“通知 + 尝试序号”幂等键;租约令牌不会进入外部载荷。
6. 网关 2xx 但没有 `messageId``X-Provider-Message-ID` 时仍按失败保存防止把“HTTP 接收”误报成真实送达。
7. 通知记录新增队列健康条5 秒展示待发送、失败、需人工处置、活动租约以及各渠道就绪状态;死信沿用三次受控尝试上限,不额外制造另一套状态机。
8. 自动化动作配置在桌面端改为四列紧凑渠道卡,移动端隐藏重复技术说明并保留清晰目标选择;自动恢复在 390 × 844 首屏内可见,固定主操作不随内容滚动。
9. 迁移 `035_alert_notification_dispatch.sql`、systemd 服务、发布安装器、构建命令、环境变量和接口契约已同步,发布器会继承或原子替换派发器二进制。
## 证据
- 改造前只有通知模式且没有目标:`01-before-action-without-targets.png`
- 桌面端渠道与接收组:`02-after-target-routing-desktop.png`
- 桌面端选择短信与夜班负责人:`03-after-external-target-selected.png`
- 390 × 844 移动端目标配置:`04-after-target-routing-mobile.png`
- 移动端队列健康:`05-notification-health-mobile.png`
- 桌面端队列健康与送达列表:`06-notification-health-desktop.png`
## 验证
- `go test ./...`通过包含派发批次、租约结果、HMAC、幂等键和模糊 2xx 拒绝测试
- Web 正式套件78 个测试文件、518 项测试通过
- 事件中心专项45 项测试通过
- Web 正式构建、完整根构建与发布安装器测试:通过
- 真实浏览器1440 × 900 与 390 × 844只修改未发布草稿并主动放弃没有写入规则或发送通知
## 无障碍与限制
- 渠道使用具名复选框,目标选择器按渠道提供可访问名称;必选目标缺失时在固定页脚给出阻断原因。队列健康是独立 region刷新按钮与指标具有可访问文本。
- 桌面与移动端均保持单一编辑内容滚动和固定主要操作,没有新增横向滚动;颜色之外同时使用文字与数值表达渠道/失败状态。
- 本轮未执行屏幕阅读器人工走查,也没有第三方生产凭据、限流策略、异步回调或真实 SLO 数据。生产启用前必须逐渠道验证签名、防重、超时、服务商消息 ID 和失败告警。