Sign inGet started

Limites de caracteres e contagem de segmentos SMS

Todo SMS é transportado em unidades de tamanho fixo chamadas segmentos. Cada segmento é uma unidade de cobrança, então o comprimento da mensagem afeta diretamente o custo. Quantos caracteres cabem em um segmento depende da codificação que Bird escolhe para o corpo da mensagem, e um único caractere fora do alfabeto padrão pode cortar a capacidade pela metade.

Como a codificação é escolhida

Bird inspeciona cada caractere no corpo da sua mensagem antes de enviar:
  • Se todos os caracteres pertencem ao alfabeto GSM-7 (o conjunto de caracteres padrão de 7 bits definido pela GSM 03.38), a mensagem usa a codificação GSM-7.
  • Se qualquer caractere estiver fora de GSM-7, a mensagem inteira muda para UCS-2 (codificação Unicode de 16 bits).
Bird não mistura codificações dentro de uma mensagem. Um emoji, caractere CJK ou aspa curva converte o corpo inteiro para UCS-2.

Limites de segmento

CodificaçãoSegmento únicoPor segmento (multiparte)
GSM-7160 septetos153 septetos
UCS-270 code units UTF-1667 code units UTF-16
Quando uma mensagem é maior que um segmento, ela é dividida em vários segmentos. Cada segmento multiparte reserva alguns bytes para um cabeçalho de remontagem, chamado User Data Header. Isso reduz a capacidade de 160 para 153 em GSM-7 e de 70 para 67 em UCS-2.
Uma mensagem GSM-7 que ocupa 161 septetos usa 2 segmentos (ceil(161 / 153) = 2). A divisão distribui o corpo codificado entre os dois segmentos, com 153 septetos disponíveis em cada um.

Comprimento máximo da mensagem

Bird aceita até 12 segmentos por mensagem. Isso equivale a:
  • GSM-7: 1.836 septetos (12 x 153)
  • UCS-2: 804 code units UTF-16 (12 x 67)
Um corpo que excede 12 segmentos é rejeitado com um erro 422. Bird nunca trunca uma mensagem silenciosamente.

O conjunto de caracteres GSM-7

GSM-7 cobre os caracteres que a maioria das mensagens em alfabeto latino precisa:
  • Letras A-Z, a-z
  • Dígitos 0-9
  • Pontuação comum: @, £, $, !, ", #, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, espaço, nova linha
  • Alguns caracteres acentuados de idiomas da Europa Ocidental, incluindo é em café

Caracteres da tabela de extensão

Alguns caracteres fazem parte de GSM-7, mas estão em uma tabela de extensão. Cada um custa 2 septetos em vez de 1, então eles contam em dobro no limite do segmento:
, [, ], {, }, \, ~, ^, |
Isso importa no limite. Se você escrever 159 caracteres comuns seguidos de um sinal de euro, o tamanho codificado é 161 septetos (159 + 2), o que empurra a mensagem para 2 segmentos, mesmo que pareçam 160 caracteres.

Caracteres que acionam UCS-2

Qualquer caractere fora da GSM 03.38 força a mensagem inteira para UCS-2. Os gatilhos mais comuns:
  • Emoji: muitos emoji fora do Basic Multilingual Plane usam duas code units UTF-16. Uma sequência de 35 desses emoji cabe em um segmento; o 36º empurra para dois. Um emoji visível também pode combinar vários code points, então conte o corpo codificado em vez dos símbolos visíveis.
  • Caracteres CJK (chinês, japonês, coreano)
  • Árabe, tailandês, hindi e outros sistemas de escrita fora do alfabeto GSM-7
  • Aspas curvas (smart quotes): (as versões retas " e ' são GSM-7). A codificação inteligente pode substituí-las antes do envio.
Alguns caracteres latinos acentuados, incluindo é em café e ü, fazem parte do conjunto GSM-7 e não acionam UCS-2. Outros, incluindo á, í e ú, acionam UCS-2.

Codificação inteligente

Alguns gatilhos de UCS-2 não são caracteres que você escolheu: um editor de texto transforma ' em , um travessão chega ao colar, um campo de formulário carrega um espaço não separável. Defina options.smart_encoding como true em um envio e Bird substitui esses caracteres pelos equivalentes GSM-7 antes de a mensagem sair, o que mantém o corpo em GSM-7 e pode reduzir a contagem de segmentos pela metade.
A codificação inteligente está desativada por padrão e se aplica somente quando todos os caracteres restantes podem usar GSM-7. Se o corpo ainda contiver um caractere fora de GSM-7 após a substituição, como um emoji ou letra acentuada não suportada, Bird envia exatamente como fornecido. A codificação inteligente cobre a tabela de substituição e como interpretar o resultado.

Lendo contagens de segmentos da API

Toda resposta SMS inclui um objeto segments que informa o que Bird calculou:
Exemplo de código
{
  "segments": {
    "count": 1,
    "encoding": "GSM_7BIT",
    "characters": 64
  }
}
  • count: o número de segmentos cobráveis
  • encoding: GSM_7BIT ou UCS2
  • characters: o número de caracteres (code points Unicode) no corpo
O count informa quantos segmentos são cobrados. Confira esse valor na resposta ou no log de SMS para verificar se a contagem de segmentos corresponde ao esperado.

Mantendo mensagens em um segmento

Alguns hábitos que evitam envios acidentais com múltiplos segmentos:
  • Substitua aspas curvas por aspas retas. Editores de texto e alguns celulares substituem automaticamente " por , o que força UCS-2 e reduz sua capacidade pela metade. A codificação inteligente faz isso por você nos envios em que você a ativa.
  • Evite emoji em mensagens transacionais ou de autenticação em que a contagem de segmentos importa.
  • Fique atento aos caracteres da tabela de extensão (, {, }, [, ], \, ~, ^, |). Cada um consome duas posições de caractere.
  • Se você usa um sistema de escrita não latino (CJK, árabe, tailandês), planeje os limites de UCS-2 desde o início: 70 caracteres em segmento único, 67 por segmento quando dividido.
  • Use links reconhecíveis e revise o comprimento deles. Um link curto com marca pode economizar espaço; verifique os requisitos de link do destino antes de escolher um serviço de encurtamento.

Próximos passos

Use a calculadora de segmentos SMS antes de um envio e revise as personalizações renderizadas no seu conteúdo de campanha.