Sign inGet Started

SMS 智能编码

排版自动替换可能使 SMS 脱离 GSM-7。文字处理器将 ' 转为 ’,粘贴的文本中包含长破折号,或表单字段中带有不间断空格。这些字符看上去与 GSM-7 字符相似,但一个非 GSM 字符就会将整个正文转为 UCS-2,减少每个分段的容量。

智能编码会在 Bird 将消息交给运营商之前,把这些字符替换为对应的 GSM-7 字符,从而使仅因外观看似非 GSM 的正文保持 GSM-7 编码,并按更少的分段计费。

如何启用

该功能默认关闭,因为它会改变收件人看到的文本。在发送时将 options.smart_encoding 设为 true:

await bird.sms.send({
  to: "+31612345678",
  from: "Bird",
  text: "Your order shipped, track it here…",
  category: "transactional",
  options: { smart_encoding: true },
});

Go 和 PHP SDK 将其作为可空字段,因此不设置该字段时使用 Bird 的默认值,而非发送 false。

智能编码按消息设置。Bird 不提供账户级或发送方级的全局设置。

Bird 何时保留 UCS-2

仅当替换能将整个正文转为 GSM-7 时才会执行替换。如果有任何字符仍在 GSM-7 之外,Bird 会原样发送正文。

单个表情符号、CJK 字符或不在 GSM-7 中的重音字母都会使整条消息保持 UCS-2:

代码示例
{ "text": "Hoe gaat het vandaag? á “" }

“ 可以被替换,但 á 不在 GSM-7 中,且在替换表中没有对应条目,因此该正文以 UCS-2 原样发送。GSM-7 包含 à、ä、å、é、è、ì、ò、ù、ö、ñ、ü,但不包含 á、í 或 ú。

重音字母被有意排除在替换表之外。将 á 折叠为 a 会改变单词本身而非近似表示,这对于使用西班牙语或葡萄牙语的发送者来说是错误的取舍。

Unicode 规范化会影响组合重音。在 NFD 文本中,分解后的 ê 将重音存储为单独的组合标记,因此智能编码会将其转换为 e^。预组合的 ê 保持不变,并使用 UCS-2。

它不做什么

  • 它不会截断正文。超过 12 分段上限的正文会被拒绝并返回 422,而该上限在替换之后计算,因此启用智能编码可以使超限正文降到上限以内。
  • 它不会处理已经是 GSM-7 的正文,因为没有可节省的分段。
  • 除了分段数之外,它不会改变您的计费项目:计数基于实际发送的正文计算。

回读处理结果

消息会报告两部分信息。text 是实际发送的正文,options.smart_encoding 报告生效的设置:

代码示例
{
  "text": "Your order shipped - track it here...",
  "segments": { "count": 1, "encoding": "GSM_7BIT", "characters": 36 },
  "options": { "smart_encoding": true }
}

在您已启用智能编码的发送中,encoding 为 UCS2 表示正文无法转为 GSM-7。要在发送前查看特定消息的处理结果,请将文本粘贴到 SMS 分段计算器中。

完整替换表

替换表列出了智能编码开启时被替换的所有字符。其他字符(包括已在 GSM-7 中的字符)保持不变。

