Limites de caractères et segments
Le SMS sur GSM a une limite stricte de 160 caractères par segment pour le contenu ASCII. Les messages plus longs sont découpés en plusieurs segments, chacun facturé comme un SMS séparé. Lisoloo calcule le nombre de segments à la soumission et facture en conséquence.
Tableau des segments
Section intitulée « Tableau des segments »| Longueur (caractères) | Type | Nombre de SMS |
|---|---|---|
1–160 | SMS standard | 1 |
161–320 | SMS long (2 segments) | 2 |
321–480 | SMS long (3 segments) | 3 |
481–640 | SMS long (4 segments) | 4 |
| … | concaténé | …ceil(len / 153) après le premier segment |
jusqu’à 1600 | Maximum | 10 |
Pour les messages multi-segments la capacité par segment chute de 160 à 153 caractères — les 7 caractères supplémentaires par segment sont consommés par l’en-tête UDH (User Data Header) que l’opérateur utilise pour réassembler le message sur le combiné.
Un message de plus de 1 600 caractères est rejeté avec
1110 INVALID_FIELD_FORMAT à la soumission.
Calcul du coût
Section intitulée « Calcul du coût »total_cost = total_recipients × segments_per_message × unit_price
unit_price est votre prix au niveau marchand par segment SMS dans
currency, retourné par GET /balance. Un message de 200 caractères
vers 50 destinataires à 0,02 $ par segment coûte
50 × 2 × 0,02 = 2,00 $.
Unicode et emoji
Section intitulée « Unicode et emoji »Les messages contenant des caractères hors de l’alphabet GSM 03.38 (n’importe quel emoji, certains caractères accentués dans certains scripts, CJK, arabe, …) sont envoyés en UCS-2 (16 bits par caractère). Les segments UCS-2 plafonnent à 70 caractères en mono-segment, 67 caractères par segment quand concaténés. Un seul 🎉 où que ce soit dans le corps bascule l’ensemble du message en UCS-2.
| Encodage | Mono | Concaténé |
|---|---|---|
| GSM 7-bit | 160 | 153 |
| UCS-2 (tout caractère non-GSM) | 70 | 67 |
Si vous ne connaissez pas votre jeu de caractères à l’avance, supposez UCS-2 pour l’estimation de coût.
Ce que la réponse vous dit
Section intitulée « Ce que la réponse vous dit »POST /send retourne le nombre de segments calculé pour le lot :
{ "data": { "message_id": "...", "total_recipients": 50, "total_messages": 100, "total_cost": 2.00, "currency": "USD", "status": "pending" }}total_recipientsestlen(to).total_messagesesttotal_recipients × segments_per_message.total_costesttotal_messages × unit_price, déduit de votre solde à la soumission.
Pour les envois planifiés ou récurrents les totaux reflètent tout le planning, pas par-occurrence.
Pré-calcul côté votre
Section intitulée « Pré-calcul côté votre »Si vous voulez estimer le coût avant d’appeler POST /send, comptez
les segments côté client :
def segments(message: str) -> int: is_gsm = all(c in GSM_03_38 for c in message) n = len(message) if is_gsm: return 1 if n <= 160 else (n + 152) // 153 return 1 if n <= 70 else (n + 66) // 67La table complète des caractères GSM 03.38 est à 3GPP TS 23.038.
Voir aussi
Section intitulée « Voir aussi »- Types d’envoi — le compte de segments se multiplie sur
scheduled_datesetrecurring_schedule - Vérifier le solde — interroger
unit_priceetavailable_sms - Limites de débit — les segments ne comptent pas pour la limite, les requêtes oui