Beskyttelse mod dobbeltlevering

De fleste systemer forsøger igen at udløse en webhook, hvis de ikke modtager et hurtigt svar. Hvis det første forsøg faktisk nåede frem, kører din »Shopify Flow«-arbejdsgang to gange for én begivenhed - en ekstra e-mail, et dobbelt tag eller en gentagen ordrekommentar.

Beskyttelsen mod dobbeltlevering forhindrer dette. Den er som standard slået fra på alle webhooks.

Sådan fungerer det

Hvis dit afsendelsessystem indeholder et unikt id for hver begivenhed, skal du angive navnet på den header, der indeholder dette id, under »Avancerede indstillinger« → »Detektering af dobbeltleveringer«.

Adfærd
Første forespørgsel med et givet id Ved normal behandling udløser det Shopify Flow
Gentag inden for 24 timer 200 OK med duplicate: true - sendes ikke til Shopify Flow
Et andet id Behandlet som normalt
Anmodning uden denne header Behandlet som normalt
Feltet er tomt Hver eneste anmodning behandles - der sker ingen ændringer

Almindelige navne på headere: Event-Id, Idempotency-Key, X-Request-Id. Der skelnes ikke mellem store og små bogstaver ved sammenligningen.

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"}'

Hvorfor returnerer gentagelsen stadig 200?

Et svar, der ikke er en 2xx-kode, er netop det, der gør det sværere for afsenderen at forsøge igen. Et svar med koden 200 fortæller afsenderen, at begivenheden er blevet håndteret korrekt, så den stopper - mens duplicate: true i svarteksten giver dig mulighed for at skelne mellem de to udfald, hvis du logger svarene.

Hvor der forekommer dubletter

Et undertrykt duplikat:

  • der oprettes ingen post i opkaldshistorikken, så det tæller ikke med i din plan
  • vises i Live Request Inspector, mens du redigerer webhooken, markeret som et undertrykt duplikat

Den kombination er bevidst valgt: Din historik og din kvote forbliver uberørte, men et opkald ser aldrig ud som om det er forsvundet uden videre.

Valg af den rigtige overskrift

ID’et skal være det samme ved hvert nyt forsøg og unikt for hver hændelse - det er hele mekanismen.

God: et begivenheds-id eller en idempotensnøgle, der genereres én gang af afsenderen, når begivenheden finder sted.

Fejl, og afvist ved lagring: proxy-styrede headere såsom X-Forwarded-For, CF-* eller X-Signature. Deres værdi ændrer sig pr. anmodning eller pr. hop, så de vil aldrig matche en gentagelse - hvilket medfører en lydløs fejl i stedet for en tydelig fejlmeddelelse.

Hvis dedup-lageret kortvarigt er utilgængeligt

Leveringer behandles i stedet for at blive afvist. En dobbeltkørsel af arbejdsgangen udgør et langt mindre problem end en mistet hændelse, så funktionen er bevidst designet til at fungere på den sikre side.