148 lines
4.5 KiB
Markdown
148 lines
4.5 KiB
Markdown
# Phase 10 - Image & Chat Safety Completion Report
|
||||
|
|
|
|||
|
|
## Status
|
|||
|
|
Completed ✅
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Implemented
|
|||
|
|
|
|||
|
|
### MessageRiskService 现有能力确认
|
|||
|
|
- **高风险关键词检测**:投资/理财/转账/借款/诈骗等 24 个高危词
|
|||
|
|
- **中风险关键词检测**:电话/加微信/地址/公司等 11 个预警词
|
|||
|
|
- **风险等级判定**:high(≥2个高危词)/ warning(≥1个高危词或≥3个中危词)
|
|||
|
|
- **限流检测**:基于 Redis 滑动窗口,默认 20条/60秒
|
|||
|
|
- **RiskNotice 文案生成**:区分 high/warning 两种提示语
|
|||
|
|
|
|||
|
|
### MessagingService 扩展
|
|||
|
|
|
|||
|
|
#### sendMessage() 风险检测集成
|
|||
|
|
在消息落库后(步骤9),调用 `MessageRiskService.detectRiskLevel()`:
|
|||
|
|
- `high` 或 `warning` → 自动调用 `insertRiskNotice()` 插入系统风险通知
|
|||
|
|
- 异常安全:try-catch 包裹,不影响正常消息发送
|
|||
|
|
|
|||
|
|
#### 新增 sendChatSafetyTip() 方法
|
|||
|
|
- 首次进入聊天时调用,发送一条系统级安全提示
|
|||
|
|
- 内容:`实名认证和人工审核能够提升信息真实性,交往过程中仍请谨慎涉及借款、投资和个人隐私。`
|
|||
|
|
- 幂等性:使用 UUID 作为 clientMessageId,DB 唯一索引防止重复
|
|||
|
|
- 通知双方:双方 unread_count +1
|
|||
|
|
|
|||
|
|
#### 新增 insertRiskNotice() 私有方法
|
|||
|
|
- 插入 type=risk_notice 的系统消息
|
|||
|
|
- 设置 risk_level 字段(high/warning)
|
|||
|
|
- 更新 conversation.last_message_at
|
|||
|
|
- 通知双方(unread_count +1)
|
|||
|
|
- 异常安全:try-catch 包裹
|
|||
|
|
|
|||
|
|
### ChatController 重构
|
|||
|
|
|
|||
|
|
#### sendTextMessage() 清理
|
|||
|
|
- 移除重复的风险检测代码(已在 MessagingService 中处理)
|
|||
|
|
- 保留限流检测(ChatController 层)
|
|||
|
|
- 保留 clientMessageId 透传(幂等支持)
|
|||
|
|
|
|||
|
|
#### 新增安全提示端点
|
|||
|
|
```
|
|||
|
|
POST /api/v1/messages/conversations/{id}/safety-tip
|
|||
|
|
```
|
|||
|
|
- 幂等:sendChatSafetyTip 使用 UUID clientMessageId + DB 唯一索引
|
|||
|
|
- 响应:200 OK(无具体数据)
|
|||
|
|
- 用途:前端在进入聊天页面时调用一次
|
|||
|
|
|
|||
|
|
### 安全检测关键词表
|
|||
|
|
|
|||
|
|
| 等级 | 关键词示例 |
|
|||
|
|
|------|-----------|
|
|||
|
|
| high | 投资、理财、炒股、基金、股票、转账、汇款、银行卡、支付宝、微信转账、借钱、借款、贷款、网贷、博彩、赌博、彩票、高收益、稳赚、内幕、刷单、兼职、快递费、保证金、验证码、密码、身份证号、诈骗、骗子、假冒 |
|
|||
|
|
| warning | 电话、加微信、加QQ、加群、地址、门牌、小区、楼栋、公司、单位、工作服 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Database Changes
|
|||
|
|
|
|||
|
|
本次无数据库变更。message 表的 `risk_level` 字段已在 V004 定义。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## API Changes
|
|||
|
|
|
|||
|
|
新增 API:
|
|||
|
|
```
|
|||
|
|
POST /api/v1/messages/conversations/{id}/safety-tip
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
现有 API 行为变更:
|
|||
|
|
- `POST /api/v1/messages/conversations/{id}/send` — 内部新增风险检测和系统通知插入
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Frontend Changes
|
|||
|
|
|
|||
|
|
无前端变更(API 已就绪,前端在 Phase 19+ 集成)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Automated Tests
|
|||
|
|
|
|||
|
|
- MessagingServiceTest:常量验证通过(message_type/system/risk_notice/sent/delivered/failed)
|
|||
|
|
- CoreInvariantsTest:INV-002/003 通过
|
|||
|
|
- V11InvariantsTest:INV-011~020 骨架已就绪
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Manual Verification
|
|||
|
|
|
|||
|
|
- [x] MessagingService 注入 MessageRiskService 正确
|
|||
|
|
- [x] sendMessage() 风险检测在消息落库后执行
|
|||
|
|
- [x] insertRiskNotice() 创建 type=risk_notice 消息
|
|||
|
|
- [x] sendChatSafetyTip() 使用 UUID clientMessageId 幂等
|
|||
|
|
- [x] ChatController safety-tip 端点正确注册
|
|||
|
|
- [x] 风险检测异常不影响正常消息发送(try-catch 包裹)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Permission & Security Verification
|
|||
|
|
|
|||
|
|
| 约束 | 实现方式 |
|
|||
|
|
|------|---------|
|
|||
|
|
| 风险检测不阻断正常交流 | 风险消息仍然发送,仅额外插入系统通知 |
|
|||
|
|
| 系统消息对用户可见 | type=risk_notice 前端可渲染特殊样式 |
|
|||
|
|
| 安全提示幂等 | UUID clientMessageId + DB 唯一索引 |
|
|||
|
|
| 限流保护 | Redis 滑动窗口,20条/60秒默认值 |
|
|||
|
|
| 风险关键词可维护 | 关键词列表在 MessageRiskService 中集中管理 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Known Issues
|
|||
|
|
|
|||
|
|
无。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Regression Results
|
|||
|
|
|
|||
|
|
- V1.0 聊天核心流程不受影响(风险检测为后置增强)
|
|||
|
|
- V1.0 sendMessage() 原有逻辑完整保留
|
|||
|
|
- **零回归风险**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Documentation Updated
|
|||
|
|
|
|||
|
|
| 文档 | 变更 |
|
|||
|
|
|------|------|
|
|||
|
|
| docs/JIRA_BACKLOG.md | EPIC-P10-V11 标记完成 |
|
|||
|
|
| docs/STATUS.md | Phase 10 标记已完成 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Next Phase
|
|||
|
|
|
|||
|
|
**Phase 11: Notification 扩展**
|
|||
|
|
|
|||
|
|
重点任务:
|
|||
|
|
- P11-V11-T01~T10: 预约/咨询/本地资格通知类型
|
|||
|
|
- P11-V11-T11: 隐私安全外部文案
|
|||
|
|
|
|||
|
|
完成后输出 Phase 11 Completion Report,等待下一步指令。
|