Sign inGet Started

L'encodage intelligent SMS

Les substitutions typographiques peuvent faire sortir un SMS du jeu GSM-7. Un traitement de texte transforme ' en ’, du texte collé contient un tiret cadratin, ou un champ de formulaire comporte une espace insécable. Chacun ressemble à un caractère GSM-7, mais un seul caractère non GSM convertit tout le corps du message en UCS-2, ce qui réduit la capacité de chaque segment.

L'encodage intelligent remplace ces caractères par leurs équivalents GSM-7 avant que Bird ne transmette le message à l'opérateur, de sorte qu'un corps qui semblait seulement non GSM reste en GSM-7 et coûte moins de segments.

Activation

Il est désactivé par défaut, car il modifie le texte que votre destinataire reçoit. Définissez options.smart_encoding à true lors d'un envoi :

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

Les SDK Go et PHP acceptent ce champ comme nullable : ne pas le définir utilise la valeur par défaut de Bird au lieu d'envoyer false.

Définissez l'encodage intelligent par message. Bird ne propose pas de réglage global au niveau du compte ou de l'expéditeur.

Quand Bird conserve UCS-2

Le remplacement ne s'applique que s'il convertit la totalité du corps en GSM-7. Si un seul caractère reste en dehors de GSM-7, Bird envoie le corps exactement tel quel.

Un seul emoji, caractère CJK ou lettre accentuée en dehors de GSM-7 maintient le message entier en UCS-2 :

Exemple de code
{ "text": "Hoe gaat het vandaag? á “" }

Le “ est remplaçable, mais á ne figure pas dans GSM-7 et n'a pas d'entrée dans la table : ce corps est donc envoyé tel quel en UCS-2. GSM-7 inclut à, ä, å, é, è, ì, ò, ù, ö, ñ, ü mais pas á, í ni ú.

Les lettres accentuées sont volontairement absentes de la table. Réduire á à a changerait le mot au lieu de l'approximer, ce qui est un mauvais compromis pour un expéditeur écrivant en espagnol ou en portugais.

La normalisation affecte les accents combinants. Dans un texte NFD, un ê décomposé stocke l'accent comme un signe combinant séparé, et l'encodage intelligent le convertit en e^. Un ê précomposé reste inchangé et utilise UCS-2.

Ce qu'il ne fait pas

  • Il ne tronque jamais. Un corps dépassant la limite de 12 segments est rejeté avec une 422, et la limite est mesurée après remplacement : activer l'option peut donc ramener un corps trop long en dessous de la limite.
  • Il ne touche pas un corps déjà en GSM-7, qui n'a aucun segment à économiser.
  • Il ne change pas ce qui vous est facturé au-delà du nombre de segments : le nombre est calculé à partir du corps tel qu'envoyé.

Consulter ce qui s'est passé

Le message rapporte les deux volets. text est le corps tel qu'envoyé, et options.smart_encoding indique le réglage appliqué :

Exemple de code
{
  "text": "Your order shipped - track it here...",
  "segments": { "count": 1, "encoding": "GSM_7BIT", "characters": 36 },
  "options": { "smart_encoding": true }
}

Un encoding à UCS2 sur un envoi pour lequel vous avez activé l'option indique que le corps n'a pas pu être ramené en GSM-7. Pour voir ce qui se passerait avec un message donné avant de l'envoyer, collez le texte dans le calculateur de segments SMS.

La table complète de remplacement

La table de remplacement répertorie chaque caractère modifié lorsque l'encodage intelligent est activé. Les autres caractères, y compris ceux déjà présents dans GSM-7, restent inchangés.

RemplacementCaractères remplacés
espaceU+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
suppriméU+200B, U+2028, U+2029, U+2060, U+FEFF

Les variantes d'espaces sont réduites à une seule espace (U+0020). La dernière ligne répertorie les caractères de largeur nulle et de mise en forme qui sont supprimés au lieu d'être remplacés.

Étapes suivantes