什么是 SMS 分段,为什么一条消息收了三段的费用?

SMS 分段是一条 SMS 短信的一个计费单位,因此三个分段按三个单位收费。

手机可以将一条长文本显示为一条消息,即使网络实际传输了多个分段。用于编码文本的字母表决定了 Bird 按多少个分段收费。

什么是分段?

分段是一条网络消息能承载的最大文本片段。纯拉丁文本每个分段可容纳 160 个字符。如果消息中包含哪怕一个超出该字符集的字符,例如 emoji、弯引号或大多数带重音的字母,则每个分段只能容纳 70 个字符。

当一条消息需要多个分段时,每个分段会让出少量空间给手机用于重组的请求头:纯文本每段 153 个字符,宽字符集每段 67 个字符。因此 161 个纯字母需要两个分段,第一段装 153 个,第二段装 8 个。

Bird 将纯文本按 GSM-7 字母表计数,其余内容按 UCS-2 计数,这是运营商接受的两种编码。即使在 GSM-7 中也有少数字符按双倍计数,部分 emoji 在 UCS-2 中同样按双倍计数;编码页面列出了这些字符。

为什么一条消息收了三段的费用?

Bird 按分段数收费,因此一条三段消息按适用费率收取三个单位的费用。

Bird 在接受发送请求时计算分段数。目的地、消息类别和发送方类型也会影响适用价格。请查看 SMS 定价了解您所用线路的费率。

例如,150 个普通拉丁字母可装入一个分段。加上一个笑脸 emoji,整条消息就会使用 UCS-2。该 emoji 按双倍计数,总数变为 152。将 152 除以多段容量 67,需要三个分段。

哪些字符会改变编码?

GSM-7 之外的任何字符都会将整条消息切换到 UCS-2。

直引号在 GSM-7 中。弯引号则不在。字母 é 和 ü 在其中。字母 á、í 和 ú 则不在。中文、日文、韩文、阿拉伯文、泰文和印地文也需要使用宽编码。

插入模板中的姓名或产品名称可能因此改变整条消息的编码。请在插入这些值之后检查完整文本。

为什么字符计数的结果不一样?

部分字符在分段限额中按双倍计数。

GSM-7 将 €、[、]、{、}、\、~、^ 和 | 各计为两个字符。换页符(用于请求分页)同样按双倍计数。因此 80 个欧元符号刚好填满一个分段。

一条包含 159 个普通拉丁字母加上 € 的消息有 160 个字符,但在限额中计为 161,因此需要两个分段。

部分 emoji(例如 😀)在 UCS-2 中按双倍计数。35 个这样的 emoji 刚好填满一个分段。编码页面列出了需要特别注意的字符。

如何在 Bird 中检查分段数?

您可以从消息响应的 segments 对象中读取计算后的分段数。

  • count 是一个最小值为 1 的整数。每个计入的分段都是一个计费单位。发出消息的上限为 12 段。超出长度的消息会收到 HTTP 422,请求被拒绝且文本不会被截断。
  • encoding 为 GSM_7BIT 或 UCS2,标识适用的容量。
  • characters 统计应用双倍计数规则之前的文本字符数。使用 count 来检查计费分段数。

如果消息必须控制在一个分段内,请在准备好完整消息体之后检查 count。将插入的姓名包含在内,并将 😀 等字符按双倍计数。

您还可以将 options.smart_encoding 设置为 true 或 false,默认值为 false。启用后,仅当整条结果可以放入 GSM-7 时,才会替换支持的标点。消息体中如有 emoji 则会阻止所有替换。智能编码解释了该行为。

字符限制指南记录了计数规则和响应字段。

简而言之

  1. 每个分段都是一个计费单位。

    一条被拆分为三个分段的消息按适用费率收取三个单位的费用。

  2. 编码方式决定容量。

    只要有一个字符不在紧凑的 SMS 字母表中,整条消息就会切换到 Unicode 编码。

  3. 部分字符按双倍计数。

    一个欧元符号在限额中算两个字符。部分 emoji 同样按双倍计数。

  4. 每个多段分段都会预留请求头空间。

    拆分会减少每个分段的可用容量,包括第一个。

基于同一网络构建。

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

Start building with Bird in minutes.