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 },
});client.sms.send(
to="+31612345678",
from_="Bird",
text="Your order shipped, track it here…",
category="transactional",
smart_encoding=True,
)_, err := client.Sms.Send(context.Background(), bird.SmsSendParams{
To: "+31612345678",
From: "Bird",
Text: "Your order shipped, track it here…",
Category: bird.SMSCategoryTransactional,
SmartEncoding: bird.Bool(true),
})$bird->sms->send(
to: '+31612345678',
from: 'Bird',
text: 'Your order shipped, track it here…',
category: 'transactional',
smartEncoding: true,
);bird sms send \
--category transactional \
--from Bird \
--smart-encoding=true \
--text 'Your order shipped, track it here…' \
--to +31612345678curl -X POST https://eu1.platform.bird.com/v1/sms/messages \
-H "Authorization: Bearer bk_eu1_..." \
-H "Content-Type: application/json" \
-d '{
"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:
{ "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:
{
"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.
| Vervanging | Vervangen tekens |
|---|---|
| spatie | 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 |
0 | 0 U+FF10 |
1 | 1 U+FF11 |
1/2 | ½ U+00BD |
1/4 | ¼ U+00BC |
2 | 2 U+FF12 |
3 | 3 U+FF13 |
3/4 | ¾ U+00BE |
4 | 4 U+FF14 |
5 | 5 U+FF15 |
6 | 6 U+FF16 |
7 | 7 U+FF17 |
8 | 8 U+FF18 |
9 | 9 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 |
Q | Q 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 |
X | X 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 |
| verwijderd | U+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
- Tekenlimieten: bekijk GSM-7, UCS-2 en segmentlimieten.
- SMS versturen: schakel slimme codering in bij een verzending.
- SMS-segmentcalculator: controleer een bericht voordat je het verstuurt.
Gerelateerde bronnen
Ga verder met de documentatie, handleidingen en voorbeelden voor dit onderwerp.