Solicitação
O que o webhook me envia?
O webhook envia um evento via HTTP POST requisição com Content-Type: application/json com os seguintes parâmetros:
Um
X-Caf-Signaturecabeçalho usado para verificar se a requisição veio da Certta
O corpo da requisição é um
JSONque segue o padrão CloudEvents
Estrutura da requisição
Cada requisição de webhook inclui:
Cabeçalhos
Content-Type
Sempre application/json
User-Agent
Identifica-se como Caf-Webhook/Connect
X-Caf-Signature
Contém a assinatura HMAC SHA-256 do corpo da requisição
Corpo da requisição
O corpo da requisição segue o formato CloudEvents, embora os cabeçalhos HTTP específicos do CloudEvents não estejam incluídos:
Exemplos
Curl
Exemplo de comando curl assumindo SECRET: "dummysecret":
É importante validar a assinatura do payload assim que ele chegar (como um array de bytes), sem qualquer análise das informações. Isso garante a integridade da verificação.
O que devo responder ao webhook?
Casos de erro
A requisição de webhook tem o objetivo de integrar o evento com sucesso e nada além disso. Com esse objetivo em mente, as respostas de erro devem ser usadas apenas para indicar falha na integração do evento (por evento integrado, entende-se que o evento foi recebido com sucesso pelo servidor de webhook).
O mecanismo de entrega do webhook aceita e reconhece erros dentro da série de erros HTTP 5xx, que podem indicar erros no recebimento ou processamento da requisição pelo servidor. As retentativas de entrega ocorrerão apenas para essa classe de erros.
As respostas de erro podem seguir o payload especificado abaixo para detalhar e deixar claro o motivo do erro em nossa auditoria interna. Quaisquer outros campos e/ou formatos serão ignorados.
Se todas as tentativas de entrega falharem, o webhook descarta o evento, que não será mais entregue via webhook!
O número máximo de tentativas, o intervalo entre cada tentativa de entrega e o tempo limite ficam a critério da Certta. Atualmente, consideramos requisições que demoram mais de 2 segundos para responder como timeout e tentamos reenviar os eventos por até 15 minutos.
Tratamento de requisições de webhook
Idempotência
Exemplo de manipulador de webhook
Aqui está um exemplo simples de manipulador de webhook em Node.js Express:
Solução de problemas
Problemas comuns
401 Unauthorized
Seu endpoint retornou um código 401.
Verifique se você está validando as assinaturas corretamente.
Tempo limite
Seu endpoint demorou demais para responder.
Otimize seu código para responder em menos de 2 segundos.
Conexão recusada
A Certta não conseguiu se conectar ao seu endpoint.
Verifique se seu servidor está em execução e acessível.
Rejeição de assinatura
Falha na validação da assinatura do webhook.
Verifique se você está usando o segredo correto e validando os bytes brutos do corpo.
Logs e depuração
Você pode usar os logs de webhook no Trust, a plataforma que gerencia configurações, para visualizar o status de entrega dos eventos recentes e quaisquer mensagens de erro. Os logs mantêm um histórico de:
Tentativas de entrega bem-sucedidas e com falha
Códigos de resposta HTTP recebidos
Carimbos de data e hora das entregas
Erros específicos encontrados durante as entregas
Atualizado

