IOSOR 知识库
预付费下 DLR 失败重试:何时再试,何时停止烧钱包
失败、拒绝、过期不是同一个词。预付费里每次重试都是借记。先共用状态词典,再写重试上限,避免把钱包烧在死胡同里。
支持票写「失败了」,工程就按重试键,直到预付费钱包空了。失败不是一种状态。undelivered、rejected、expired 要求不同动作。预付费下每次自动重试都是一行借记,不是免费礼貌。先共用词典,再写循环,否则产品在修转化,财务在付死号码的第二、第三次尝试。
IOSOR 是 white-label prepaid:仪表盘、webhook 与导出共用同一套 DLR 词。目录 live 才允许受控重试;in setup 走廊不是「再试一次就会通」。参见 未送达、拒收与过期状态 与 回执、时延与故障转移。月用量接近 USD 1,000+ 时,按状态分桶的重试借记会进入更密的商务复盘。
重试逻辑之前的状态词典
在写重试代码之前,把终端状态印成一张表,产品、运营、财务都能指着同一行说话。没有词典的重试是烧钱循环。低送达处置见 短信低送达率处置手册。
| 状态 | 可否自动重试 | 谁签字 |
|---|---|---|
| Delivered | 否 | 无人 |
| Undelivered / failed | 有上限 | 运营 |
| Rejected | 否(先改载荷) | 产品 |
| Expired | 否(先改 TTL) | 产品 |
失败、拒绝与过期
Failed / undelivered 表示平台已交出,终端未确认。走廊健康时,有上限的重试可能挽回一次转化。Rejected 表示网络或策略在途中拒绝:同样的号码、同样的正文再发,几乎会再拒一次,并再借记一次。Expired 是时间问题:TTL 短于走廊延迟,或队列在发送前堆住。把过期当失败去打重试,只会制造更多过期行。OTP 窗口过了再送达,用户已经走了,钱包却还在付。
重试上限与钱包冲击
给每条消息设自动尝试上限,并把用户点击的重发与系统 failover 分开记账。每次尝试在 ledger 里都要能对上 correlation ID。没有上限的「直到送达」在死走廊上会抽干 prepaid。财务应能导出:目的地、状态、尝试序号、借记额。接近 USD 1,000+ 时,无主的重试循环会变成商务问题,而不只是工单。策略说停时钱包必须停,即使产品还想再试一次。
产品与财务的所有权
产品拥有重试策略:哪些状态允许、TTL、用户重发冷却。财务拥有可见性:每次尝试是否借记、导出能否对上 webhook。运营拥有走廊切片,避免全球平均数掩盖一条坏路由。三方共用同一张表,才能在预付费下决定「再试」还是「停止花费」。不要让支持口头承诺退款,而 ledger 仍按每次尝试扣款。
危险信号
- 只有 sent 与 failed 两个词,却写了自动重试
- 对 rejected 载荷原样连打三次
- 把 expired 当网络故障去打
- 系统 failover 与用户重发混在同一行借记
- 无尝试上限的「直到送达」
- 目录仍 in setup 却承诺重试会修好
- 财务导出看不到尝试序号
开始使用 IOSOR
先把词典补齐:failed、rejected、expired。自动重试要有天花板,让每条失败 DLR 不再开一笔新的 prepaid 扣款。用户重发键与系统尝试分开。用两条 live 走廊、低量证明这个天花板。
IOSOR 要点
失败 DLR 的重试是支出天花板,不是无限循环。
要做:分清终态、限制次数、把用户重发与系统尝试分开导出。不要:把 rejected 或 expired 当成短暂 failed 再转。
这篇指南有帮助吗?
相关指南
- 短代码与免费号码路由的到达率指标对比
分析您白标 CPaaS 控制台中短代码和免费号码的运营商过滤行为、DLR 指标以及吞吐量配置文件。
- 在新通道试点期间建立基准可达性指标
运行严谨的交付测试套件,分析运营商性能,在将白标流量扩展到新通道之前建立基准消息传递指标并配置控制台参数。
- 网络维护后的到达率审计与队列清理
面向平台管理者的分步技术指南,用于在运营商和电信网络维护窗口之后验证路由健康状况并安全清除延迟的 DLR 队列。