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ção | Segmento único | Por segmento (multiparte) |
|---|---|---|
| GSM-7 | 160 septetos | 153 septetos |
| UCS-2 | 70 code units UTF-16 | 67 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.
- Codificação inteligente: revise todas as substituições e ative por mensagem.
- Enviando SMS: envie uma mensagem e inspecione a contagem de segmentos.
- Log de SMS: inspecione a codificação e os segmentos cobráveis de uma mensagem enviada.
- Segmentos SMS: porque é que um emoji duplica o custo: um vídeo que envia duas mensagens e compara o custo de cada uma
Recursos relacionados
Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.
Entenda o conceitoWhat is an SMS segment, and why did one message cost three?Explore a funcionalidadeSMS encodingSiga o percurso de aprendizagemBuild your first integration
Experimente na prática e obtenha um resumo de implementação