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 再转。

这篇指南有帮助吗?

相关指南