通信接入
短信状态回执缺失、重复或晚到,应该怎样排查?
短信发出后,通道会把"是否送达"的状态返回给业务系统,这条返回称为状态回执。网络波动、接口处理异常或业务系统写入失败,都可能让回执缺失、重复到达或延迟到达。排查时最关键的一点,是把"短信是否发出"与"回执是否进入业务系统"分成两步看,否则容易误判为发送失败而重复补发。本文给出一套可直接套用的排查顺序、提交技术支持所需的信息清单,以及重发前的确认要点。
先分清"短信没发出",还是"回执没收到"
这两件事的处理方式完全不同,却最容易被混为一谈。
看到"没有状态",先别急着重发——它可能只是回执没回来,短信其实早到了用户手机上。
怎么判断:如果平台侧显示"已送达",说明短信发出去了,问题出在回执往业务系统回传这一段;如果平台侧也查不到,才可能是没受理。
先认识三个词,后面的内容都靠它们串起来:通道指短信实际发出的链路;流水号指每条短信在平台侧的唯一编号;回执指通道把"是否送达"返回给业务系统的那条状态。
三种常见现象,可以对照着看:
● 缺失:平台显示已送达,业务系统里却没有记录
● 重复:同一条回执被推送了多次,通知或统计被重复计算
● 晚到:日报已经生成,回执才到达,归属哪一天成了问题
需要提前说明的是:网络波动可能造成同一条状态被重复推送,业务系统需要具备"同一条回执只处理一次"的能力;批量发送时,多个接收号码可能共用一个批次编号,因此不能只凭批次编号判断是否为重复。
判断卡在哪一环,可以对照下面这张表:
| 环节 | 发生什么 | 出问题时的表现 |
|---|---|---|
| 提交发送 | 业务系统把短信交给通道 | 请求超时,不确定是否已受理 |
| 通道返回状态 | 通道把是否送达的结果回传给业务系统 | 回执缺失、重复推送或延迟到达 |
| 业务系统记录 | 系统把状态写入对应订单或预约记录 | 回执收到了,但业务记录没更新 |
排查前,先备好这四类信息
排查回执问题,本质上是"找到同一次发送,再逐环节核对"。下面四类信息建议在日常就留存,不要等到出问题再补。
为什么这四类缺一不可:只知道业务编号,找不到是哪一次发送;只知道流水号,无法判断这条状态该更新哪条订单;不记录"收到时间",就无法区分是通道晚发还是系统晚收。
具体的字段名称、可查询的时间范围、接口校验方式和重试规则,各通道并不一致,需要在项目对接时逐一确认
| 记录环节 | 需要保留的信息 | 用来核对什么 |
|---|---|---|
| 业务事件 | 订单或预约编号、通知用途、通知版本 | 这次通知是为什么产生的 |
| 发送请求 | 业务请求编号、平台流水号、接收号码、提交时间 | 区分是新发送,还是同一次请求的重试 |
| 状态回执 | 原始状态、状态生成时间、本方收到时间、接收响应 | 判断延迟发生在通道侧还是接收链路 |
| 业务处理 | 关联记录、处理结果、去重标记、处理时间 | 检查是否更新错记录或重复计数 |
按现象一步步查
建议先挑一条有明确业务编号的样本,沿同一条链路逐环节核对。同时检索多个项目或跨日期一起查,很容易把另一次发送的状态当成当前结果,越查越乱。
其中"发送成功但用户没操作"这一行尤其容易被误判:回执显示送达,只说明消息到达了手机;用户是否看到、是否愿意操作,属于业务环节,两者不要混在一起判断。逐项核对时可以参照下面这张表:
| 现象 | 第一步 | 下一步 |
|---|---|---|
| 请求超时、未拿到发送结果 | 保存原请求内容与时间,确认是否已被受理 | 用通道支持的查询方式核实;确认未受理后再决定是否重发 |
| 平台有最终状态,本地没有 | 查看回执是否到达、接收响应是否正常 | 检查接口校验、数据解析、队列和业务写入环节,补处理原记录 |
| 回执晚到,日报已经生成 | 分别记录发送时间、状态生成时间、本方收到时间 | 按事先约定补记或重算,并注明统计截止时间的变化 |
| 发送成功但用户没操作 | 确认回执只描述"是否送达"这一环节 | 转查业务页面或订单状态,不能推断用户已阅读 |
回执异常时,可以直接补发吗
不建议。回执出问题和短信没发出,是两件事。
补发前建议先确认业务本身是否仍需要这条通知。这里要区分两个动作:补齐回执是把缺失的状态补上,属于状态修复;重新发送是产生一次新的触达,属于业务决策。两者需要分别确认,不能因为"看不到回执"就自动触发重发。
补发前建议先确认业务本身是否仍需要这条通知。这里要区分两个动作:补齐回执是把缺失的状态补上,属于状态修复;重新发送是产生一次新的触达,属于业务决策。两者需要分别确认,不能因为"看不到回执"就自动触发重发。
| 业务情形 | 是否仍需要原通知 |
|---|---|
| 会员预约已取消 | 不需要,原内容已失效 |
| 到店时间已改期 | 旧内容不准确,应发送新版本提醒 |
| 验证码已过期 | 不需要,用户重新获取即可 |
找我们支持时,可以先准备这些信息
信息越完整,定位越快。建议按下面清单准备一个"最小问题包":
| 检查项 | 填写或判断方法 | 验收依据 |
|---|---|---|
| 回执缺失 | 分别核对平台状态、回执接收、业务处理三个环节 | 能定位卡在哪个环节,并给出补记录方式 |
| 回执重复 | 统计同一流水号对应的回执次数与最终状态 | 重复回执不再重复触发通知或重复计数 |
| 回执晚到 | 区分发送时间、状态生成时间、本方收到时间 | 能区分是通道处理延迟还是本方接收延迟,并确定日期归属规则 |
上线前,先验证这三种情况
业务系统能正常接收一条回执,还不代表异常情况下也能正确处理。建议在测试环境用指定的测试号码和测试业务事件验证下面三种情况,不要拿真实客户名单反复试。
这三个场景覆盖了回执异常的绝大多数情况。如果都能正确处理,说明恢复路径是可靠的;任何一项没通过,建议先修复再上线,避免正式发送时状态错乱。
| 测试场景 | 怎么测 | 通过标准 |
|---|---|---|
| 重复回执 | 把同一条测试回执再次交给处理程序 | 通知没有重复发出,送达统计没有重复增加 |
| 延迟回执 | 先保留"状态未知",之后再补入最终状态 | 状态关联到原业务记录,报表按约定的日期归属更新 |
| 先写入后中断 | 模拟通道未收到确认而再次推送 | 已落地的记录能被识别,不重复触发业务动作 |
常见问题
回执重复是否表示用户收到了两条短信?
不一定。多数情况是同一条状态被重复推送,而不是短信发了两遍。需要比较发送流水号、接收号码和实际发送记录,不能用回执条数直接推断发送次数。
回调接口返回成功,业务记录为什么还没更新?
收到回执和业务记录更新是两个步骤。建议检查回执是否已保存、是否进入正确的处理任务、是否完成解析与更新,并确认处理失败后有可恢复的记录。
看不到回执可以直接换通道补发吗?
不建议。先核对原通道状态和业务有效性,再按项目约定决定是否切换。否则可能出现两个通道都发送成功,用户收到两次提醒。
晚到回执算哪一天的送达量?
没有脱离统计目的的统一答案。按发送批次分析,通常归入发送日;按接口运维观察,通常按收到日统计。选定后在报表中写明时区、截止时间和补记规则即可。
