SMS

什么是 SMSC?

SMSC 是一种网络服务,负责存储短信并将其转发投递。

即使发送方更早提交了短信,手机重新连接后仍然可以收到它。

存储转发是什么意思?

消息中心在尝试将短信投递到手机之前先保存它。

网络接受消息并不意味着手机已经收到短信。关机或不可达的手机会导致消息处于等待状态。手机重新连接后可以再次尝试投递。消息必须在该次尝试时仍然有效。

3GPP 规范 23.040 描述了消息中心在 SMS 中的角色。

消息可以等待多长时间?

在消息的投递窗口仍然有效期间,网络可以继续尝试投递。该窗口称为有效期。

SMS 标准允许发送方指定有效期。你的服务商决定是否允许你通过其 API 设置该值。

当该窗口关闭时,投递可能以过期结束。过期报告并不意味着最初的发送请求失败了。

对于时间敏感的流程,应用本身的截止时间仍然需要强制执行。如果一个验证码的有效期为十分钟,但在四小时后才送达,你的服务器必须拒绝它。迟到的短信不能延长它所描述的操作的生命周期。

消息中心相对于我的应用在哪里?

你的应用可以通过消息服务商连接消息中心,而不必自行管理运营商连接。

服务商使用 SMPP 将短信传递给消息中心,可以直接传递,也可以通过其他路由服务。SMPP 参考文档描述了这些连接。

你的服务商可以在下一个网络服务接受消息之前就确认请求。消息中心随后可以在手机收到短信之前接受它。每次确认描述的是传输过程中的一个阶段。

已接受但未投递解释了这些阶段在应用中的表现。

通过 Bird 我可以观察到什么?

你可以查看运营商交接和已报告的投递状态,而无需自行连接消息中心。

消息响应的 sent_at 记录 Bird 将消息交给运营商的时间。delivered_at 记录确认投递的时间。两个字段都包含时间戳或 null。投递时间缺失并不意味着手机拒绝了短信。

Bird 的发送端点会以 HTTP 422 SMSUnsupportedFeature 拒绝 validity_period。你无法通过该字段设置运营商的保留窗口。响应不会返回该字段。

Bird 在运营商报告过期时发出 sms.expired。缓冲回执(即运营商暂存短信)不会产生公开的状态变化。投递回执解释了哪些网络报告会到达你的应用。

这对发送流程有什么影响?

你的应用需要将投递作为一个后续事件来处理,其结果独立于提交。

将待定结果与失败区分开。在你的应用中对验证码和其他时间敏感操作强制执行截止时间。将投递回执视为网络对投递的报告,它并不能证明有人阅读了短信。

简而言之

  1. 接受与投递是分开的。

    消息中心可以在收件人手机可达之前就接受短信。

  2. 存储为投递提供了再次机会。

    等待中的短信可以在手机重新连接后送达,前提是投递窗口仍然有效。

  3. 投递窗口是有限的。

    当等待期结束时,网络可以报告消息过期。

  4. 你的集成无需直接连接。

    消息服务商可以处理你的应用与运营商网络之间的连接。

基于同一网络构建。

测试 API 密钥即刻获取。添加付款方式并验证发送者身份后,即可解锁生产环境。

你的下一个创意。
随时连接。