Sign inGet Started

Slimme codering voor SMS

Typografische substituties kunnen een SMS uit GSM-7 duwen. Een tekstverwerker verandert ' in ’, geplakte tekst bevat een em-streepje, of een formulierveld bevat een vaste spatie. Elk teken lijkt op een GSM-7-teken, maar één niet-GSM-teken converteert de hele body naar UCS-2, waardoor de capaciteit van elk segment afneemt.

Slimme codering vervangt die tekens door hun GSM-7-equivalenten voordat Bird het bericht aan de carrier overdraagt. Zo blijft een body die er alleen niet-GSM uitzag op GSM-7 staan en wordt hij als minder segmenten gefactureerd.

Inschakelen

Het staat standaard uit, omdat het de tekst verandert die je ontvanger leest. Zet options.smart_encoding op true bij een verzending:

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

De Go- en PHP-SDK's nemen het als een nullable veld, dus als je het niet instelt wordt de standaardwaarde van Bird gebruikt in plaats van false te sturen.

Stel slimme codering per bericht in. Bird biedt geen accountbrede of per-afzenderinstelling.

Wanneer Bird UCS-2 behoudt

Vervanging vindt alleen plaats als het de hele body naar GSM-7 converteert. Als er een teken buiten GSM-7 overblijft, stuurt Bird de body exact zoals aangeleverd.

Eén emoji, CJK-teken of letter met accent buiten GSM-7 houdt het hele bericht in UCS-2:

Codevoorbeeld
{ "text": "Hoe gaat het vandaag? á “" }

De “ is vervangbaar, maar á zit niet in GSM-7 en heeft geen vermelding in de tabel, dus deze body wordt ongewijzigd als UCS-2 verstuurd. GSM-7 omvat à, ä, å, é, è, ì, ò, ù, ö, ñ, ü maar niet á, í of ú.

Letters met accenten ontbreken bewust in de tabel. á omzetten naar a zou het woord veranderen in plaats van benaderen, en dat is de verkeerde afweging voor een afzender die Spaans of Portugees schrijft.

Normalisatie beïnvloedt combinerende accenten. In NFD-tekst slaat een gedecomposeerde ê het accent op als een apart combinerend teken, waardoor slimme codering het naar e^ converteert. Een voorgecomposeerde ê blijft ongewijzigd en gebruikt UCS-2.

Wat het niet doet

  • Het kapt nooit af. Een body boven de limiet van 12 segmenten wordt afgewezen met een 422, en de limiet wordt gemeten na vervanging, dus inschakelen kan een te grote body eronder brengen.
  • Het raakt een body die al GSM-7 is niet aan, want daar zijn geen segmenten mee te besparen.
  • Het verandert niet waarvoor je wordt gefactureerd, behalve het aantal segmenten: het aantal wordt berekend op basis van de body zoals verstuurd.

Uitlezen wat er is gebeurd

Het bericht rapporteert beide kanten. text is de body zoals verstuurd, en options.smart_encoding rapporteert de instelling die is toegepast:

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

Een encoding van UCS2 bij een verzending waarvoor je had ingeschakeld, geeft aan dat de body niet naar GSM-7 gebracht kon worden. Om te zien wat er met een specifiek bericht zou gebeuren voordat je het verstuurt, plak je de tekst in de SMS-segmentcalculator.

De volledige vervangingstabel

De vervangingstabel bevat elk teken dat wordt gewijzigd wanneer slimme codering is ingeschakeld. Andere tekens, inclusief tekens die al in GSM-7 zitten, blijven ongewijzigd.

VervangingVervangen tekens
spatieU+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
verwijderdU+200B, U+2028, U+2029, U+2060, U+FEFF

Witruimtevarianten worden samengevoegd tot één spatie (U+0020). De laatste rij bevat tekens met nulbreedte en opmaaktekens die worden verwijderd in plaats van vervangen.

Volgende stappen