Sign inGet started

Limiti di caratteri e conteggio dei segmenti SMS

Ogni SMS viene trasportato in unità di dimensione fissa chiamate segmenti. Ogni segmento è un'unità di fatturazione, quindi la lunghezza del messaggio incide direttamente sul costo. Quanti caratteri entrano in un segmento dipende dalla codifica che Bird sceglie per il corpo del messaggio, e un singolo carattere fuori dall'alfabeto predefinito può dimezzare la capacità.

Come viene scelta la codifica

Bird analizza ogni carattere nel corpo del messaggio prima dell'invio:
  • Se ogni carattere appartiene all'alfabeto GSM-7 (il set di caratteri standard a 7 bit definito da GSM 03.38), il messaggio usa la codifica GSM-7.
  • Se anche un solo carattere è fuori da GSM-7, l'intero messaggio passa alla codifica UCS-2 (codifica Unicode a 16 bit).
Bird non mescola le codifiche all'interno di un messaggio. Un singolo emoji, carattere CJK o virgoletta curva converte l'intero corpo in UCS-2.

Limiti dei segmenti

CodificaSegmento singoloPer segmento (multiparte)
GSM-7160 septet153 septet
UCS-270 code unit UTF-1667 code unit UTF-16
Quando un messaggio supera un segmento, viene suddiviso in più segmenti. Ogni segmento multiparte riserva alcuni byte per un'intestazione di riassemblaggio, chiamata User Data Header. Questo riduce la capacità da 160 a 153 per GSM-7 e da 70 a 67 per UCS-2.
Un messaggio GSM-7 che occupa 161 septet richiede 2 segmenti (ceil(161 / 153) = 2). La suddivisione distribuisce il corpo codificato su entrambi i segmenti, con 153 septet disponibili in ciascuno.

Lunghezza massima del messaggio

Bird accetta fino a 12 segmenti per messaggio. Questo corrisponde a:
  • GSM-7: 1.836 septet (12 x 153)
  • UCS-2: 804 code unit UTF-16 (12 x 67)
Un corpo che supera i 12 segmenti viene rifiutato con un errore 422. Bird non tronca mai un messaggio silenziosamente.

Il set di caratteri GSM-7

GSM-7 copre i caratteri necessari per la maggior parte dei messaggi in alfabeto latino:
  • Lettere A-Z, a-z
  • Cifre 0-9
  • Punteggiatura comune: @, £, $, !, ", #, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, spazio, a capo
  • Alcuni caratteri accentati delle lingue dell'Europa occidentale, tra cui é in café

Caratteri della tabella di estensione

Alcuni caratteri fanno parte di GSM-7 ma risiedono in una tabella di estensione. Ciascuno costa 2 septet invece di 1, quindi conta il doppio rispetto al limite del segmento:
, [, ], {, }, \, ~, ^, |
Questo conta al limite. Se scrivi 159 caratteri normali seguiti da un simbolo dell'euro, la dimensione codificata è 161 septet (159 + 2), il che spinge il messaggio in 2 segmenti, anche se sembra lungo 160 caratteri.

Caratteri che attivano UCS-2

Qualsiasi carattere fuori da GSM 03.38 forza l'intero messaggio in UCS-2. Le cause più comuni:
  • Emoji: molti emoji fuori dal Basic Multilingual Plane usano due code unit UTF-16. Una sequenza di 35 emoji di questo tipo entra in un segmento; il 36° la spinge in due. Un emoji visibile può anche combinare più code point, quindi conta il corpo codificato anziché i simboli visibili.
  • Caratteri CJK (cinese, giapponese, coreano)
  • Arabo, thai, hindi e altri alfabeti fuori dall'alfabeto GSM-7
  • Virgolette curve (smart): (le versioni dritte " e ' sono GSM-7). La codifica intelligente può sostituirle prima dell'invio.
Alcuni caratteri latini accentati, tra cui é in café e ü, fanno parte del set GSM-7 e non attivano UCS-2. Altri, tra cui á, í e ú, attivano UCS-2.

Codifica intelligente

Alcuni trigger UCS-2 non sono caratteri che hai scelto tu: un elaboratore di testo trasforma ' in , un trattino lungo arriva con un incolla, un campo di un modulo porta uno spazio non interrompibile. Imposta options.smart_encoding su true in un invio e Bird sostituisce quei caratteri con i loro equivalenti GSM-7 prima che il messaggio parta, mantenendo il corpo in GSM-7 e potenzialmente dimezzando il conteggio dei segmenti.
La codifica intelligente è disattivata per impostazione predefinita e si applica solo quando ogni carattere rimanente può usare GSM-7. Se il corpo contiene ancora un carattere fuori da GSM-7 dopo la sostituzione, come un emoji o una lettera accentata non supportata, Bird lo invia esattamente come fornito. La codifica intelligente descrive la tabella di sostituzione e come leggere il risultato.

Leggere il conteggio dei segmenti dalla API

Ogni risposta SMS include un oggetto segments che riporta ciò che Bird ha calcolato:
Esempio di codice
{
  "segments": {
    "count": 1,
    "encoding": "GSM_7BIT",
    "characters": 64
  }
}
  • count: il numero di segmenti fatturabili
  • encoding: GSM_7BIT o UCS2
  • characters: il numero di caratteri (code point Unicode) nel corpo
count è il numero per cui vieni fatturato. Controllalo nella risposta o nel log SMS per verificare che i tuoi messaggi arrivino dove ti aspetti.

Mantenere i messaggi entro un segmento

Alcune buone pratiche per evitare invii multi-segmento accidentali:
  • Sostituisci le virgolette curve con virgolette dritte. Gli elaboratori di testo e alcuni telefoni sostituiscono automaticamente " con , il che forza UCS-2 e dimezza la capacità. La codifica intelligente lo fa al posto tuo per gli invii in cui la abiliti.
  • Evita gli emoji nei messaggi transazionali o di autenticazione dove il conteggio dei segmenti è importante.
  • Fai attenzione ai caratteri della tabella di estensione (, {, }, [, ], \, ~, ^, |). Ciascuno occupa due slot di carattere.
  • Se scrivi in un alfabeto non latino (CJK, arabo, thai), pianifica fin dall'inizio per i limiti UCS-2: 70 caratteri per un segmento singolo, 67 per segmento quando suddiviso.
  • Usa link riconoscibili e controlla la loro lunghezza. Un link breve brandizzato può risparmiare spazio; verifica i requisiti di link della destinazione prima di scegliere un servizio di abbreviazione.

Passaggi successivi

Usa il calcolatore di segmenti SMS prima di un invio e controlla le personalizzazioni renderizzate nel tuo contenuto della campagna.