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 caracteres especiais precisam para enviar SMS, ajudando você a entender como as mudanças ocultas de codificação podem inflacionar drasticamente seus custos de envio de mensagens.

Por que caracteres especiais alteram o comprimento 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 aspas inteligentes copiadas do Microsoft Word —, toda a codificação da mensagem muda para UCS-2 (Unicode).

A ideia de que, sob a codificação UCS-2, as mensagens 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 único emoji, ela será dividida e cobrada como dois segmentos de SMS separados por provedores de API tradicionais como Twilio ou Plivo.

Compreender quais caracteres especiais costumam afetar as mensagens é crucial para manter seus custos operacionais baixos, especialmente se você administra um negócio de serviços locais, como uma clínica, salão ou oficina que envia lembretes de consultas aos seus clientes.

Explicação das codificações GSM-7 vs. UCS-2

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ção básica. 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. Essa sobrecarga de dados é o motivo pelo qual as operadoras reduzem a capacidade do segmento para 70 caracteres quando o UCS-2 é acionado.

A tabela definitiva de mapeamento de caracteres especiais de SMS

Abaixo está uma tabela com o número de caracteres que os caracteres especiais precisam para enviar SMS. Esta tabela descreve os caracteres padrão GSM-7, caracteres estendidos GSM-7 (que exigem 2 espaços de caracteres dentro do limite de 160) e 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 toda a mensagem para Unicode70 caracteres

Como mostrado na tabela, usar um caractere estendido GSM-7 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 que não seja GSM como "á" (frequentemente usado em configurações em espanhol de 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 afetam 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), vejamos 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! É"

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

No entanto, devido ao "É" acentuado, a mensagem é forçada a usar UCS-2. O limite de segmento agora é de 70 caracteres. Sua mensagem de 123 caracteres é dividida em dois segmentos (o primeiro segmento tem 67 caracteres, o segundo tem 56 caracteres devido aos cabeçalhos de segmentação). Os gateways de API tradicionais cobrarão por 2 mensagens 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 APIs de SMS mais baratas 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 os textos dos seus 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 vírgula copiado de um editor de rich text pode impedir a entrega limpa ou acionar o Unicode. Como exemplo do mundo real, alguns sistemas empresariais internos emitem um breve aviso aos consultores: "caracteres especiais de SMS de saída: por favor, esteja ciente de que qualquer SMS de saída enviado deve ter 250 caracteres ou menos. se a sua mensagem foi copiada e colada de um modelo salvo e contiver uma vírgula (,) ou apóstrofo ('), por favor 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 de plataformas: Se você estiver desenvolvendo em plataformas low-code corporativas, 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.

Trecho de código Python para limpar textos de SMS

Aqui está uma função Python simples 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 segmentos e estruturas de cobrança complexas é uma dor de cabeça desnecessária. É aqui que a escolha entre um gateway de SMS tradicional vs API de SMS torna-se crucial.

O MySMSGate resolve esse problema por completo. Em vez de rotear suas mensagens por redes de operadoras caras com preços estritos multiplicados por segmentos, o MySMSGate transforma seu próprio celular Android e cartão SIM em um gateway de SMS.

Aqui está como o MySMSGate muda o jogo para empresas que buscam reduzir custos:

  • Preço de Tarifa Plana: 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 celular Android. Seus clientes veem um número móvel 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 Múltiplos Dispositivos: Gerencie vários celulares e cartões SIM a partir de um único painel de controle, escolhendo exatamente de qual linha enviar para cada conversa com o cliente.

Perguntas Frequentes

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

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

Qualquer caractere não incluído no conjunto de caracteres padrão GSM-7 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 em ambos os 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 múltiplos segmentos. As APIs tradicionais cobram por segmento, o que significa que uma única mensagem longa pode facilmente custar 2x ou 3x a tarifa básica.

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

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