Podczas budowania zautomatyzowanych systemów lub wysyłania powiadomień do klientów, wielu właścicieli firm i programistów jest zszokowanych, gdy ich miesięczne rachunki za SMS-y okazują się dwa razy wyższe niż oczekiwano. Ten kompleksowy przewodnik zawiera tabelę z liczbą znaków, jaką zajmują znaki specjalne przy wysyłaniu SMS-ów, co pomoże Ci zrozumieć, jak ukryte zmiany kodowania mogą drastycznie zwiększyć koszty wiadomości.

Dlaczego znaki specjalne zmieniają długość i koszt SMS-ów

W standardach telekomunikacyjnych wiadomości tekstowe nie są rozliczane na podstawie surowej liczby napisanych słów, ale według "segmentów". Standardowy segment SMS jest kodowany przy użyciu zestawu znaków GSM-7, który pozwala na użycie do 160 znaków w wiadomości. Jednak w momencie, gdy wprowadzisz choćby jeden znak spoza tego standardowego zestawu — taki jak emoji, cyrylica, a nawet ozdobny cudzysłów skopiowany z programu Microsoft Word — kodowanie całej wiadomości zmienia się na UCS-2 (Unicode).

Przekonanie, że przy kodowaniu UCS-2 wiadomości SMS są ograniczone do 160 znaków, nawet gdy zawierają znaki specjalne i emoji, jest powszechnym błędem. W rzeczywistości, po wykryciu jednego znaku spoza zestawu GSM, maksymalny limit znaków na segment spada natychmiast ze 160 znaków do zaledwie 70 znaków. Jeśli Twoja wiadomość ma 71 znaków i zawiera jedno emoji, zostanie podzielona i rozliczona jako dwa osobne segmenty SMS przez tradycyjnych dostawców API, takich jak Twilio czy Plivo.

Zrozumienie, jakie znaki specjalne zazwyczaj wpływają na wiadomości, ma kluczowe znaczenie dla utrzymania niskich kosztów operacyjnych, zwłaszcza jeśli prowadzisz lokalną firmę usługową, taką jak klinika, salon czy warsztat, wysyłając przypomnienia o wizytach do swoich klientów.

Wyjaśnienie kodowania GSM-7 vs. UCS-2

GSM-7 to 7-bitowy standard kodowania znaków zaprojektowany specjalnie dla SMS-ów. Zawera większość znaków łacińskich, cyfr i podstawowych znaków interpunkcyjnych. UCS-2 to 16-bitowy standard kodowania, który może reprezentować niemal każdy znak w dowolnym języku, w tym emoji, ale wymaga dwukrotnie większej ilości danych na znak. Ten narzut danych jest powodem, dla którego sieci operatorów zmniejszają pojemność segmentu do 70 znaków po aktywacji kodowania UCS-2.

Kompleksowa tabela mapowania znaków specjalnych SMS

Poniżej znajduje się tabela z liczbą znaków, jaką zajmują znaki specjalne przy wysyłaniu SMS-ów. Tabela ta przedstawia standardowe znaki GSM-7, znaki rozszerzone GSM-7 (które wymagają 2 miejsc znakowych w limicie 160 znaków) oraz znaki UCS-2, które wymuszają rygorystyczny limit 70 znaków.

Kategoria znakówPrzykładowe znakiBity na znakWaga znaku w SMSMaksymalny limit segmentu
GSM-7 PodstawowyA-Z, a-z, 0-9, spacje, prosta interpunkcja (., !, ?, @, $, itp.)7 bitów1 znak160 znaków
GSM-7 Rozszerzony^, {, }, [, ], ~, |, \, €14 bitów2 znaki160 znaków (każdy rozszerzony znak liczy się jako 2)
UCS-2 (Unicode)á, í, ó, ñ, ’ (inteligentny cudzysłów), emoji (😀), cyrylica, arabski16 bitówWymusza kodowanie Unicode dla całej wiadomości70 znaków

