Saltar para o conteúdo principal
Os webhooks de saída permitem que os seus sistemas reajam a eventos no Flowella sem consultar periodicamente a API. Cada webhook tem um URL, um segredo de assinatura e uma lista de tipos de eventos. Quando ocorre um desses eventos, o Flowella envia um POST JSON assinado para o URL. Pode gerir os webhooks na aplicação em Settings → Webhooks (consulte Adicionar e gerir webhooks de saída) ou com a API de webhooks. Esta página é a referência do que o Flowella envia.

Tipos de eventos

Marque estes eventos quando adicionar um webhook, ou passe-os em events quando criar um com a API. Os eventos de contacto só são disparados para estas chamadas de API de contacto individual. Não são disparados para POST /v1/contacts/bulk-upsert, para contactos criados por mensagens recebidas, nem para alterações feitas na aplicação ou sincronizadas a partir do HubSpot.
Problema conhecido: optout.created não é disparado para o primeiro opt-out de um contacto num número WhatsApp, quer o contacto envie uma palavra-chave, quer chame POST /v1/opt-outs. De momento só é disparado quando um contacto que voltou a dar consentimento faz opt-out novamente. Não dependa dele para captar todos os opt-outs: liste os opt-outs com GET /v1/opt-outs (âmbito contacts:read).
O Flowella também envia webhook.test quando seleciona Send test event na aplicação ou chama POST /v1/webhooks/{id}/test. Não pode subscrevê-lo. O respetivo data é { "test": true, "sentAt": "<ISO 8601 time>" }.
Uma mensagem de saída pode produzir dois eventos message.sent: um quando o Flowella a entrega à Meta e outro quando a Meta a comunica como enviada. Os dois têm valores id de nível superior diferentes. Use data.messageId para os associar à mesma mensagem.

Formato do pedido

O Flowella envia cada evento como um POST HTTP com estes cabeçalhos: O Flowella não envia outros cabeçalhos personalizados. O tipo e o ID do evento estão no corpo.

Corpo

Cada webhook tem uma versão de payload, devolvida como payloadVersion pela API de webhooks. A versão 1 é a predefinição de todos os webhooks, e não existe nenhuma definição na aplicação ou na API para a alterar. As duas versões usam estes envelopes:
O Flowella não envia um evento cujo data tenha mais de 256 KB.

Verificar assinaturas

Verifique a assinatura de cada pedido antes de confiar nele. O Flowella calcula X-Flowella-Signature desta forma:
  • Algoritmo: HMAC com SHA-256.
  • Chave: o segredo de assinatura como texto UTF-8, exatamente como foi guardado. Um segredo gerado pela API inclui o prefixo whsec_.
  • Mensagem: o corpo do pedido em bruto, byte a byte, tal como o Flowella o enviou. Nada mais é assinado: não há carimbo de data/hora nem URL na assinatura.
  • Resultado: hexadecimal minúsculo, 64 caracteres, sem prefixo sha256=.
Para verificar, calcule o mesmo HMAC sobre o corpo em bruto e compare-o com o cabeçalho em tempo constante. Durante as 24 horas seguintes a uma rotação através da API, o pedido inclui ambos os cabeçalhos: aceite-o se qualquer um deles corresponder a um segredo que tenha.
Calcule a assinatura sobre o corpo em bruto antes de qualquer middleware o analisar ou reformatar. Se a sua framework analisar o JSON e o voltar a serializar, os bytes mudam e a assinatura não corresponde.

Respostas, repetições e tempos limite

O Flowella entrega vários eventos em simultâneo, por isso podem chegar fora de ordem. Use created_at ou occurred_at se a ordem for importante. Responda com um estado 2xx assim que a assinatura for validada e depois processe o evento em segundo plano. Para ver como as repetições aparecem na aplicação, consulte Repetições e back-off.

Eliminar eventos duplicados

