Files
sino-mci/docs/testing/2026-07-15-send-routing-e2e-report.md

4.7 KiB
Raw Blame History

发送路由端到端验证报告

目标

通过 admin-web UI 走通「内部群 → WECOM_BOT → 发送 → 查询状态」完整链路,验证自动路由功能可用。

环境

  • 工作目录:/f/sino-mci
  • 后端:mci-server 运行在 http://localhost:8080/msg-platformJDK 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.jpegadmin-web/screenshots/07-message-sent.png

6. 查询任务状态

  • 页面路由:/message/send-record
  • 任务状态接口返回:
    {"total":1,"pendingCount":0,"sendingCount":0,"successCount":0,"failedCount":1}
    
  • 发送记录明细:accountId=759channelType=wecomsendStatus=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: 0records 数组包含 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