fix: implement channel group routing failover
This commit is contained in:
@@ -664,12 +664,139 @@
|
||||
### TC-SEND-003 通道路由和 Gateway SubmitCommand
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:存在 active 通道和路由规则。
|
||||
- 前置条件:企业应用已绑定对应运营商的 active 通道组,通道组内存在 active 且 online 的通道。
|
||||
- 步骤:处理一条发送 job。
|
||||
- 预期结果:
|
||||
- 选择正确通道。
|
||||
- 先按号码前缀正则识别运营商,再只在企业应用绑定的对应运营商通道组内选择正确通道。
|
||||
- 创建 SmsSubmitRecord。
|
||||
- 投递 Gateway SubmitCommand,包含 traceId、messageId、channelId、submitId、phoneNumber、content、cmpp 参数。
|
||||
- 未配置对应运营商通道组或未命中可用通道时不发送,并记录可读失败原因。
|
||||
|
||||
### TC-SEND-010 禁止路由规则直接绑定单通道
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:存在通道 A、通道组 G、企业应用 App。
|
||||
- 步骤:
|
||||
1. 尝试创建或启用直接绑定通道 A 的路由规则。
|
||||
2. 创建 App 的发送任务。
|
||||
3. 查看 submit record、trace 和系统日志。
|
||||
- 预期结果:
|
||||
- 系统不允许直接绑定单个通道作为发送规则。
|
||||
- 发送链路只接受通道组路由。
|
||||
- 如存在历史单通道规则,发送链路不得使用该规则,并记录配置错误。
|
||||
|
||||
### TC-SEND-011 未命中企业应用通道组时不发送
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:企业应用 App 未配置通道组,系统存在其他 active 通道。
|
||||
- 步骤:
|
||||
1. 创建 App 的发送任务。
|
||||
2. 触发送 worker。
|
||||
3. 查看发送明细、submit record、trace 和系统日志。
|
||||
- 预期结果:
|
||||
- 系统不 fallback 到其他 active 通道。
|
||||
- 不投递 Gateway SubmitCommand。
|
||||
- 发送明细进入 failed。
|
||||
- 运营端 trace 和系统日志可看到“未配置可用通道组”原因;客户端本期只展示失败状态,不展示通道细节。
|
||||
|
||||
### TC-SEND-012 手机号段识别归属地参与路由
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:运营商区分规则可识别移动号码;手机号段库存在 `prefix/province/city` 数据;企业应用绑定移动通道组,组内配置山东省网通道 A、全国通道 B。
|
||||
- 步骤:
|
||||
1. 使用山东手机号创建发送任务。
|
||||
2. 触发送 worker。
|
||||
3. 查询 submit record、trace 和路由日志。
|
||||
- 预期结果:
|
||||
- 系统按可配置前缀正则识别运营商,并按手机号段库查询省份和城市。
|
||||
- trace 记录识别出的运营商、省份和城市。
|
||||
- 路由优先选择山东省网通道 A。
|
||||
- Gateway SubmitCommand 的 channelId 为 A。
|
||||
|
||||
### TC-SEND-013 省网未匹配时走全国路由
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:手机号段库可识别四川手机号;企业应用绑定对应运营商通道组,组内无四川省网通道,但存在全国通道 B。
|
||||
- 步骤:
|
||||
1. 使用四川手机号创建发送任务。
|
||||
2. 触发送 worker。
|
||||
3. 查询 submit record 和 trace。
|
||||
- 预期结果:
|
||||
- 系统识别手机号归属地为四川。
|
||||
- 省网未匹配时选择同一通道组内全国通道 B。
|
||||
- 不选择其他通道组或全局 active 通道。
|
||||
|
||||
### TC-SEND-014 省网失败后补发全国通道
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:通道组内配置山东省网通道 A 和全国通道 B/C;A、B、C 均属同一企业应用授权通道组;A 可模拟 submit 失败、连接断开或最终回执失败。
|
||||
- 步骤:
|
||||
1. 使用山东手机号创建发送任务。
|
||||
2. 首次路由命中 A。
|
||||
3. 模拟 A submit rejected、submit timeout、连接断开、运营商失败回执或其他 receipt failed。
|
||||
4. 查看补发记录、submit record、trace、计费流水。
|
||||
- 预期结果:
|
||||
- 系统立即切换到全国通道 B 补发,不再尝试同省第二省网通道。
|
||||
- 如果 B 失败,继续按全国通道优先级补发到 C。
|
||||
- 补发不跨出企业应用授权通道组。
|
||||
- 原失败原因、补发次数、前后 channelId 和状态流转在 trace 中可查。
|
||||
- 最终成功只按企业应用客户费率扣一次,不按通道成本价重复扣费。
|
||||
|
||||
### TC-SEND-015 企业应用通道组保存校验
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:存在移动、联通、电信通道组。
|
||||
- 步骤:
|
||||
1. 新建或编辑企业应用,不选择任何通道组并保存。
|
||||
2. 选择移动通道组后保存。
|
||||
3. 再补充联通、电信通道组保存。
|
||||
- 预期结果:
|
||||
- 不选择任何通道组时页面不可保存,并提示至少配置一个运营商通道组。
|
||||
- 允许只配置移动、联通或电信中的一类或两类。
|
||||
- 已配置的运营商通道组会影响对应运营商短信分流。
|
||||
|
||||
### TC-SEND-016 运营商正则分流和识别失败默认移动
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:手机号段库的“运营商区分规则”已配置移动、联通、电信号码前缀正则;企业应用分别绑定移动、联通、电信通道组。
|
||||
- 步骤:
|
||||
1. 分别提交移动、联通、电信号码。
|
||||
2. 提交一个正则无法识别运营商但号码格式合法的号码。
|
||||
3. 查询 submit record 和 trace。
|
||||
- 预期结果:
|
||||
- 移动号码进入移动通道组。
|
||||
- 联通号码进入联通通道组。
|
||||
- 电信号码进入电信通道组。
|
||||
- 运营商识别失败时进入移动通道组。
|
||||
|
||||
### TC-SEND-017 三网通道作为运营商通配
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:企业应用绑定移动通道组;移动通道组内无可用移动全国通道,但有可用三网全国通道。
|
||||
- 步骤:
|
||||
1. 提交移动号码。
|
||||
2. 触发送 worker。
|
||||
3. 查询 submit record 和 trace。
|
||||
- 预期结果:
|
||||
- 三网通道可作为移动、联通、电信的通配通道参与路由。
|
||||
- route/trace 标明实际命中的三网通道。
|
||||
|
||||
### TC-SEND-018 失败补发停止条件
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:通道组开启失败补发并配置补发时间上限;全国通道可连续模拟失败。
|
||||
- 步骤:
|
||||
1. 模拟普通 failed 回执,确认触发补发。
|
||||
2. 模拟 unknown 状态,执行 72 小时超时补偿。
|
||||
3. 将消息提交时间调整为超过 72 小时。
|
||||
4. 将消息提交时间调整为超过通道组补发时间上限。
|
||||
5. 关闭通道组失败补发后再次模拟 failed。
|
||||
- 预期结果:
|
||||
- 普通 failed 在限制内触发补发。
|
||||
- unknown 不触发补发。
|
||||
- 超过 72 小时不触发补发。
|
||||
- 超过通道组补发时间上限不触发补发。
|
||||
- 通道组关闭失败补发时不触发补发。
|
||||
|
||||
### TC-SEND-004 SubmitResult accepted
|
||||
|
||||
@@ -2084,7 +2211,7 @@
|
||||
- 前置条件:通道组包含主通道 A 和备用通道 B,A active 但连接离线,B active 且 online,签名在 B 报备通过。
|
||||
- 步骤:
|
||||
1. 确认 A 业务状态 active、连接状态 disconnected。
|
||||
2. 确认 B 业务状态 active、连接状态 online。
|
||||
2. 确认 B 业务状态 active、连接状态 online、currentConnections 大于 0。
|
||||
3. 创建发送任务。
|
||||
4. 查询 submit record 和 trace。
|
||||
- 预期结果:
|
||||
@@ -2103,8 +2230,8 @@
|
||||
3. 查看任务状态、发送明细、系统日志。
|
||||
- 预期结果:
|
||||
- 系统不向离线连接 submit。
|
||||
- 按设计进入 delayed/retry、failed 或 pending_channel 状态。
|
||||
- 客户端和运营端展示“无可用在线通道”原因。
|
||||
- 发送明细进入 failed。
|
||||
- 运营端 trace 和系统日志展示“无可用在线通道”原因;客户端本期只展示失败状态,不展示通道细节。
|
||||
- 不产生 submit accepted 记录,不错误扣费。
|
||||
|
||||
### TC-CMPP-STATUS-008 连接状态与通道启停状态组合
|
||||
@@ -2122,6 +2249,20 @@
|
||||
- 启用后如连接仍 online,可恢复路由;如连接已断开,需要等待重连。
|
||||
- 系统日志记录启停操作。
|
||||
|
||||
### TC-CMPP-STATUS-008A 通道连接可用性标准
|
||||
|
||||
- 优先级:P0
|
||||
- 前置条件:同一通道组内准备多个通道,分别设置为 online/currentConnections=1、online/currentConnections=0、auth_failed、heartbeat_timeout、reconnecting、disconnected。
|
||||
- 步骤:
|
||||
1. 创建发送任务。
|
||||
2. 触发送 worker。
|
||||
3. 查询 submit record、trace 和连接状态日志。
|
||||
- 预期结果:
|
||||
- 只有业务 active、连接 online、currentConnections 大于 0 且心跳未失败的通道可被选中。
|
||||
- auth_failed、heartbeat_timeout、reconnecting、disconnected 和 currentConnections=0 的通道均被跳过。
|
||||
- 多连接通道只要至少 1 条连接 online 且可用即可参与路由。
|
||||
- 心跳连续 3 次失败后进入重连,重连成功前不可发送。
|
||||
|
||||
### TC-CMPP-STATUS-009 慢响应导致窗口占满和状态告警
|
||||
|
||||
- 优先级:P1
|
||||
|
||||
Reference in New Issue
Block a user