Proteção contra entregas duplicadas

A maioria dos sistemas volta a tentar enviar um webhook quando não obtém uma resposta rápida. Se a primeira tentativa tiver sido efetivamente recebida, o seu fluxo de trabalho Shopify Flow é executado duas vezes para um único evento - um segundo e-mail, uma etiqueta duplicada, uma nota de encomenda repetida.

A proteção contra entregas duplicadas impede que isso aconteça. Esta funcionalidade está desativada por predefinição em todos os webhooks.

Como funciona

Se o seu sistema de envio incluir um identificador único por evento, indique o nome do cabeçalho que o contém em «Definições avançadas» → «Detecção de entregas duplicadas».

Comportamento
Primeira solicitação com um determinado ID Quando processados normalmente, os incêndios propagam-se
Repita no prazo de 24 horas 200 OK com duplicate: true - não enviado para o Shopify Flow
Um identificador diferente Processado normalmente
Envie o pedido sem esse cabeçalho Processado normalmente
Campo deixado em branco Todas as solicitações são processadas - nada muda

Nomes comuns de cabeçalhos: Event-Id, Idempotency-Key, X-Request-Id. A correspondência não distingue maiúsculas de minúsculas.

bash
# Same Event-Id twice - the second is accepted but not re-sent to Flow
curl -X POST https://your-app-url/webhook/ab12cd34 \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: your-token" \
  -H "Event-Id: evt_12345" \
  -d '{"orderId":"1001"}'

Por que é que a repetição continua a devolver o valor 200?

Uma resposta que não seja do tipo 2xx é exatamente o que dificulta a repetição da tentativa por parte do remetente. Responder com 200 indica que o evento foi tratado com segurança, pelo que a tentativa é interrompida - enquanto que duplicate: true no corpo da resposta permite distinguir os dois resultados, caso registe as respostas.

Onde surgem as duplicatas

Uma duplicado suprimida:

  • não cria qualquer registo no histórico de chamadas, pelo que não conta para o seu plano
  • aparece no Live Request Inspector enquanto estiver a editar o webhook, classificada como uma duplicado suprimido

Essa combinação é intencional: o seu histórico e a sua cota permanecem intactos, mas uma chamada nunca dá a impressão de ter desaparecido silenciosamente.

Escolher o cabeçalho adequado

O identificador deve permanecer **estável ao longo da nova tentativa e **ser único para cada evento - é esse o mecanismo na sua totalidade.

Correto: um identificador de evento ou uma chave de idempotência gerada uma única vez pelo remetente quando o evento ocorre.

Inadequado e rejeitado no momento do armazenamento: cabeçalhos controlados por proxy, tais como X-Forwarded-For, CF-* ou X-Signature. O seu valor varia de pedido para pedido ou de salto para salto, pelo que nunca corresponderiam a uma repetição - falhando silenciosamente em vez de de forma evidente.

Caso o repositório de deduplicação fique temporariamente indisponível

A entrega é processada em vez de ser descartada. A execução duplicada de um fluxo de trabalho constitui um problema muito menor do que a perda de um evento, pelo que a funcionalidade foi concebida para dar prioridade à segurança.