Schutz vor doppelten Lieferungen

Die meisten Systeme wiederholen einen Webhook-Versuch, wenn sie keine schnelle Antwort erhalten. Falls der erste Versuch tatsächlich angekommen ist, wird Ihr Shopify Flow-Workflow für ein einzelnes Ereignis zweimal ausgeführt - was zu einer zweiten E-Mail, einem doppelten Tag und einer wiederholten Bestellnotiz führt.

Der Schutz vor doppelten Zustellungen verhindert dies. Er ist standardmäßig bei jedem Webhook deaktiviert.

So funktioniert es

Falls Ihr Versandsystem eine eindeutige ID pro Ereignis enthält, geben Sie den Namen des Headers an, der diese ID enthält, unter „Erweiterte Einstellungen“ → „Erkennung doppelter Zustellungen“.

Verhalten
Erste Anfrage mit einer bestimmten ID Bei normaler Verarbeitung fließt das Material
Bitte innerhalb von 24 Stunden wiederholen 200 OK mit duplicate: true - nicht an Shopify Flow gesendet
Eine andere ID Wie üblich bearbeitet
Anfrage ohne diesen Header Wie üblich bearbeitet
Feld wurde leer gelassen Jede Anfrage wird bearbeitet - es ändert sich nichts

Gängige Header-Bezeichnungen: Event-Id, Idempotency-Key, X-Request-Id. Bei der Übereinstimmung wird die Groß-/Kleinschreibung nicht berücksichtigt.

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

Warum liefert die Wiederholung immer noch den Wert 200?

Gerade eine Antwort, die nicht im 2xx-Bereich liegt, erschwert es dem Absender, einen erneuten Versuch zu unternehmen. Die Antwort 200 signalisiert ihm, dass das Ereignis sicher verarbeitet wurde, sodass er den Vorgang beendet - während duplicate: true im Hauptteil es Ihnen ermöglicht, die beiden Ergebnisse zu unterscheiden, falls Sie die Antworten protokollieren.

Wo Duplikate auftreten

Ein unterdrücktes Duplikat:

  • Es wird kein Eintrag im Aufrufverlauf erstellt, sodass dies nicht auf Ihren Plan angerechnet wird
  • wird im Live Request Inspector angezeigt, während Sie den Webhook bearbeiten, als unterdrücktes Duplikat gekennzeichnet

Diese Kombination ist bewusst gewählt: Ihr Verlauf und Ihr Kontingent bleiben unberührt, aber ein Anruf wirkt niemals so, als wäre er einfach spurlos verschwunden.

Die Wahl der richtigen Kopfzeile

Die ID muss über den gesamten Wiederholungsversuch hinweg konsistent und für jedes Ereignis eindeutig sein - darin besteht der gesamte Mechanismus.

Gut: Eine Ereignis-ID oder ein Idempotenzschlüssel, der vom Absender einmalig generiert wird, sobald das Ereignis eintritt.

Falsch und beim Speichern abgelehnt: Proxy-gesteuerte Header wie X-Forwarded-For, CF-* oder X-Signature. Da sich deren Wert pro Anfrage oder pro Hop ändert, würden sie niemals mit einer Wiederholung übereinstimmen - was stillschweigend statt mit einer Fehlermeldung zu scheitern.

Sollte der Deduplizierungs-Shop vorübergehend nicht verfügbar sein

Die Zustellung wird verarbeitet, anstatt verworfen zu werden. Ein doppelter Workflow-Durchlauf stellt ein weitaus geringeres Problem dar als ein verlorenes Ereignis; daher ist die Funktion bewusst so ausgelegt, dass sie im Zweifelsfall zugunsten des Benutzers entscheidet.