Como o tamanho de um SMS é calculado
Um SMS transporta 140 octetos (1.120 bits) de dados do usuário. No alfabeto GSM padrão de 7 bits, cada caractere ocupa 7 bits, então 140 octetos comportam 160 caracteres. Em UCS-2 (a codificação Unicode de 16 bits usada em SMS), cada caractere ocupa 2 octetos, e o mesmo espaço comporta 70 caracteres.
Quando a mensagem passa de um SMS, ela é enviada como SMS concatenado. Cada parte começa com um cabeçalho UDH (User Data Header) de 6 octetos com um número de referência, o total de partes e a posição da parte, para que o celular junte tudo. Sobram 134 octetos por parte: 153 caracteres GSM-7 ou 67 caracteres UCS-2.
O destinatário vê uma única mensagem, mas operadoras e provedores cobram cada parte. Uma mensagem GSM-7 de 161 caracteres custa dois SMS, assim como uma mensagem em árabe de 71 caracteres.
- GSM-7: 160 caracteres em um SMS, 153 por parte quando concatenado (306 em 2 partes, 459 em 3).
- UCS-2: 70 caracteres em um SMS, 67 por parte quando concatenado (134 em 2 partes, 201 em 3).
- Um único caractere fora do GSM-7, em qualquer ponto do texto, muda a mensagem inteira para UCS-2.
O alfabeto GSM-7 e sua tabela de extensão
O alfabeto GSM padrão de 7 bits é definido na norma 3GPP TS 23.038 (antiga GSM 03.38). Sua tabela básica tem 128 posições: letras latinas e dígitos, pontuação comum e caracteres como @ £ $ ¥ è é ù ì ò Ç Ø ø Å å Ä Ö Ñ Ü ä ö ñ ü à ß Æ æ É ¿ ¡ § e as maiúsculas gregas Δ Φ Γ Λ Ω Π Ψ Σ Θ Ξ. Quebra de linha e retorno de carro também contam como um caractere.
Outros dez caracteres ficam na tabela de extensão e são acessados por um código de escape, então cada um custa dois septetos: o euro €, o circunflexo ^, as chaves { }, os colchetes [ ], o til ~, a barra vertical |, a barra invertida \ e a quebra de página. Uma mensagem com 158 letras e um € tem exatamente 160 septetos; mais uma letra e ela vira dois segmentos.
Uma sequência de escape precisa ficar em uma única parte, então um caractere de dois septetos que cruzaria o limite de 153 septetos passa para a parte seguinte. Este contador aplica essa regra, por isso uma parte pode terminar em 152.
A TS 23.038 também define tabelas nacionais de deslocamento (por exemplo turca, espanhola, portuguesa e várias escritas indianas) que mantêm algumas mensagens em 7 bits. O suporte depende da rede e do aparelho, por isso a maioria das plataformas, e este contador, usam apenas o alfabeto padrão.
Caracteres que passam seu SMS para Unicode sem aviso
A maioria das mensagens que caem para 70 caracteres de surpresa vem de texto copiado de um editor, um CMS ou um teclado de celular que insere caracteres tipográficos automaticamente. Eles parecem quase iguais aos equivalentes GSM-7, mas são outros pontos de código.
Em português isso é muito comum: ã, õ, á, í, ó, ú, â, ê, ô e o ç minúsculo não estão no GSM-7 (à, é e Ç estão). Remova os acentos só se o seu público aceitar a grafia sem eles; muitas vezes a ortografia correta vale mais que um segmento extra.
- Aspas e apóstrofos curvos ‘ ’ “ ” (use ' e ").
- Meia-risca e travessão – — (use -) e reticências … (use ...).
- Espaços não separáveis e finos, muitas vezes invisíveis depois de copiar e colar (use um espaço normal).
- Caracteres de largura zero e marcas de ordem de bytes escondidos em modelos (remova-os).
- Emoji: a maioria ocupa 2 unidades UCS-2, uma bandeira ou um emoji com tom de pele ocupa 4, e uma sequência de família 8 ou mais.
Converter uma mensagem para GSM-7 com um clique
Quando uma mensagem está em Unicode, o botão Converter para GSM-7 a reescreve com caracteres GSM-7 apenas onde é seguro: aspas e travessões tipográficos viram simples, espaços invisíveis são removidos, acentos que o GSM-7 não tem são retirados (ã → a, õ → o, á → a, ç minúsculo → Ç) e ligaduras e símbolos são escritos por extenso (œ → oe, ™ → TM). Caracteres que já são GSM-7, como é, ü, ñ e €, são mantidos.
A ferramenta lista cada mudança e mostra o número de segmentos antes e depois, e Desfazer restaura o texto original. O árabe não pode ser convertido: uma mensagem em árabe fica sempre em Unicode, com 70 caracteres por SMS, então encurte-a ou envie pelo WhatsApp. Emoji e outros alfabetos não latinos também ficam como estão.
SMS em árabe: 70 caracteres, 67 por parte
As letras árabes não fazem parte do GSM-7, então todo SMS em árabe é enviado em UCS-2: 70 caracteres em uma mensagem simples e 67 por parte quando é mais longa. Uma mensagem em árabe de 140 caracteres são três segmentos cobrados, não dois, porque 140 é maior que 2 × 67 = 134.
Todo ponto de código conta: espaços, letras latinas misturadas, dígitos arábico-índicos e sinais diacríticos (tashkil). Uma palavra totalmente vocalizada pode usar o dobro de unidades da mesma palavra sem harakat, então omita os diacríticos em mensagens transacionais, a menos que evitem ambiguidade.
Para OTPs e alertas no Golfo, mantenha o texto em árabe abaixo de 70 caracteres sempre que possível, coloque o código no início e evite emoji. Se enviar o mesmo alerta em inglês, a versão em inglês pode ter mais que o dobro do tamanho pelo mesmo preço.
Dos segmentos ao custo
Sua fatura mensal de SMS depende de segmentos, não de mensagens: segmentos por mensagem × mensagens por mês × tarifa da rede de destino. Reduzir uma campanha de 2 segmentos para 1 corta pela metade o custo de cada envio.
Confira o texto final com as variáveis preenchidas. Um nome de cliente, um número de pedido ou um link encurtado podem ultrapassar um limite, e nomes em árabe ou com acento podem mudar um modelo GSM-7 para UCS-2 apenas para alguns destinatários.
- Teste os valores realistas mais longos de cada variável.
- Encurte links e remova espaços e quebras de linha no final.
- Prefira uma única chamada para ação clara a uma mensagem longa em várias partes.
