n8n, Make ve Web Form ile Lead Webhook’u
Hazır bir entegrasyonu olmayan her kaynaktan lead’i Purvisor’a sokmanın en kısa yolu: tek bir HTTP isteği. n8n akışından, Make senaryosundan ya da doğrudan kendi web formundan /api/n8n/incoming-lead adresine bir POST at — Purvisor kontağı saniyeler içinde oluşturur, yapay zeka asistanını atar ve (istersen) mesai saatine göre otomatik aramayı planlar. Lead’i 5 dakikada aramak, 30 dakika sonra aramaya göre kat kat daha yüksek dönüşüm sağlar; bu webhook o pencereyi otomatikleştirir.
Bu, kaynaktan bağımsız (generic) bir lead giriş kapısıdır. Meta için hazır bir arayüz varsa (Meta Lead Ads) onu kullan; ama Google Ads formu, Typeform, WordPress/Elementor formu, bir e-tablo satırı ya da özel bir CRM — hepsi aynı webhook’a bağlanabilir.
Nasıl çalışır?
n8n / Make / Web formu / Google Ads lead formu
↓ (HTTP POST + x-api-key başlığı)
POST /api/n8n/incoming-lead
↓
Purvisor kontağı oluşturur (ad, telefon, e-posta, form_data)
↓
Otomatik arama açıksa → mesai penceresine göre planlanır
↓
Yapay zeka asistanı lead'i arar → görüşme → analiz + (varsa) kadans takibi“Purvisor lead formumu görmüyor, akış nasıl kurulacak?” — Purvisor kaynağa bakmaz; sen kaynağı bu webhook’a bağlarsın. n8n/Make bir “HTTP Request” düğümüyle, web formu ise sunucu tarafı bir istekle payload’u gönderir. Mantık tek yönlü ve basittir.
Ön koşullar
- n8n API anahtarı (
N8N_API_KEY) — isteği yetkilendiren gizli anahtar. Purvisor tarafında tanımlıdır; senin akışındax-api-keybaşlığına konur. - Purvisor’da hazır bir outbound asistan (İlk Asistanını Oluştur) ve onun
assistant_id’si. - Otomatik arama yapılacaksa bağlı bir telefon numarası (SIP trunk) — arama bu numaradan çıkar (Telefon Numarası (SIP)).
- Lead’i sahiplenecek Purvisor hesabının
user_id’si (ya da otomatik çözümleme içinpage_id/form_id).
Uç nokta
| Özellik | Değer |
|---|---|
| Yöntem | POST |
| Yol | /api/n8n/incoming-lead |
| Kimlik başlığı | x-api-key: <N8N_API_KEY> |
| İçerik tipi | application/json |
| Zorunlu alan | lead.phone |
| Sağlık kontrolü | GET /api/n8n/incoming-lead (aynı x-api-key, son 20 lead’i döner) |
x-api-key başlığı eksik veya yanlışsa istek 401 Unauthorized - invalid API key döner. Anahtar sunucuda hiç tanımlı değilse 503 Service misconfigured alırsın. Anahtarı istemci tarafı (tarayıcı) JavaScript’ine gömmeyin — istek her zaman kendi sunucundan/n8n’den çıkmalı.
Payload alanları
{
"source": "website",
"user_id": "1",
"assistant_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"campaign_id": "123",
"cadence_id": "45",
"auto_call": true,
"delay_minutes": 5,
"lead": {
"full_name": "Ahmet Yılmaz",
"phone": "+905321234567",
"email": "ahmet@ornek.com",
"company": "ABC Ltd",
"title": "Satın Alma Müdürü",
"form_data": { "ilgilenilen_urun": "Isı pompası", "butce": "50000" }
}
}| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
lead.phone | string | Evet | Telefon numarası. Boşluk, tire ve parantez temizlenir; mümkünse E.164 gönder (+905321234567). Eksik/bozuk numara aranamaz. |
user_id | string | Evet* | Lead’i sahiplenen Purvisor hesabının kimliği. *page_id veya form_id gönderirsen otomatik çözümlenebilir; ikisi de yoksa 400 döner. |
assistant_id | string (uuid) | Hayır | Lead’i hangi asistan arasın. Verilmezse eşleşen entegrasyonun varsayılan asistanı kullanılır. |
auto_call | boolean | Hayır | true ise arama planlanır. Yoksa kontak oluşturulur ama aranmaz. |
delay_minutes | number | Hayır | Aramadan önceki gecikme. Varsayılan: 5 dakika. |
source | string | Hayır | Kaynak etiketi: "meta_lead_ads", "google_ads", "website", "manual" vb. Kontağın kaynağına yazılır (verilmezse "unknown"). |
campaign_id | string | Hayır | Lead’i mevcut bir kampanyaya ekler. |
cadence_id | string | Hayır | Lead’i bir kadansa kaydeder (çok adımlı takip). Verilmezse ve hesabın aktif bir varsayılan kadansı varsa lead ona otomatik eklenir. |
lead.full_name | string | Hayır | Ad soyad. İlk kelime ad, kalanı soyad olur; boşsa ad "Lead" atanır. |
lead.email | string | Hayır | E-posta. |
lead.company | string | Hayır | Şirket. |
lead.title | string | Hayır | Unvan. |
lead.form_data | object | Hayır | Ham form verisi. Kontağın ek lead verisi alanında saklanır — prompt’ta veya çağrı sonrası analizde kullanılabilir. |
Kurulum
Asistanının kimliğini al
Panelde aramayı yapacak outbound asistanı aç; URL’sindeki/kartındaki assistant_id’yi (uuid) kopyala. Bunu payload’daki assistant_id alanına koyacaksın.
📸 [Ekran görüntüsü: Asistan detayı — assistant_id’nin görüldüğü alan]
n8n / Make düğümünü kur
Akışına bir HTTP Request düğümü ekle:
- Method:
POST - URL:
https://PANEL_ALAN_ADIN/api/n8n/incoming-lead - Headers:
x-api-key: <N8N_API_KEY>veContent-Type: application/json - Body (JSON): yukarıdaki payload’u, kaynağın alanlarıyla eşleyerek doldur (form telefon alanı →
lead.phone).
Web formundan doğrudan çağırıyorsan, isteği sunucu tarafından (backend/edge function) at ki
x-api-keygizli kalsın.
Test isteği gönder
Aşağıdaki curl ile kendi numaranı kullanarak deneme lead’i gönder — asistanını telefonda dinleyebilirsin:
curl -X POST https://PANEL_ALAN_ADIN/api/n8n/incoming-lead \
-H "x-api-key: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source": "website",
"user_id": "1",
"assistant_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"auto_call": true,
"delay_minutes": 5,
"lead": {
"full_name": "Ahmet Yılmaz",
"phone": "+905321234567",
"email": "ahmet@ornek.com",
"company": "ABC Ltd",
"form_data": { "ilgilenilen_urun": "Isı pompası" }
}
}'Başarılı yanıt (201 Created):
{
"success": true,
"contact_id": "12345",
"phone": "+905321234567",
"name": "Ahmet Yılmaz",
"source": "website",
"auto_call": true,
"auto_call_scheduled_at": "2026-07-12T14:05:00.000Z",
"deferred_to_business_hours": false,
"delay_minutes": 5
}Doğrula
Purvisor’da Kontaklar altında yeni kontağın göründüğünü ve otomatik arama açıksa auto_call_scheduled_at zamanına planlandığını kontrol et. Hızlı bir kontrol için sağlık kontrolü uç noktasını çağırabilirsin: GET /api/n8n/incoming-lead (aynı x-api-key) son 20 lead’i döner.
Mesai saatleri ve zamanlama
Otomatik arama, kontrolsüz gece aramalarını önlemek için mesai penceresine göre planlanır. Bu webhook için pencere sabittir:
| Kural | Değer |
|---|---|
| Saat aralığı | 09:00 – 19:00 |
| Çalışma günleri | Pazartesi – Cumartesi (Pazar hariç) |
| Saat dilimi | Europe/Istanbul |
Akış şöyle işler: arama zamanı şimdi + delay_minutes olarak hesaplanır. Bu an mesai içindeyse arama o zamana planlanır (deferred_to_business_hours: false). Mesai dışındaysa (gece, Pazar, saat 19:00 sonrası) arama bir sonraki iş gününün 09:00’ına ertelenir ve yanıtta deferred_to_business_hours: true döner.
Bu erteleme otomatiktir; payload’da bir mesai anahtarı yoktur. Farklı bir pencere gerekiyorsa
delay_minutesile ince ayar yapabilir, ya da form-bazlı mesai ayarları sunan Meta Lead Ads entegrasyonunu kullanabilirsin.
Aynı kişi tekrar tekrar aranır mı?
Hayır. Aynı hesapta, aynı telefona (numaranın son 10 hanesine göre) ait aktif bir kontak zaten varsa, yeni kayıt oluşturulmaz — mevcut kontak güncellenir. Bu durumda yanıt reused: true içerir. Ayrıca lead son 10 dakika içinde alınmışsa yeni bir arama planlanmaz; bu, aynı formun iki kez gönderilmesi gibi durumlarda çift aramayı engeller.
Durum kodları
| Kod | Anlamı |
|---|---|
201 Created | Kontak oluşturuldu (yanıtta contact_id). |
200 OK | Mevcut kontak güncellendi (mükerrer önlendi, reused: true). |
400 Bad Request | lead.phone is required veya user_id is required (page_id/form_id de yoksa). |
401 Unauthorized | x-api-key eksik veya yanlış. |
503 Service misconfigured | Sunucuda N8N_API_KEY tanımlı değil. |
500 Internal server error | Beklenmeyen hata. |
Bu uç nokta
webhookkovasında hız sınırına (rate limit) tabidir; çok sık istek atarsan geçici olarak sınırlanabilirsin. Sınır ve hata sözleşmesi için Limitler ve Hatalar.
KVKK notu
Otomatik arama, kişisel veri (telefon) işleme ve iletişim anlamına gelir. Web formunda ya da lead kaynağında topladığın açık rıza, “sizi telefonla arayabiliriz” kapsamını da içermeli. Rıza yoksa auto_call: false gönderip önce manuel değerlendirme yapmak daha güvenlidir. Asistanının prompt’unda açılışta kim olduğunu ve neden aradığını net söylediğinden emin ol — “Web sitemizden teklif istemiştiniz” gibi bağlam, hem dönüşümü hem uyumu güçlendirir.
Sorun giderme
| Belirti | Olası neden / çözüm |
|---|---|
401 Unauthorized | x-api-key başlığı yok veya değeri yanlış; N8N_API_KEY ile birebir eşleşmeli. |
503 Service misconfigured | Sunucuda N8N_API_KEY ortam değişkeni tanımlı değil. |
400 lead.phone is required | Payload’da lead.phone yok/boş; kaynağın telefon alanını bu alana eşle. |
400 user_id is required | user_id yok ve page_id/form_id de gönderilmemiş; birini ekle. |
| Kontak oluştu ama arama yapılmadı | auto_call gönderilmedi/false; bağlı SIP numarası yok; mesai dışı olduğu için ertelendi (deferred_to_business_hours: true); numara son 10 dk içinde alındı. |
| Aynı numaraya ikinci lead yeni kontak açmadı | Beklenen davranış — mükerrer önleme mevcut kontağı güncelledi (reused: true). |
| Arama çok geç planlandı | delay_minutes yüksek veya lead mesai dışı geldi → sonraki iş günü 09:00’a ertelendi. |