Beskyttelse mot dobbeltlevering

Beskyttelse mot dobbeltlevering

Kopier side

Stopp dupliserte webhook-leveranser: angi overskriften med unik hendelses-ID, så sendes gjentakelser innen 24 timer ikke til Shopify Flow.

De fleste systemer prøver på nytt med en webhook når de ikke får et raskt svar. Hvis det første forsøket faktisk kom frem, kjøres Shopify Flow-arbeidsflyten din to ganger for én hendelse - en ekstra e-post, en duplisert tag, en gjentatt bestillingsmerknad.

Beskyttelsen mot dobbeltlevering forhindrer dette. Den er som standard deaktivert på alle webhooks.

Slik fungerer det

Hvis sendesystemet ditt inneholder en unik ID for hver hendelse, må du oppgi navnet på overskriften som inneholder denne under Avanserte innstillinger → Deteksjon av dupliserte leveranser.

Atferd
Første forespørsel med en gitt ID Behandles som vanlig, utløser Shopify Flow
Gjenta innen 24 timer 200 OK med duplicate: true - sendes ikke til Shopify Flow
Et annet ID Behandlet som vanlig
Send forespørselen uten denne overskriften Behandlet som vanlig
Feltet er tomt Hver forespørsel blir behandlet - ingenting endres

Vanlige navn på overskrifter: Event-Id, Idempotency-Key, X-Request-Id. Sammenligningen tar ikke hensyn til store og små bokstaver.

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 gir gjentakelsen fortsatt 200?

Et svar som ikke er av typen 2xx er nettopp det som gjør det vanskeligere for avsenderen å prøve på nytt. Et svar på 200 forteller avsenderen at hendelsen er håndtert på en sikker måte, slik at den avbryter - mens duplicate: true i brødteksten lar deg skille mellom de to utfallene hvis du logger svarene.

Der det oppstår duplikater

Et undertrykt duplikat:

  • oppretter ingen oppføring i brukshistorikken, så det teller ikke med i abonnementet ditt
  • vises i Live Request Inspector mens du redigerer webhooken, merket som et undertrykt duplikat

Denne kombinasjonen er bevisst valgt: historikken og kvoten din forblir uberørt, men det ser aldri ut som om en samtale har forsvunnet uten at man merker det.

Å velge riktig overskrift

ID-en må være stabil gjennom hele forsøksprosessen og unik for hver hendelse - det er hele mekanismen.

God: en hendelses-ID eller idempotensnøkkel som genereres én gang av avsenderen når hendelsen inntreffer.

Feil, og avvist ved lagring: proxy-kontrollerte overskrifter som X-Forwarded-For, CF-* eller X-Signature. Verdiene deres endres for hver forespørsel eller hvert hopp, så de vil aldri stemme overens ved en gjentakelse - noe som fører til en stille feil i stedet for en tydelig feilmelding.

Hvis dedupliseringslageret er midlertidig utilgjengelig

Leveransen behandles i stedet for å bli avvist. En dobbeltkjøring av arbeidsflyten er et langt mindre problem enn en tapt hendelse, så funksjonen er bevisst utformet slik at den faller tilbake på standardinnstillingen.