阶段:P1。
统一出站消息:先落站内消息记录,再按标准载荷经多平台投递。不自建聊天 IM。采单与 OCR 见 11-AI应用.md。
表:messages
全局出站消息标准:业务/分析/审批只写这一份;站内必留记录,再扇出到各平台。
| 字段 | 说明 | 来源 |
|---|---|---|
| id | 系统主键 | 系统 |
| user_id | 接收人 | 系统 |
| category | 类型:盈亏摘要、库存报表、补货、预警、审批待办、系统通知等 | 系统 |
| title | 标题 | 系统 |
| body | 正文 / 摘要 | 系统 |
| link_url | 明细链接(可空) | 系统 |
| payload | 扩展载荷(JSON,可空) | 系统 |
| level | info / warning / critical(可空) |
系统 |
| read_at | 站内已读时间(空=未读) | 系统 |
| created_at | 创建时间 | 系统 |
站内列表、未读数均读本表;不因某平台发送失败而丢失站内记录。
表:message_deliveries
一条 messages 可对应多条投递(站内已写入则 inbox 可记一条成功,或仅表示外发通道)。
| 字段 | 说明 | 来源 |
|---|---|---|
| id | 系统主键 | 系统 |
| message_id | 统一消息 | 系统 |
| channel | inbox 站内 / wecom 企微 / wechat 微信服务消息 / 其他扩展 |
系统 |
| status | pending / sent / failed / skipped |
系统 |
| external_id | 平台侧消息 id(可空) | 平台 |
| error | 失败原因(可空) | 系统 |
| sent_at | 发送时间(可空) | 系统 |
| created_at / updated_at | 时间戳 | 系统 |
投递流程:写入 messages → 按用户订阅生成各 channel 的 message_deliveries → 异步发送 → 回写状态。
表:message_subscriptions
| 字段 | 说明 | 来源 |
|---|---|---|
| id | 系统主键 | 系统 |
| user_id | 用户 | 系统 |
| category | 消息类型 | 系统 |
| channel | 投递通道 | 系统 |
| enabled | 是否接收 | 系统 |
| updated_at | 更新时间 | 系统 |
某 category + channel 关闭则对应投递为 skipped。站内 inbox 默认可开(重要通知建议不可关,实现时按类别约定)。
messages(站内)→ 多平台 message_deliveries 发送。messages 记录,可查已读/未读。| P1 | P2 |
|---|---|
| 站内 + 企微投递 | 细粒度按 category×channel 订阅、微信等多通道 |