POST
para o seu servidor sempre que algo acontece na sua operação — uma mensagem chega, um contato é
criado, um campo é preenchido pelo agente.
Cada empresa tem no máximo um webhook. Não é uma coleção: você configura uma URL e escolhe
quais eventos ela recebe. Tentar criar um segundo devolve
409.Configurar
POST /v1/webhooks com a URL e a lista de eventos. Escopo necessário: webhooks:create.
O que a Nuvia envia
Toda entrega é umPOST com estes headers:
E o corpo tem sempre a mesma estrutura de três campos:
event— o evento que disparou a entrega.timestamp— ISO 8601 UTC, gerado no momento em que a entrega foi enfileirada.data— o recurso relacionado ao evento (veja a tabela abaixo).
Eventos disponíveis
Nos eventos de mensagem, conversa e contato,
data traz o recurso no mesmo formato que a
Referência da API devolve nos GET correspondentes — por exemplo,
GET /v1/messages/conversation/{id} para mensagens.
Trate
data de forma tolerante: leia os campos que você usa e ignore o resto. Campos novos podem
aparecer conforme a plataforma evolui, e isso não é considerado quebra de contrato.FIELD_UPDATED é diferente
Esse evento não devolve uma entidade, e sim a descrição da alteração:
field.context indica a que o campo pertence: contact, conversation ou business. value tem
o tipo do campo — string, número, booleano ou lista. conversationId só vem quando a alteração
aconteceu dentro de uma conversa.
Validar que a chamada veio da Nuvia
O mecanismo disponível é ocustom_headers: cadastre um valor secreto e confira em toda requisição.
Node.js
PUT /v1/webhooks/{id} se suspeitar de vazamento.
Garantias de entrega
Estas são as características reais da entrega. Leia antes de construir algo que dependa de webhook:Não há retry — uma tentativa por evento
Não há retry — uma tentativa por evento
Se o seu servidor estiver fora do ar, devolver
5xx ou estourar o tempo limite, o evento é
perdido. A falha é registrada do lado da Nuvia, mas nada é reenviado. Para dados críticos,
reconcilie periodicamente com a API (por exemplo, listando mensagens da conversa) em vez de
confiar só no webhook.Tempo limite de 10 segundos
Tempo limite de 10 segundos
A Nuvia aguarda no máximo 10 segundos pela sua resposta. Responda
2xx imediatamente e faça o
processamento em background — se você processar antes de responder, entregas legítimas viram
timeout.A ordem não é garantida
A ordem não é garantida
Os eventos de status vêm do WhatsApp, que pode entregá-los fora de ordem (um
MESSAGE_DELIVERED
chegando depois do MESSAGE_READ da mesma mensagem). A Nuvia não reordena. Trate cada evento
pelo estado que ele carrega, sem assumir sequência.Eventos de status só disparam na transição real
Eventos de status só disparam na transição real
MESSAGE_DELIVERED e MESSAGE_READ só são enviados quando o status realmente muda. O WhatsApp
reenvia o mesmo status várias vezes, e essas repetições são descartadas — você não recebe
duplicata por causa disso. Ainda assim, escreva um handler idempotente: use o identificador da
mensagem como chave.Nada é entregue com o webhook inativo
Nada é entregue com o webhook inativo
Com
status: "INACTIVE", ou para eventos que você não incluiu em events, a Nuvia não enfileira
entrega alguma — e não há histórico para recuperar depois. Reativar não recupera o período
parado.Gerenciar a configuração
O
GET devolve um objeto com a configuração da empresa, ou null se não houver nenhuma — não é
uma lista. O id usado no PUT e no DELETE vem desse objeto. Depois de remover, a empresa volta a
poder criar um webhook novo.
Para pausar temporariamente sem perder a configuração, prefira PUT com status: "INACTIVE" em vez
de apagar.
Próximos passos
Exemplos de integração
O webhook dentro de um caso de uso completo, com resposta automática.
Referência da API
Parâmetros e respostas dos endpoints de webhook.