BlendFi
Webhooks

Retentativas e replay

Cronograma concreto de retentativas, semântica de códigos de status, comportamento da fila de mensagens com falha (DLQ) e como fazer reentrega manual depois de uma correção.

O que a BlendFi faz quando o seu endpoint não está acessível, o que o seu endpoint pode retornar para controlar o comportamento de retentativa e como recuperar entregas que falharam.

O cronograma de retentativas

Linear, cerca de 30 segundos entre tentativas. Não é exponencial.

TentativaDispara em (acumulado)
1t = 0
2~30 s
3~60 s
4~90 s
5~120 s
(DLQ)~150 s

Timeout HTTP por tentativa: 5 segundos. Acima disso, a tentativa é tratada como falha de rede e conta como retentativa.

Depois de 5 tentativas, a mensagem de entrega vai para uma fila de mensagens com falha (DLQ) dentro da BlendFi. A linha org_webhook_deliveries correspondente permanece com status dispatched, peculiaridade operacional na v1; visível ao parceiro via GET /v1/webhook_deliveries/{id}.

O endpoint permanece ativo

Mesmo depois de uma entrega esgotar retentativas, o endpoint em si não é desativado automaticamente. Continua recebendo novos eventos. Desativar um endpoint é uma ação iniciada pelo parceiro: PATCH /v1/webhook_endpoints/{id} com status: "disabled", ou remoção definitiva via DELETE.

O que a sua resposta controla

Como a BlendFi trata cada status HTTP que o seu endpoint retorna:

Sua respostaA BlendFi trata comoNotas
2xx (200, 201, 204, …)SucessoEntrega confirmada. Sem mais retentativas.
5xx (500, 502, 503, …)RetentativaFalha transitória de infra do seu lado.
408 Request TimeoutRetentativaProcessamento lento; a BlendFi tenta novamente.
409 ConflictRetentativaRace condition no seu handler.
425 Too EarlyRetentativaStatus HTTP específico que significa "ainda não estou pronto".
429 Too Many RequestsRetentativaMesmo se você estiver rate-limited.
Outros 4xx (400, 401, 403, 404, 410, …)Falha terminalEntrega marcada failed. Sem auto-desativação.
3xx (qualquer redirect)Falha terminalA BlendFi não segue redirects. Código http_redirect_blocked.
Erro de rede / TCP / TLS / DNSRetentativaConta como retentativa normal.

O erro mais comum: retornar não-2xx para uma duplicata. A BlendFi vai continuar retentando. Sempre retorne 2xx para duplicatas (use X-Blendfi-Event-Id como chave de controle de duplicatas); só falhe para erros genuínos de processamento.

Janela de replay (lado servidor)

Independente do cronograma de retentativas. Toda entrega assinada carrega um X-Blendfi-Timestamp; a BlendFi trata entregas com timestamp mais antigo que 300 segundos no momento do recebimento como tentativas de replay e rejeita. Esse limite é aplicado no seu verificador (veja Verificação de assinatura), a BlendFi não faz replay de payloads antigos, mas um atacante com assinatura vazada pode tentar.

Implicação prática: se o seu endpoint cair por mais de 5 minutos e a última retentativa da BlendFi esgotar, a entrega original some da janela de assinatura viva. Você ainda pode recuperar fazendo a reentrega manual do evento (que produz timestamp e assinatura novos), veja abaixo.

Reentrega manual

Quando uma entrega esgota retentativas (ou você só quer reprocessar por qualquer motivo), faça a reentrega:

curl -X POST $BLENDFI_BASE/v1/webhook_deliveries/del_01J.../redeliver \
  -H "Authorization: Bearer $BLENDFI_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Isso cria uma nova linha de entrega apontando para o evento original. Timestamp novo, assinatura nova, orçamento de retentativa novo. O ID do evento original permanece o mesmo, a sua chave de controle de duplicatas ainda funciona, então uma reentrega bem-sucedida deve ser um replay sem efeito do seu lado.

O dashboard de entregas:

curl $BLENDFI_BASE/v1/webhook_endpoints/we_01J.../deliveries \
  -H "Authorization: Bearer $BLENDFI_KEY"

Mostra o status de toda entrega recente, succeeded, failed, dispatched, com a última mensagem de erro. Útil quando um parceiro pergunta "a BlendFi tentou nos alcançar nesse horário?"

Procedimento de recuperação (indisponibilidade → reprocessar)

O que fazer depois de uma indisponibilidade de várias horas no seu endpoint:

  1. Confirme que o endpoint voltou. Faça curl no seu URL /blendfi-webhooks com um payload sintético + assinatura válida, verifique se o seu caminho de código está saudável.
  2. Liste as entregas falhas. GET /v1/webhook_endpoints/{id}/deliveries?status=failed, o filtro por intervalo temporal é seu amigo.
  3. Reconcilie contra o seu estado local. Para cada entrega falha, decida se você realmente perdeu o evento ou se outros caminhos (polling, UI manual) pegaram.
  4. Reentregue as que você perdeu. POST /v1/webhook_deliveries/{id}/redeliver por entrega. Idempotency-Key por chamada.
  5. Acompanhe o dashboard de entregas. Confirme que cada reentrega tem sucesso.

Para janelas muito grandes (milhares de entregas perdidas), reconcilie via GET /v1/conversions e GET /v1/users primeiro, o seu estado local mais uma consulta ao estado canônico costuma resolver mais rápido que reentrega por evento.

Leia em seguida

Nesta página