For AI agents: the complete documentation index is available at https://payhon.github.io/AppKernia/llms.txt, the full documentation bundle is available at https://payhon.github.io/AppKernia/llms-full.txt, and this page is available as Markdown at https://payhon.github.io/AppKernia/guide/notification-operations.md.

消息运营工作台

Admin 路由 /system/notifications/operations 提供应用级消息运行视图。工作台只展示租户与当前 App 范围内的脱敏业务投影,不暴露 River Args、设备 Token、完整载荷、凭据、堆栈或厂商响应正文。

四个可恢复 Tab

Tab主要用途
概览发送量、厂商受理、失败、无效 Token、跳过、打开率、队列深度和 P95 延迟
发布运行按消息查看计划、发布、收件人冻结、扇出和设备投递阶段
队列任务查看任务类型、状态、尝试次数、下次执行、耗时、关联资源和安全错误
失败中心集中查看终止失败,执行单条或受控批量重试

Tab、筛选和分页写入 URL,刷新或分享站内地址后可以恢复。页面可见且存在未完成任务时每 15 秒刷新;浏览器页签隐藏后暂停,手动刷新始终可用。

运行状态

发布运行可能是 scheduledqueuedrunningcompletedcompleted_with_failuresfailedcancelledexpired

队列任务可能是 scheduledqueuedrunningretry_waitsucceededfailedcancelled。River 表是实时调度事实源,工作台读取的是经过租户和 App 隔离的业务投影;后台对账任务会修复进程异常退出造成的状态差异。

安全重试规则

  1. 只重试已终止且服务端返回 retryable=true 的任务。
  2. transientthrottled 可在自动尝试耗尽后人工重试。
  3. auth_config_error 必须先到推送渠道修复配置并通过预检。
  4. unknown_after_write 可能已经到达厂商,只允许单条操作,并显式确认重复通知风险。
  5. 每次批量请求最多 100 条;服务端逐条返回接受或拒绝原因。
  6. 重试创建新任务并关联原任务,原运行和尝试历史不会被覆盖。

运行中、尚未到期的计划任务、已取消或已过期消息不能手动重试。工作台不提供编辑任务参数、强制终止运行中任务或直接更新 River 记录的功能。

推荐排障顺序

  1. 在“概览”确认队列深度、最老等待时间、P95 排队延迟和故障数量是否持续增长。
  2. 在“发布运行”定位流水线停在发布、扇出还是设备投递,并核对收件人、已评估、投递与跳过计数。
  3. 在“队列任务”查看 task kind、尝试次数、下一次重试、归一错误码和 Trace ID。
  4. 厂商鉴权失败时先修复渠道,不要连续重放投递。
  5. 需要完整调用链时,用 Trace ID 到 OpenTelemetry、Loki 或 Tempo 查询;Admin 只保留安全摘要。

权限

权限作用
notify.observability.read查看概览、发布运行、任务和安全错误摘要
notify.task.retry重试通知任务
notify.delivery.read查看投递记录
notify.delivery.retry保留的投递重试兼容权限
notify.operations.publish发布 news_operations 运营消息

按钮可见性不能替代服务端授权。所有查询在 SQL 层同时过滤 tenant 和 app;重试操作还会记录操作者、原任务、新任务和审计事件。

保留与监控

任务、尝试和消息运行明细保留 90 天;日聚合保留 13 个月。清理任务只删除已终止且已完成聚合的数据,不删除 scheduledqueuedrunningretry_wait 记录。

告警应覆盖队列深度和最老等待时间持续增长、永久失败、重试激增、厂商延迟、无效 Token 比例、连续鉴权失败和发布流水线耗时。指标标签不要使用用户 ID、Token、Trace ID 或消息正文。

关于发布、扇出和投递如何协作,请阅读消息推送架构。业务系统接入方式见通知 API