Çağrı kayıtlarını kendi veritabanımıza aktarmak için bir webhook alıcısı geliştiriyorum.
Ne yapmaya çalışıyordum: Sunucu kesintileri sırasında webhook entegrasyonunun dayanıklılığını test etmek.
Ne denedim: Uç noktamı kasten 500 Internal Server Error dönecek şekilde ayarlayıp bir çağrı başlattım.
Ne bekliyordum: Sistemin başarısız olan isteği birkaç dakika sonra tekrar denemesini (retry) bekliyordum.
Ne oldu: İstek tekrar denenmedi ve çağrı kaydı kayboldu. Ayrıca üst üste hata döndüğümde entegrasyon otomatik olarak “Pasif” duruma geçti.
Sistemde otomatik bir tekrar deneme mekanizması olmadığına göre, sunucumuzda kısa süreli bir kesinti yaşandığında veri bütünlüğünü nasıl garanti edebiliriz? Sunucu tekrar ayağa kalktığında eksik çağrıları (reconciliation) tamamlamak için önerilen en iyi yöntem nedir?
Webhook gönderimlerimiz şu an şuan tek gönderimliliktir. Uç noktanız 500 (veya 200 dışında herhangi bir kod) dönerse istek tekrarlanmaz. Yanıtı 15 saniye içinde beklеnir; bu sürede yanıt gelmezse istek düşer.
Ayrıca bir koruma var: 1 saat içinde 4 başarısız yanıt alırsak entegrasyon otomatik olarak “Kırık” durumuna geçer ve siz Aktif’e alana kadar hiçbir event gönderilmez.
Bu nedenle uç noktanızın işi kuyruğa alıp hemen 200 dönmesini, ağır işlemi arka planda yapmasını öneriyoruz. Kesinti sonrası eksik çağrıları tamamlamak için GET /api/v3/calls?started_at[gte]=…&started_at[lte]=…&sort=started_at.asc&limit=100 ile kesinti aralığını çekip uuid üzerinden upsert edebilirsiniz; API yalnızca sonlanmış çağrıları ve son 12 ayı döner.
Burada yazdığım bilgiler Hipcall Webkancaları v1 için geçerlidir. İlerleyen dönemde https://www.standardwebhooks.com/ 'e uygun ikinci bir versiyon geliştirilecektir.