Yinelenen teslimat koruması

Yinelenen teslimat koruması

Sayfayı kopyala

Yeniden denenen webhook'ların Shopify Flow iş akışınızı iki kez tetiklemesini önleyin: olay kimliği başlığını belirtin, 24 saatteki tekrarlar atlanır.

Çoğu sistem, hızlı bir yanıt alamadığında webhook'u yeniden dener. İlk deneme gerçekten ulaşmışsa, Shopify Flow iş akışınız tek bir olay için iki kez çalışır; bu da ikinci bir e-posta, yinelenen bir etiket veya tekrarlanan bir sipariş notu anlamına gelir.

Yinelenen teslimat koruması bunu engeller. Bu özellik, her webhook’ta varsayılan olarak devre dışıdır.

Nasıl çalışır?

Gönderim sisteminiz her olay için benzersiz bir kimlik numarası içeriyorsa, bunu taşıyan başlığın adını Gelişmiş Ayarlar -> Yinelenen teslimat algılama bölümünde belirtin.

Davranış
Belirtilen kimliğe sahip ilk istek Normal şekilde işlendiğinde, Shopify Flow'u tetikler
24 saat içinde tekrarlayın 200 OK, duplicate: true ile birlikte - Shopify Flow’a gönderilmedi
Farklı bir kimlik numarası Normal şekilde işlendi
Bu başlık olmadan istekte bulun Normal şekilde işlendi
Alan boş bırakıldı İşlenen her istek - hiçbir şey değişmez

Yaygın başlık adları: Event-Id, Idempotency-Key, X-Request-Id. Eşleştirme işleminde büyük/küçük harf duyarlılığı yoktur.

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

Neden tekrar denemesi hâlâ 200 sonucunu veriyor?

2xx serisi dışındaki bir yanıt, gönderenin yeniden denemeyi zorlaştıran tam da budur. 200 yanıtı, olayın güvenli bir şekilde işlendiğini bildirir ve böylece gönderen durur; buna karşılık, gövdedeki duplicate: true değeri, yanıtları günlüğe kaydettiğinizde bu iki sonucu birbirinden ayırt etmenizi sağlar.

Yinelenen öğelerin görüldüğü yerler

Gizlenmiş bir yinelenen kayıt:

  • çağırma geçmişine herhangi bir giriş oluşturmaz, dolayısıyla planınızın kotasına dahil edilmez
  • webhook'u düzenlerken Canlı İstek Denetçisi'nde görünüyor, "gizlenmiş yinelenen" olarak etiketlendi

Bu kombinasyon kasıtlı olarak tasarlanmıştır: geçmişiniz ve kotanız temiz kalır, ancak bir arama hiçbir zaman sessizce ortadan kaybolmuş gibi görünmez.

Doğru başlığı seçmek

Kimlik, yeniden deneme süreci boyunca sabit olmalı ve her olay için benzersiz olmalıdır - işte mekanizma budur.

Doğru: Olay gerçekleştiğinde gönderen tarafından tek seferlik olarak oluşturulan bir olay kimliği veya idempotans anahtarı.

Hatalı ve kaydetme sırasında reddedildi: X-Forwarded-For, CF-* veya X-Signature gibi proxy tarafından kontrol edilen başlıklar. Bu başlıkların değeri her istek veya her aktarma noktasında değişir; bu nedenle tekrarlanan bir istekle asla eşleşmezler ve bu durum, açıkça hata mesajı vermek yerine sessizce başarısızlıkla sonuçlanır.

Eğer tekilleştirme deposu kısa bir süre kullanılamaz hale gelirse

İletim, kesintiye uğramak yerine işleme alınır. İş akışının iki kez çalıştırılması, bir olayın kaybolmasından çok daha küçük bir sorundur; bu nedenle bu özellik, tasarım gereği “açık” şekilde çalışır.