O seu endpoint pode receber o mesmo evento mais do que uma vez: uma repetição depois de o seu endpoint ter excedido o tempo limite mas ainda ter processado o pedido, ou um reenvio através da API. Elimine duplicados com base no id de nível superior:
  1. Guarde o id de cada evento que processa.
  2. Se um id recebido já estiver guardado, responda 200 e não faça mais nada.
  3. Mantenha os IDs guardados pelo menos durante o tempo em que poderá reenviar entregas.
Não elimine duplicados com base em data.messageId. Eventos diferentes sobre a mesma mensagem, como message.sent e message.delivered, partilham-no.

Feed de eventos

O feed de eventos é uma alternativa aos webhooks baseada em consulta. GET /v1/events devolve os eventos dos últimos 7 dias, incluindo eventos que nenhum webhook subscreve. Precisa do âmbito events:read. Filtre com type (um tipo ou uma lista separada por vírgulas), occurredAfter e occurredBefore, e pagine com limit e cursor. Cada item tem id, type, occurredAt, version, correlationId e data. O id corresponde ao id no corpo do webhook, por isso pode usar o feed para preencher lacunas depois de o seu endpoint ter estado em baixo.

Gerir webhooks com a API

Todos os endpoints de webhooks precisam de uma chave de API ou de um token de acesso OAuth com o âmbito webhooks:manage. As chaves criadas na aplicação têm-no. Consulte a introdução à API para a autenticação. Os objetos webhook contêm id, name, url, events, isActive, consecutiveFailures, signingSecretPrefix (os primeiros 8 caracteres do segredo atual), payloadVersion, lastTriggeredAt, disabledAt, createdAt e updatedAt. Aplicam-se algumas regras aos webhooks geridos através da API:
  • Não pode escolher o segredo de assinatura através da API. POST /v1/webhooks gera um que começa por whsec_ e devolve-o uma única vez, como signingSecret.
  • Os reenvios não contam para a contagem de falhas nem a repõem. O Flowella só entrega um reenvio enquanto o webhook estiver ativo e ainda subscrever esse tipo de evento.
  • O URL tem de seguir as mesmas regras de URL que na aplicação.

Rodar um segredo de assinatura

Rode um segredo quando suspeitar que foi divulgado, ou com uma periodicidade regular. A rotação funciona para qualquer webhook que tenha um segredo, incluindo webhooks cujo segredo escreveu na aplicação.
1

Pedir um novo segredo

Chame o endpoint de rotação e guarde o signingSecret da resposta. O Flowella só o devolve uma vez.
2

Aceitar ambos os segredos durante 24 horas

As novas entregas são assinadas com o novo segredo em X-Flowella-Signature e com o segredo antigo em X-Flowella-Signature-Previous. Um handler que ainda use o segredo antigo continua a funcionar se verificar ambos os cabeçalhos, como no exemplo em Verificar assinaturas.
3

Mudar para o novo segredo

Atualize o seu handler para o novo segredo dentro de 24 horas. Depois disso, o Flowella deixa de enviar X-Flowella-Signature-Previous.
Alterar o segredo na aplicação com New signing secret não tem sobreposição: o segredo antigo deixa de funcionar imediatamente.

Testar localmente

Para receber webhooks no seu próprio computador, exponha o seu servidor local através de um túnel público, como o ngrok ou o Cloudflare Tunnel. Use o URL público do túnel como endpoint. Depois use Send test event para enviar pedidos sempre que precisar. O Flowella recusa endereços locais e privados, por isso um URL localhost não funciona.

Relacionado

Gerir webhooks na aplicação

Adicione endpoints, envie eventos de teste e consulte o registo de entregas.

Introdução à API

Autenticação, âmbitos, limites de taxa e erros.

Chaves de API

Crie a chave de que precisa para a API de webhooks.

Developer hub

Pedidos de API recentes, guias de início rápido e a API sandbox.
Última modificação em 24 de outubro de 2026