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.
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).
Endpoint'in sürekli başarısızsa teslimler geçici atlanır (boşa retry yığmamak için):
dead teslim VEYA 15 dakikalık pencerede ≥20 denemede ≥%90 fail.skipped (skipReason: 'open'|'half-open').delivery.degraded, kapandığında delivery.restored gönderilir.delivery.disabled).dropped, capClass/capCount) ve delivery.throttled gönderilir.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.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.| Durum | delivery-logs | Webhook |
|---|---|---|
| Breaker açıldı | skipped | delivery.degraded |
| Normale döndü | — | delivery.restored |
| 72h → kalıcı durdu | skipped | delivery.disabled |
| Cap aşıldı | dropped | delivery.throttled |