Ao construir sistemas automatizados ou enviar notificações para clientes, muitos empresários e desenvolvedores ficam chocados ao descobrir que suas faturas mensais de SMS são duas vezes mais altas do que o esperado. Este guia completo fornece uma tabela com o número de caracteres que cada caractere especial consome para enviar SMS, ajudando você a entender como as mudanças ocultas de codificação podem inflacionar drasticamente seus custos de mensagens.

Por que caracteres especiais alteram o tamanho e o custo do SMS

Nos padrões de telecomunicações, as mensagens de texto não são cobradas pelo número bruto de palavras que você escreve, mas sim por "segmentos". Um segmento de SMS padrão é codificado usando o conjunto de caracteres GSM-7, que permite até 160 caracteres por mensagem. No entanto, no momento em que você introduz um único caractere fora desse conjunto padrão — como um emoji, uma letra cirílica ou até mesmo um "aspas inteligente" copiada do Microsoft Word —, a codificação de toda a mensagem muda para UCS-2 (Unicode).

Sob a codificação UCS-2, a ideia de que as mensagens de SMS são limitadas a 160 caracteres, mesmo quando incluem caracteres especiais e emojis, é um equívoco comum. Na realidade, assim que um único caractere não-GSM é detectado, o limite máximo de caracteres por segmento cai instantaneamente de 160 caracteres para apenas 70 caracteres. Se a sua mensagem tiver 71 caracteres e contiver um emoji, ela será dividida e cobrada como dois segmentos de SMS separados por provedores de API tradicionais, como Twilio ou Plivo.

Entender quais caracteres especiais costumam afetar as mensagens é crucial para manter seus custos operacionais baixos, especialmente se você administra uma empresa de serviços locais, como uma clínica, salão de beleza ou oficina mecânica que envia lembretes de consultas para seus clientes.

Codificação GSM-7 vs. UCS-2 Explicada

O GSM-7 é um padrão de codificação de caracteres de 7 bits projetado especificamente para SMS. Ele contém a maioria dos caracteres latinos, números e pontuações básicas. O UCS-2 é um padrão de codificação de 16 bits que pode representar quase qualquer caractere em qualquer idioma, incluindo emojis, mas requer o dobro de dados por caractere. Esse excesso de dados é o motivo pelo qual as redes das operadoras reduzem a capacidade do segmento para 70 caracteres quando o UCS-2 é ativado.

A Tabela Definitiva de Mapeamento de Caracteres Especiais de SMS

Abaixo está uma tabela com o número de caracteres que cada caractere especial precisa para enviar SMS. Esta tabela descreve os caracteres GSM-7 padrão, os caracteres GSM-7 Estendidos (que exigem o espaço de 2 caracteres dentro do limite de 160) e os caracteres UCS-2 que forçam o limite estrito de 70 caracteres.

Categoria do CaractereExemplos de CaracteresBits por CaracterePeso do Caractere no SMSLimite Máximo do Segmento
GSM-7 BásicoA-Z, a-z, 0-9, espaços, pontuação simples (., !, ?, @, $, etc.)7 bits1 caractere160 caracteres
GSM-7 Estendido^, {, }, [, ], ~, |, \, €14 bits2 caracteres160 caracteres (cada caractere estendido conta como 2)
UCS-2 (Unicode)á, í, ó, ñ, ’ (aspas inteligentes), emojis (😀), Cirílico, Árabe16 bitsForça a mensagem inteira para Unicode70 caracteres

Como mostrado na tabela, usar um caractere GSM-7 estendido como uma chave "{" ou uma barra invertida "\" não força o Unicode, mas conta como dois caracteres em relação ao seu limite de 160 caracteres. No entanto, usar um caractere não-GSM como "á" (frequentemente usado em configurações de espanhol para sms y caracteres especiales) ou um apóstrofo curvo "’" reduzirá imediatamente o limite de segmento da sua mensagem para 70 caracteres.

Como os caracteres especiais impactam seus custos de SMS

Para entender los caracteres especiales que impacto tienen en el coste de los sms (o impacto que os caracteres especiais têm no custo do SMS), vamos analisar um exemplo prático. Imagine que você administra uma clínica odontológica e envia o seguinte lembrete de consulta:

"Olá João, sua consulta está agendada para amanhã às 15:00. Por favor, responda para confirmar ou ligue para nós se precisar reagendar! Él"

Esta mensagem tem 123 caracteres. Se você usar o "E" padrão em vez do "É" acentuado, a mensagem será enviada em GSM-7. Ela cabe confortavelmente dentro do limite de 160 caracteres, custando exatamente 1 segmento de SMS.

No entanto, devido ao "É" acentuado, a mensagem é forçada para UCS-2. O limite do segmento agora é de 70 caracteres. Sua mensagem de 123 caracteres é dividida em dois segmentos (o primeiro segmento tem 67 caracteres e o segundo tem 56 caracteres devido aos cabeçalhos de segmentação). Os gateways de API tradicionais cobrarão por 2 mensagens de SMS em vez de 1.

Se você estiver usando provedores tradicionais, essa segmentação pode duplicar ou triplicar sua fatura mensal. É por isso que muitas empresas procuram uma alternativa ao Twilio ou consultam um guia de API de SMS mais barata para evitar taxas adicionais arbitrárias baseadas em segmentos.

Como evitar caracteres especiais no SMS?