Jak pokazano w tabeli, użycie rozszerzonego znaku GSM-7, takiego jak nawias klamrowy "{" lub ukośnik wsteczny "\", nie wymusza kodowania Unicode, ale liczy się jako dwa znaki w limicie 160 znaków. Jednak użycie znaku spoza zestawu GSM, takiego jak "á" (często używanego w hiszpańskich konfiguracjach sms y caracteres especiales) lub zakrzywionego apostrofu "’", natychmiast zmniejszy limit segmentu wiadomości do 70 znaków.

Jak znaki specjalne wpływają na koszty SMS-ów

Aby zrozumieć los caracteres especiales que impacto tienen en el coste de los sms (wpływ znaków specjalnych na koszt SMS-ów), przyjrzyjmy się praktycznemu przykładowi. Wyobraź sobie, że prowadzisz klinikę stomatologiczną i wysyłasz następujące przypomnienie o wizycie:

"Hi John, your appointment is scheduled for tomorrow at 3:00 PM. Please reply to confirm or call us if you need to reschedule! Él"

Ta wiadomość ma 123 znaki. Jeśli użyjesz standardowego "E" zamiast akcentowanego "É", wiadomość zostanie wysłana w kodowaniu GSM-7. Zmieści się bez problemu w limicie 160 znaków, kosztując dokładnie 1 segment SMS.

Jednak z powodu akcentowanego "É", wiadomość zostaje wymuszona do kodowania UCS-2. Limit segmentu wynosi teraz 70 znaków. Twoja 123-znakowa wiadomość zostaje podzielona na dwa segmenty (pierwszy segment ma 67 znaków, drugi 56 znaków ze względu na nagłówki segmentacji). Tradycyjne bramki API naliczą opłatę za 2 wiadomości SMS zamiast 1.

Jeśli korzystasz z tradycyjnych dostawców, ta segmentacja może podwoić lub potroić Twój miesięczny rachunek. Dlatego wiele firm szuka alternatywy dla Twilio lub korzysta z przewodnika po najtańszych API SMS, aby uniknąć arbitralnych dopłat opartych na segmentach.

Jak unikać znaków specjalnych w SMS-ach?

