Sign inGet started

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ónSegmento únicoPor segmento (multiparte)
GSM-7160 septetos153 septetos
UCS-270 unidades de código UTF-1667 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 del 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 excede 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 la mayoría de los mensajes en alfabeto latino necesitan:
  • 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 reside en una tabla de extensión. Cada uno cuesta 2 septetos en lugar de 1, por lo que cuentan doble contra el límite del segmento:
, [, ], {, }, \, ~, ^, |
Esta diferencia importa al acercarte al límite. Si escribes 159 caracteres normales seguidos de un signo de euro, el tamaño codificado es de 161 septetos (159 + 2). El mensaje ocupa entonces 2 segmentos, aunque solo veas 160 caracteres.

Caracteres que activan UCS-2

Cualquier carácter fuera de GSM 03.38 fuerza el mensaje completo a UCS-2. Los activadores más comunes:
  • Emoji: muchos emoji fuera del Basic Multilingual Plane usan dos unidades de código UTF-16. Una cadena de 35 de esos emoji cabe en un segmento; con el 36.º se necesitan dos. Un emoji visible también puede combinar varios puntos de código, 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 alfabeto GSM-7
  • Comillas tipográficas: (las versiones rectas " y ' son GSM-7). La codificación inteligente puede reemplazarlas antes del envío.
Algunos caracteres latinos acentuados, incluidos é en café y ü, forman parte del conjunto GSM-7 y no activan UCS-2. Otros, como á, í y ú, activan UCS-2.

Codificación inteligente

Algunos activadores de UCS-2 no son caracteres que tú elegiste: un procesador de texto convierte ' en , un guion largo llega al pegar texto, un campo de formulario incluye un espacio de no separación. Configura options.smart_encoding a true en un envío y Bird reemplaza esos caracteres por sus equivalentes GSM-7 antes de que el mensaje salga, lo que mantiene el cuerpo en GSM-7 y puede reducir su cantidad de segmentos a la mitad.
La codificación inteligente está desactivada por defecto y solo se aplica 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 reemplazo 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 llegan como esperas.

Mantener los mensajes en un solo segmento

Algunos hábitos que previenen envíos multisegmento accidentales:
  • Reemplaza las comillas tipográficas 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 los 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 posiciones de caracteres.
  • Si escribes en un alfabeto no latino (CJK, árabe, tailandés), planifica desde el inicio con los límites de UCS-2: 70 caracteres en un solo segmento, 67 por segmento cuando se divide.
  • Usa enlaces reconocibles y revisa su longitud. Un enlace corto de marca puede ahorrar espacio; verifica los requisitos de enlace del destino antes de elegir un servicio de acortamiento.

Próximos pasos

Usa la calculadora de segmentos SMS antes de un envío y revisa las personalizaciones renderizadas en tu contenido de campaña.