Se você deseja manter suas mensagens dentro do limite de 160 caracteres e evitar custos inesperados, deve higienizar ativamente o conteúdo do seu SMS. Aqui estão estratégias práticas sobre como evitar caracteres especiais no SMS:

  1. Higienize textos copiados e colados: Muitos modelos de CRM contêm pontuação "inteligente". Por exemplo, um apóstrofo (’) ou uma vírgula copiada de um editor de texto formatado pode impedir a entrega limpa ou ativar o Unicode. Como um exemplo do mundo real, alguns sistemas empresariais internos emitem um breve aviso aos consultores: "caracteres especiais em SMS de saída: por favor, esteja ciente de que qualquer SMS de saída enviado deve ter 250 caracteres ou menos. se sua mensagem foi copiada e colada de um modelo salvo e contém uma vírgula (,) ou apóstrofo ('), remova o caractere especial e insira-o novamente antes de enviar". Substituir aspas inteligentes por aspas retas padrão (') garante a conformidade com o GSM-7.
  2. Substitua caracteres não-GSM programaticamente: Se o seu sistema gera SMS dinamicamente, implemente uma função de transliteração para trocar caracteres como "á" por "a", "é" por "e" e "“" por """.
  3. Lide com limitações específicas da plataforma: Se você estiver desenvolvendo em plataformas low-code empresariais, fique atento a como elas lidam com a codificação, como ao gerenciar caracteres especiais em integrações GSM OutSystems, onde variáveis de texto podem converter automaticamente pontuações padrão em equivalentes Unicode durante a serialização JSON.

Snippet de Código Python para Limpar Texto de SMS

Aqui está uma função simples em Python para remover caracteres especiais que o SMS não reconhece ou que forçariam uma codificação UCS-2 cara:

import unicodedata

def sanitize_for_gsm7(text):
    # Map common smart punctuation to GSM-7 equivalents
    replacements = {
        '\u2018': "'", '\u2019': "'", # Smart single quotes
        '\u201c': '"', '\u201d': '"', # Smart double quotes
        '\u2013': '-', '\u2014': '-', # En and em dashes
        '\u20ac': 'EUR'               # Replace Euro sign if needed
    }
    for unicode_char, gsm_char in replacements.items():
        text = text.replace(unicode_char, gsm_char)
    
    # Normalize accents (e.g., é to e)
    normalized = unicodedata.normalize('NFD', text)
    gsm7_text = "".join([c for c in normalized if not unicodedata.combining(c)])
    return gsm7_text

message = "Hello! Your appointment is confirmed for tomorrow é."
print(sanitize_for_gsm7(message))
# Output: "Hello! Your appointment is confirmed for tomorrow e."

Eliminando a Ansiedade de Codificação com o MySMSGate

Para empresas de serviços locais, escolas e clínicas, preocupar-se com codificação de caracteres, limites de segmento e estruturas de cobrança complexas é uma dor de cabeça desnecessária. É aqui que a escolha entre um gateway de SMS vs API de SMS tradicional se torna crítica.

O MySMSGate resolve esse problema completamente. Em vez de rotear suas mensagens por redes de operadoras caras com preços rígidos multiplicados por segmento, o MySMSGate transforma seu próprio telefone Android e cartão SIM em um gateway de SMS.

Veja como o MySMSGate muda o jogo para empresas que buscam reduzir custos:

  • Preço Fixo: Cobramos uma taxa fixa de $ 0,02 por mensagem enviada, independentemente do tamanho, codificação de caracteres ou segmentos. Você não precisa se preocupar se um emoji ou caractere acentuado vai duplicar sua fatura.
  • Use seu Próprio Número: As mensagens são enviadas diretamente do cartão SIM do seu telefone Android. Seus clientes veem um número de celular local e reconhecível, aumentando as taxas de resposta e abertura.
  • Sem Registros Complexos: Evite os registros complexos de 10DLC, aprovações de operadoras e taxas mensais de marca associadas a APIs tradicionais como Twilio.
  • Suporte a Dual SIM e Vários Dispositivos: Gerencie vários telefones e cartões SIM a partir de um único painel, escolhendo exatamente de qual linha enviar para cada conversa com o cliente.

Perguntas Frequentes

Revise estas perguntas comuns sobre codificação de caracteres de SMS, caracteres especiais e limites de mensagens.

Quais caracteres especiais reduzem o limite do SMS para 70 caracteres?

Qualquer caractere não incluído no conjunto de caracteres GSM-7 padrão forçará a codificação UCS-2, reduzindo o limite para 70 caracteres. Isso inclui emojis, alfabetos não latinos (cirílico, árabe, grego, hebraico) e certas letras acentuadas ou pontuações estilizadas (como aspas inteligentes curvas).

Os espaços contam como caracteres em um SMS?

Sim, cada espaço conta como um único caractere nos padrões de codificação GSM-7 e UCS-2.

Por que minha plataforma de SMS me cobra por várias mensagens quando enviei apenas uma?

Se a sua mensagem excedeu 160 caracteres (em GSM-7) ou 70 caracteres (em UCS-2), a operadora dividiu a mensagem em vários segmentos. As APIs tradicionais cobram por segmento, o que significa que uma única mensagem longa pode facilmente custar o dobro ou o triplo da tarifa básica.

Como posso testar se minha mensagem de SMS contém caracteres especiais?

Você pode usar calculadoras de segmento de SMS online ou executar um script simples de higienização no seu backend para detectar se o seu texto ativa a codificação Unicode UCS-2 antes de enviá-lo ao seu provedor de API.