4.7 KiB
4.7 KiB
发送路由端到端验证报告
目标
通过 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 - 发送接口返回:
{"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 - 任务状态接口返回:
{"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,兼容旧版纯字符串 |
发现但未修复的问题
- admin-web 路由与计划不一致:实际路由为
/channel/account、/customer/group、/message/test、/message/send-record,而不是任务计划中假设的/channel-account、/conversation、/message-test。已在本次验证后更新相关文档。 - 发送记录分页
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 |