AksiyonlarTakip Kuralları

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 tetiklenmez

Motor, 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

Kural kurma

Tetikleyiciyi seç

Kuralın hangi olayda ateşleneceğini belirle. Tetikleyiciler iki gruba ayrılır:

GrupTetikleyiciNe zaman ateşler?
TemelArama Tamamlandığında (call_completed)Herhangi bir arama analizi bittiğinde.
TemelArama Cevaplanmadığında (call_no_answer)Arama sonrası kişi hâlâ new aşamasında ve skoru 0 ise (ulaşılamadı).
TemelMüşteri İlgiliyse (call_interested)Aşama evaluating veya committed olduğunda.
TemelMüşteri İlgili Değilse (call_not_interested)Aşama lost olduğunda.
TemelSıcak Lead Tespit Edildiğinde (lead_hot)Sıcaklık hot olduğunda.
TemelDuygu 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ç:

AksiyonDeğerAçıklama
SMS Göndersend_smsNetGSM/Twilio üzerinden metin. actionConfig.message veya bir SMS şablonu.
WhatsApp Göndersend_whatsappWhatsApp Business üzerinden mesaj.
E-posta Göndersend_emailGmail üzerinden e-posta (emailSubject + emailBody). Kişinin e-postası yoksa atlanır.
Yeniden Arama Planlaschedule_callKişinin autoCallScheduledAt alanı ayarlanır; otomatik arayıcı belirttiğin süre sonra tekrar arar.
Webhook Tetikletrigger_webhookKendi sistemine (n8n vb.) POST atar.
Kampanyaya Ekleadd_to_campaignKiş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ı:

AlanVarsayılanAçıklama
Gecikme (dk) (delayMinutes)Panelde 300 = anında gönder. 1440 = 24 saat sonra. Gecikmeliyse çalıştırma scheduled olarak kaydedilir ve zamanı gelince tetiklenir.
Maks Çalışma (maxExecutions)1Kuralın çalışma üst sınırı.
Öncelik (priority)0Yü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)

Amaç
GET /api/actions/follow-upKuralları listele (öncelik ve tarihe göre).
POST /api/actions/follow-upKural 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-previewSegment 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

BelirtiOlası neden / çözüm
Kural hiç tetiklenmediKural 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 gitmediBeklenen 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ştiSegment ö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.

İlgili