Teslimat davranışı
Standart veri yükü, 5 saniyelik süre sınırı, neden yeniden deneme yapılmadığı ve her teslimat durumunun anlamı.
Webhook iletimi bilinçli olarak basit tutulmuştur ve bu basitliğin alıcı tarafında sonuçları vardır: tek HTTP denemesi, beş saniye, yeniden deneme yok. İşleyicinizin istek sırasında ne kadar işlem yapacağına karar vermeden önce bu sayfayı okuyun.
Standart veri yükü
listing.submission dışındaki tüm olaylar aynı üst düzey yapıda gelir ve olaya özgü alanlar data altında yer alır.
{ "event": "connection.location_connected", "timestamp": "2026-08-25T14:32:10Z", "account_id": 11073, "location_id": "279381", "data": { "platform": "google", "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc" }}data içindeki isteğe bağlı alanlar boş olduğunda null olarak gönderilmez, veri yüküne dahil edilmez. Kodunuzu bu durumlara hazırlıklı yazın: eksik bir anahtarı ve açıkça belirtilmiş bir null değerini aynı şekilde ele alın ve isteğe bağlı olarak belgelenmiş bir anahtarın bulunacağını asla varsaymayın.
İki istisna
5 saniyelik süre sınırı
Her iletim, 5 saniyelik bağlantı zaman aşımı ve 5 saniyelik okuma zaman aşımı olan tek bir POST işlemidir. Uç noktanız zamanında yanıt vermezse deneme sonlandırılır ve timeout olarak kaydedilir.
Bu süre sınırı, işleyicinizin tamamını kapsar. Tek güvenli tasarım şöyledir:
- İmzayı doğrulayın.
- Veri yükünü kalıcı bir yere yazın: bir kuyruk, tablo veya günlük.
200döndürün.
Diğer tüm işlemler (veri zenginleştirme, birden fazla hedefe dağıtım, REST API'ye geri çağrı yapma ve üçüncü taraflarla etkileşim kuran her türlü işlem) bu kuyruktan sonra yapılmalıdır.
Yeniden deneme yapılmaz
Bir iletim tam olarak bir kez denenir. Giderek artan bekleme süreleriyle yeniden deneme, yeniden deneme kuyruğu veya başarısız iletiler için bir kuyruk yoktur. Uç noktanız iki dakika boyunca çalışmazsa bu iki dakikada tetiklenen olaylar kaybolur. Daha sonra ulaşmazlar.
Açıkça belirtilmesi gereken iki sonuç:
- Yönlendirmeler izlenmez. Yönlendirmeler tamamen devre dışıdır; dolayısıyla uç noktanızın döndürdüğü
301veya302, başarısız bir iletim olarak kaydedilir ve ikinci bir URL'ye yönlendirme izlenmez. Webhook URL'nizi nihai URL olarak yapılandırın. Birçok web sunucusunun varsayılan olarak eklediği, yalın alan adındanwwwadresine yapılan yönlendirmelere ve sona eğik çizgi ekleyen yönlendirmelere dikkat edin. - Yalnızca
2xxdöndürülürse iletim başarılı sayılır.3xx,4xxve5xxyanıtlarının tümü başarısızlık olarak kaydedilir.
Yinelenen olaylar ve sıralama
- Aynı olayı iki kez ve iki farklı değişiklik için aynı id değerini alabilirsiniz.
dataiçindeki tanımlayıcılar (bir etkileşim id değeri, bir gönderi öğesi id değeri, bir bağlı hesap id değeri) değişikliği değil, kaynağı tanımlar.interaction.review, yorum her değiştiğinde aynı etkileşim id değeriyle yeniden tetiklenir ve hiçbir olay verisi sürüm veya güncellenme zamanı alanı içermez; bu nedenle id +eventtemelinde olayları kalıcı olarak engelleyen bir işleyici, gerçek düzenlemeleri sessizce yok sayar. Bunun yerine birebir aynı olayları tespit edin: ham gövde baytlarının özetini hesaplayın ve aynı özetin kısa ve sınırlı bir süre içinde (sonsuza kadar değil, birkaç dakika boyunca) tekrarını yok sayın. Aynı id değerine sahip farklı bir gövde, yinelenen bir olay değil, yeni bir değişikliktir. Ardından kaynağı REST API üzerinden yeniden okuyun ve bu okumanın sonucunu esas alın; yazma işlemini atlamak yerine kaynak id değerini yazma işleminin anahtarı olarak kullanın. - Sıralama garanti edilmez ve
timestampbunu düzeltmez. Olaylar birbirinden bağımsız birkaç kanaldan gelir ve geldikleri sırayla iletilir; bu nedenle birlocal_post.published, önce gelmesini beklediğinizlocal_post.createdolayından önce gelebilir. Aynı kaynaktaki iki değişikliğitimestampdeğerine göre sıralamayın: bu zaman damgası değişikliğin gerçekleştiği anda değil, teslimat hazırlanırken eklenir ve olay verisinin hiçbir yerinde sürüm veya sıra numarası bulunmaz. Sıralama önemli olduğunda kaynağı yeniden okuyun ve API'nin döndürdüğü veriyi kullanın. profile.updatediçin yinelenen olaylar bastırılarak konum başına her 60 saniyede tek teslimat yapılır; teslimat sürenin başında gerçekleşir. Bu işlem geciktirme değil, olayları gerçekten tek olaya indirme işlemidir: ilk düzenleme süreyi başlatır ve iletilir, bu süre içindeki her düzenleme atılır ve hiçbir zaman ulaşmaz;changed_fieldsise yalnızca süreyi başlatan düzenlemeyi açıklar. Dolayısıyla olay size sürenin başında ulaşır; bu nedenle olayın ulaşmasıyla tetiklenen yeniden okuma yalnızca ilk düzenlemeyi görebilir. Olaydan en az 60 saniye sonra, süre sona erdiğinde ikinci bir yeniden okuma planlayın ve konumları ayrıca zamanlanmış aralıklarla karşılaştırıp eşitleyin; çünkü bildirimin kendisi de kaybolabilir: tek deneme yapılır, yeniden deneme yapılmaz. Başka hiçbir olay için bu bastırma uygulanmaz.
Kaçırılan bir olayın ardından verileri kurtarma
Yeniden deneme veya olayları yeniden iletme yoktur; bu nedenle her olay grubu için gerektiğinde başvurabileceğiniz, sonucu esas alınacak bir okuma işlemi gerekir. Verileri yalnızca bir sorun var gibi göründüğünde değil, düzenli aralıklarla karşılaştırıp eşitleyin.
Teslimat sonuçları
Dışarıya hiçbir istek gönderilmeyenler de dahil olmak üzere her deneme bir durumla kaydedilir. Kullanılan durum dizeleri tam olarak aşağıdaki gibidir.
Alıcı için kontrol listesi
- Her istekte imzayı doğrulayın; eşleşme yoksa
401döndürün ve hiçbir işlem yapmayın. - Hash değerini ham gövde baytları üzerinden hesaplayın; asla yeniden serileştirilmiş bir nesne üzerinden hesaplamayın.
2xxyanıtını 5 saniyeden çok daha kısa sürede döndürün; işi kuyruğa alın.- Her işleyici yazma işleminde
dataiçindeki kimlikleri anahtar olarak kullanın; böylece tekrarlar aynı sonucu üretir, ancak tekrarlanan bir kimliği asla yapılacak işlem olmadığı şeklinde yorumlamayın. - Geliş sırasından işlem sırası çıkarmayın ve
timestampdeğerine göre sıralama yapmayın. location_iddeğerini alırken dizeye dönüştürün.- Tanımadığınız
eventdeğerlerini yok sayın ve yine de200döndürün. - Webhook URL'sini yönlendirme yapmayan nihai bir URL olarak sunun.
- Verileri düzenli aralıklarla REST API ile karşılaştırıp eşitleyin; eksikleri giderecek bir yeniden deneme mekanizması yoktur.