Teslim Sağlığı & Politikası ✓ Canlı

Webhook teslim garantileri: retry, circuit breaker (sürekli başarısız endpoint'i koruma), 72 saat kalıcı durdurma ve hacim cap'i. Endpoint sağlığın doğrudan teslim akışını (ve senkron hook'larda tenant deneyimini) etkiler. Sağlık bildirimleri delivery.* lifecycle webhook'larıyla gelir.

Retry

Her teslim 6 deneme, exponential backoff (1s → 1h), toplam birkaç saat. Son deneme de başarısızsa teslim dead olur (delivery-logs'ta görünür).

Circuit breaker

Endpoint'in sürekli başarısızsa teslimler geçici atlanır (boşa retry yığmamak için):

  • Açılma: 10 ardışık dead teslim VEYA 15 dakikalık pencerede ≥20 denemede ≥%90 fail.
  • Açıkken: teslimler denenmez — delivery-logs'ta skipped (skipReason: 'open'|'half-open').
  • Cooldown: 5 dk'dan başlar, her açılışta ikiye katlanır (tavan 1 saat). Cooldown sonunda tek bir probe teslimi denenir.
  • Sıfırlanma: herhangi bir başarılı teslim breaker'ı tamamen sıfırlar.
  • Breaker açıldığında delivery.degraded, kapandığında delivery.restored gönderilir.

72 saat kuralı — kalıcı durdurma

Breaker kesintisiz 72 saat açık kalırsa webhook teslimi KALICI durdurulur(delivery.disabled).
  • Callback API erişimin sürer — düzeltme yaparken veri çekmeye devam edebilirsin; yalnız push teslimi durur.
  • Geri açmak: portaldan "yeniden etkinleştir" VEYA başarılı bir test event (breaker'ı otomatik sıfırlar + kalıcı disable'ı kaldırır).

Hacim cap'i (throttle)

  • Sınır: kurulum başına 120 teslim/dk (toplu ürün/kategori event'leri için 60/dk).
  • Aşımda: teslimler hemen düşürülmez — 10 dakikaya kadar geciktirilir; tavanı aşanlar düşer (delivery-logs'ta dropped, capClass/capCount) ve delivery.throttled gönderilir.
  • Muafiyet: lifecycle event'leri (uninstall / billing / sağlık / redact) bu sınırlardan muaftır.

Senkron gate / action'lar

Breaker açıkken endpoint'ine hiç gidilmez — hook'un kendi failMode kararı anında uygulanır (open → allow, closed → deny). Restoran personeli bekletilmez. failMode:closed kullanıyorsan endpoint sağlığın doğrudan tenant deneyimidir.

Manuel yeniden gönderme (redeliver)

Geliştirici, portaldaki teslim loglarından başarısız bir teslimi elle yeniden gönderebilir (GitHub "Redeliver" paritesi). Teslim, install'ın güncel webhookUrl + secret'iyle yeni bir deliveryId altında normal retry hattına girer.

idempotencyKey (envelope id) AYNI kalır → senin dedup'ın çift işlemeyi önler. Yani redeliver'da aynı id'yi tekrar görürsen güvenle yut. Manuel redeliver breaker/cap'ten bağımsızdır; başarılı bir redeliver breaker'ı doğal bir probe gibi kapatabilir.

Özet — sağlık sinyalleri

Durumdelivery-logsWebhook
Breaker açıldıskippeddelivery.degraded
Normale döndüdelivery.restored
72h → kalıcı durduskippeddelivery.disabled
Cap aşıldıdroppeddelivery.throttled