Kontaklar & CRMToplu İşlemler ve Dışa Aktarım

Toplu İşlemler ve Dışa Aktarım

500 kişilik bir listede ısı durumunu tek tek değiştirmek saatler alır. Purvisor’da seçtiğin kontakları tek istekte güncelleyebilir, listeden kaldırabilir ya da tüm kontak tabanını CSV olarak indirip Excel’de, CRM’de veya yedek olarak kullanabilirsin. Bu sayfa üç işlemi de kod düzeyinde — hangi alan, hangi sınır, hangi hata mesajı — anlatır.

İçeri aktarma (CSV yükleme) bu sayfanın konusu değil; onun için bkz. Kontak Listeleri ve CSV İçe Aktarma.

Toplu güncelleme

Kontaklar listesinde birden çok kişi seçip aşağıdaki alanları tek seferde değiştirebilirsin (PATCH /api/contacts/bulk):

AlanKabul edilen değerlerNot
contactStatushot, warm, cold, inactiveGenel kontak durumu.
statusnew, contacted, qualified, proposal, negotiation, closedSatış pipeline aşaması.
universalStageserbest metinPipeline’daki özel aşama etiketi.
heathot, warm, coldIsı göstergesi.
priority0-10 arası tamsayıÖncelik puanı.

contactStatus ile heat aynı ısı skalasını (hot / warm / cold) kullanır; contactStatus ayrıca inactive değerini de destekler. İkisi ayrı alanlardır — birini değiştirmek diğerini otomatik güncellemez.

Kişileri seç

Kontaklar listesinde değiştirmek istediğin kişilerin yanındaki kutucukları işaretle.

Toplu işlem menüsünden alan(lar)ı seç

Açılan toplu işlem panelinden değiştirmek istediğin alan(lar)ı ve yeni değer(ler)i seç. En az bir alan seçmen gerekir — boş bir istek “En az bir güncelleme alanı gerekli” hatasıyla reddedilir.

Uygula

Onayladığında istek gönderilir; kaç kaydın güncellendiği ekranda döner ("X contacts updated successfully").

📸 [Ekran görüntüsü: Kontaklar listesi — çoklu seçim + toplu işlem paneli]

Sınırlar:

  • Tek istekte en fazla 100 ID gönderilebilir (ids dizisi min 1, max 100) — daha fazlası “Çok fazla ID” hatası döner.
  • Yalnızca kendi hesabına ait ve silinmemiş (deletedAt: null) kayıtlar güncellenir; başka kullanıcıya ait veya zaten arşivlenmiş bir ID listeye karışsa bile sessizce atlanır (hata vermez, sadece güncellenen sayıya dahil olmaz).
  • Etiket eklemek/kaldırmak veya itiraz/aktivite kaydı işlemek ayrı bir akıştır — bkz. İtiraz, Aktivite ve Etiket.

Toplu silme

Seçili kişileri listeden kaldırmak DELETE /api/contacts/bulk ile çalışır ve bir yumuşak silmedir: kayıt gerçekten silinmez, deletedAt alanına silinme zamanı yazılır. Kişi listede ve raporlarda artık görünmez ama arama geçmişi veritabanında durur.

⚠️

Toplu silme, tek tek silmenin aynısıdır — sadece çok sayıda ID’yi aynı anda işler. Kalıcı (geri döndürülemez) silme ayrı bir akıştır ve KVKK “unutulma hakkı” talepleri için kullanılır — bkz. KVKK ve Veri Yönetimi.

  • İstek gövdesinde ids dizisi zorunludur; boş veya dizi olmayan bir gövde “ids array is required” hatasıyla reddedilir.
  • Güncelleme uç noktasının aksine, silme isteğinde şema düzeyinde bir üst sınır (örn. 100) uygulanmaz — yine de aynı anda çok büyük seçimler yapmak yerine listeyi filtreleyip parçalar halinde silmen önerilir.
  • Sadece kendi hesabına ait ve henüz silinmemiş kayıtlar etkilenir (aynı userId + deletedAt: null kısıtı).

CSV dışa aktarma