Jeśli chcesz utrzymać swoje wiadomości w limicie 160 znaków i uniknąć nieoczekiwanych kosztów, musisz aktywnie oczyszczać treść swoich SMS-ów. Oto skuteczne strategie na to, jak unikać znaków specjalnych w SMS-ach:

  1. Oczyszczaj skopiowany tekst: Wiele szablonów CRM zawiera „inteligentne” znaki interpunkcyjne. Na przykład skopiowany apostrof (’) lub przecinek z edytora tekstu sformatowanego może uniemożliwić prawidłowe dostarczenie lub wywołać kodowanie Unicode. Jako rzeczywisty przykład, niektóre wewnętrzne systemy korporacyjne wyświetlają doradcom krótkie ostrzeżenie: "outbound sms special characters please be aware that any outbound sms sent must be 250 characters or fewer. if your message has been copied & pasted from a saved template and contains a comma (,) or apostrophe ('), please remove the special character and then re-enter it before sending". Zastąpienie inteligentnych cudzysłowów standardowymi prostymi cudzysłowami (') zapewnia zgodność z GSM-7.
  2. Programowo zastępuj znaki spoza zestawu GSM: Jeśli Twój system dynamicznie generuje SMS-y, zaimplementuj funkcję transliteracji, aby zamieniać znaki takie jak "á" na "a", "é" na "e" oraz "“" na """.
  3. Obsługuj ograniczenia specyficzne dla platformy: Jeśli programujesz na korporacyjnych platformach low-code, zwracaj uwagę na sposób, w jaki obsługują one kodowanie, np. zarządzając znakami specjalnymi w integracjach GSM OutSystems, gdzie zmienne tekstowe mogą automatycznie konwertować standardową interpunkcję na odpowiedniki Unicode podczas serializacji JSON.

Fragment kodu w języku Python do oczyszczania tekstu SMS

Oto prosta funkcja w języku Python do usuwania znaków specjalnych, których SMS nie rozpoznaje lub które wymusiłyby kosztowne kodowanie UCS-2:

import unicodedata

def sanitize_for_gsm7(text):
    # Map common smart punctuation to GSM-7 equivalents
    replacements = {
        '\u2018': "'", '\u2019': "'", # Smart single quotes
        '\u201c': '"', '\u201d': '"', # Smart double quotes
        '\u2013': '-', '\u2014': '-', # En and em dashes
        '\u20ac': 'EUR'               # Replace Euro sign if needed
    }
    for unicode_char, gsm_char in replacements.items():
        text = text.replace(unicode_char, gsm_char)
    
    # Normalize accents (e.g., é to e)
    normalized = unicodedata.normalize('NFD', text)
    gsm7_text = "".join([c for c in normalized if not unicodedata.combining(c)])
    return gsm7_text

message = "Hello! Your appointment is confirmed for tomorrow é."
print(sanitize_for_gsm7(message))
# Output: "Hello! Your appointment is confirmed for tomorrow e."


Eliminacja obaw związanych z kodowaniem dzięki MySMSGate

Dla lokalnych firm usługowych, szkół i klinik martwienie się o kodowanie znaków, limity segmentów i skomplikowane struktury bilingowe to niepotrzebny ból głowy. W tym miejscu kluczowy staje się wybór między tradycyjną bramką SMS a API SMS.

MySMSGate całkowicie rozwiązuje ten problem. Zamiast kierować wiadomości przez kosztowne sieci operatorów z rygorystycznymi cennikami opartymi na liczbie segmentów, MySMSGate zmienia Twój własny telefon z systemem Android i kartę SIM w bramkę SMS.

Oto jak MySMSGate zmienia reguły gry dla firm dbających o koszty:

  • Stała stawka (Flat Rate): Pobieramy stałą opłatę w wysokości 0,02 USD za wysłaną wiadomość, niezależnie od jej długości, kodowania znaków czy liczby segmentów. Nie musisz się martwić, czy emoji lub akcentowany znak podwoi Twój rachunek.
  • Używaj własnego numeru: Wiadomości są wysyłane bezpośrednio z karty SIM Twojego telefonu z systemem Android. Twoi klienci widzą lokalny, rozpoznawalny numer telefonu, co zwiększa wskaźnik odpowiedzi i otwarć.
  • Brak skomplikowanych rejestracji: Unikaj skomplikowanych rejestracji 10DLC, zatwierdzeń operatorów i miesięcznych opłat za markę, które są powiązane z tradycyjnymi interfejsami API, takimi jak Twilio.
  • Obsługa Dual SIM i wielu urządzeń: Zarządzaj wieloma telefonami i kartami SIM z jednego panelu, wybierając dokładnie, z której linii wysłać wiadomość dla danej rozmowy z klientem.

Najczęściej zadawane pytania

Zapoznaj się z poniższymi typowymi pytaniami dotyczącymi kodowania znaków SMS, znaków specjalnych i limitów wiadomości.

Które znaki specjalne zmniejszają limit SMS do 70 znaków?

Każdy znak niewchodzący w skład standardowego zestawu znaków GSM-7 wymusi kodowanie UCS-2, zmniejszając limit do 70 znaków. Obejmuje to emoji, alfabety niełacińskie (cyrylica, arabski, grecki, hebrajski) oraz niektóre akcentowane litery lub stylizowane znaki interpunkcyjne (takie jak zakrzywione inteligentne cudzysłowy).

Czy spacje liczą się jako znaki w SMS-ie?

Tak, każda spacja liczy się jako jeden znak zarówno w standardzie kodowania GSM-7, jak i UCS-2.

Dlaczego moja platforma SMS pobiera opłaty za wiele wiadomości, skoro wysłałem tylko jedną?

Jeśli Twoja wiadomość przekroczyła 160 znaków (w GSM-7) lub 70 znaków (w UCS-2), operator podzielił ją na wiele segmentów. Tradycyjne interfejsy API naliczają opłaty za segment, co oznacza, że jedna długa wiadomość może z łatwością kosztować 2- lub 3-krotność stawki podstawowej.

Jak mogę sprawdzić, czy moja wiadomość SMS zawiera znaki specjalne?

Możesz skorzystać z internetowych kalkulatorów segmentów SMS lub uruchomić prosty skrypt oczyszczający w swoim backendzie, aby wykryć, czy Twój tekst wywołuje kodowanie Unicode UCS-2 przed wysłaniem go do dostawcy API.