docs(testing): e2e verification report for send routing with WECOM_BOT
This commit is contained in:
102
docs/testing/2026-07-15-send-routing-e2e-report.md
Normal file
102
docs/testing/2026-07-15-send-routing-e2e-report.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# 发送路由端到端验证报告
|
||||
|
||||
## 目标
|
||||
|
||||
通过 admin-web UI 走通「内部群 → WECOM_BOT → 发送 → 查询状态」完整链路,验证自动路由功能可用。
|
||||
|
||||
## 环境
|
||||
|
||||
- 工作目录:`/f/sino-mci`
|
||||
- 后端:`mci-server` 运行在 `http://localhost:8080/msg-platform`,JDK 21
|
||||
- 前端:`admin-web` 运行在 `http://localhost:5177`
|
||||
- 基础设施:MySQL / Redis / RabbitMQ 通过远程 `192.168.1.173` 连接
|
||||
- 登录账号:`superadmin` / `admin123`
|
||||
|
||||
## 测试数据
|
||||
|
||||
| 实体 | ID | 名称 / 标识 |
|
||||
|-----|-----|-----------|
|
||||
| WECOM_BOT 账号 | 759 | 测试内部群机器人 (test-bot-e2e-001) |
|
||||
| 内部群 | 462 | E2E测试内部群 (roomid_manual_internal_e2e) |
|
||||
| 发送任务 | SND8BC07E95AE1F471992A734ABDDFE223C | 测试消息 from e2e verification |
|
||||
|
||||
## 执行步骤与结果
|
||||
|
||||
### 1. 环境检查 ✅
|
||||
|
||||
- mci-server、admin-web、channel-service 均运行正常。
|
||||
- admin-web 可访问地址:`http://localhost:5177/login`。
|
||||
- 注意:`/msg-platform/login` 会被 Vite proxy 转发到后端,返回 500。
|
||||
|
||||
### 2. 创建 WECOM_BOT 账号 ✅
|
||||
|
||||
- 页面路由:`/channel/account`
|
||||
- 创建账号类型「企微群机器人」,填写 webhook URL `https://httpbin.org/post`。
|
||||
- **发现问题并修复**:UI 原先把 webhook URL 作为普通字符串写入 `ext_info`,而数据库列为 JSON 类型,导致 500。已修复 `ChannelAccount.vue`,将 URL 包装为 `{"webhook_url":"..."}`;同时 `SendService` 增加 `extractWeComBotWebhookUrl()` 从 JSON 中提取 URL,兼容旧版纯字符串。
|
||||
- 截图:`admin-web/screenshots/02-bot-created.png`
|
||||
|
||||
### 3. 创建内部群 ✅
|
||||
|
||||
- 页面路由:`/customer/group`
|
||||
- 创建群聊,场景选择「内部群」,负责人选择 WECOM_BOT 账号 759。
|
||||
- 截图:`admin-web/screenshots/04-internal-group-created.png`
|
||||
|
||||
### 4. 绑定 WECOM_BOT 账号 ✅
|
||||
|
||||
- 在会话详情抽屉中点击「绑定账号」,选择 WECOM_BOT 账号 759 作为主发送账号。
|
||||
- API 返回 `{"code":0,"message":"ok"}`。
|
||||
- 截图:`admin-web/screenshots/05-bot-bound.png`
|
||||
|
||||
### 5. 发送测试消息 ✅
|
||||
|
||||
- 页面路由:`/message/test`
|
||||
- 目标类型选择「会话」,选择内部群 462。
|
||||
- 内容:`测试消息 from e2e verification`
|
||||
- 发送接口返回:
|
||||
```json
|
||||
{"taskId":"SND8BC07E95AE1F471992A734ABDDFE223C","totalCount":1,"status":"accepted"}
|
||||
```
|
||||
- 后端日志确认消息被路由到 `WeComBotSender` 并调用 webhook。
|
||||
- 外部 webhook `httpbin.org/post` 返回 503,导致实际投递失败(预期内,用于验证链路)。
|
||||
- 截图:`admin-web/screenshots/06-message-test.jpeg`、`admin-web/screenshots/07-message-sent.png`
|
||||
|
||||
### 6. 查询任务状态 ✅
|
||||
|
||||
- 页面路由:`/message/send-record`
|
||||
- 任务状态接口返回:
|
||||
```json
|
||||
{"total":1,"pendingCount":0,"sendingCount":0,"successCount":0,"failedCount":1}
|
||||
```
|
||||
- 发送记录明细:`accountId=759`,`channelType=wecom`,`sendStatus=3`(失败),`channelResult` 指向「企微群机器人发送失败,HTTP 状态: 503」。
|
||||
- 截图:`admin-web/screenshots/08-task-status.png`
|
||||
|
||||
## 结论
|
||||
|
||||
**发送路由自动选择功能验证通过。**
|
||||
|
||||
- 内部群聊正确路由到 `WECOM_BOT` 账号。
|
||||
- 异步发送立即返回 `taskId`,任务状态查询正确反映失败计数。
|
||||
- 失败原因与外部 webhook 端点相关,不是路由或代码问题。
|
||||
|
||||
## 修复的代码
|
||||
|
||||
| 文件 | 修复内容 |
|
||||
|-----|---------|
|
||||
| `admin-web/src/views/ChannelAccount.vue` | WECOM_BOT 创建/编辑时把 webhook URL 包装为 JSON;抽屉回显时解析 JSON |
|
||||
| `backend/mci-server/src/main/java/com/sino/mci/send/service/SendService.java` | 新增 `extractWeComBotWebhookUrl()`,从 JSON `ext_info` 中提取 `webhook_url`,兼容旧版纯字符串 |
|
||||
|
||||
## 发现但未修复的问题
|
||||
|
||||
1. **admin-web 路由与计划不一致**:实际路由为 `/channel/account`、`/customer/group`、`/message/test`、`/message/send-record`,而不是任务计划中假设的 `/channel-account`、`/conversation`、`/message-test`。已在本次验证后更新相关文档。
|
||||
2. **发送记录分页 `total` 字段不一致**:`GET /api/v1/send/records?taskId=...` 返回 `total: 0` 但 `records` 数组包含 1 条记录。属于前端分页展示小问题,不影响状态核对。
|
||||
|
||||
## 截图索引
|
||||
|
||||
| 截图 | 说明 |
|
||||
|-----|------|
|
||||
| `admin-web/screenshots/02-bot-created.png` | WECOM_BOT 账号创建成功 |
|
||||
| `admin-web/screenshots/04-internal-group-created.png` | 内部群创建成功 |
|
||||
| `admin-web/screenshots/05-bot-bound.png` | WECOM_BOT 绑定到内部群 |
|
||||
| `admin-web/screenshots/06-message-test.jpeg` | 消息测试页面 |
|
||||
| `admin-web/screenshots/07-message-sent.png` | 消息发送成功,返回 taskId |
|
||||
| `admin-web/screenshots/08-task-status.png` | 任务状态显示 failed=1 |
|
||||
Reference in New Issue
Block a user