Sign inGet Started

Inteligentne kodowanie SMS

Typograficzne podstawienia mogą wypchnąć SMS poza GSM-7. Edytor tekstu zamienia ' na ’, wklejony tekst zawiera pauzę, a pole formularza przenosi niełamliwą spację. Każdy z tych znaków wygląda podobnie do znaku GSM-7, ale jeden znak spoza GSM konwertuje całą treść na UCS-2, zmniejszając pojemność każdego segmentu.

Inteligentne kodowanie zastępuje te znaki ich odpowiednikami GSM-7, zanim Bird przekaże wiadomość operatorowi. Dzięki temu treść, która jedynie wyglądała na spoza GSM, pozostaje w GSM-7 i jest rozliczana jako mniej segmentów.

Włączanie

Domyślnie jest wyłączone, ponieważ zmienia tekst, który odczytuje odbiorca. Ustaw options.smart_encoding na true przy wysyłce:

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

SDK Go i PHP przyjmują tę wartość jako pole nullable, więc pozostawienie go nieustawionego powoduje użycie domyślnej wartości Bird zamiast wysłania false.

Ustawiaj inteligentne kodowanie osobno dla każdej wiadomości. Bird nie udostępnia ustawienia na poziomie konta ani nadawcy.

Kiedy Bird zachowuje UCS-2

Zamiana ma zastosowanie tylko wtedy, gdy konwertuje całą treść na GSM-7. Jeśli jakikolwiek znak pozostaje poza GSM-7, Bird wysyła treść dokładnie tak, jak została dostarczona.

Pojedyncze emoji, znak CJK lub litera z akcentem spoza GSM-7 powoduje, że cała wiadomość pozostaje w UCS-2:

Przykład kodu
{ "text": "Hoe gaat het vandaag? á “" }

Znak “ można zastąpić, ale á nie należy do GSM-7 i nie ma wpisu w tabeli, więc ta treść jest wysyłana bez zmian jako UCS-2. GSM-7 obejmuje à, ä, å, é, è, ì, ò, ù, ö, ñ, ü, ale nie á, í ani ú.

Litery z akcentami celowo nie znajdują się w tabeli. Zamiana á na a zmieniałaby słowo, zamiast je przybliżać, a to zły kompromis dla nadawcy piszącego po hiszpańsku lub portugalsku.

Normalizacja wpływa na łączone akcenty. W tekście NFD zdekomponowany ê przechowuje akcent jako osobny combining mark, więc inteligentne kodowanie konwertuje go na e^. Złożony ê pozostaje bez zmian i używa UCS-2.

Czego nie robi

  • Nigdy nie obcina treści. Treść przekraczająca limit 12 segmentów jest odrzucana z błędem 422. Limit jest mierzony po zamianie, więc włączenie tej opcji może zmieścić zbyt dużą treść w limicie.
  • Nie modyfikuje treści, która jest już w GSM-7, bo nie ma w niej segmentów do zaoszczędzenia.
  • Nie zmienia tego, za co płacisz, poza liczbą segmentów: liczba ta jest obliczana na podstawie treści w postaci wysłanej.

Odczytywanie informacji o tym, co się wydarzyło

Wiadomość raportuje obie strony. text to treść w postaci wysłanej, a options.smart_encoding podaje zastosowane ustawienie:

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

Wartość encoding równa UCS2 przy wysyłce z włączoną opcją oznacza, że treści nie udało się sprowadzić do GSM-7. Aby sprawdzić, co stanie się z konkretną wiadomością przed wysłaniem, wklej tekst do kalkulatora segmentów SMS.

Pełna tabela zamian

Tabela zamian zawiera każdy znak zamieniany przy włączonym inteligentnym kodowaniu. Pozostałe znaki, w tym te już należące do GSM-7, nie są zmieniane.

ZamiennikZamieniane znaki
spacjaU+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
usunięteU+200B, U+2028, U+2029, U+2060, U+FEFF

Warianty białych znaków są zwijane do pojedynczej spacji (U+0020). Ostatni wiersz zawiera znaki o zerowej szerokości i znaki formatowania, które są usuwane, a nie zastępowane.

Następne kroki