替换结果被替换的字符
空格U+00A0, U+2000, U+2001, U+2002, U+2003, U+2004, U+2005, U+2006, U+2007, U+2008, U+2009, U+200A, U+202F, U+205F, U+3000
!ǃ U+01C3, ︕ U+FE15, ﹗ U+FE57, ! U+FF01
!!‼ U+203C
"« U+00AB, » U+00BB, ʺ U+02BA, ˮ U+02EE, “ U+201C, ” U+201D, „ U+201E, ‟ U+201F, ❝ U+275D, ❞ U+275E, 〝 U+301D, 〞 U+301E, " U+FF02
#﹟ U+FE5F, # U+FF03
$﹩ U+FE69, $ U+FF04
%﹪ U+FE6A, % U+FF05
&﹠ U+FE60, & U+FF06
'` U+0060, ´ U+00B4, ʹ U+02B9, ʻ U+02BB, ʼ U+02BC, ʽ U+02BD, ˈ U+02C8, ˊ U+02CA, ˋ U+02CB, U+0313, U+0314, ‘ U+2018, ’ U+2019, ‛ U+201B, ❛ U+275B, ❜ U+275C, ︐ U+FE10, ︑ U+FE11, ' U+FF07
(❨ U+2768, ❪ U+276A, ⟮ U+27EE, ⦅ U+2985, ﹙ U+FE59, ( U+FF08
)❩ U+2769, ❫ U+276B, ⟯ U+27EF, ⦆ U+2986, ﹚ U+FE5A, ) U+FF09
*⁎ U+204E, ∗ U+2217, ⊛ U+229B, ✢ U+2722, ✣ U+2723, ✤ U+2724, ✥ U+2725, ✱ U+2731, ✲ U+2732, ✳ U+2733, ✺ U+273A, ✻ U+273B, ✼ U+273C, ✽ U+273D, ❃ U+2743, ❉ U+2749, ❊ U+274A, ❋ U+274B, ⧆ U+29C6, ﹡ U+FE61, * U+FF0A
+˖ U+02D6, ﹢ U+FE62, + U+FF0B
,U+0326, ‚ U+201A, 、 U+3001, ﹐ U+FE50, ﹑ U+FE51, , U+FF0C, 、 U+FF64
-‐ U+2010, – U+2013, — U+2014, ― U+2015, • U+2022, ⁃ U+2043, ⎼ U+23BC, ⎽ U+23BD, ﹣ U+FE63, - U+FF0D
.。 U+3002, ﹒ U+FE52, . U+FF0E, 。 U+FF61
...… U+2026
/÷ U+00F7, U+0337, U+0338, ⁄ U+2044, ∕ U+2215, ⧸ U+29F8, / U+FF0F
00 U+FF10
11 U+FF11
1/2½ U+00BD
1/4¼ U+00BC
22 U+FF12
33 U+FF13
3/4¾ U+00BE
44 U+FF14
55 U+FF15
66 U+FF16
77 U+FF17
88 U+FF18
99 U+FF19
:ː U+02D0, ˸ U+02F8, ⦂ U+2982, ꞉ U+A789, ︓ U+FE13, : U+FF1A
;⁏ U+204F, ︔ U+FE14, ﹔ U+FE54, ; U+FF1B
<‹ U+2039, ﹤ U+FE64, < U+FF1C
=U+0347, ꞊ U+A78A, ﹦ U+FE66, = U+FF1D
>› U+203A, ﹥ U+FE65, > U+FF1E
?︖ U+FE16, ﹖ U+FE56, ? U+FF1F
@﹫ U+FE6B, @ U+FF20
Aᴀ U+1D00, A U+FF21
Bʙ U+0299, B U+FF22
Cᴄ U+1D04, C U+FF23
Dᴅ U+1D05, D U+FF24
Eᴇ U+1D07, E U+FF25
Fꜰ U+A730, F U+FF26
Gɢ U+0262, G U+FF27
Hʜ U+029C, H U+FF28
Iɪ U+026A, I U+FF29
Jᴊ U+1D0A, J U+FF2A
Kᴋ U+1D0B, K U+FF2B
Lʟ U+029F, L U+FF2C
Mᴍ U+1D0D, M U+FF2D
Nɴ U+0274, N U+FF2E
Oᴏ U+1D0F, O U+FF2F
Pᴘ U+1D18, P U+FF30
QQ U+FF31
Rʀ U+0280, R U+FF32
Sꜱ U+A731, S U+FF33
Tᴛ U+1D1B, T U+FF34
Uᴜ U+1D1C, U U+FF35
Vᴠ U+1D20, V U+FF36
Wᴡ U+1D21, W U+FF37
XX U+FF38
Yʏ U+028F, Y U+FF39
Zᴢ U+1D22, Z U+FF3A
[[ U+FF3B
\U+20E5, ⧵ U+29F5, ⧹ U+29F9, ﹨ U+FE68, \ U+FF3C
]] U+FF3D
^ˆ U+02C6, U+0302, U+1DCD, ^ U+FF3E
_U+0332, ‗ U+2017, _ U+FF3F
{❴ U+2774, ﹛ U+FE5B, { U+FF5B
|U+20D2, U+20D3, ∣ U+2223, ⎜ U+239C, ⎟ U+239F, ⎸ U+23B8, ⎹ U+23B9, ⏐ U+23D0, | U+FF5C
}❵ U+2775, ﹜ U+FE5C, } U+FF5D
~˜ U+02DC, ˷ U+02F7, U+0303, U+0330, U+0334, ∼ U+223C, ~ U+FF5E
删除U+200B, U+2028, U+2029, U+2060, U+FEFF

各种空白字符变体会被合并为单个空格(U+0020)。最后一行列出的零宽和格式控制字符会被删除而非替换。

后续步骤