Guia de integração de API de mensagens: REST, SMPP e webhooks
Integração de API de mensagens para desenvolvedores: REST, SMPP e webhooks, autenticação, idempotência, relatórios de entrega, retentativas, limites e testes.
Por OmniChannels.ai Editorial Team · Revisado por BroadNet Messaging Solutions Team
Integração
Resposta curta
Use uma API REST para enviar mensagens a partir de aplicações, SMPP apenas para SMS de alto volume quando você já opera infraestrutura de nível de telecom, e webhooks para receber relatórios de entrega e mensagens recebidas. Autentique cada chamada, envie uma chave de idempotência em cada envio para que novas tentativas nunca dupliquem mensagens, trate o status de entrega como assíncrono, faça backoff diante de erros HTTP 429 e 5xx e teste os caminhos de falha em um sandbox antes da produção.
Nesta página
- Qual interface usar: REST, SMPP ou webhooks?
- Como autenticar?
- Como enviar uma mensagem com segurança?
- Por que a idempotência importa?
- Como funcionam os relatórios de entrega?
- Como tratar novas tentativas e limites de taxa?
- Como testar antes de entrar em produção?
- Exemplo prático: um serviço de OTP e notificação de pedidos
- Quais são os erros de integração mais comuns?
- Como a OmniChannels.ai ajuda
Pontos principais
- REST atende à maioria das integrações de aplicações; SMPP é um protocolo binário persistente criado para o throughput de SMS entre sistemas de mensagens.
- Uma requisição de envio aceita significa que a mensagem foi colocada na fila, não que foi entregue; o status final chega depois, por webhooks ou por relatórios de entrega SMPP.
- O HTTP 429 Too Many Requests está definido na RFC 6585; os clientes devem reduzir o ritmo e respeitar qualquer cabeçalho Retry-After.
- Chaves de idempotência permitem repetir com segurança um envio que expirou, sem mandar a mesma mensagem duas vezes ao cliente.
- A Meta assina os webhooks da WhatsApp Cloud API para que os receptores possam verificar que os eventos realmente vieram da Meta.
Este guia é para desenvolvedores backend, arquitetos de soluções e CTOs que integram uma aplicação a um provedor de mensagens para WhatsApp, SMS ou e-mail. Ele explica qual interface usar e como tratar autenticação, idempotência, relatórios de entrega, novas tentativas, limites de taxa e testes, com formatos ilustrativos de requisição e resposta. Para sincronizar conversas com um CRM, consulte o guia complementar sobre como conectar um CRM com webhooks.
Qual interface usar: REST, SMPP ou webhooks?
Use REST para enviar, webhooks para receber e SMPP apenas para SMS de alto volume quando você já opera SMPP. Eles são complementares, não concorrentes: a maioria das integrações combina chamadas REST de saída com webhooks de retorno.
| Aspecto | API REST | SMPP | Webhooks |
|---|---|---|---|
| Direção | Seu app → provedor | Bidirecional em uma sessão | Provedor → seu app |
| Transporte | Requisição/resposta HTTPS | Sessão TCP persistente, PDUs binárias | HTTPS POST para o seu endpoint |
| Canais | WhatsApp, SMS, e-mail, outros | Somente SMS | Eventos de todos os canais |
| Uso típico | Enviar mensagens, gerenciar modelos, consultar status | SMS em massa entre sistemas de mensagens | Status de entrega, mensagens recebidas |
| Pontos fortes | Simples, compatível com firewalls, payloads ricos | Throughput, janelamento, padrão de telecom | Tempo real, sem polling |
| Atenção a | Limites de taxa, timeouts | Gestão de sessão, binds, keep-alives | Novas tentativas, duplicatas, segurança |
As sessões SMPP (Short Message Peer-to-Peer) começam com um bind (transmitter, receiver ou transceiver), enviam mensagens com submit_sm, recebem relatórios de entrega e SMS recebidos por deliver_sm e se mantêm ativas com enquire_link. É eficiente, mas operacionalmente mais pesado que HTTPS.
Como autenticar?
Use o método mais forte que o provedor oferecer, mantenha segredos fora do código e autentique os dois sentidos.
- Chamadas de saída: chaves de API ou tokens bearer OAuth 2.0 enviados no cabeçalho
Authorizationsobre TLS. Guarde-os em um gerenciador de segredos e faça a rotação periodicamente e após mudanças na equipe. - SMPP: ID de sistema e senha no bind, normalmente restritos a endereços IP em lista de permissão e, quando houver suporte, sobre TLS.
- Webhooks recebidos: verifique uma assinatura em todo evento. A Meta assina os payloads de webhook da WhatsApp Cloud API com uma assinatura HMAC-SHA256 no cabeçalho
X-Hub-Signature-256, calculada com o segredo do seu app; os provedores costumam oferecer um esquema semelhante. Calcule a assinatura sobre o corpo bruto antes de fazer o parse.
Use credenciais separadas por ambiente, para que uma chave de teste vazada não consiga enviar tráfego de produção.
Como enviar uma mensagem com segurança?
Envie por uma fila, inclua uma chave de idempotência e trate a resposta como "aceita", não como "entregue".
Requisição de envio ilustrativa
O formato abaixo é um pseudo-JSON para ilustração, não a API de um provedor específico.
POST /v1/messages
Authorization: Bearer <token>
Idempotency-Key: 7f3c9a2e-order-55821-shipped
{
"channel": "whatsapp",
"to": "+9715XXXXXXXX",
"template": {
"name": "order_shipped",
"language": "ar",
"variables": ["Layla", "55821", "15 March"]
},
"client_reference": "order-55821",
"callback_url": "https://api.example.com/webhooks/messaging"
}
Resposta ilustrativa
202 Accepted
{
"message_id": "msg_01HZX...",
"status": "accepted",
"client_reference": "order-55821",
"created_at": "2026-10-09T12:00:00Z"
}
Guarde o message_id imediatamente junto à sua própria referência. Tudo o que acontece depois chega de forma assíncrona.
Por que a idempotência importa?
Porque as redes expiram depois que o servidor já agiu. Se a requisição de envio expira e você tenta de novo às cegas, o cliente pode receber dois OTPs ou dois avisos de envio. Uma chave de idempotência permite que o servidor reconheça a nova tentativa e devolva o resultado original.
Regras que funcionam:
- Derive a chave do evento de negócio (por exemplo, ID do pedido mais tipo de evento), não de um valor aleatório a cada tentativa.
- Reutilize a mesma chave em todas as novas tentativas do mesmo envio.
- Mantenha as chaves por tempo suficiente para cobrir a sua janela de novas tentativas.
- Se o provedor não oferecer suporte a chaves, elimine duplicatas do seu lado antes de enviar.
O rascunho do IETF para o cabeçalho Idempotency-Key padroniza esse padrão para APIs HTTP; as implementações dos provedores variam, então leia a documentação deles.
Como funcionam os relatórios de entrega?
O status de entrega chega depois, na forma de eventos: por webhooks no WhatsApp e na maioria das APIs REST, e por relatórios de entrega deliver_sm no SMPP. O significado dos status difere por canal; nosso guia sobre status de entrega de mensagens explica cada um.
Webhook de status ilustrativo
POST /webhooks/messaging
X-Signature: sha256=<hmac>
{
"event_id": "evt_9c1...",
"type": "message.status",
"message_id": "msg_01HZX...",
"client_reference": "order-55821",
"status": "delivered",
"timestamp": "2026-10-09T12:00:04Z",
"error": null
}
Trate os eventos de status de forma defensiva:
- Elimine duplicatas por
event_idou por ID da mensagem mais status. - Nunca regrida uma mensagem de "read" para "delivered" quando os eventos chegarem fora de ordem.
- Responda 2xx rapidamente e processe depois a partir de uma fila.
- Registre os códigos de erro das mensagens com falha e decida quais admitem nova tentativa.
- Espere lacunas: algumas rotas de SMS devolvem relatórios de entrega limitados, e o status de leitura depende do canal e das configurações do usuário.
Como tratar novas tentativas e limites de taxa?
Repita apenas o que pode dar certo, faça backoff exponencial com jitter e respeite os sinais do servidor.
| Resposta | Significado | Ação |
|---|---|---|
| 2xx | Aceita | Guardar o ID, aguardar o status |
| 400 / 422 | Requisição inválida (número, modelo, variáveis) | Não repetir; corrigir os dados |
| 401 / 403 | Problema de autenticação ou permissão | Não repetir; alertar |
| 409 | Conflito, geralmente chave de idempotência duplicada | Buscar o resultado original |
| 429 | Requisições demais (RFC 6585) | Aguardar o Retry-After ou fazer backoff |
| 5xx / timeout | Erro de servidor ou de rede | Repetir com a mesma chave de idempotência e backoff |
A RFC 9110 define o cabeçalho Retry-After, que pode trazer segundos ou uma data. Coloque um limitador de taxa no cliente à frente dos seus envios para ficar abaixo dos limites documentados do provedor, em vez de descobri-los por meio de erros. O WhatsApp também tem limites do lado da Meta sobre quantos clientes distintos você pode contatar, descritos em limites de mensagens e classificação de qualidade.
Como testar antes de entrar em produção?
Teste os caminhos de falha, não só o caminho feliz.
Checklist pré-produção
- Envie cada modelo com valores de tamanho real, incluindo texto em árabe.
- Force um timeout e confirme que a nova tentativa não duplica.
- Envie para um número inválido e confirme que o erro é tratado sem nova tentativa.
- Reenvie um webhook duas vezes e fora de ordem; confirme um único estado final.
- Envie um webhook com assinatura inválida; confirme que é rejeitado.
- Provoque 429s com um teste de carga no sandbox, se permitido.
- Faça a rotação de uma chave de API e confirme que não há indisponibilidade.
- Verifique se os logs contêm IDs de mensagem, mas não o corpo completo das mensagens nem códigos OTP.
- Execute um pequeno piloto em produção com números internos em cada canal.
Sandboxes raramente reproduzem com exatidão o comportamento das operadoras e da Meta; por isso, mantenha o monitoramento nas primeiras semanas de produção.
Exemplo prático: um serviço de OTP e notificação de pedidos
A "Qafilah Logistics" (fictícia), uma empresa de encomendas na Arábia Saudita, envia atualizações de pedido pelo WhatsApp com fallback por SMS e OTPs de autenticação.
- Arquitetura: os eventos de pedido vão para uma fila; um worker de envio chama a API REST com uma chave de idempotência
shipment-id:event. - Fallback: se o WhatsApp devolver status de falha para um usuário que não usa WhatsApp, o worker envia um SMS com uma nova chave,
shipment-id:event:sms. - OTP: os códigos expiram rápido, então os envios de OTP não são repetidos depois da janela de expiração; o usuário solicita um novo código. Veja o guia de mensagens de autenticação por OTP.
- Relatórios de entrega: um receptor de webhook verifica assinaturas, elimina eventos duplicados e atualiza uma tabela de status que nunca regride.
- Limites: um limitador token bucket mantém a taxa de envio por canal abaixo dos limites documentados.
Quais são os erros de integração mais comuns?
- Tratar "aceita" como "entregue".
- Tentar de novo com uma nova chave de idempotência a cada tentativa.
- Fazer processamento pesado dentro da requisição do webhook.
- Pular a verificação de assinatura nos webhooks.
- Repetir em loop erros de validação 4xx.
- Registrar nos logs códigos OTP e o conteúdo completo das mensagens.
- Usar credenciais de produção em ambientes de teste.
Como a OmniChannels.ai ajuda
A OmniChannels.ai, com tecnologia da BroadNet Technologies, oferece uma API REST/JSON com documentação pública, especificação OpenAPI 3.1 e SDK em TypeScript, cobrindo SMS, WhatsApp, RCS, Messenger, Instagram, Telegram, e-mail e push, incluindo modelos de autenticação do WhatsApp com OTP one-tap, zero-tap e copy-code. Os webhooks informam os status de entrega em um formato normalizado único, o SMPP 3.4 sobre TLS atende ao SMS de alto volume, e um servidor MCP conecta agentes de IA. Relatórios de entrega com filtros e exportação em CSV ajudam a conciliar o que a sua integração enviou. Comece pela documentação para desenvolvedores e pelo quickstart.
Perguntas frequentes
Devo integrar com um provedor de mensagens por REST ou por SMPP?
Escolha REST para quase todos os casos de uso de aplicações: ele funciona sobre HTTPS, é simples de proteger e oferece suporte a canais ricos, como o WhatsApp. Escolha SMPP quando você envia grandes volumes de SMS, já opera clientes SMPP e precisa de uma conexão persistente com janelamento. O SMPP vale apenas para SMS; WhatsApp, e-mail e canais sociais usam APIs HTTP.
O que é uma chave de idempotência em uma API de mensagens?
Uma chave de idempotência é um valor único que seu sistema envia com uma requisição para que o servidor reconheça repetições. Se a chamada de envio expira e você tenta de novo com a mesma chave, o provedor devolve o resultado original em vez de enviar uma segunda mensagem. O IETF tem um rascunho de padrão para um cabeçalho HTTP Idempotency-Key, mas os provedores implementam as chaves de formas diferentes; por isso, confira a documentação.
Por que os relatórios de entrega às vezes chegam fora de ordem?
Os eventos de status são gerados por sistemas diferentes, como operadoras, a Meta e o provedor, e entregues por redes com novas tentativas. Um evento de leitura pode chegar antes de um evento de entrega, e duplicatas são normais. Guarde cada status com seu carimbo de data e hora, nunca faça uma mensagem voltar de um estado posterior para um anterior e elimine duplicatas por ID da mensagem e status.
Como minha aplicação deve tratar os limites de taxa?
Leia os limites documentados do provedor, coloque os envios em fila em vez de disparar direto das requisições dos usuários e use um limitador do tipo token bucket, ou semelhante, do seu lado. Ao receber HTTP 429, pause e tente de novo após o tempo indicado no cabeçalho Retry-After ou com backoff exponencial e jitter. Não repita erros de validação 4xx.
O que testar em um sandbox de mensagens?
Teste falhas de autenticação, números de telefone inválidos, erros em variáveis de modelo, timeouts com novas tentativas idempotentes, webhooks duplicados e fora de ordem, respostas de limite de taxa, mensagens longas e em árabe e a verificação da assinatura do webhook. Depois execute um pequeno piloto em produção com números reais, porque sandboxes raramente reproduzem com exatidão o comportamento das operadoras e da Meta.
Fontes
Continue lendo
Mais guiasIntegração
Como escolher uma API de mensagens: checklist para CTOs
Como escolher uma API de mensagens: checklist para CTOs sobre canais, qualidade de rota, webhooks, segurança, limites, retentativas, SMPP, MCP, compliance e preços.
13 min de leitura
Integração
API de SMS vs SMPP: qual conexão usar?
API de SMS vs SMPP: sessões e binds, janela, throughput, relatórios de entrega, codificação, segurança com TLS, esforço operacional e como migrar.
12 min de leitura
WhatsApp
Códigos de erro da Cloud API do WhatsApp: significado e solução
Os códigos de erro mais comuns da Cloud API do WhatsApp, de 131047 e 131026 a 132001 e 130429: significado, como corrigir e quando não tentar de novo.
8 min de leitura
