Como Configurar Chamadas de Retorno de Status de Entrega de SMS
Aprenda a configurar callbacks de status de entrega de SMS escolhendo o caso de uso certo, preparando um endpoint, mapeando eventos e registrando a URL.

Escolha o caso de uso de callback correto
Comece com uma pergunta: o que o callback deve mudar em seu negócio? Para alertas de pedidos, monitoramento de entrega de OTP ou notificações de clientes, a resposta geralmente é diferente. Uma loja pode se importar com um status de “entregue” antes de enviar um recibo. Um banco pode se importar com “falhou” em 30 segundos, porque um código de login que nunca chega tem um custo de suporte direto.
Essa escolha é importante antes de você tocar em qualquer configuração. Se você está documentando como configurar callbacks de status de entrega de SMS, escolha um fluxo de trabalho primeiro e nomeie o resultado em palavras simples: confirmar entrega, identificar falhas ou rastrear atrasos. Um callback pode suportar os três mais tarde, mas a primeira versão deve responder a uma pergunta prática.
Mantenha o escopo estreito. Uma equipe de envio pode precisar apenas de atualizações de status para o SMS final na cadeia, não para cada lembrete. Um fluxo de redefinição de senha pode precisar de um callback apenas quando a mensagem for aceita ou rejeitada, já que “aguardando” não é um estado útil para um usuário que já está olhando para uma tela de login.
Confirme o modelo de callback do seu provedor de SMS
Os provedores não falam todos a mesma língua. Alguns usam recibos de entrega, outros usam webhooks, e alguns expõem uma URL de status que você deve consultar. Leia a documentação do provedor para os nomes exatos dos eventos e verifique quais status estão disponíveis.
Um provedor pode enviar apenas estados finais. Outro pode enviar várias atualizações para uma mensagem, e isso muda a forma como você armazena os dados depois. Se o provedor suporta callbacks em nível de mensagem e em nível de conta, escolha aquele que corresponde ao fluxo de trabalho que você escolheu acima. Esse detalhe evita confusões quando o primeiro teste chega e seu aplicativo vê dois eventos para um SMS.
Há uma pequena armadilha aqui. A documentação muitas vezes mostra um exemplo de JSON, e então a conta real retorna uma forma ligeiramente diferente para um nível de produto diferente. Compare as notas da API, os rótulos do painel e quaisquer cargas úteis de exemplo antes de conectar o endpoint. Se o seu provedor oferecer um documento separado para recibos de entrega, leia esse também.
Para equipes que já lidam com outros sistemas baseados em eventos, o padrão parecerá familiar. A lógica é semelhante a eventos de webhook de email para emails transacionais: você precisa saber quais eventos existem, quais você se importa e quais nunca devem acionar a lógica voltada para o cliente.
Prepare seu endpoint público de callback
Seu endpoint de callback precisa de uma URL HTTPS pública. Não uma porta local. Não um IP privado. O provedor deve alcançá-lo de fora da sua rede, e a maioria das plataformas de SMS recusará HTTP simples em produção. Uma estrutura comum é /webhooks/sms/status, porque permanece legível quando logs e painéis se acumulam.
Mantenha a rota estável. Se você renomeá-la toda semana, as configurações do seu painel ficarão desatualizadas em relação ao seu código. Use um caminho, um método e um manipulador para a primeira versão. POST é a escolha usual.
Aceite solicitações recebidas sem bloquear em trabalhos lentos. O endpoint deve ler a solicitação, validar o básico e responder rapidamente. Processamento pesado pertence a uma fila de trabalho ou tarefa em segundo plano. Assim, um pico de callbacks não mantém a conexão aberta tempo suficiente para causar tentativas de reenvio.
Teste a rota com um corpo de solicitação simples antes de conectar o provedor. Uma resposta 200 em um POST fictício diz mais do que uma longa sessão de depuração depois. Se você já está confortável com o design de callback de outros canais, a mesma disciplina aparece nas melhores práticas de notificação push na web, especialmente em relação ao tempo de resposta e clareza do endpoint.
Defina a carga útil do evento que seu aplicativo precisa
Não armazene todos os campos apenas porque o provedor os envia. Mapeie o callback em seu modelo interno primeiro. No mínimo, a maioria das equipes precisa de um ID de mensagem, destinatário, status, timestamp e campo de código de erro. Alguns provedores também incluem dados de operadora, país ou uma referência de gateway, e isso pode ajudar durante o trabalho de suporte.
Mantenha seu mapeamento rigoroso. Se o provedor chama um campo de sms_id e seu banco de dados usa provider_message_id, escreva a tradução uma vez e reutilize-a. Isso previne problemas de “funciona em staging” quando uma segunda integração chega. Um payload de callback deve atualizar um registro de SMS, não criar duplicatas misteriosas.
Pense sobre o histórico de status, não apenas o estado mais recente. Uma única mensagem pode passar de aceita para enviada para entregue, ou de na fila para falhada. Se você colapsar isso em um único campo de texto muito cedo, você perde a trilha que explica por que um código chegou atrasado. Essa trilha é importante quando um cliente diz: “Eu nunca recebi”, e o suporte precisa de mais do que um encolher de ombros.
Para equipes que já gerenciam a identidade do remetente e a confiança da mensagem em e-mails, o mesmo tipo de disciplina de campo aparece na configuração DKIM SPF DMARC para transacionais e outros trabalhos de autenticação. O modelo de dados é diferente, mas o hábito é o mesmo: capture os campos que provam o que aconteceu.
Registre o callback em suas configurações de SMS
A maioria dos provedores permite que você insira a URL do callback em uma tela de dashboard ou através de uma configuração de API. Alguns exigem configuração em nível de conta primeiro, depois substituições em nível de mensagem. Procure por rótulos como callback de entrega, callback de status, URL de webhook ou URL de recibo. A redação varia, mas o objetivo não.
Use os nomes exatos dos campos do provedor quando o dashboard os solicitar. Uma URL para eventos de entrega pode ser separada de uma URL para respostas recebidas. Se você misturar os dois, seu aplicativo pode receber dados que não consegue interpretar. Esse é um erro simples, e é comum o suficiente para merecer um item de checklist.
As permissões podem ser importantes aqui. Uma conta apenas para administradores pode ser necessária para alterar as configurações de callback, ou uma chave de API pode precisar de um escopo de escrita. Se o dashboard solicitar verificação antes de salvar, finalize essa etapa antes de enviar o código. Caso contrário, o callback pode parecer “configurado” enquanto nenhuma solicitação chega ao seu endpoint.
Uma vez que a configuração é salva, envie uma mensagem da mesma conta ou inquilino que você usa em produção. Um callback configurado no espaço de trabalho errado é uma falha entediante, o que é bom apenas no sentido de que falhas entediantes são mais fáceis de corrigir do que as silenciosas.
Proteja e autentique as solicitações recebidas
Nunca confie no corpo da solicitação por padrão. Verifique um token secreto compartilhado, um cabeçalho de assinatura, uma lista de IPs permitidos ou um timestamp assinado, dependendo do que seu provedor suporta. Um desses métodos pode ser suficiente por si só, mas muitas equipes combinam duas verificações para um melhor controle.
A validação da assinatura deve ocorrer antes de qualquer gravação no banco de dados. Se a assinatura falhar, rejeite a solicitação e registre a tentativa. Se o provedor incluir um timestamp, compare-o com o relógio do seu servidor para reduzir o risco de repetição. Um callback enviado ontem não deve ser aceito hoje apenas porque o formato ainda parece válido.
A lista de IPs permitidos parece simples até que um provedor mude a infraestrutura. Use-a apenas se o provedor publicar faixas fixas e mantiver essas informações atualizadas. Tokens secretos geralmente são mais fáceis de manter, e a validação de assinatura é mais forte do que um token estático sozinho. Um rápido aparte: se sua equipe de segurança pedir os três, eles não estão sendo dramáticos.
Não se esqueça da proteção do transporte. HTTPS é a base. Os certificados devem ser válidos, e redirecionamentos devem ser evitados se o provedor não os seguir. Este é um daqueles passos que parece entediante até que o primeiro ator mal-intencionado tente postar atualizações de entrega falsas em seu sistema.
Armazene atualizações de entrega em seu sistema
Armazene cada callback contra o registro original de SMS usando o ID da mensagem do provedor e seu próprio ID interno. Esse link é a chave para cada relatório posterior. Sem ele, você acaba procurando logs pelo número de telefone, o que se torna complicado rapidamente uma vez que várias campanhas usam o mesmo destinatário.
Escreva as mudanças de status em ordem. Se o provedor enviar enfileirado, depois enviado, depois entregue, mantenha essa sequência. Se um callback mais antigo chegar atrasado, ignore-o ou compare-o com o último estado conhecido antes de salvar. Uma atualização de “enviado” atrasada não deve sobrescrever um status “entregue” mais recente.
Use timestamps tanto para o horário do provedor quanto para o horário de recebimento local, se puder. O primeiro ajuda no rastreamento externo. O segundo ajuda na resposta a incidentes quando seu próprio servidor estava lento ou brevemente indisponível. Essa combinação fornece detalhes suficientes para responder a um ticket de suporte sem adivinhações.
Uma tabela simples pode ajudar a equipe a concordar sobre o manuseio de estados:
| Status do provedor | Ação interna | Exemplo de consequência |
|---|---|---|
| enfileirado | Salvar registro inicial | Mensagem está aguardando para ser enviada |
| enviado | Marcar transmissão iniciada | Operadora aceitou a mensagem |
| entregue | Marcar entrega completa | Usuário provavelmente recebeu o SMS |
| falhou | Armazenar código de erro e razão | Acionar suporte ou lógica de reenvio |
Pense também sobre relatórios posteriores. Se sua equipe de sucesso do cliente quiser ver taxas de entrega por campanha, armazene um ID de campanha junto com a mensagem. Se as finanças quiserem reconciliar o volume de OTP, mantenha o nome do template. Campos pequenos economizam longas reuniões.
Configure alertas e manuseio de fallback
Callbacks falham de maneiras previsíveis: o endpoint retorna 500, a verificação de assinatura começa a rejeitar tudo, ou o provedor para de enviar solicitações para uma conta específica. Coloque um alerta em cada um desses casos. Se nenhum callback chegar para uma mensagem após um intervalo razoável, isso é um sinal que vale a pena acionar ou pelo menos enviar um e-mail.
Defina um alerta para “callbacks parados”, outro para “validação falhou” e um terceiro para “status de erro recebido”. Esses são três problemas diferentes. Um callback ausente pode significar problemas de rede. Um status falhado pode significar que a operadora rejeitou o SMS. Uma falha de validação pode significar que seu segredo foi rotacionado e o provedor não foi atualizado.
Tenha um caminho de fallback. Se o provedor suportar polling, use-o quando os callbacks estiverem ausentes ou atrasados. Polling não deve ser sua primeira escolha, mas é melhor do que pontos cegos. Algumas equipes fazem polling apenas para mensagens de alto valor, como OTPs ou confirmações de pagamento, o que mantém o tráfego extra contido.
Se sua equipe já monitora sinais de entregabilidade em outros canais, hábitos semelhantes se aplicam nas melhores práticas de manuseio de e-mails devolvidos. O canal é diferente, mas a resposta operacional é a mesma: fique atento a estados de erro, registre-os de forma clara e decida quando tentar novamente, alertar ou parar.
Documente a regra de fallback em um só lugar e faça o suporte lê-la. Um cliente não deve ter que adivinhar se um SMS falhado tentará novamente automaticamente. Se a resposta for “não para OTPs”, diga isso claramente. Se a resposta for “poll após 10 minutos”, escreva o número exato uma vez e use-o em todos os lugares.
Nesta página
← Todos os artigosUm clique. Ele nos diz o que escrever a seguir.
Nenhuma avaliação ainda — a sua seria a primeira.
Comentários
Os comentários são lidos antes de aparecerem.