Satış Pipeline
Purvisor AI’da pipeline aşamasını sen elle sürüklemek zorunda değilsin — asistanın her aramadan sonra otomatik olarak ilerletir. Bir lead “ilgileniyorum” dediği anda kontak değerlendirme aşamasına geçer, randevu alındığında taahhüte atlar; sen panele girmeden önce pipeline zaten güncellenmiş olur. Bu sayfa aşamaların ne anlama geldiğini, skorun nasıl hesaplandığını ve otomatik geçişin tam olarak hangi kurala göre çalıştığını anlatır.
Aşamalar (evrensel çekirdek)
Her kontağın universalStage alanı şu altı değerden birini taşır:
| Aşama (kod değeri) | Panelde görünen adı | Anlamı |
|---|---|---|
new | Yeni | Henüz nitelikli bir görüşme olmadı. |
contacted | İletişimde | En az bir görüşme oldu; bilgi verildi veya geri arama planlandı. |
evaluating | Değerlendirme | Lead ilgisini belirtti, teklifi/bilgiyi değerlendiriyor. |
committed | Taahhüt | Randevu alındı veya somut bir taahhüt verildi. |
closed | Kapandı | Satış/randevu tamamlandı — pipeline’ın en yüksek puanlı aşaması. |
lost | Kayıp | Lead reddetti veya vazgeçti; ayrı bir “kayıp nedeni” ile işaretlenir. |
Panelde kontak kartındaki “Durum” (Beklemede/İlgilendi/Randevu Alındı vb.) ile Analiz sekmesindeki “Pipeline Aşaması” farklı alanlardır. Durum, tek bir görüşmenin sonucunu gösterir; pipeline aşaması ise kişinin satış sürecindeki kümülatif konumudur ve geriye gitmez (kayıp hariç).
Aşama nasıl otomatik değişir?
Asistanın her görüşme sonunda ürettiği yapay zeka analizi (outcome alanı) backend’e ulaştığında, kontağın aşaması şu eşlemeyle güncellenir:
Görüşme sonucu (outcome) | Türetilen aşama |
|---|---|
interested | evaluating |
callback_scheduled | contacted |
information_provided | contacted |
appointment_scheduled | committed |
rejected | lost |
no_answer | Değişmez (mevcut aşamada kalır) |
Kural şu: pipeline sadece ileri gider, asla geriye düşmez — tek istisna lost, her aşamadan doğrudan tetiklenebilir. Yani bir kontak zaten evaluatingteyken yeni bir görüşme contacted türetse bile aşama evaluatingde kalır; ama aynı kontak “reddettim” derse anında losta düşer.
new → contacted → evaluating → committed → closed
↘
(her aşamadan) → lostSomut örnek: bir aramanın pipeline’ı nasıl değiştirdiği
Diyelim Ayşe Yılmaz adlı kontak new aşamasında, hiç aranmamış (leadScore: 5, heat: soğuk).
- 1. arama — Asistan arar, Ayşe “ilgileniyorum, fiyatı nedir, gelecek hafta konuşalım” der. AI analizi
outcome: "interested"üretir.- Aşama:
new→evaluating(interested eşlemesi, ileri hareket olduğu için uygulanır). - BANT: konuşma metninde “fiyat” ve “gelecek hafta” geçtiği için
budgetvetimelineotomatikfilled: trueişaretlenir (2/4 dolu → 20 puan). - Duygu trendi: ilk görüşme olduğu için
stable(+5 puan). - Başarı oranı: 1 başarılı / 1 deneme → 10 puan.
- Lead skoru: 20 (BANT) + 25 (evaluating) + 5 (duygu) + 10 (başarı) = 60 → Ilık.
- Aşama:
- 2. arama — Bir hafta sonra tekrar aranır, bu kez Ayşe “vazgeçtim, çok pahalı” der. AI analizi
outcome: "rejected"ve itiraz tipipriceüretir.- Aşama: doğrudan
lost(rejected her zaman kazanır, ileri/geri kuralından bağımsız). lossReason: "price",lossNotes: itirazın metni veya görüşme özeti otomatik yazılır,lostAtzaman damgası eklenir.- Lead skoru yeniden hesaplanır —
lostaşaması 0 puan verdiği için toplam düşer.
- Aşama: doğrudan
Bu güncelleme, çağrı bittikten saniyeler sonra /api/agent/call-analysis uç noktasına (agent tarafından) otomatik gönderilir — panelde elle bir şey yapmana gerek yok. Detaylı analiz alanları (outcome, sentiment, itirazlar, nextCallAt) için: Çağrı Sonrası Analiz.
Bir kadans (çok adımlı takip) kişiyi bu numaradan arıyorsa, aşama committed veya closeda ulaştığında aktif kayıt otomatik tamamlanmış sayılır; losta düşerse kayıt durdurulur. Takip mantığı için: Cadence Nedir?
Lead Skoru ve BANT (Bütçe – Yetki – İhtiyaç – Zaman)
Her aşama değişiminde 0-100 arası bir lead skoru yeniden hesaplanır. Dört bileşenden oluşur:
| Bileşen | Ağırlık | Nasıl hesaplanır |
|---|---|---|
| BANT doluluk | Maks. 40 puan | Bütçe, Yetki, İhtiyaç, Zamanlama kriterlerinin her biri doluysa +10 |
| Pipeline aşaması | Maks. 40 puan | Yeni=5, İletişimde=15, Değerlendirme=25, Taahhüt=35, Kapandı=40, Kayıp=0 |
| Duygu trendi | +10 / +5 / -5 | Yükseliyor=+10, Sabit=+5, Düşüyor=-5 |
| Başarı oranı | Maks. 10 puan | (Başarılı görüşme / Toplam deneme) × 10 |
Toplam skor 0-100 arasında sınırlanır ve şu eşiklere göre bir sıcaklık (heat) etiketi alır: 70 puan ve üzeri Sıcak, 40-69 arası Ilık, 40’ın altı Soğuk. Kontak listesinde ve kanbanda gördüğün 🔥/🌡/❄️ rozetleri doğrudan bu hesaptan gelir.
BANT nasıl doldurulur?
BANT (bütçe-yetki-ihtiyaç-zaman), bir lead’in gerçekten satın alma potansiyeli taşıyıp taşımadığını dört soruyla test eden klasik bir satış çerçevesidir — Purvisor bunu her görüşme sonrası otomatik doldurmaya çalışır:
- Bütçe — görüşme metninde “fiyat”, “bütçe”, “maliyet”, “ücret” gibi ifadeler geçerse dolu işaretlenir.
- Yetki — “karar”, “patron”, “müdür”, “yönetici”, “satın alma” gibi ifadeler karar vericiye temas edildiğini gösterir.
- İhtiyaç — “ihtiyaç”, “istedi”, “bilgi almak” gibi ifadeler ilgiyi doğrular.
- Zamanlama — “randevu”, “yarın”, “gelecek hafta”, “haftaya” gibi ifadeler bir zaman çerçevesi olduğunu gösterir.
Bu, anahtar kelime tabanlı bir sezgisel (heuristic) tespittir — mükemmel değildir ama görüşme özetini elle okuyup dört kutuyu tek tek doldurmaktan çok daha hızlıdır. Kontak detayında her BANT kartını elle de düzenleyebilirsin (kalem ikonuna tıkla, değeri gir, kaydet) — AI’ın yanlış anladığı bir kriteri düzeltmek için.
Daha yapılandırılmış veri çıkarmak istiyorsan (örneğin standart bir “bütçe aralığı” alanı), Bilgi Çıkarıcılar ile görüşme sırasında özel alanlar tanımlayabilirsin — BANT sezgisel tespiti bunun yerine geçmez, tamamlar.
Kayıp nedenleri (lossReason)
Bir kontak lost aşamasına düştüğünde sekiz standart nedenden biriyle etiketlenir:
| Kod | Panelde görünen |
|---|---|
price | Fiyat |
timing | Zamanlama |
trust | Güven |
competitor | Rakip |
no_need | İhtiyaç Yok |
no_authority | Yetki Yok |
unreachable | Ulaşılamadı |
other | Diğer |
AI, görüşmedeki ilk itirazın tipini otomatik lossReason olarak yazar (yukarıdaki fiyat itirazı örneğinde olduğu gibi); itirazın metni de lossNotes alanına düşer. Kontak detayında kayıp bir lead için Yeniden Aktifleştir butonu bulunur — bu, aşamayı tekrar newe çeker ve pipeline’ı sıfırdan başlatır.
Aşama geçmişi
Aşama geçişleri, ayrı bir geçmiş kaydında saklanır: fromStage, toStage, tetikleyici (trigger), varsa ilişkili çağrı kimliği ve tarih. Bu geçmişi panelden görüntüleyebilir veya GET /api/contacts/{id}/pipeline ile son 50 kaydı çekebilirsin.
İnce bir ayrım var: yukarıda anlatılan otomatik aşama değişimi (görüşme sonrası) kontağın güncel aşamasını anında değiştirir ve lead skorunu/ısısını yeniler — ama bu geçişler ayrı bir “geçmiş” satırı olarak loglanmadan doğrudan kontak kaydına yazılır. Panelden veya entegrasyon üzerinden elle yaptığın aşama değişiklikleri ise (aşağıdaki adımlar) hem kontağı günceller hem de geçmiş tablosuna bir satır ekler. Yani en güncel aşama her zaman doğrudur; ayrıntılı “kimden kime, ne zaman” günlüğü şu an yalnızca elle yapılan değişiklikleri kapsar.
Aşamayı elle değiştirme
Kontak detayını aç
Kontaklar listesinden bir kişiye tıkla, Analiz sekmesine geç.
Aşama şeridine tıkla
Yeni → İletişimde → Değerlendirme → Taahhüt → Kapandı şeridinde geçmek istediğin aşamaya tıkla. Onay penceresi çıkar.
Onayla
Onayladığında kontak güncellenir; lead skoru ve ısı (sıcak/ılık/soğuk) yeni aşamaya göre anında yeniden hesaplanır.
📸 [Ekran görüntüsü: Kontak detayı → Analiz sekmesi → tıklanabilir pipeline şeridi + lead skoru kartı]
Sorun giderme
| Belirti | Olası neden / çözüm |
|---|---|
| Aşama hiç ilerlemiyor | Görüşmeler AI analizi üretmiyor olabilir (asistanda analiz özelliği kapalı) veya outcome hep no_answer dönüyor — Çağrı Sonrası Analiz’i kontrol et. |
| BANT kutuları hep boş | Anahtar kelime eşleşmesi görüşme dilinde geçmiyor olabilir — kutuyu elle doldur veya prompt’u konuşmayı bu yönde teşvik edecek şekilde güncelle. |
| Kontak yanlışlıkla “Kayıp” oldu | AI, ilk itirazı gerçek bir ret sanmış olabilir — kayıp kartındaki Yeniden Aktifleştir ile geri al, gerekirse aşamayı elle ayarla. |
| Eski görüşmelerin analizi pipeline’a yansımadı | Kontak silinip yeniden oluşturulmuş olabilir — POST /api/contacts/{id}/sync-analysis bu numaraya ait geçmiş aramaları tarayıp aşama/skor/BANT’ı yeniden inşa eder. |
| Lead skoru beklediğimden düşük | Kırılımı (BANT/Pipeline/Duygu/Başarı) Analiz sekmesindeki skor kartının altında görebilirsin — hangi bileşenin eksik kaldığını orada gör. |