Sign inGet started

Limites de caractères et comptage des segments SMS

Chaque SMS est transporté dans des unités de taille fixe appelées segments. Chaque segment correspond à une unité de facturation : la longueur du message affecte donc directement le coût. Le nombre de caractères qui tiennent dans un segment dépend de l'encodage que Bird choisit pour votre corps de message, et un seul caractère hors de l'alphabet par défaut peut réduire la capacité de moitié.

Comment l'encodage est choisi

Bird inspecte chaque caractère du corps de votre message avant l'envoi :
  • Si chaque caractère appartient à l'alphabet GSM-7 (le jeu de caractères standard 7 bits défini par GSM 03.38), le message utilise l'encodage GSM-7.
  • Si un seul caractère sort de GSM-7, le message entier bascule en UCS-2 (encodage Unicode 16 bits).
Bird ne mélange pas les encodages au sein d'un message. Un seul emoji, caractère CJK ou guillemet courbe convertit tout le corps en UCS-2.

Limites par segment

EncodageSegment uniquePar segment (multipart)
GSM-7160 septets153 septets
UCS-270 unités de code UTF-1667 unités de code UTF-16
Quand un message dépasse un segment, il est découpé en plusieurs segments. Chaque segment multipart réserve quelques octets pour un en-tête de réassemblage, appelé User Data Header. Cela réduit la capacité de 160 à 153 pour GSM-7, et de 70 à 67 pour UCS-2.
Un message GSM-7 de 161 septets occupe 2 segments (ceil(161 / 153) = 2). Le découpage répartit le corps encodé entre les deux segments, avec 153 septets disponibles dans chacun.

Longueur maximale d'un message

Bird accepte jusqu'à 12 segments par message. Cela correspond à :
  • GSM-7 : 1 836 septets (12 x 153)
  • UCS-2 : 804 unités de code UTF-16 (12 x 67)
Un corps qui dépasse 12 segments est rejeté avec une erreur 422. Bird ne tronque jamais un message silencieusement.

Le jeu de caractères GSM-7

GSM-7 couvre les caractères dont la plupart des messages en alphabet latin ont besoin :
  • Lettres A-Z, a-z
  • Chiffres 0-9
  • Ponctuation courante : @, £, $, !, ", #, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, espace, retour à la ligne
  • Certains caractères accentués des langues d'Europe occidentale, dont é en café

Caractères de la table d'extension

Quelques caractères font partie de GSM-7 mais figurent dans une table d'extension. Chacun coûte 2 septets au lieu de 1, et compte donc double par rapport à la limite du segment :
, [, ], {, }, \, ~, ^, |
Cette différence devient importante à l’approche de la limite. Si vous écrivez 159 caractères ordinaires suivis d'un signe euro, la taille encodée est de 161 septets (159 + 2), ce qui fait passer le message à 2 segments, même s'il semble faire 160 caractères.

Caractères qui déclenchent UCS-2

Tout caractère hors de GSM 03.38 force le message entier en UCS-2. Les déclencheurs les plus courants :
  • Emoji : beaucoup d'emoji hors du Basic Multilingual Plane utilisent deux unités de code UTF-16. Une suite de 35 emoji de ce type tient dans un segment ; le 36e fait passer à deux. Un emoji visible peut aussi combiner plusieurs points de code : comptez le corps encodé plutôt que les symboles visibles.
  • Caractères CJK (chinois, japonais, coréen)
  • Arabe, thaï, hindi et autres écritures hors de l'alphabet GSM-7
  • Guillemets courbes : (les versions droites " et ' font partie de GSM-7). L'encodage intelligent peut les remplacer avant l'envoi.
Certains caractères latins accentués, dont é en café et ü, font partie du jeu GSM-7 et ne déclenchent pas UCS-2. D'autres, dont á, í et ú, déclenchent UCS-2.

Encodage intelligent

Certains déclencheurs UCS-2 ne sont pas des caractères que vous avez choisis : un traitement de texte transforme ' en , un tiret cadratin arrive avec un collage, un champ de formulaire contient une espace insécable. Définissez options.smart_encoding à true lors d'un envoi et Bird remplace ces caractères par leurs équivalents GSM-7 avant l'envoi du message, ce qui maintient le corps en GSM-7 et peut diviser par deux le nombre de segments.
L'encodage intelligent est désactivé par défaut et ne s'applique que si chaque caractère restant peut utiliser GSM-7. Si le corps contient encore un caractère hors de GSM-7 après remplacement, comme un emoji ou une lettre accentuée non prise en charge, Bird l'envoie tel quel. L'encodage intelligent décrit la table de remplacement et comment lire le résultat.

Lire le nombre de segments dans la réponse de l’API

Chaque réponse SMS inclut un objet segments qui indique ce que Bird a calculé :
Exemple de code
{
  "segments": {
    "count": 1,
    "encoding": "GSM_7BIT",
    "characters": 64
  }
}
  • count : le nombre de segments facturables
  • encoding : GSM_7BIT ou UCS2
  • characters : le nombre de caractères (points de code Unicode) dans le corps
count est le nombre qui vous est facturé. Vérifiez-le dans la réponse ou dans le journal SMS pour vous assurer que vos messages arrivent comme prévu.

Garder les messages à un seul segment

Quelques bonnes pratiques pour éviter les envois multi-segments involontaires :
  • Remplacez les guillemets courbes par des guillemets droits. Les traitements de texte et certains téléphones remplacent automatiquement " par , ce qui force UCS-2 et divise votre capacité par deux. L'encodage intelligent le fait pour vous sur les envois où vous l'activez.
  • Évitez les emoji dans les messages transactionnels ou d'authentification où le nombre de segments compte.
  • Surveillez les caractères de la table d'extension (, {, }, [, ], \, ~, ^, |). Chacun consomme deux emplacements de caractère.
  • Si vous écrivez dans une écriture non latine (CJK, arabe, thaï), prévoyez les limites UCS-2 dès le départ : 70 caractères en segment unique, 67 par segment en cas de découpage.
  • Utilisez des liens reconnaissables et vérifiez leur longueur. Un lien court de marque peut économiser de l'espace ; vérifiez les exigences de lien de la destination avant de choisir un service de raccourcissement.

Étapes suivantes

Utilisez le calculateur de segments SMS avant un envoi, et vérifiez les personnalisations rendues dans votre contenu de campagne.