Análise de risco
Toda mensagem passa por uma classificação automática antes de entrar na fila. É ela que decide entre enviar na hora ou reter o envio para uma revisão humana.
A verificação protege a rota que entrega as suas mensagens. Conteúdo de golpe derruba a reputação do caminho e, com ela, a taxa de entrega de todos os envios que passam por ali.
Como a classificação funciona
A análise tem duas camadas. Primeiro, regras determinísticas leem o texto e os links em busca de padrões conhecidos: pedido de senha, urgência artificial, caixa alta, encurtador de link, domínio que não combina com quem assina a mensagem. Depois, um modelo de linguagem classifica o conteúdo em risco baixo, médio ou alto.
O modelo só pode aumentar o risco calculado pelas regras, nunca reduzir. Instruções endereçadas ao revisor dentro da mensagem, do tipo “ignore as instruções acima”, são tratadas como sinal de risco, não como comando.
Os links são abertos e conferidos antes do envio: se respondem, para onde redirecionam, se usam HTTPS e se o domínio final é coerente com o remetente.
O que acontece com cada resultado
Com risco baixo, o envio entra na fila e segue para a operadora, com status queued e resposta 202. É o caminho de quase toda mensagem transacional.
Com risco médio ou alto, o envio esperaria por uma pessoa. Como isso muda o que você contratou — a mensagem não sai agora — a API não decide sozinha: POST /v1/sms responde 409 review_required e não cobra nada. Quando é seguro explicar, details traz o que ajustar no texto.
{
"error": {
"code": "review_required",
"message": "Este texto não passou na análise automática e iria para revisão manual. Ajuste o texto, use um modelo aprovado ou repita com accept_review: true.",
"status": 409,
"details": [
{
"field": "text",
"code": "artificial_urgency",
"message": "Evite urgência artificial, como “urgente”, “última chance” ou “só hoje”."
}
],
"request_id": "req_2c7v9q"
}
}
A partir daí você tem três saídas: corrigir o texto e enviar de novo, trocar por um modelo aprovado ou repetir a mesma requisição com accept_review: true. Nesse último caso o envio é criado com status review, os créditos ficam reservados e uma pessoa do time decide. Aprovado, ele entra na fila; recusado, os créditos voltam para o saldo e os destinatários ficam como failed. O resultado também chega no webhook.
{
"id": "sms_7f3k2m",
"object": "sms",
"status": "review",
"recipients": 1,
"segments": 1,
"credits": 1
}
Como escrever para passar direto
Quando o risco é médio, a resposta traz uma ou mais orientações sobre o que ajustar. São estas, no mesmo texto que o console mostra:
- Identifique quem envia logo no início, por exemplo “Sua Empresa: …”.
- Evite urgência artificial, como “urgente”, “última chance” ou “só hoje”.
- Evite termos ligados a golpes, como pedidos de senha, dados bancários, prêmios ou bloqueios.
- Evite promessas exageradas ou garantias de ganho.
- Deixe claro o que o destinatário deve fazer e por quê.
- Evite texto em caixa alta e excesso de exclamações.
- Use o endereço completo do link em vez de um encurtador.
- O link não respondeu quando testamos. Confira o endereço.
- Use links com HTTPS.
- O link redireciona para outro domínio. Use o endereço final.
- Use um link do seu próprio domínio, coerente com o remetente.
- Informe exemplos reais para as variáveis, incluindo links completos.
Quando não há orientação
Em risco alto, e sempre que a categoria for golpe, phishing, conteúdo adulto, assédio ou tentativa de manipular o revisor, a mensagem fica retida sem detalhamento. Explicar a regra nesses casos ajudaria a contorná-la. O relatório completo fica com o time, e o suporte responde pelo request_id da requisição.
Modelos passam a análise uma vez
Um modelo é analisado quando você o salva, e não a cada envio. Depois de aprovado, os envios que usam esse modelo nunca pedem confirmação: a redação já foi lida por uma pessoa, então o envio é criado direto, mesmo que a análise do texto final aponte algo.
Em produção, é o caminho que vale a pena. Você escreve a redação uma vez, ela é aprovada uma vez, e daí em diante todo envio sai na hora, com uma requisição menor: template e variables no lugar do texto inteiro. Os modelos ficam em Modelos.