Límites de caracteres y conteo de segmentos de SMS
Cada SMS se transporta en unidades de tamaño fijo llamadas segmentos. Cada segmento es una unidad de facturación, así que la longitud del mensaje afecta directamente el costo. Cuántos caracteres caben en un segmento depende de la codificación que Bird elija para tu cuerpo de mensaje, y un solo carácter fuera del alfabeto predeterminado puede reducir la capacidad a la mitad.
Cómo se elige la codificación
Bird inspecciona cada carácter en el cuerpo de tu mensaje antes de enviarlo:
- Si todos los caracteres pertenecen al alfabeto GSM-7 (el conjunto de caracteres estándar de 7 bits definido por GSM 03.38), el mensaje usa codificación GSM-7.
- Si cualquier carácter queda fuera de GSM-7, el mensaje completo cambia a UCS-2 (codificación Unicode de 16 bits).
Bird no mezcla codificaciones dentro de un mensaje. Un solo emoji, carácter CJK o comilla tipográfica convierte todo el cuerpo a UCS-2.
Límites de segmentos
| Codificación | Segmento único | Por segmento (multiparte) |
|---|---|---|
| GSM-7 | 160 septetos | 153 septetos |
| UCS-2 | 70 unidades de código UTF-16 | 67 unidades de código UTF-16 |
Cuando un mensaje es más largo que un segmento, se divide en varios segmentos. Cada segmento multiparte reserva unos bytes para una cabecera de reensamblado, llamada User Data Header. Esto reduce la capacidad de 160 a 153 para GSM-7 y de 70 a 67 para UCS-2.
Un mensaje GSM-7 que ocupa 161 septetos requiere 2 segmentos (ceil(161 / 153) = 2). La división reparte el cuerpo codificado entre ambos segmentos, con 153 septetos disponibles en cada uno.
Longitud máxima de un mensaje
Bird acepta hasta 12 segmentos por mensaje. Esto equivale a:
- GSM-7: 1.836 septetos (12 x 153)
- UCS-2: 804 unidades de código UTF-16 (12 x 67)
Un cuerpo que exceda 12 segmentos se rechaza con un error 422. Bird nunca trunca un mensaje de forma silenciosa.
El conjunto de caracteres GSM-7
GSM-7 cubre los caracteres que necesitan la mayoría de los mensajes en alfabeto latino:
- Letras A-Z, a-z
- Dígitos 0-9
- Puntuación común: @, £, $, !, ", #, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, espacio, salto de línea
- Algunos caracteres acentuados de idiomas de Europa occidental, incluidos é en café
Caracteres de la tabla de extensión
Un pequeño grupo de caracteres forma parte de GSM-7 pero se encuentra en una tabla de extensión. Cada uno ocupa 2 septetos en lugar de 1, por lo que cuentan el doble contra el límite del segmento:
€, [, ], {, }, \, ~, ^, |
Esto importa en el límite. Si escribes 159 caracteres normales seguidos de un signo de euro, el tamaño codificado es 161 septetos (159 + 2), lo que empuja el mensaje a 2 segmentos, aunque parezcan 160 caracteres.
Caracteres que activan UCS-2
Cualquier carácter fuera de GSM 03.38 fuerza el mensaje completo a UCS-2. Los desencadenantes más comunes:
- Emoji: muchos emoji fuera del Plano Multilingüe Básico usan dos unidades de código UTF-16. Una cadena de 35 de estos emoji cabe en un segmento; el 36.º lo empuja a dos. Un emoji visible también puede combinar varios code points, así que cuenta el cuerpo codificado en lugar de los símbolos visibles.
- Caracteres CJK (chino, japonés, coreano)
- Árabe, tailandés, hindi y otros alfabetos fuera del conjunto GSM-7
- Comillas tipográficas (curvas): “ ” ‘ ’ (las versiones rectas " y ' son GSM-7). La codificación inteligente puede reemplazarlas antes de enviar.
Algunos caracteres latinos acentuados, incluidos é en café y ü, forman parte del conjunto GSM-7 y no activan UCS-2. Otros, incluidos á, í y ú, activan UCS-2.
Codificación inteligente
Algunos desencadenantes de UCS-2 no son caracteres que hayas elegido: un procesador de texto convierte ' en ’, un guion largo llega al pegar, un campo de formulario lleva un espacio de no separación. Establece options.smart_encoding a true en un envío y Bird reemplaza esos caracteres por sus equivalentes en GSM-7 antes de que el mensaje salga, lo que mantiene el cuerpo en GSM-7 y puede reducir a la mitad la cantidad de segmentos.
La codificación inteligente está desactivada por defecto y se aplica solo cuando todos los caracteres restantes pueden usar GSM-7. Si el cuerpo aún contiene un carácter fuera de GSM-7 después del reemplazo, como un emoji o una letra acentuada no soportada, Bird lo envía exactamente como fue proporcionado. La codificación inteligente cubre la tabla de reemplazos y cómo leer el resultado.
Leer el conteo de segmentos desde la API
Cada respuesta de SMS incluye un objeto segments que reporta lo que Bird calculó:
Ejemplo de código
{
"segments": {
"count": 1,
"encoding": "GSM_7BIT",
"characters": 64
}
}- count: la cantidad de segmentos facturables
- encoding: GSM_7BIT o UCS2
- characters: la cantidad de caracteres (code points Unicode) en el cuerpo
El count es el número por el que se te factura. Verifícalo en la respuesta o en el registro de SMS para confirmar que tus mensajes se contabilizan como esperas.
Mantener los mensajes en un solo segmento
Algunos hábitos que previenen envíos multisegmento accidentales:
- Reemplaza las comillas curvas por comillas rectas. Los procesadores de texto y algunos teléfonos reemplazan automáticamente " por “ ”, lo que fuerza UCS-2 y reduce tu capacidad a la mitad. La codificación inteligente hace esto por ti en los envíos donde la actives.
- Evita emoji en mensajes transaccionales o de autenticación donde la cantidad de segmentos importa.
- Vigila los caracteres de la tabla de extensión (€, {, }, [, ], \, ~, ^, |). Cada uno consume dos espacios de carácter.
- Si escribes en un alfabeto no latino (CJK, árabe, tailandés), planifica con los límites de UCS-2 desde el inicio: 70 caracteres en un solo segmento, 67 por segmento en mensajes divididos.
- Usa enlaces reconocibles y revisa su longitud. Un enlace corto con marca puede ahorrar espacio; consulta los requisitos de enlace del destino antes de elegir un servicio de acortamiento.
Siguientes pasos
Usa la calculadora de segmentos SMS antes de enviar y revisa las personalizaciones renderizadas en tu contenido de campaña.
- Codificación inteligente: revisa cada reemplazo y actívala por mensaje.
- Enviar SMS: envía un mensaje e inspecciona su conteo de segmentos.
- Registro de SMS: inspecciona la codificación y los segmentos facturables de un mensaje enviado.
- Segmentos SMS: por qué un emoji duplica el coste: un video que envía dos mensajes y compara cuánto cuesta cada uno
Recursos relacionados
Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.
Comprender el conceptoWhat is an SMS segment, and why did one message cost three?Explorar la funcionalidadSMS encodingSeguir la ruta de aprendizajeBuild your first integration
Prueba el ejercicio y obtén un resumen de implementación