SMS

什么是拼接 SMS?

拼接 SMS 是指一条长文本以多条网络消息发送,由接收端手机合并为一条完整消息。

一条长的投递通知在手机上可能看起来像一条短信,但实际上可能产生多个计费单元。每个部分既携带文本内容,也携带标识其在完整消息中位置的信息。

手机如何知道哪些部分需要拼接?

每个部分携带一个共享引用标识、总部分数以及自身在序列中的位置。

这些值与文本一起存放在请求头中。第三代合作伙伴计划的规范 23.040 定义了该机制。手机还会检查各部分是否来自同一发送方和消息中心。

请求头会占用每个部分的部分容量。因此 Bird 对拼接消息的每个部分使用更小的文本配额。

为什么多一个字符就会多出一个分段?

超过单分段限制后,Bird 会使用更小的多部分配额来拆分整个正文。

纯拉丁文本在一个分段中可容纳 160 个字符。较长消息的每个部分可容纳 153 个字符。

160 个普通拉丁字母可放入一个分段。再多一个字母,161 个字母的正文就需要两个部分,分别容纳 153 个和 8 个字母。两个部分都会预留请求头空间,包括第一个。

弯引号等字符会将整条消息切换为更小的配额:70 个字符,或每个部分 67 个。一条包含 70 个拉丁字母和一个弯引号的文本因此需要两个部分。

某些字符在计算这些限制时按双倍计数。GSM-7 与 UCS-2 解释了为什么可见字符数可能低估实际所需空间。

如果某个部分丢失会怎样?

手机在收到所有部分之前无法重建完整文本。

网络将各部分作为独立消息处理,它们的投递可以各自独立完成。某一部分投递成功并不意味着整条文本已送达。

因此,即使你的应用程序已提交了完整正文,不完整的消息仍可能造成投递问题。尽可能将一次性验证码控制在一个分段内,这样接收方无需多个部分即可读取。

Bird 接受多少个部分?

你可以在一个请求中发送最多十二个分段。Bird 会拒绝更长的正文。

这可容纳 1,836 个纯拉丁字符:十二个部分,每部分 153 个。较宽字符集可容纳 804 个:十二个部分,每部分 67 个。按双倍计数的字符(包括部分表情符号)会减少可容纳的文本量。

请求的 text 字段接受一个非空字符串,受十二分段上限约束。超出上限会返回 HTTP 422,表示请求因内容无效而被拒绝。Bird 不会静默截断文本。

如何查看计算结果?

你可以读取消息响应中的 segments 对象,查看 Bird 计算的结果。

  • count 是一个最小值为 1 的整数。发送消息不能超过 12 个。每个部分计为一个计费单元。
  • encodingGSM_7BITUCS2,标识适用的容量。
  • characters 在应用双倍计数规则之前统计字符数。使用 count 来检查计费分段数。

对于较长的模板,请在插入姓名或其他变量文本后检查最终正文。SMS 分段解释了计费计算方式,字符限制指南记录了响应内容。

简而言之

  1. 你只提交一条消息。

    Bird 会将超长正文拆分为多个部分,由接收端手机拼接还原。

  2. 每个部分都需要请求头。

    重组信息会减少每个分段的文本容量,包括第一个分段。

  3. 缺少任何一个部分都无法完成重组。

    手机需要收到所有部分才能显示完整文本。

  4. Bird 将发送消息上限设为十二个分段。

    超长正文会被拒绝并返回 HTTP 422 响应,而不会被截断。

基于同一网络构建。

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

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