Entegrasyonlarn8n / Web Formu

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ışında x-api-key baş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çin page_id/form_id).

Uç nokta

ÖzellikDeğer
YöntemPOST
Yol/api/n8n/incoming-lead
Kimlik başlığıx-api-key: <N8N_API_KEY>
İçerik tipiapplication/json
Zorunlu alanlead.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" }
  }
}
AlanTipZorunluAçıklama
lead.phonestringEvetTelefon numarası. Boşluk, tire ve parantez temizlenir; mümkünse E.164 gönder (+905321234567). Eksik/bozuk numara aranamaz.
user_idstringEvet*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_idstring (uuid)HayırLead’i hangi asistan arasın. Verilmezse eşleşen entegrasyonun varsayılan asistanı kullanılır.
auto_callbooleanHayırtrue ise arama planlanır. Yoksa kontak oluşturulur ama aranmaz.
delay_minutesnumberHayırAramadan önceki gecikme. Varsayılan: 5 dakika.
sourcestringHayırKaynak etiketi: "meta_lead_ads", "google_ads", "website", "manual" vb. Kontağın kaynağına yazılır (verilmezse "unknown").
campaign_idstringHayırLead’i mevcut bir kampanyaya ekler.
cadence_idstringHayırLead’i bir kadansa kaydeder (çok adımlı takip). Verilmezse ve hesabın aktif bir varsayılan kadansı varsa lead ona otomatik eklenir.
lead.full_namestringHayırAd soyad. İlk kelime ad, kalanı soyad olur; boşsa ad "Lead" atanır.
lead.emailstringHayırE-posta.
lead.companystringHayırŞirket.
lead.titlestringHayırUnvan.
lead.form_dataobjectHayırHam 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> ve Content-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-key gizli 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:

KuralDeğer
Saat aralığı09:00 – 19:00
Çalışma günleriPazartesi – Cumartesi (Pazar hariç)
Saat dilimiEurope/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_minutes ile 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ı

KodAnlamı
201 CreatedKontak oluşturuldu (yanıtta contact_id).
200 OKMevcut kontak güncellendi (mükerrer önlendi, reused: true).
400 Bad Requestlead.phone is required veya user_id is required (page_id/form_id de yoksa).
401 Unauthorizedx-api-key eksik veya yanlış.
503 Service misconfiguredSunucuda N8N_API_KEY tanımlı değil.
500 Internal server errorBeklenmeyen hata.

Bu uç nokta webhook kovası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

BelirtiOlası neden / çözüm
401 Unauthorizedx-api-key başlığı yok veya değeri yanlış; N8N_API_KEY ile birebir eşleşmeli.
503 Service misconfiguredSunucuda N8N_API_KEY ortam değişkeni tanımlı değil.
400 lead.phone is requiredPayload’da lead.phone yok/boş; kaynağın telefon alanını bu alana eşle.
400 user_id is requireduser_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.

İlgili