GET /api/contacts/export tüm aktif (silinmemiş) kontaklarını, oluşturulma tarihine göre en yeniden eskiye sıralı bir CSV dosyası olarak indirir. Dosya adı potansiyel-musteriler-YYYY-AA-GG.csv biçimindedir ve tarayıcı otomatik indirir.

CSV sütunuKaynak alan / mantık
Ad, SoyadfirstName, lastName
TelefonphoneNumber
E-postaemail
Şirket, Ünvancompany, title
DurumcontactStatus varsa o, yoksa status
KaynakleadSource varsa o; yoksa bağlı kampanyanın adı; ikisi de yoksa "Manuel"
EtiketlerKontağa atanmış etiket adları, ; ile birleştirilmiş
Arama Sayısı / Başarılı Arama / Başarısız AramacallAttempts, successfulCalls, failedCalls (boşsa 0)
AI DuyguaiSentiment — çağrı sonrası analiz çıktısı, bkz. Çağrı Sonrası Analiz
Dönüşüm OlasılığıconversionProbability (sayısal)
Son AramalastCallAttemptAt, TR tarih biçimi
Notlarnotes
Oluşturulma TarihicreatedAt, TR tarih biçimi

Dosya UTF-8 BOM ile başlar; bu sayede Excel Türkçe karakterleri (ş, ğ, ı, ö, ü, ç) bozmadan açar. Ayrıca her hücre bir CSV formula-injection korumasından geçer: bir hücre =, +, - veya @ ile başlıyorsa (örn. bir CRM’den veya Meta lead formundan gelen bozuk/kötü niyetli bir alan), başına tek tırnak eklenir — böylece Excel/Sheets o hücreyi bir formül gibi çalıştırmaz.

Silinmiş (arşivlenmiş) kontaklar dışa aktarıma dahil edilmez — export sorgusu da deletedAt: null filtresi kullanır.

Çok kiracılı izolasyon ve KVKK

⚠️

Toplu güncelleme, toplu silme ve CSV dışa aktarma sorgularının üçü de userId’yi zorunlu bir filtre olarak kullanır. Bu, bir kullanıcının başka bir Purvisor hesabının kontaklarını asla görmediği, güncelleyemediği veya dışa aktaramadığı anlamına gelir — kiracılar (tenant’lar) arasında veri sızıntısı olmaz. Purvisor’da daha önce kontak geçmişi tarafında benzer bir çok-kiracılı izolasyon açığı tespit edilip kapatılmıştı; toplu işlem ve dışa aktarma uç noktaları tasarım gereği baştan bu izolasyonla yazıldı.

  • CSV dışa aktardığın an, o dosya artık senin sorumluluğundadır — telefon numarası, e-posta gibi kişisel veriler içerir. Dosyayı gereksiz yere paylaşma, İYS/KVKK yükümlülüklerine göre sakla ve gerektiğinde sil.
  • Bir kişi “beni arama” derse ya da veri silme talep ederse, toplu silme (yumuşak) yeterli değildir — kalıcı silme akışını kullan: KVKK ve Veri Yönetimi.

Sorun giderme

BelirtiOlası neden / çözüm
”Çok fazla ID” hatasıToplu güncellemede 100’den fazla kişi seçtin → seçimi böl.
”En az bir güncelleme alanı gerekli”Toplu işlem panelinde hiçbir alan/değer seçilmedi → en az bir alan seç.
”ids array is required”Toplu silme isteği boş/bozuk gönderildi → sayfayı yenileyip seçimi tekrar yap.
Güncellenen sayı beklenenden azSeçtiğin bazı ID’ler zaten silinmiş ya da başka hesaba ait → bu kayıtlar sessizce atlanır, hata görünmez.
CSV’de Türkçe karakterler bozukDosyayı açan program BOM’u yok sayıyor → dosyayı doğrudan Excel ile aç veya “CSV UTF-8” olarak içe aktar.
Dışa aktarılan dosyada bazı kişiler eksikSilinmiş (arşivlenmiş) kontaklar exporta dahil edilmez → bu beklenen davranıştır.

İlgili