Takip Kuralları (Follow-Up)
Aramanın açılmaması, müşterinin fiyat itirazı, sıcak bir lead’in belirmesi — bunların her biri bir aksiyon fırsatıdır ve elle takip edilmeye kalkınca kaçar. Takip kuralları bu boşluğu kapatır: “şu olay olduğunda, şunu yap” dersin, Purvisor AI motoru arka planda 7/24 dinler ve tetiklenince otomatik olarak SMS/WhatsApp/e-posta gönderir, yeniden arama planlar ya da kişiyi bir kampanyaya ekler. Kural yeni oluşturulduğunda geçmiş kişilere de geriye dönük uygulanır — sistem eşleşen mevcut kayıtları tarayıp sıraya alır.
Nasıl çalışır?
Bir olay olur (arama analizi / pipeline değişimi / itiraz / skor-sıcaklık değişimi)
↓
Aktif takip kuralları öncelik sırasına göre değerlendirilir
↓
Tetikleyici uyuyor mu? → (call_no_answer, lead_hot, objection_detected, ...)
↓ evet
Segment filtresi uyuyor mu? → (aşama, sıcaklık, skor, itiraz tipi, BANT, duygu)
↓ evet
Aksiyon çalışır (varsa gecikmeyle): SMS · WhatsApp · e-posta · yeniden arama · kampanyaya ekle
↓
Çalıştırma kaydı yazılır → aynı kural aynı kişi için tekrar tetiklenmezMotor, bir kişide değişiklik olan her anda tetiklenir: arama sonrası AI analizi bittiğinde, pipeline aşaması elle değiştirildiğinde, itiraz eklendiğinde veya skor/sıcaklık güncellendiğinde. “Arama” tabanlı temel tetikleyiciler yalnızca arama analizinde çalışır; “akıllı” tetikleyiciler (itiraz, aşama, BANT, sıcaklık, skor) her kişi güncellemesinde ve geriye dönük taramada da devreye girer.
Bir kural bir tetikleyici + bir aksiyon tutar. “Cevapsız arama → WhatsApp gönder ve yarın tekrar ara” gibi zincirleri, aynı tetikleyiciye bağlı iki kural kurarak oluşturursun (bkz. Örnek: Cevapsız çağrı senaryosu).
Ön koşullar
- Kişilerin CRM’de olması ve AI analizi/pipeline’ın çalışıyor olması — tetikleyicilerin çoğu bu alanlardan beslenir (Kontak Yönetimi, Satış Pipeline).
- Kullanacağın kanalın bağlı olması: SMS için NetGSM/Twilio, WhatsApp için WhatsApp Business, e-posta için Gmail (SMS Gönderme, WhatsApp Şablonu, E-posta Gönderme).
- “Yeniden arama” aksiyonu için bağlı bir telefon numarası (SIP) (Telefon Numarası (SIP)).
- “Kampanyaya ekle” aksiyonu için önceden oluşturulmuş bir kampanya (Kampanya Nedir?).
Kural kurma
Tetikleyiciyi seç
Kuralın hangi olayda ateşleneceğini belirle. Tetikleyiciler iki gruba ayrılır:
| Grup | Tetikleyici | Ne zaman ateşler? |
|---|---|---|
| Temel | Arama Tamamlandığında (call_completed) | Herhangi bir arama analizi bittiğinde. |
| Temel | Arama Cevaplanmadığında (call_no_answer) | Arama sonrası kişi hâlâ new aşamasında ve skoru 0 ise (ulaşılamadı). |
| Temel | Müşteri İlgiliyse (call_interested) | Aşama evaluating veya committed olduğunda. |
| Temel | Müşteri İlgili Değilse (call_not_interested) | Aşama lost olduğunda. |
| Temel | Sıcak Lead Tespit Edildiğinde (lead_hot) | Sıcaklık hot olduğunda. |
| Temel | Duygu Olumlu / Olumsuz (sentiment_positive / sentiment_negative) | Duygu eğilimi rising / falling olduğunda. |
| Akıllı | İtiraz Tespit Edildiğinde (objection_detected) | Belirttiğin itiraz tipi görüşmede yakalandığında. |
| Akıllı | Pipeline Aşaması Değiştiğinde (pipeline_stage_changed) | Aşama, filtrede seçtiğin değere geçtiğinde. |
| Akıllı | BANT Kriterleri Karşılandığında (bant_criteria_met) | Seçtiğin BANT alanlarının tümü dolduğunda. |
| Akıllı | Müşteri Sıcaklığı Değiştiğinde (heat_changed) | Sıcaklık, filtredeki değere değiştiğinde. |
| Akıllı | Lead Skoru Eşiğine Ulaştığında (lead_score_threshold) | Skor, belirlediğin eşiğe ulaştığında (ör. leadScore >= 70). |
| Akıllı | Çözülmemiş İtiraz Varsa (objection_unresolved) | Kişide çözülmemiş bir itiraz durduğunda. |
Akıllı tetikleyiciler yalnızca yeni aramalarda değil, mevcut kişilerde de çalışır. Bu yüzden “skoru en az 70 olan herkese kampanya” gibi bir kural, kurar kurmaz geçmiş kişileri de kapsar.
Segmenti daralt ve önizle
Segmentasyon, kural tetiklendiğinde hangi kişilerin eşleşeceğini daraltır. Alanları boş bırakırsan filtre uygulanmaz — tetikleyiciyi geçen herkes eşleşir.
| Filtre alanı | Değerler |
|---|---|
İtiraz tipi (objectionTypes) | price, timing, trust, competitor, no_need, no_authority |
Pipeline aşaması (universalStages) | new, contacted, evaluating, committed, closed, lost |
Hariç tutulan aşama (excludeStages) | Yukarıdaki aşamalardan istemediklerin (ör. closed, lost) |
Sıcaklık (heat) | hot, warm, cold |
Skor aralığı (minLeadScore / maxLeadScore) | Örn. en az 60, en çok 100 |
BANT gereksinimi (bantRequired) | budget, authority, need, timeline |
Duygu eğilimi (emotionTrend) | rising, stable, falling |
Kaydetmeden önce “Segmenti Önizle” butonuna bas. Purvisor eşleşen kişi sayısını ve ilk 5 örneği döndürür — böylece kuralı 500 kişiye değil, doğru 23 kişiye kurduğunu görürsün.
POST /api/actions/follow-up/segment-preview
Content-Type: application/json
{
"segmentFilter": {
"heat": ["hot"],
"minLeadScore": 60,
"excludeStages": ["closed", "lost"]
}
}{
"count": 23,
"sample": [
{ "id": "184", "name": "Ayşe Yılmaz", "phone": "+9053XXXXXXXX" },
{ "id": "207", "name": "Mehmet Demir", "phone": "+9054XXXXXXXX" }
]
}📸 [Ekran görüntüsü: Segmentasyon adımı — filtre kutuları + “Segmenti Önizle” sonucu “23 kişi eşleşiyor”]
Aksiyonu ve zamanlamayı ayarla
Eşleşen kişiye ne yapılacağını seç:
| Aksiyon | Değer | Açıklama |
|---|---|---|
| SMS Gönder | send_sms | NetGSM/Twilio üzerinden metin. actionConfig.message veya bir SMS şablonu. |
| WhatsApp Gönder | send_whatsapp | WhatsApp Business üzerinden mesaj. |
| E-posta Gönder | send_email | Gmail üzerinden e-posta (emailSubject + emailBody). Kişinin e-postası yoksa atlanır. |
| Yeniden Arama Planla | schedule_call | Kişinin autoCallScheduledAt alanı ayarlanır; otomatik arayıcı belirttiğin süre sonra tekrar arar. |
| Webhook Tetikle | trigger_webhook | Kendi sistemine (n8n vb.) POST atar. |
| Kampanyaya Ekle | add_to_campaign | Kişiyi seçtiğin kampanyaya pending olarak ekler; opsiyonel prompt override ile. |
Mesaj metinlerinde değişken kullanabilirsin: {{first_name}}, {{company}}, {{email}}, {{agent_name}}. Metni kural içine yazabilir ya da hazır bir mesaj şablonu seçebilirsin.
Zamanlama alanları:
| Alan | Varsayılan | Açıklama |
|---|---|---|
Gecikme (dk) (delayMinutes) | Panelde 30 | 0 = anında gönder. 1440 = 24 saat sonra. Gecikmeliyse çalıştırma scheduled olarak kaydedilir ve zamanı gelince tetiklenir. |
Maks Çalışma (maxExecutions) | 1 | Kuralın çalışma üst sınırı. |
Öncelik (priority) | 0 | Yüksek öncelikli kurallar önce değerlendirilir. |
Aynı kural, aynı kişi için yalnızca bir kez çalışır — motor her (kural, kişi) çifti için bir çalıştırma kaydı tutar ve tekrarı engeller. Yani “gönderdim mi acaba” endişesi yok; çift SMS gitmez.
Örnek: Cevapsız çağrı senaryosu
“Aranan ama açmayan lead’e hemen WhatsApp at, yarın tekrar ara” senaryosu iki kuraldan oluşur. İkisi de aynı tetikleyiciye (call_no_answer) bağlıdır:
Kural 1 — anında WhatsApp:
{
"name": "Cevapsız → WhatsApp",
"triggerType": "call_no_answer",
"actionType": "send_whatsapp",
"actionConfig": {
"message": "Merhaba {{first_name}}, sizi aradık ama ulaşamadık. Uygun olduğunuzda dönebilir miyiz?"
},
"delayMinutes": 0,
"segmentFilter": { "excludeStages": ["closed", "lost"] }
}Kural 2 — yarın yeniden arama:
{
"name": "Cevapsız → Yarın tekrar ara",
"triggerType": "call_no_answer",
"actionType": "schedule_call",
"delayMinutes": 1440,
"segmentFilter": { "excludeStages": ["closed", "lost"] }
}İlk kural WhatsApp’ı hemen gönderir; ikincisi 24 saat sonrası için yeniden aramayı planlar. Kişi bu arada closed veya lost olduysa her iki kural da onu atlar.
Çok adımlı, çok günlük ve daha karmaşık takip akışları için tek tek kurallar yerine bir kadans kullanmak daha yönetilebilirdir — ara, açmazsa WhatsApp, ertesi gün tekrar ara, üçüncü gün e-posta gibi. Bkz. Cadence Nedir?
Takip kampanyası kurma
“Belli bir segmenti otomatik arayan” bir takip akışı istiyorsan yol şudur:
Hedef kampanyayı oluştur
Önce boş bir outbound kampanya aç (asistan + arayan numara seçili). Kişileri elle eklemene gerek yok — kural besleyecek.
”Kampanyaya Ekle” kuralını kur
Aksiyon olarak Kampanyaya Ekle’yi seç, hedef kampanyayı işaretle. İstersen AI Asistan Prompt Override alanına bu segmente özel bir talimat yaz — bu metin, kampanyadaki asistanın prompt’una ek olarak gönderilir:
“Bu müşteriye %10 indirim teklif et. Fiyat konusundaki endişelerini anlayışla karşıla ve indirimin sınırlı süreli olduğunu vurgula.”
Kaydettiğinde kural, segmentine uyan mevcut kişileri kampanyaya pending olarak ekler ve bundan sonra segmentine giren her yeni kişiyi de otomatik ekler.
Prompt override, örneğin “fiyat itirazı” (objectionTypes: ["price"]) segmentiyle birleştiğinde çok güçlüdür: yalnızca fiyattan çekinen kişiler, indirim talimatı yüklü bir asistanla yeniden aranır. Genel bir kampanya yerine cerrahi bir takip.
Uçlar (API)
| Uç | Amaç |
|---|---|
GET /api/actions/follow-up | Kuralları listele (öncelik ve tarihe göre). |
POST /api/actions/follow-up | Kural oluştur. Zorunlu: name, triggerType, actionType. |
PATCH /api/actions/follow-up/[id] | Kuralı güncelle. |
DELETE /api/actions/follow-up/[id] | Kuralı sil. |
POST /api/actions/follow-up/segment-preview | Segment filtresine uyan kişi sayısı + örnek. |
Yeni bir kural oluşturduğunda arka planda geriye dönük tarama (backfill) başlar: eşleşen mevcut kişiler (en fazla 1000 kayıt) taranıp sıraya alınır. Bu işlem bloklamaz — kaydettiğin an panel açık kalır.
KVKK notu
Otomatik SMS, WhatsApp, e-posta ve yeniden arama, kişiye ticari iletişim anlamına gelir. Bu kanalları kullanmadan önce ilgili kişiden açık rıza aldığından emin ol; “beni aramayın” diyen kişiler için Purvisor’ın do-not-call (DNC) mekanizması onları tüm kampanya ve otomasyonların dışında tutar. Segment filtrende lost aşamasını ve rıza vermemiş grupları hariç tutmak iyi bir varsayılandır. Ayrıntı: KVKK ve Veri Yönetimi.
Sorun giderme
| Belirti | Olası neden / çözüm |
|---|---|
| Kural hiç tetiklenmedi | Kural pasif; tetikleyicinin koşulu oluşmamış (ör. call_no_answer yalnızca aşama new + skor 0 iken); segment filtresi kimseyi eşlemiyor → önizleyip kontrol et. |
| SMS/WhatsApp gitmedi | İlgili kanal (NetGSM/Twilio, WhatsApp Business, Gmail) bağlı değil; mesaj metni boş; e-posta aksiyonunda kişinin e-postası yok. |
| Aynı kişiye tekrar gitmedi | Beklenen davranış — her (kural, kişi) çifti bir kez çalışır. Yeniden çalıştırmak için kişiyi yeni bir kurala uydur. |
| Yeniden arama yapılmadı | schedule_call planlandı ama bağlı SIP numarası yok/pasif; otomatik arayıcı için kişide leadSource yoksa kural bunu followup_rule olarak set eder. |
| Kampanyaya ekleme çalışmadı | add_to_campaign için hedef kampanya seçilmemiş; kişi zaten kampanyada (mükerrer eklenmez). |
| Beklenenden fazla/az kişi eşleşti | Segment önizlemesi en fazla 500 kişilik örnek üzerinden sayım yapar; büyük listelerde gerçek kapsam backfill’de 1000 kayda kadar taranır. |