Webhook’lar
Web kancaları (webhooks), önemli bir şey olduğunda — yeni bir kişi oluşturulduğunda, bir randevu alındığında veya bir mesaj geldiğinde — Your AI Connector'ın diğer iş araçlarınızı otomatik olarak bilgilendirmesini sağlar. Güncellemeleri manuel olarak kontrol etmek yerine, bağlı sistemleriniz bir şey olduğu anda anında bildirim alır.
Webhook Nedir?
Bir web kancasını iki uygulama arasında otomatik bir kısa mesaj gibi düşünün. Your AI Connector içinde bir şey olduğunda (yeni bir kişinin kaydolması gibi), platform seçtiğiniz başka bir sisteme anında bildirim gönderir. Bu bildirimlerin gönderilmesi gereken bir web adresi (bir “web kancası URL’si”) sağlarsınız; bu genellikle CRM’niz, otomasyon platformunuz veya geliştiriciniz tarafından sağlanır.
Web kancaları (webhooks) yalnızca Your AI Connector dışına veri gönderir. Bir web kancası, Your AI Connector'den diğer araçlarınıza giden tek yönlü bir yoldur. Platformun İÇİNE potansiyel müşteri, kişi veya mesaj gönderen bir web kancası URL’si yoktur. Bir web sitesi formu, CRM’iniz veya GoHighLevel üzerinden yeni bir potansiyel müşteri eklemek için sisteminiz bunun yerine bir API çağrısı yapar. API Erişimi ( Kişi Oluştur işlemi) ve Huniler bölümlerine bakın. Gelen yön için ihtiyacınız olan tek şey, kendi bölümünde bulunan API anahtarınızdır; API Erişimi bölümüne bakın. Burada açıklanan Web kancaları sayfası yalnızca giden yön içindir.
Not: Web kancalarını ayarlamak bazı teknik yapılandırmalar gerektirir. Bu konuda kendinizi rahat hissetmiyorsanız, bu sayfayı geliştiricinizle paylaşın veya kodlama gerektirmeden web kancası URL’leri sağlayan Zapier, Make veya Pabbly gibi bir otomasyon platformu kullanın.
Yaygın kullanım alanları şunlardır:
- Yeni kişileri CRM’nizle senkronize etmek.
- Bir etiket uygulandığında Zapier, Make veya Pabbly’de bir iş akışını tetiklemek.
- Bir insan uyarıldığında Slack’te ekibinizi bilgilendirmek.
- Bir randevu alındığında takvim sisteminizi güncellemek.
- Konuşma özetlerini veritabanınıza kaydetmek.
Webhook’ları Ayarlama
- Sol kenar çubuğunda Ayarlar’a (dişli simgesi) tıklayın.
- Ayarlar kenar çubuğunda, Entegrasyonlar grubu altında Web kancaları’na tıklayın.
Henüz hiçbir webhook yapılandırılmamış bir hesapta sayfa şu şekilde görünür:
- Sağ üst köşedeki New webhook (Yeni webhook) düğmesine tıklayın. Sayfa içinde bir form açılacaktır:
- Şunları doldurun:
- Uç Nokta URL’si (Endpoint URL) — Your AI Connector'ın etkinlik bildirimlerini göndereceği web adresi. Bunu harici sisteminizden (CRM, otomasyon platformu veya özel sunucu) alırsınız.
- Ad — daha sonra tanıyacağınız bir etiket (örneğin “Slack uyarıları” veya “CRM senkronizasyonu”). Yalnızca referansınız içindir.
Webhook URL’niz herkese açık, erişilebilir bir
https://adresi olmalıdır. Düzhttp://adresleri,localhostveya özel ağ adresleri ve platform içi adresler kaydettiğinizde reddedilir. Kendi makinenizden test etmek için localhost yerine herkese açık bir tünel (webhook.site veya ngrok) kullanın.
- Etkinlikler altında, bu webhook’un almasını istediğiniz etkinlikleri tıklayın — 22 etkinliğin tamamı The 22 Webhook Events bölümünde listelenmiştir.
- (İsteğe bağlı) Your AI Connector uygulamasının geçici bir hata durumunda yeniden deneme yapmasını istiyorsanız Başarısız teslimatları yeniden dene seçeneğini açın — Retrying Failed Deliveries bölümüne bakın.
- Webhook oluştur düğmesine tıklayın. Formun altındaki listede görünecektir ve uç noktanıza örnek bir yük (payload) göndermek için istediğiniz zaman satırındaki Test düğmesine tıklayabilirsiniz.
İzin gerekli. Webhook eklemek, düzenlemek veya test etmek, Entegrasyonlar “düzenleme” izni gerektirir (yalnızca görüntüleme yetkisi olan ekip üyeleri form yerine salt okunur bir bildirim görür).
Bir webhook’u imzalamak için önce kaydedilmiş olması gerekir — düzenlemek için mevcut bir webhook satırını açın; düzenleme formunun altında İmzalama gizli anahtarı paneli görünecektir. Henüz kaydedilmemiş yeni bir taslağın henüz imzalama seçeneği yoktur — bkz. aşağıdaki İmzalı Yükler.
Tüm Müşteri Hesaplarınız İçin Tek Bir Webhook (Ajanslar)
Bir ajans yönetiyorsanız, aynı webhook’u her müşteri hesabında yeniden oluşturmanız gerekmez. Ajans hesabında, webhook formunda fazladan bir geçiş düğmesi bulunur: Tüm müşteri hesapları için de tetikle. Bunu açtığınızda, bu webhook ajansınızın altındaki her müşteri hesabında gerçekleşen etkinlikleri de alır — tek bir uç nokta, tüm ajans.
Nasıl çalışır:
userbloğu, bir etkinliğin hangi müşteriye ait olduğunu size bildirir. Her bildirim, etkinliğin gerçekleştiği hesabı tanımlayan biruserbloğu içerir, böylece otomasyonunuz müşteri bazında yönlendirme yapabilir.- Webhook’unuzun kendi ayarları her yerde geçerlidir. Seçtiğiniz etkinlikler, imzalama gizli anahtarı ve yeniden deneme ayarı, müşteri hesabı teslimatları için de kullanılır.
- Çift teslimat olmaz. Bir müşteri hesabının aynı URL’yi işaret eden kendi webhook’u varsa, o hesabın etkinlikleri için o webhook kullanılır; aynı etkinlik bir uç noktaya asla iki kez gelmez.
- Müşteriler bunu görmez. Webhook, müşteri hesabının kendi Webhook’lar sayfasında görünmez ve müşteriler bunu kapatamaz; yönetimi size aittir.
- Güvenilirlik müşteri hesabı bazında izlenir. Uç noktanız hata vermeye devam ederse, teslimatları başarısız olan hesap için otomatik olarak kapatılır (bkz. Webhook Güvenilirliği), tüm ajans için aynı anda kapatılmaz.
Geçiş düğmesi yalnızca ajans hesaplarında görünür. Bunu API üzerinden ayarlamak da desteklenir — bkz. Webhooks API içindeki apply_to_sub_accounts alanı.
Mevcut Tetikleyici Etkinlikler
22 webhook etkinliğinin her birini bağımsız olarak etkinleştirebilir veya devre dışı bırakabilirsiniz. Bir etkinlik tetiklendiğinde, Your AI Connector ilgili verilerle birlikte webhook URL’nize bir bildirim gönderir. Her etkinlik, ne anlama geldiği ve yük (payload) içinde yer alan event kodu, bu sayfanın alt kısmındaki The 22 Webhook Events bölümünde birlikte listelenmiştir.
Bilmenizde fayda var: Görev Oluşturuldu, Görev Güncellendi ve Görev Tamamlandı seçenekleri tamamen seçilebilir durumdadır ve doğru şekilde kaydedilir. Günlük Özet Oluşturuldu da yakın zamanda eklenmiştir. Bu yükün yapısı için aşağıdaki Görev Tamamlandı Web Kancası bölümüne bakın.
Etiket Tabanlı Webhook Tetikleyicileri
subscribed_to_tags, bir web kancasının etkinliklerini belirli bir etiketle sınırlandırmaz. Yalnızca hangi etiketlerin konuşma özeti bildirimi üreteceğini daraltır. Belirli bir etiket uygulandığında istek almak için, temsilcinin (veya kampanyanın) Etiketler sekmesindeki ilgili etikete bir web kancası URL’si ayarlayın.
Web kancası formunun kendisinde, yeni bir web kancası oluştururken veya mevcut olanı düzenlerken etiket seçici bulunmaz; bu nedenle subscribed_to_tags yalnızca Web Kancaları API aracılığıyla veya destek ekibine danışılarak okunabilir ya da değiştirilebilir.
Bilmenizde fayda var:
subscribed_to_tagslistesine sahip mevcut bir web kancasını düzenlemek (yeniden adlandırmak, etkinliklerini değiştirmek, yeniden denemeleri açıp kapatmak), artık bu listeyi temizlemez; formda geri gönderilecek bir etiket seçici bulunmadığından, bu sayfadan kaydetme işlemi mevcut listeyi olduğu gibi bırakır. (Bu, 21 Temmuz 2026 öncesinde gerçek bir hataydı: web kancası formundan kaydetme işlemi, her zaman boş bir etiket listesi gönderdiği için listeyi silerdi. Eğer bir web kancası bu tarihten öncesubscribed_to_tagslistesini kaybettiyse, API aracılığıyla yeniden yapılandırılması gerekecektir.)
Etiketli Kişiler İçin Özet Oluştur
Bir web kancasının subscribed_to_tags listesi olduğu durumlarda, Özet Oluştur seçeneğini açabilirsiniz. Etkinleştirildiğinde, Your AI Connector bu etiketlerden biri uygulandığında kişi için otomatik olarak bir konuşma özeti oluşturur ve bunu web kancası verilerine dahil eder — ayrı bir istekte bulunmaya gerek kalmadan tam bağlam sunar.
Webhook’unuzu Test Etme
- Ayarlar → Entegrasyonlar → Webhook’lar yolunu izleyin.
- Webhook’unuzun satırında Test Et düğmesine tıklayın.
- Test verilerini alıp almadığını doğrulamak için harici sisteminizi kontrol edin.
- Sisteminizin verileri doğru şekilde ayrıştırabildiğinden emin olmak için veri biçimini gözden geçirin.
Tam bir uçtan uca test için, yapılandırılmış etkinliklerinizden birini tetikleyecek bir mesaj gönderin (bir yayın veya bağlı bir kanala gelen mesaj) ve webhook’un gerçek verilerle tetiklendiğini doğrulayın.
İpucu: Üretim sisteminizi bağlamadan önce ham web kancası verilerini incelemek için geliştirme sırasında webhook.site veya RequestBin gibi bir araç kullanın.
Başarılı Bir Teslimat Nedir
Test düğmesine tıkladığınızda veya olay gerçekten tetiklendiğinde aynı şeyi göndeririz:
- POST isteği (asla GET değil), gövdesi JSON formatında ve
Content-Type: application/jsoniçerir. - İmzalı Yükler altında listelenen başlıklar. İmza başlıkları yalnızca bir imzalama gizli anahtarı belirlediğinizde dahil edilir.
Teslimatı şu durumlarda başarılı kabul ederiz:
- Uç noktanız herhangi bir 2xx durumu ile yanıt verirse (200, 201, 204 — hepsi uygundur).
- 30 saniye içinde yanıt verirse.
İnsanları şaşırtan birkaç şey:
- Yanıt gövdesi yoksayılır. Herhangi bir özel JSON döndürmeniz gerekmez. Boş bir 200 yeterlidir.
- Yönlendirmeler başarısızlık olarak sayılır. Bunları takip etmiyoruz, bu nedenle 301 veya 302 (sondaki eğik çizgi yönlendirmesi veya http’den https’ye yönlendirme dahil) başarısız bir teslimat olarak kaydedilir. Yönlendiren değil, nihai URL’yi kaydedin.
- Sorgu dizeleri tam olarak desteklenir.
https://your-app.com/hook?token=abc123tam olarak kaydettiğiniz şekilde gönderilir, bu nedenle sorgu dizesine bir belirteç koymak, yola koymak kadar iyi çalışır. - URL’niz
https://olmalı ve herkese açık olarak erişilebilir olmalıdır. Your AI Connector'ün kendi altyapısına ait adresler reddedilir, ancak Google Cloud Functions, Cloud Run, App Engine, Firebase Hosting veya başka herhangi bir yerdeki kendi uç noktalarınız sorunsuzdur. - Uç noktanızın önündeki bir güvenlik duvarı veya bot koruma katmanı bizi engelleyebilir. En yaygın durum Cloudflare’dir: Bölgenizde Bot Fight Mode veya yönetilen bir sınama açıksa, isteğimiz sunucunuza ulaşmak yerine 403 ile bir “Just a moment…” sınama sayfası alır — ve sunucudan sunucuya bir istek asla bir tarayıcı sınamasını geçemez, bu nedenle hem Test düğmesi hem de gerçek olaylar aynı şekilde başarısız olur. Test düğmesi, bu durum gerçekleştiğinde size bildirecektir (“Cloudflare isteğimize bir bot sınaması gösteriyor”). Bunu Cloudflare’de, webhook yolunuz (veya
Webhook-Delivery/1.0kullanıcı aracısı) için sınamaları atlayan bir Güvenlik / WAF kuralı ile düzeltin, ardından Test düğmesine tekrar tıklayın. - Güvenlik duvarınız bunun yerine bir IP izin listesine ihtiyaç duyuyorsa (örneğin, basit Bot Fight Mode’un bir WAF kuralı tarafından atlanamadığı, ancak İzin Ver olarak ayarlanmış bir IP Erişim Kuralının ondan önce çalıştığı Cloudflare’in ücretsiz planı), yardımcı olabiliriz: Test düğmesinden veya canlı bir olaydan gelen her teslimat, sabit bir IPv4 adresinden gönderilir (aralıklar yok, IPv6 yok, döndürme yok). Destek ekibiyle iletişime geçin, size izin listesine eklenecek adresi verelim. İmza doğrulamasını gerçek güven denetiminiz olarak tutun, çünkü nereden gelirse gelsin her yükü doğrular.
- Test sonucu, uç noktanızın tam olarak ne yanıt verdiğini size söyler. Başarısız bir test artık genel bir hata yerine gerçek nedeni (uç noktanızın döndürdüğü HTTP durumu, bir zaman aşımı veya adrese hiç ulaşamadığımız) gösterir ve kaydedilmiş bir webhook üzerindeki test, imzalama açıkken tıpkı canlı bir olay gibi imzalı olarak gönderilir.
n8n, Make veya Zapier Kullanımı (“Test URL” ve “Production URL” karşılaştırması)
Otomasyon platformları genellikle size iki farklı webhook adresi verir ve bu durum insanların kafasını karıştırır:
- Bir Test URL’si (n8n’de
/webhook-test/içerir). Bu URL, yalnızca tuvali aktif olarak izlediğinizde ve Listen for test event (veya Test workflow) düğmesine tıkladığınızda veri alır. Tek bir etkinliği yakalar ve ardından dinlemeyi durdurur; bu nedenle Your AI Connector içinde arka arkaya birkaç kez Test Et düğmesine tıklamak yalnızca ilkini yakalar ve bu da yalnızca dinleme penceresi o anda aktifse gerçekleşir. Test etmek için: önce n8n’de Listen for test event düğmesine tıklayın, ardından Your AI Connector'e geri dönün ve bir kez Test Et düğmesine tıklayın. - Bir Üretim URL’si (n8n’de
/webhook/içerir,-testiçermez). Canlı etkinlikler için Your AI Connector içine yapıştırılacak olan budur. Yalnızca iş akışınız Aktif duruma getirildiğinde çalışır. İş akışı aktif değilse, Your AI Connector verileri doğru şekilde göndermiş olsa bile n8n isteği “404 / webhook not registered” hatasıyla reddeder.
Özetle: dinleme yaparken Test URL’si ile test edin, ancak webhook’un gerçek kişiler üzerinde çalışmaya devam etmesi için Production URL’sini Your AI Connector içine kaydedin ve iş akışının Active olduğundan emin olun.
Webhook Veri Formatı
Bir web kancası tetiklendiğinde, Your AI Connector web kancası URL’nize yapılandırılmış veriler (JSON) gönderir. Zapier veya Make gibi bir otomasyon platformu kullanıyorsanız, bu verileri sizin için otomatik olarak ayrıştırır. Özel bir entegrasyon oluşturuyorsanız:
{
"event": "contactCreated",
"contact": { "id": "<contact-id>", "first_name": "Jane", "...": "..." },
"campaign": { "id": "<campaign-id>", "name": "AI Receptionist", "status": "Live" },
"agent": { "id": "<agent-id>", "name": "Front Desk" },
"user": { "id": "<account-id>", "email": "owner@example.com" }
}
| Alan | Açıklama |
|---|---|
event |
Bildirimi tetikleyen tam etkinlik dizesi (örneğin, contactCreated, booked). Bu, etkinlik listesinde gösterilen görünen etiket değildir; her etiket ve eşleşen kodu The 22 Webhook Events bölümündedir. |
contact |
Etkinliğin ilgili olduğu kişi veya bir kişiye bağlı olmayan etkinlikler (örneğin creditsRecharged) için null değeri. |
campaign |
Kişinin ait olduğu kampanya veya kampanya yoksa null değeri. |
agent |
Görüşmeyi yöneten temsilci veya temsilci yoksa null değeri. |
user |
Verilerin sahibi olan hesap için temel kimlik bilgileri. |
campaignveyaagent— genellikle biri, ikisi birden değil. Hesabınız temsilciler kullanıyorsa, kişileriniz bir kampanya yerine bir temsilciye bağlıdır; bu nedenlecampaign,nullolarak gelir veagenthangisinin ilgilendiğini belirtir. Kampanya tabanlı eski hesaplar bunun tersini görür. Hangisi doluysa onu okuyun;campaigndeğerinin her zaman orada olduğunu varsaymayın.
agentbloğu 15 Ağustos 2026 tarihinde geldi. Bu blok, bir konuşmaya bağlı olaylar olancampaign(sonlandırılmış sohbet, rahatsız etme, devam etme, arşivden çıkarma, yapay zeka duraklatma, yeni mesaj, konuşma özeti ve bir etiket üzerinde ayarlayabileceğiniz webhook) ile birlikte yer alır ve işlem yapan temsilcininidvenamebilgilerini veya temsilci dahil olmadığındanulldeğerini taşır. Tamamen ek niteliğindedir: halihazırda aldığınız her alan değişmeden kalır, bu nedenle o tarihten önce oluşturduğunuz bir alıcı, güncellenmesi gereken hiçbir şey olmadan çalışmaya devam eder.
Bazı etkinlikler kendi ekstra üst düzey bloklarını ekler. Örneğin, Randevu Alındı bir appointment bloğu ekler (bkz. Randevu Alındı Webhook’u), Yeni Mesaj metin içeren tam bir message bloğu ekler (bkz. Yeni Mesaj Webhook’u), Teslimatlar ve Okundu Bilgileri ise yalnızca mesajın kimliğini ve durumunu içeren kısa bir message bloğu ekler (bkz. Teslimatlar ve Okundu Bilgileri Webhook’u).
Teslimatlar ve Okundu Bilgileri size hangi mesajın olduğunu söyler, ancak ne dediğini söylemez. Bunlar, mesajın
idvestatusdeğerlerini içeren birmessagebloğu taşır — ve buid, mesaj gönderme uç noktasının geri döndürdüğümessageIdile aynıdır, böylece bir teslimat veya okundu bilgisini gönderdiğiniz tam mesajla eşleştirebilirsiniz — ancak mesaj gövdesi içermez. Yanıtlar ise hiçbirmessagebloğu taşımaz. Gönderilen veya alınan kelimelere ihtiyacınız varsa, bunlarla birlikte Yeni Mesaj etkinliğine abone olun.
Alıcınızı yazmadan önce bilmeniz gereken iki şey.
timestampalanı yoktur vedatasarmalayıcısı bulunmaz. Yukarıda gösterildiği gibi, her blok JSON nesnesinin en üst düzeyinde yer alır.
22 Webhook Etkinliği
Uygulamada işaretlediğiniz görünen etiket ve yük (payload) içinde gönderilen event kodu ile birlikte 22 webhook etkinliği. event kodu, görünen etiketle eşleşmeyen kısa bir dizedir, bu nedenle alıcınızı etikete göre değil, koda göre eşleştirin:
| Görünen etiket (uygulamada) | Yükteki event kodu |
Anlamı |
|---|---|---|
| Kişi Oluşturuldu | contactCreated |
Hesabınıza yeni bir kişi eklendi (manuel olarak, içe aktarma yoluyla veya API aracılığıyla). |
| Kişi Duraklatıldı | contact_paused |
Bir kişi görüşmesi duraklatıldı (bot yanıt vermeyi durdurur). |
| Kişi Devam Ettirildi | contact_resumed |
Duraklatılmış bir kişi görüşmesi devam ettirildi. |
| Kişi Rahatsız Etmeyin | contact_do_not_disturb_changed |
Bir kişinin Rahatsız Etmeyin ayarı açıldı. |
| Kişi Arşivden Çıkarıldı | contact_unarchived |
Arşivlenmiş bir kişi yeni bir mesaj göndererek onu aktif gelen kutunuza geri getirir. |
| Yeni Mesaj | new_message |
Herhangi bir kanaldaki bir görüşmeye herhangi bir mesaj eklenir — hem kişinizin size gönderdiği mesajlar hem de yapay zekanızın veya ekibinizin onlara gönderdiği mesajlar. Gerçek mesaj metnini taşıyan tek etkinlik budur (bkz. Yeni Mesaj Webhook’u). |
| Yanıtlar | replied |
Bir kişi bir mesaja yanıt verir. |
| Okundu Bilgileri | read |
Bir kişi bir mesajı okur (okundu bilgisini destekleyen kanallarda). Okunan mesajın kimliğini taşır — bkz. Teslimatlar ve Okundu Bilgileri Webhook’u. |
| Teslimatlar | delivered veya undelivered |
Bir mesaj bir kişiye başarıyla teslim edildi (teslimat başarısız olduğunda undelivered). Mesajın kimliğini taşır — bkz. Teslimatlar ve Okundu Bilgileri Webhook’u. |
| İnsan Uyarısı | humanAlerted |
Yapay zeka botu bir görüşmeyi yönetemeyeceğine karar verir ve insan müdahalesi için işaretler. |
| Sohbet Sonlandırıldı | chat_concluded |
Yapay zeka botu bir görüşmenin sona erdiğine karar verir (randevu alındı, potansiyel müşteri elendi vb.). |
| Randevu Alındı | booked |
Bir kişi rezervasyon sistemi aracılığıyla bir randevu alır. |
| Kredi Harcandı | creditsSpent |
Hesabınızdan krediler düşülür. |
| Kredi Yüklendi | creditsRecharged |
Otomatik yükleme veya manuel satın alma yoluyla hesabınıza kredi eklenir. |
| Düşük Kredi Bakiyesi | Bir Test teslimatında lowCreditBalance, gerçek bir teslimatta Low Credit Balance |
Kredi bakiyenizin uyarı eşiğinizin altına düştüğüne dair erken bir uyarıdır (kendi eşiğinizi belirlemediyseniz 100 kredi). Tüm alt hesapları tek bir havuzdan harcama yapan ajanslar için tasarlanmıştır. Kişi bloğu yerine balance, threshold ve account_email taşır, bakiye düşük kaldığı sürece en fazla 24 saatte bir gönderilir ve bakiye eşiğin üzerine çıktığı anda yeniden devreye girer. |
| Görev Oluşturuldu | taskCreated |
Bir görev oluşturuldu. |
| Görev Güncellendi | taskUpdated |
Bir görev, tamamlama aşamasına geçmeden değişir. |
| Görev Tamamlandı | taskCompleted |
Bir görev, tamamlama aşaması olarak yapılandırılmış bir aşamaya geçer. |
| Günlük Özet Oluşturuldu | dailySummaryCreated |
Günlük özet raporunuz oluşturuldu. |
| Kanal Bağlandı | channelConnected |
Henüz gönderilmiyor — seçilebilir, ancak bugün hiçbir şey bunu yaymaz. Bunun üzerine inşa etmeyin. Bir mesajlaşma kanalı bağlanmayı tamamladığında amaçlanmıştır. |
| Yayın Başladı | broadcastStarted |
Bir yayın gönderilmeye başlar (durumu Gönderiliyor olarak değişir). Başlangıç başına bir kez tetiklenir, duraklatılmış bir yayın devam ettirildiğinde de dahil. Kişi bloğu yerine bir broadcast bloğu taşır: id, ad, kanal, durum, önceki durum, hedeflediği liste (list_id, list_name, is_smart_list), scheduled_at, total_contacts. |
| Yayın Tamamlandı | broadcastCompleted |
Bir yayın biter (durumu Gönderildi veya Başarısız olarak değişir). Aynı broadcast bloğu artı completed_at ve mevcut olduğunda completion_summary (total_sent, permanently_failed, unique_replied, failure_rate, had_errors) içerir. Akıllı Yayın Listesini harici araçlara bağlamak için bu ikisini kullanın. |
Bu listede asla görünmeyen iki kod daha vardır çünkü bunlara abone olamazsınız: tek bir etikete ayarlanan bir web kancası URL’si tarafından gönderilen contact_tags_updated ve bir web kancasının subscribed_to_tags listesindeki bir etiket için sohbet özeti yazıldığında gönderilen summary_generated. |
Kanal Bağlandı henüz gönderilmiyor. Etkinlik listesinde görünür ancak şu an hiçbir şey bunu tetiklemez. Buna göre geliştirme yapmayın.
Etiket tabanlı ve görev bildirimleri kendi ayrı şekillerini kullanır. Bkz. Kişi Etiketleri Güncellendi ve Görev Tamamlandı.
Kişi Oluşturuldu Webhook’u
Kişi Oluşturuldu etkinliği tetiklendiğinde gönderilir (yeni bir kişi manuel olarak, içe aktarma yoluyla veya API aracılığıyla eklendiğinde).
Olay adı
contactCreated
Yük formatı
{
"event": "contactCreated",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null,
"is_bot_active": true,
"ad_referral": null
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
}
}
| Alan | Açıklama |
|---|---|
event |
Bu olay için her zaman contactCreated. |
contact.id |
Yeni kişinin benzersiz kimliği (ID). |
contact.email / contact.phone_number |
Biliniyorsa kişinin e-postası ve telefonu (kanala bağlı olarak ikisi de boş olabilir). |
contact.first_name / contact.last_name |
Biliniyorsa kişinin adı. |
contact.human_alerted / contact.human_alert_reason |
Kişinin insan müdahalesi için işaretlenip işaretlenmediği ve nedeni. |
contact.is_bot_active |
Yapay zeka botunun bu kişi üzerinde şu anda aktif olup olmadığı. |
contact.ad_referral |
Meta Click-to-WhatsApp reklam ilişkilendirmesi veya null — bkz. Click-to-WhatsApp Reklam İlişkilendirmesi. |
campaign |
Kişinin oluşturulduğu kampanya veya null. |
agent |
Kişiye atanan temsilci veya null. |
user |
Kişinin sahibi olan hesap için temel kimlik bilgileri. |
“Test” örneği ile gerçek bir etkinlik biraz farklı görünür. Test düğmesi yer tutucu veriler gönderir (John Doe, örnek bir kampanya). Gerçek bir Kişi Oluşturuldu etkinliği, gerçek kişinin ayrıntılarını taşır ve kanala bağlı olarak bazı alanlar boş olabilir.
Yeni Mesaj Webhook
Bu webhook, herhangi bir kanalda bir görüşmeye her mesaj eklendiğinde tetiklenir. Her iki yönü de kapsar: kişinizin size gönderdiği mesajlar ve yapay zekanızın, ekibinizin veya bir kampanyanın onlara gönderdiği mesajlar. Mesaj metnini içeren tek webhook budur, bu nedenle görüşmeleri harici bir sisteme yansıtmak istediğinizde kullanmanız gereken webhook budur.
Olay adı
new_message
Yük formatı
{
"event": "new_message",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null,
"is_bot_active": true,
"ad_referral": null
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<message-id>",
"body": "Hi, are you open on Saturday?",
"direction": "inbound",
"status": "received",
"created_at": "2026-07-30T17:27:06.000Z",
"channel": "whatsapp_web"
}
}
| Alan | Açıklama |
|---|---|
event |
Bu etkinlik için her zaman new_message. Bunun gönderilen tam dize olduğuna dikkat edin — “Yeni Mesaj” görünen etiketi değildir. |
contact |
Mesajın ait olduğu görüşmenin kişisi. Kişi Oluşturuldu ile aynı şekildedir. |
agent |
Görüşmeyi yöneten temsilci (id ve name) veya hiçbir temsilci dahil değilse null. |
user |
Görüşmenin sahibi olan hesap için temel kimlik bilgileri. |
message.id |
Mesajın benzersiz kimliği. |
message.body |
Mesaj metni. Yalnızca bir ek (resim, sesli not, belge) taşıyan bir mesaj için boştur. |
message.direction |
Kişiden gelen bir mesaj için inbound, yapay zekanız veya ekibiniz tarafından gelen kutusundan gönderilen bir mesaj için outbound ve bir kampanya, yayın, şablon gönderimi veya API tarafından gönderilen bir mesaj için outbound-api. |
message.status |
Mesajın yaşam döngüsünde nerede olduğu: gelen için received ve giden için queued / sent / delivered / read / failed / undelivered. Bu, mesajın oluşturulduğu andaki durumdur, bu nedenle giden bir mesaj genellikle buraya queued veya sent olarak ulaşır ve sonrasında delivered değerine ulaşır — bu sonraki geçişlere ihtiyacınız varsa Teslimatlar ve Okundu Bilgileri etkinliklerini kullanın. Bunlar, bu blokla aynı message.id değerini taşır, böylece geçişi bu mesajla eşleştirebilirsiniz (bkz. Teslimatlar ve Okundu Bilgileri Webhook’u). |
message.created_at |
Mesajın oluşturulduğu zaman, UTC (ISO 8601) cinsinden. |
message.channel |
Mesajın geçtiği kanal, örneğin whatsapp, whatsapp_web, sms, instagram, messenger, telegram, email veya custom. |
Bu yükte hala
campaignbloğu bulunmamaktadır. Yeni Mesaj;contact,agent,uservemessagegönderir.agentbloğu 15 Ağustos 2026 tarihinde eklenmiştir ve konuşmayı hangi temsilcinin yönettiğini size bildirir; kampanya bağlamına da ihtiyacınız varsa,contact.idkullanarak API üzerinden kişiyi aratın.
Dahili yapay zeka kayıtları bu webhook’u tetiklemez. Platform, gerçek mesajların yanı sıra bir görüşmede kendi kayıt tutma satırlarını (yapay zekanın araç çağrıları ve dahili sıra kayıtları) tutar. Bunlar asla gönderilmez — yalnızca gerçekten gönderilen veya alınan mesajları alırsınız.
Teslimatlar ve Okundu Bilgileri Webhook’u
Bu iki etkinlik, bir mesaj Your AI Connector'dan ayrıldıktan sonra ne olduğunu bildirir: Teslimatlar, bir mesaj kişiye ulaştığında (veya ulaşamadığında) tetiklenir ve Okundu Bilgileri, okundu bilgisini destekleyen kanallarda kişi mesajı açtığında tetiklenir.
Her ikisi de, güncellemeyi gönderdiğiniz tam mesajla eşleştirebilmeniz için, etkinliğin ilgili olduğu mesajın kimliğini içeren bir message bloğu taşır.
Etkinlik adları
Teslimatlar için delivered ve undelivered, Okundu Bilgileri için read.
Yük formatı
{
"event": "delivered",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"ad_referral": null
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<message-id>",
"status": "delivered"
}
}
| Alan | Açıklama |
|---|---|
event |
Teslimatlar için delivered veya undelivered, Okundu Bilgileri için read. |
contact |
Mesajın gönderildiği kişi. |
campaign |
Kişinin ait olduğu kampanya veya null. |
agent |
Görüşmeyi yöneten temsilci veya null. |
user |
Verilerin sahibi olan hesap için temel kimlik bilgileri. |
message.id |
Bu güncellemenin ilgili olduğu mesajın kimliği. Mesaj gönderme uç noktasının messageId olarak döndürdüğü değerle ve bir Yeni Mesaj bildiriminin taşıdığı message.id ile aynı değerdir. |
message.status |
Yeni durum, her zaman event ile aynı dize (delivered, undelivered veya read). |
Bir güncellemeyi gönderdiğiniz mesajla nasıl eşleştirirsiniz. API aracılığıyla bir mesaj gönderdiğinizde geri aldığınız
messageIddeğerini saklayın. Bir Teslimatlar veya Okundu Bilgileri bildirimi geldiğinde, yüktekimessage.iddeğerine karşı o saklanan kimliği arayın — bu, o tam mesaj için teslimat veya okundu bilginizdir.
Burada mesaj metni yok.
messagebloğu yalnızca kimliği ve durumu taşır. Ayrıca gövdeye de ihtiyacınız varsa Yeni Mesaj etkinliğine abone olun.
messagebloğu yalnızca hangi mesaj olduğunu bildiğimizde mevcuttur. Saklanan bir mesajla ilişkilendiremediğimiz nadir güncellemelerde, blok boş gönderilmek yerine tamamen dışarıda bırakılır — bu nedenlemessage.iddeğerini okumadan öncemessagedeğerinin var olup olmadığını kontrol edin.
Durum değişikliği başına bir bildirim. Tek bir giden mesaj normalde bir
deliveredbildirimi ve ardından, okundu bilgisi olan kanallarda, birreadbildirimi üretir. Başarısız bir gönderim bunun yerineundeliveredüretir.
Randevu Alındı Webhook
Bir kişi randevu aldığında tetiklenir. Yapay zekanın bir konuşma sırasında randevu alması, sizin manuel olarak randevu almanız veya API aracılığıyla gelmesi durumunda aynı şekilde tetiklenir.
Olay adı
booked
Yük formatı
{
"event": "booked",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith"
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com"
},
"appointment": {
"appointment_id": "<appointment-id>",
"start_time": "2026-07-20T15:00:00.000Z",
"end_time": "2026-07-20T15:30:00.000Z",
"status": "confirmed",
"room_name": "Room 1",
"description": "Discovery call",
"summary": "30 min intro",
"google_calendar_event_id": null,
"event": {
"id": "<service-id>",
"event_name": "Intro Call",
"slot_duration": 30,
"location": "Zoom",
"meeting_link": "https://...",
"event_type": "online"
}
}
}
| Alan | Açıklama |
|---|---|
event |
Bu etkinlik için her zaman booked. |
contact |
Randevuyu alan kişi. email ve phone_number kanala bağlı olarak boş olabilir. |
appointment.appointment_id |
Randevunun benzersiz kimliği. |
appointment.start_time / end_time |
Randevu alınan zaman diliminin başlangıcı ve bitişi, UTC (ISO 8601) formatında. |
appointment.status |
Randevunun mevcut durumu. |
appointment.room_name |
Kullanılıyorsa, randevunun alındığı oda. |
appointment.description / summary |
Randevu ile birlikte alınan serbest metin detayları. |
appointment.google_calendar_event_id |
Google Takvim’in senkronize edilen etkinlik için kimliği. Randevu Alındı web kancasında genellikle null değerindedir, çünkü takvim etkinliği bildirim gönderildiği anda oluşturulur — ihtiyacınız varsa randevuyu bir an sonra appointment_id kimliği ile yeniden getirin ve Google Takvim bağlı olmayan hesaplarda kalıcı bir null bekleyin. |
appointment.event |
Randevu alınan hizmet: ad, zaman dilimi uzunluğu, konum, toplantı bağlantısı, tür. |
google_calendar_event_idbu webhook’ta genelliklenull’dir ve bu normaldir. Google Takvim etkinliği, bu bildirim gönderildiği anda oluşturulur, bu nedenle kimlik genellikle henüz hazır değildir. İhtiyacınız varsa, bir an sonraappointment_idile randevuyu tekrar getirin. Hesapta bağlı bir Google Takvim yoksa kalıcı olaraknullkalır, bu yüzden sonsuza kadar beklemeyin.
“Test” düğmesi
appointmentbloğunu içermez. Uç noktanızın yanıt verdiğini doğrulamak için kullanın, ardından tam yükü görmek için bir gerçek randevu oluşturun.
Bu webhook’un tetiklenmediği iki durum: harici bir takvimden içe aktarılan randevular ve Formitable entegrasyonu aracılığıyla gelen rezervasyonlar.
Kişi Etiketleri Güncellendi Webhook’u
Bir kişiye etiket uygulandığında ve bu etiketin, kişinin ait olduğu temsilci veya kampanya üzerinde yapılandırılmış bir webhook URL’si olduğunda tetiklenir.
Olay adı
contact_tags_updated
Ne zaman tetiklenir
- Bir kişiye, kendisine atanmış bir temsilcisi, kampanyası veya her ikisi birden olan bir etiket uygulandığında.
- Uygulanan etiketlerden en az birinin, ilgili temsilci veya kampanyanın Etiketler sekmesinde ayarlanmış bir webhook URL’si olduğunda.
Kişinin her ikisi de varsa ve kampanyanın etiketleri webhook URL’leri taşıyorsa, bunlar önceliklidir; aksi takdirde temsilcininkiler kullanılır.
Aynı güncelleme içerisinde farklı webhook URL’lerine sahip birden fazla etiket uygulanırsa, her URL için bir istek gönderilir ve her biri yalnızca o URL ile eşleşen etiketleri içerir.
Bir etiketin kaldırılması asla istek göndermez. Çoğu kişi bu URL’leri bir eyleme (depozito toplama, yer ayırtma, temsilciyi uyarma gibi) yönlendirir; bu nedenle bir etiketin bir kişiden kaldırılması, o eylemin yeniden çalıştırılması için kullanılırdı. Artık bu mümkün değildir. Bir kaldırma işlemi, aynı URL’ye giden bir uygulama ile aynı güncellemede gerçekleştiğinde removed_tags içinde görünmeye devam eder, böylece her iki diziyi de okuyan bir otomasyon tam resmi görebilir; ancak asla yalnızca kaldırma işleminden kaynaklanan bir istek görmeyecektir. (12 Ağustos 2026 tarihinde değiştirilmiştir. Bu tarihten önce, kaldırma işlemleri de istek gönderiyordu.)
Yük formatı
{
"event": "contact_tags_updated",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"is_bot_active": true,
"ad_referral": {
"ctwa_clid": "ARAbc123...",
"source_id": "120210000000000",
"source_type": "ad",
"source_url": "https://fb.me/xxxx",
"headline": "Get 20% off today",
"body": "Message us now to claim your discount",
"channel": "whatsapp"
}
},
"added_tags": ["qualified-lead"],
"removed_tags": ["new-lead"],
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
}
}
| Alan | Açıklama |
|---|---|
event |
Bu webhook için her zaman contact_tags_updated değerindedir. |
contact.id |
Etiketleri değişen kişinin benzersiz kimliği (ID). |
contact.email / contact.phone_number |
Biliniyorsa kişinin e-postası/telefonu. |
contact.first_name / contact.last_name |
Kişinin adı. |
contact.human_alerted |
Kişinin şu anda insan ilgisi için işaretlenip işaretlenmediği. |
contact.is_bot_active |
Yapay zeka botunun şu anda bu kişinin konuşmasında aktif olup olmadığı. |
contact.ad_referral |
Yalnızca kişi size ilk olarak bir Meta Tıkla-WhatsApp’a (CTWA) reklamı veya gönderisi aracılığıyla ulaştığında mevcuttur. Aksi takdirde null. |
added_tags |
Bu güncellemede uygulanan etiket adları dizisi. Asla boş değildir; isteği tetikleyen şey bir uygulama işlemidir. |
removed_tags |
Varsa, aynı güncellemede kaldırılan etiket adları dizisi. Tek başına bir kaldırma işlemi hiçbir şey göndermez. |
agent |
Kişinin konuşmasını yöneten temsilci (id ve name) veya temsilci dahil değilse null. 15 Ağustos 2026 tarihinde eklendi. |
user |
Kişinin sahibi olan hesap için temel kimlik bilgileri. |
Bir etiket webhook’unu test etme
Etiketler sekmesindeki webhook URL alanının yanında bir Test düğmesi bulunur. Bu düğme, gerçek bir konuşmayı beklemeden otomasyonunuzun veriyi aldığını doğrulayabilmeniz için o URL’ye hemen örnek bir yük gönderir.
Test, yukarıda gösterilen contact_tags_updated şekliyle, yer tutucu bir kişi kullanarak, test ettiğiniz etiket added_tags içinde ve boş bir removed_tags ile gönderilir. Otomasyonunuzun testte gördüğü şey, üretim ortamında da göreceği şeydir.
Bilmeniz gereken iki şey:
- Önce etiketi kaydedin. Test, etiketi kayıtlı adına göre arar, bu nedenle yepyeni bir etiket veya kaydedilmemiş bir yeniden adlandırma henüz test edilemez. Düğme, ekrandaki ad kayıtlı olanla eşleşene kadar gri kalır.
- Başarısız bir test web kancanıza karşı sayılmaz. Testler, Web Kancası Güvenilirliği bölümünde açıklanan tekrarlanan hatalardan sonra otomatik kapanmaya hiçbir zaman katkıda bulunmaz.
Test başarısız olursa, ileti size uç noktanızın ne yanıt verdiğini söyler (örneğin bir
404veya500), bu genellikle yanlış bir URL’yi veya açık olmayan bir iş akışını tespit etmek için yeterlidir.
Görev Tamamlandı Webhook’u
Yalnızca referans amaçlıdır. Görev webhook’ları (veri olarak) geliştiriciler için burada belgelenmiştir; Task Created, Task Updated ve Task Completed etkinlikleri, diğer tüm etkinlikler gibi webhook formundaki standart etkinlik listesinde seçilebilir — bkz. Available Trigger Events ve The 22 Webhook Events.
Bu yük (payload), bir görev tamamlama aşaması olarak işaretlenmiş bir aşamaya geçtiğinde gönderilir. Tamamlama dışı aşamalar arasında hareket eden bir görev bunun yerine taskUpdated biçimini gönderir.
Olay adı
taskCompleted
Ne zaman tetiklenir
- Bir görev güncellendiğinde.
stagedeğeri önceki değerine kıyasla değiştiğinde.- Yeni aşama, hesabın görev aşaması ayarlarında bir tamamlama aşaması olarak yapılandırıldığında.
Yük formatı
{
"event": "taskCompleted",
"contact": {
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null
},
"user": {
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<task-id>",
"title": "Follow up with Jane",
"description": "Confirm pricing and send proposal",
"type": "follow_up",
"priority": "high",
"stage": "<stage-id>",
"due_date": "2026-01-20T15:00:00Z",
"source": "ai",
"source_detail": "<source-detail>",
"campaign_id": "<campaign-id>",
"linked_human_alert": "<human-alert-id>",
"tags": ["qualified-lead"],
"notes": "Customer requested a callback"
}
}
| Alan | Açıklama |
|---|---|
event |
Bu webhook için her zaman taskCompleted değerindedir. Bir görev tamamlama aşamasına girmeden değiştiğinde aynı yük biçimi taskUpdated olarak gönderilir. |
contact |
Varsa, görevle bağlantılı kişi. Bağlantılı olmadığında null. |
contact.human_alert_reason |
Varsa, kişinin insan müdahalesi için işaretlenme nedeni. |
user |
Görevin sahibi olan hesap için temel kimlik bilgileri. |
message.id |
Görevin benzersiz kimliği (ID). |
message.title / description |
Görevin başlığı ve açıklaması. |
message.type |
Görev türü (örneğin, follow_up, call, custom). |
message.priority |
Görev önceliği (low, medium, high). |
message.stage |
Görevin şu anda bulunduğu aşamanın kimliği (ID). |
message.due_date |
Ayarlanmışsa, görevin son teslim tarihi. |
message.source |
Görevi neyin oluşturduğu (ai, manual, api). |
message.source_detail |
Kaynak hakkında ek ayrıntı. |
message.campaign_id |
Bağlantılı kampanyanın kimliği (ID) veya null. |
message.linked_human_alert |
Varsa, bağlantılı insan uyarısının kimliği (ID). |
message.tags |
Göreve uygulanan etiketler. |
message.notes |
Görevle ilgili serbest biçimli notlar. |
Bir Webhook’u Kapatma (veya Silme)
Her webhook’un kendi satırında bir açma/kapama düğmesi bulunur. Birini kapalı konuma getirmek, etkinlik almayı durdurur ancak yapılandırdığınız her şeyi (URL, etkinlikler, herhangi bir imzalama gizli anahtarı) korur. Tekrar açtığınızda kaldığı yerden devam eder; kapalı olduğu süre boyunca gerçekleşen hiçbir şey sonradan iletilmez.
Bunu, iletimlerin bir süreliğine durmasını istediğinizde kullanın: uç noktanız yeniden oluşturuluyorsa, gürültülü bir entegrasyonda hata ayıklıyorsanız veya bir otomasyonu duraklatıyorsanız.
Bir webhook’u silmek (satırındaki çöp kutusu simgesi), imzalama gizli anahtarı da dahil olmak üzere onu kalıcı olarak kaldırır. Yalnızca teslimatların durmasını istiyorsanız, bunun yerine kapatın; silme işlemi, uç noktayla işiniz tamamen bittiğinde kullanılır.
Bu, bir web kancasının otomatik olarak kapatılmasıyla aynı şey değildir. Web kancanızı tekrarlanan başarısızlıklar sonrasında devre dışı bırakırsak (bkz. Web Kancası Güvenilirliği), yukarıdaki açma/kapama düğmesi onu geri getirmez. Uç noktanız düzeltildiğinde, web kancasını düzenleyin ve değiştirilmiş bir URL ile kaydedin (herhangi bir URL değişikliği onu yeniden etkinleştirir) veya API üzerinden yeniden etkinleştirme uç noktasını çağırın ya da destek ekibimizle iletişime geçin, sizin için tekrar açalım.
İmzalı Yükler (Bir Webhook’un Gerçekten Bizden Geldiğini Doğrulama)
Webhook URL’nizi öğrenen herkes ona sahte bir istek gönderebilir. Webhook’lar üzerinde otomatik olarak işlem yapıyorsanız (faturalandırmayı güncelleme, CRM kayıtları oluşturma gibi), imzalamayı açmak her isteğin gerçekten bizden geldiğini doğrulamanızı sağlar.
İmzalama isteğe bağlıdır ve varsayılan olarak kapalıdır; bunu webhook başına, o webhook’un düzenleme görünümünden (kaydedilmiş bir webhook’un satırını açarak) açarsınız.
İmzalama özelliğini açma
- Webhook’u açın (Ayarlar → Entegrasyonlar → Webhook’lar → webhook’unuzun satırına tıklayın).
- İmzalama gizli anahtarı bölümünde Oluştur’a tıklayın.
- Gizli anahtarı kopyalayın (
whsec_ile başlar) ve alıcı sisteminizde saklayın. Ona bir parola gibi davranın.
İstediğiniz zaman bu aynı panelden geri gelip gizli anahtarı görüntüleyebilir, kopyalayabilir, döndürebilir veya kapatabilirsiniz.
Ne gönderiyoruz
İmzalama açıldığında, bu webhook için yapılan her teslimat şu iki ek HTTP başlığını taşır:
| Başlık | Anlamı |
|---|---|
X-Webhook-Signature |
v1=<hex> biçimindeki imza. |
X-Webhook-Timestamp |
Saniye cinsinden Unix zaman damgası olarak gönderdiğimiz zaman. |
Bu üçü, imzalı olsun veya olmasın her teslimatta bulunur:
| Başlık | Anlamı |
|---|---|
X-Webhook-Delivery |
Bu etkinlik için benzersiz bir kimlik. Yeniden denemelerde aynı kalır, bu yüzden tekilleştirme (dedupe) işlemini bunun üzerinden yaparsınız. |
X-Webhook-Attempt |
Bunun kaçıncı deneme olduğu (1 ilk denemedir). |
X-Webhook-Event |
Etkinlik adı, böylece içeriği okumadan yönlendirme yapabilirsiniz. |
Nasıl doğrulanır
İmza, imzalama gizli anahtarınız anahtar olarak kullanılarak <timestamp>.<raw request body> dizisinin HMAC-SHA256 değeridir.
Ham istek gövdesine karşı doğrulama yapın — aldığınız tam baytlar. Çerçeveniz JSON’u ayrıştırıp kontrol etmeden önce yeniden serileştirirse, baytlar değişebilir ve imza eşleşmeyebilir.
Node.js örneği:
const crypto = require("crypto");
function verify(rawBody, headers, secret) {
const timestamp = headers["x-webhook-timestamp"];
const signature = headers["x-webhook-signature"]; // "v1=<hex>"
// Reject anything older than 5 minutes so a captured request can't be replayed later.
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = crypto.createHmac("sha256", secret).update(`${timestamp}.${rawBody}`).digest("hex");
return crypto.timingSafeEqual(Buffer.from(signature.replace("v1=", "")), Buffer.from(expected));
}
Python örneği:
import hashlib, hmac, time
def verify(raw_body: bytes, headers, secret: str) -> bool:
timestamp = headers["X-Webhook-Timestamp"]
signature = headers["X-Webhook-Signature"].replace("v1=", "")
# Reject anything older than 5 minutes so a captured request can't be replayed later.
if abs(time.time() - int(timestamp)) > 300:
return False
expected = hmac.new(secret.encode(), f"{timestamp}.".encode() + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(signature, expected)
İmzaları zamanlama açısından güvenli bir işlevle (
timingSafeEqual/compare_digest) karşılaştırın,==ile değil. Bunun hiçbir maliyeti yoktur ve ince bir saldırı sınıfını önler.
Gizli anahtarı döndürme
Gizli anahtarı değiştirmek için Döndür’e tıklayın. Geçiş anlıktır: bir sonraki teslimat yalnızca yeni gizli anahtarla imzalanır. Uç noktanız canlıysa, yenisini dağıtana kadar birkaç dakika boyunca hem eski hem de yeni gizli anahtarı kabul edin.
İmzalamayı kapatmak, imza başlıklarının gönderilmesini durdurur.
Başarısız Teslimatları Yeniden Deneme
Varsayılan olarak, başarısız olan bir teslimat yeniden denenmez; sisteminiz o anda kapalıysa, o etkinlik kaçırılmış olur.
Bir webhook üzerinde (oluşturma/düzenleme formunda) Başarısız teslimatları yeniden dene seçeneğini açın, biz de denemeye devam edelim:
| Deneme | Zaman |
|---|---|
| 1 | Hemen |
| 2 | 1 dakika sonra |
| 3 | 5 dakika sonra |
| 4 | 30 dakika sonra |
| 5 | 2 saat sonra |
Bu süre yaklaşık 2 saat 40 dakika sürer, böylece bir webhook bakım penceresini veya tarafınızdaki kısa bir kesintiyi atlatabilir.
Neler yeniden denenir: geçici sorunlar — sunucunuzun 5xx hatası döndürmesi, zaman aşımı veya bağlantı hatası.
Neler yeniden denenmez: uç noktanız isteği reddederse (herhangi bir 4xx hatası), yeniden deneme yapmayız; aynı isteği tekrar göndermek yalnızca aynı reddedilme sonucunu doğuracaktır.
Hangi etkinlikler yeniden denenir: etiket webhook’ları (contact_tags_updated), üç görev etkinliği ve günlük özet. Diğerleri bir kez gönderilir, bu nedenle onlar için anahtarın yapabileceği bir şey yoktur. Her etkinlik yine de X-Webhook-Delivery taşır, bu yüzden tek bir tekilleştirme kuralı hepsini kapsar.
Yeniden denemeleri yalnızca uç noktanız idempotent (eşgüçlü) ise açın. Yeniden denemeler, aynı etkinliğin birden fazla kez gelebileceği anlamına gelir. Bir tekrarı tanımak için
X-Webhook-Deliverybaşlığını kullanın: bu başlık, bir etkinlik için yapılan her denemede aynı kalır, böylece zaten işlediğiniz bir kimliği güvenle göz ardı edebilirsiniz.
Yeniden denemeler, tekrarlanan başarısızlıkların ardından otomatik kapatma özelliğiyle (bkz. Web Kancası Güvenilirliği) tam istediğiniz şekilde etkileşime girer: başarısızlık sayacı, her bir denemeyi değil, yalnızca tüm yeniden denemeler kullanıldıktan sonra tüm teslimatı sayar.
Webhook Güvenilirliği
- Your AI Connector, web kancalarını güvenli bir bağlantı (HTTPS) üzerinden gönderir. Sağladığınız web adresinin HTTPS kullandığından emin olun.
- Sisteminiz bir hata döndürürse, teslimat başarısız kabul edilir.
- Etkinlikleri kaçırmamak için alıcı sisteminizin çalışma süresini izleyin.
- Kritik iş akışları için Başarısız Teslimatları Yeniden Deneme özelliğini açın ve ayrıca bir yedekleme mekanizması düşünün.
Web kancaları, tekrarlanan başarısızlıklar sonrasında otomatik olarak kapatılır. Web kancası URL’niz sürekli olarak başarısız olursa (arka arkaya yaklaşık 5 hata veya yapılandırma türü hatalar için arka arkaya 3 hata), Your AI Connector bu URL’ye etkinlik göndermeyi otomatik olarak durdurur. Uç noktanız sağlıklı hale geldiğinde onu geri getirmek için: web kancasını düzenleyin ve değiştirilmiş bir URL ile kaydedin (herhangi bir URL değişikliği onu yeniden etkinleştirir) veya API üzerinden yeniden etkinleştirme uç noktasını kullanın; aynı URL ile yeniden kaydetmek yeterli değildir. Destek ekibi de sizin için yeniden etkinleştirebilir.
Sorun Giderme
| Sorun | Çözüm |
|---|---|
| Web kancası tetiklenmiyor | Öncelikle web kancasının satırında kapalı olmadığını kontrol edin. Ardından doğru etkinliklerin seçildiğinden ve URL’nizin internetten erişilebilir olduğundan emin olun. |
| Test etkinliği çalışıyor ancak gerçek etkinlikler çalışmıyor | Belirli etkinlik türünün etkinleştirildiğinden emin olun. Bir etiket uygulandığında istek bekliyorsanız, subscribed_to_tags öğesinin bir web kancasının etkinliklerini bir etiketle sınırlandırmadığını unutmayın; bu yalnızca hangi etiketlerin konuşma özeti bildirimi oluşturacağını daraltır. Belirli bir etiket uygulandığında istek almak için, temsilcinin (veya kampanyanın) Etiketler sekmesinde bir web kancası URL’si ayarlayın — bkz. İletişim Etiketleri Güncellendi Web Kancası. |
| n8n / Make / Zapier’e hiçbir şey ulaşmıyor | Muhtemelen platformun “Test etkinliğini dinle” düğmesine tıkladıktan sonra yalnızca tek bir etkinliği dinleyen Test URL’sini kullanıyorsunuz. Canlı etkinlikler için Üretim URL’sini kaydedin ve iş akışını Etkin konuma getirin. |
| Yinelenen etkinlikler alınıyor | Aynı URL’yi işaret eden birden fazla web kancası olup olmadığını kontrol edin. Başarısız teslimatları yeniden dene özelliği açıksa, uç noktanız bir etkinliği kabul ettiği ancak zamanında yanıt veremediği durumlarda bir tekrar beklenir — X-Webhook-Delivery üzerinde tekilleştirme yapın. |
| İmza kontrolü her zaman başarısız oluyor | Neredeyse her zaman gövdenin kontrol edilmeden önce yeniden serileştirilmesinden kaynaklanır. Ham istek gövdesine göre doğrulayın, <timestamp>.<body> imzalayın ve yakın zamanda değiştirdiyseniz mevcut gizli anahtarı kullandığınızdan emin olun. |
| Yeniden denemeler gerçekleşmiyor | Yeniden denemeler, o belirli web kancasında etkinleştirilmediği sürece kapalıdır. 4xx yanıtlarını yeniden denemiyoruz. |
campaign bloğu her zaman null |
Hesabınız temsilcileri kullanıyorsa bu beklenen bir durumdur: kişiler bir kampanya yerine bir temsilciyle ilişkilendirilir. Bunun yerine agent bloğunu okuyun — bkz. Web Kancası Veri Formatı. |
| Veri boş veya hatalı biçimlendirilmiş | Alıcı sisteminizin JSON kabul ettiğini doğrulayın. Ayrıştırma hataları için sunucu günlüklerinizi kontrol edin. |
| Web kancası URL’si hatalar döndürüyor | URL’nizi Postman veya webhook.site gibi bir araçla test edin. |
| Web kancası bir kesintiden sonra tamamen tetiklenmeyi durdurdu | Tekrarlanan başarısızlıklar bir web kancasını otomatik olarak devre dışı bırakır. Yeniden kaydetmek onu tekrar etkinleştirmez — uç noktanızı düzeltin, ardından destek ekibiyle iletişime geçin. |
| Kaydetme veya Test etme izin hatası veriyor | Entegrasyonlar “düzenleme” iznine ihtiyacınız var. Hesap sahibinden bu izni vermesini isteyin. |
Bir web kancasının subscribed_to_tags listesi boş döndü |
subscribed_to_tags bir web kancasının etkinliklerini bir etiketle sınırlandırmaz; yalnızca hangi etiketlerin konuşma özeti bildirimi oluşturacağını daraltır. Web kancası formundan düzenleme yapmak artık bu listeyi temizlemiyor (21 Temmuz 2026’da düzeltildi). Bir web kancası bu tarihten önce listesini kaybettiyse, subscribed_to_tags öğesini Web Kancaları API aracılığıyla tekrar ayarlayın — bkz. Etiket Tabanlı Web Kancası Tetikleyicileri. |
Sonraki Adımlar
- GoHighLevel Entegrasyonu — Your AI Connector'ı GHL ile entegre etmek için web kancalarını kullanın.
- API Erişimi — güçlü otomasyonlar için web kancalarını API ile birleştirin.
- Kişileri Etiketlemek İçin Etiketleri Kullanma — web kancalarınızı tetikleyen etiketleri ayarlayın.