Skip to content

统一通知中心与多通道送达治理 #240

Description

@web-ppanel

目标仓库: perfect-panel/backend
目标分支: next
规划基线: origin/main@ea28a7685f4c89f91895c4d789a5726e806aa3f0

目标

建设统一通知中心,统一事件、模板、用户偏好、多通道投递、送达记录、重试和退订治理,让业务模块只发布通知事件,不直接耦合 Email/SMS/Telegram 等通道。该项为 P1 能力;验证码、Secret 或 Token 入日志等泄露风险必须由 P0 安全项优先修复。

源码已有

  • 已有单邮件/SMS 通道、Telegram 模板、用户四个通知偏好、system_logs 消息日志和验证码入队。
  • 邮件与短信多通道及通知安全基线 #209 已规划邮件与短信多通道。
  • 当前用户偏好未完整接入发送路径,多通道、模板版本、结构化送达和退订治理不足。

范围

  • 定义通知事件模型:事件类型、业务资源、收件人、模板、变量、优先级、幂等键、发送策略。
  • 支持站内信、Email、SMS、Telegram 等通道的统一调度和可扩展接口。
  • 支持模板版本、草稿/发布、变量 schema、预览、测试发送和回滚。
  • 用户偏好按通知类别、通道、频率和免打扰规则生效。
  • 记录 notification_deliveries:状态、通道、模板版本、尝试次数、失败摘要、关联业务对象。

明确不做

  • 不在本 Issue 内实现营销自动化、复杂用户分群或 A/B 测试。
  • 不替代 邮件与短信多通道及通知安全基线 #209 的具体邮件/SMS 多通道配置,但会消费其发送通道。
  • 不记录验证码、Token、Secret、Authorization、Cookie 或完整敏感正文到日志/导出。

数据 / API / 流程

  • 数据:notification_events、notification_templates、notification_preferences、notification_deliveries、unsubscribe_tokens 的安全哈希或等价机制。
  • API:Admin 模板管理、通知记录查询、重试、测试发送、用户偏好管理;Public 用户偏好查询/更新、退订或恢复订阅。
  • 流程:业务事件 → 幂等入队 → 偏好/退订过滤 → 模板渲染 → 通道选择 → 投递重试 → 送达记录 → 失败告警。

RBAC / 审计

  • 模板查看/编辑/发布/回滚、测试发送、批量重试、查看送达明细分别登记权限点。
  • 模板发布、回滚、通道策略修改、批量重试和查看敏感收件信息写管理员审计。
  • Public 用户只能修改自己的偏好;管理员导出遵循脱敏和数量限制。

验收

  • 至少 5 类业务事件接入统一通知:登录安全、订单支付、订阅到期、工单回复、系统告警。
  • 用户偏好在发送路径真实生效,并有测试覆盖。
  • 模板变量缺失、渲染失败、通道失败均有明确状态和可重试记录。
  • 同一幂等键不会重复产生多条业务通知。
  • 通知记录可按用户、事件类型、通道、状态、模板版本和时间查询。
  • 日志、响应和导出不包含验证码、Token、Secret、Authorization 或 Cookie 明文。

依赖

开发与测试门禁

  • MySQL/PostgreSQL 迁移、OpenAPI 契约、RBAC API 权限点、管理员审计和敏感信息脱敏测试必须同步提交。
  • 复用现有源码能力和 P0 底座,不重复实现支付、订阅、流量、修复命令或发布门禁执行层。

合并后的完整范围

本 Issue 是站内信、Email、SMS、Telegram 等通知事件、模板、通道、偏好、送达、重试与安全治理的唯一 Owner,并吸收 #209。

  • 统一通知事件、模板版本、变量 Schema、草稿/发布/回滚和多通道路由。
  • 通道配置只返回脱敏摘要;验证码、Token、Secret、Authorization、Cookie 和完整敏感正文不得进入响应、日志或导出。
  • 送达记录包含幂等事件键、模板版本、通道、尝试次数、状态、失败摘要和关联业务对象。
  • 用户偏好、退订、免打扰、频率限制真实影响发送路径;安全类通知按明确策略处理不可退订边界。
  • 支持失败重试、死信/归档、测试发送和批量恢复,并与 统一审计、任务运行与日志查询数据模型 #219 的 task_runs/审计衔接。

合并验收

  • 登录安全、订单支付、订阅到期、工单回复和系统告警至少五类事件接入统一通知。
  • 重复事件不会重复发送,失败可重试、可追踪、可审计。
  • 所有通道通过统一安全基线,任何输出均不泄露敏感凭据。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:operationsOperations, support, notifications and configurationenhancementNew feature or requestpriority:P1Important planned workroadmapPlanned roadmap workv2.0PPanel 2.0 roadmap

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions