CRM, faturalama ve destek için tek müşteri profili şeması
CRM, faturalama ve destek arasında net kayıt sistemi kuralları, yinelemeyi önleme ve entegrasyon eşlemesiyle tek bir müşteri profili şeması oluşturun.

Neden müşteri verisi araçlar arasında dağılır (ve neden zararlı olur)
“Tek müşteri” nadiren tek bir kayıt demektir. CRM’de kişi (lead veya contact) ve şirkete (account) bağlı bir kayıt olabilir. Faturalamada, yasal adı, vergi bilgileri ve faturaları olan bir ödeyen varlık vardır. Destekte, bileti açan kişi vardır ve ayrıca çalıştıkları şirket de kaydedilir.
Her araç kendi işini yaptığı için farklı anlarda farklı detayları yakalar. Satış kartvizitten bir iletişim oluşturur. Finans bir fatura talebinden faturalama müşterisi oluşturur. Destek e-postadan bir requester oluşturur. Bunların hepsi normaldir. Sorun, bunların birbirine benzeyen ama tek bir müşteri gibi davranmayan ayrı kayıtlar üretmesidir.
Çift kayıtlar veritabanınızı sadece doldurmakla kalmaz; gerçek hatalara yol açar. Faturalamada “Acme Inc” iki yerdeyse, ödemeler bir kayda, faturalar diğerine gidebilir. Bir VIP destekte iki kere kayıtlıysa, ajanlar geçmiş yükseltmeleri kaçırır ve müşteri zaten cevapladığı soruları tekrar sorar.
Müşteri verisi genellikle şu durumlarda bölünür:
- Kayıtlar farklı giriş noktalarından oluşturulduğunda (formlar, e-posta, dışarıdan aktarma)
- İsimler hafifçe farklı olduğunda (Acme, ACME, Acme Ltd) eşleşme başarısız olur
- İnsanlar iş değiştirdiğinde, e-postalarını veya telefonlarını değiştirdiğinde
- Bir kişi birden fazla ekip veya bağlı kuruluş için alışveriş yaptığında
- Bir sistemde yapılan birleştirmeler diğerlerine hiç ulaşmadığında
Zamanla bu, sistemlerin temel gerçekler hakkında sessizce farklılaşmasıyla sonuçlanır: doğru şirket adı, birincil iletişim veya hesabın aktif olup olmadığı gibi. Genellikle daha sonra fark edersiniz: iadeler, kaçırılan yenilemeler veya yanlış müşteriyle ilgilenilen destek gibi.
Pratik bir tek müşteri profili şeması CRM, faturalama ve desteği tek bir veritabanı ile değiştirmek anlamına gelmez. Hâlâ birden çok sisteminiz olacak. Hedef, kimlik ve ilişkiler (kişi–şirket, şirket–faturalama varlığı) için paylaşılan bir görünüm oluşturmaktır ki güncellemeler tutarlı şekilde hareket etsin.
“Tek profil” kapsamını tanımlayın
Tabloları tasarlamadan veya senkron işleri kurmadan önce kurumunuzda “tek”in ne anlama geldiğine karar verin. Tek profil, her şeyi barındıran devasa bir kayıt değildir. Şunlar üzerinde anlaşma sağlamaktır:
- Hangi sistemlerin kapsamda olduğu
- Profilin hangi sorulara cevap vermesi gerektiği
- Her veri parçasının ne kadar taze olması gerektiği
Öncelikle gerçekten uzlaştıracağınız sistemleri belirleyin. Birçok ekip için bu CRM, faturalama, destek, ürün kullanıcı veritabanı ve hali hazırdaki entegrasyon katmanıdır.
Sonra birleşik profilin hangi soruları yanıtlaması gerektiğini sade dilde tanımlayın:
- Bu kişi kim ve hangi şirkete ait?
- Ne satın aldılar ve ödeme durumu nedir?
- Hangi sorunları bildiriyorlar; acil veya tekrarlayan olan var mı?
- Onlarla nasıl iletişime geçmeliyiz ve tercihi nedir?
- Ürüne erişim izni var mı, hangi rol altında?
Kapsam dışı olanlar konusunda katı olun. Birçok “tek profil” projesi sessizce analiz veya pazarlama yeniden kurulumu haline geldiği için başarısız olur. Pazarlama atıfları, reklam takibi, zenginleştirme ve uzun dönem davranış analitiği daha sonra eklenebilir. Temel kimlik modelinizi onlar yönlendirmemeli.
Güncelleme zamanlaması bir kapsam seçimidir, teknik bir detay değil. Erişim değişiklikleri (askıya alma, rol güncellemeleri) ve yüksek temaslı destek için gerçek zamanlı senkron önemlidir. Fatura geçmişi ve bilet meta verileri için saatlik veya günlük senkron genelde yeterlidir. Bunu veri dilimi bazında kararlandırın, tek bir küresel kural olarak değil.
Gizlilik ve saklama kısıtlarını önceden yazın. Hangi kişisel verileri ne kadar süreyle ve nerede saklayabileceğinize karar verin. Destek notları hassas bilgiler içerebilir ve CRM’ye akmamalıdır. Faturalama verileri yasal saklama gereksinimleri taşıyabilir.
Temel varlıklar: kişi, şirket ve her sistemin onlara verdiği adlar
Pratik bir şema iki temel varlıkla başlar: Şirket (Company) ve Kişi (Person). Çoğu ekipte bunlar zaten vardır. Sorun, her aracın farklı adlar ve varsayımlar kullanmasıdır; uyumsuzluklar buradan gelir.
Neredeyse her yapıya eşleyebileceğiniz basit bir temel model şöyle görünebilir:
- Account (Company): satış yaptığınız işletme. Ayrıca Company, Organization veya Account olarak adlandırılabilir.
- Contact (Person): birey. Ayrıca Person, User, Lead veya Requester denebilir.
- Billing Customer: faturalama aracınızdaki ödeme yapan taraf (çoğunlukla bir ödeme yöntemi ve vergi detaylarıyla ilişkilidir).
- Subscription / Invoice: zaman içinde değişen ticari nesneler. Kişi kaydından ayrı tutun.
- Support Ticket: requester (kişi) ve isteğe bağlı olarak bir organizasyona (şirket) referans veren konuşma dizisi.
İlişkileri açıkça modelleyin. Bir contact genelde bir birincil account'a aittir, ama bazen birden fazla ikincil ilişkiye ihtiyaç duyar (ör. bir danışman birden fazla müşteriyle çalışıyor olabilir). Bir contact üzerinde birden fazla e-posta ve telefon tutun; fakat birini birincil olarak işaretleyin ve diğerlerini tipli alternatifler (iş, özel, mobil) olarak saklayın.
Faturalama, “müşteri”yi bir kişi gibi gösterebilir; ancak genelde Billing Customer'ı hesaba bağlı ayrı bir varlık olarak ele almak daha güvenlidir. Faturaları ve abonelikleri Billing Customer'a bağlamak, bireysel kişilerin rol değiştirmesi durumunda ödeme geçmişinin sabit kalmasını sağlar.
Destek araçları sıklıkla “Requester” ve “Organization” kullanır. Requester’ı Contact’a, Organization’ı Account’a eşleyin, ama her requester’ın bir organizasyonu olduğunu varsaymayın.
Köşe durumlar için baştan tasarlayın:
- Paylaşılan posta kutuları ([email protected]) sahte “kişiler” yaratabilir
- Müteahhitler, kontak olmalı ama aktif müşteri sayısına dahil edilmemeli
- Bayiler (reseller) ödeme yapan ile nihai kullanıcı farklı olabilir
- Bağlı kuruluşlar ayrı hesap gerektirebilir ama bir ana şirkete bağlı olabilir
Alan düzeyinde kayıt sistemi kararları
Kayıt sistemi, bir alanı değiştirmesine izin verilen yer demektir. Diğer tüm araçlar o değeri görüntüleyebilir ama üzerine yazmamalıdır. Bu katı görünse de CRM, faturalama ve destek hepsi “yardım ederken” sessiz drift’i önler.
Sistemin değil, alanın sahibi olarak karar verin. Birçok ekip bunu yazıya döktüğünde hızla uzlaşır.
| Field | System of record | Other systems behavior | Conflict rule |
|---|---|---|---|
| Primary email | CRM | Read-only in billing/support | CRM kazanır; ancak CRM’de e-posta doğrulanmamışsa ve faturalamada doğrulanmışsa faturalama kazanır |
| Billing address | Billing | Read-only in CRM/support | Billing kazanır; CRM bir sonraki fatura/ödeme olayında günceller |
| Plan / subscription status | Billing | Read-only elsewhere | Billing kazanır; iptal durumunda destek etiketleri güncellenir ama planı değiştiremez |
| Support priority / SLA tier | Support | Read-only elsewhere | Support kazanır; CRM gösterebilir ama değiştiremez |
| Legal company name | Billing (if invoiced) or CRM (if lead) | Read-only elsewhere | Lead aşamasında CRM kazanır; ilk faturadan sonra faturalama kazanır |
Değerler farklıysa “son yazan kazanır” yaklaşımından kaçının. Bu hataları gizler. Bunun yerine açık kurallar kullanın: doğrulama durumu serbest metni yener, ücretli durum satış notlarını yener ve “ilk faturadan sonra” kuralı “satın almadan önce”yi yener. Bir tiebreaker gerekiyorsa tek bir zaman damgası kaynağı seçin (ör. faturalama olay zamanı) ve buna sadık kalın.
Entegrasyonlarınızda salt okunur vs yazılabilir davranışı gerçek yapın. Faydalı bir varsayılan: her sistem sadece sahip olduğu alanları yazabilsin; ek olarak, asla geri senklenmeyen küçük bir operasyonel not seti olsun (ör. bir destek ajanının dahili yorumu).
Merge işlemlerinin nerede gerçekleşeceğine karar verin. İdeal olan, merge işlemlerinin tek bir yerde yapılmasıdır (kişi/şirketler için genelde CRM, ödemeyle ilişkili hesaplar için faturalama). Diğer sistemler merge’i eşleme güncelleyerek ve eski ID’leri emekliye ayırarak yansıtmalıdır.
ID stratejisi: dahili müşteri ID’si ve sistemler arası eşlemeler
Tek müşteri profili şeması, kimliği üç tür tanımlayıcıya ayırdığınızda en iyi çalışır: sizin kontrol ettiğiniz dahili Customer ID, her aracın atadığı dışsal ID’ler ve e-posta ya da domain gibi faydalı ama garantili olmayan “doğal anahtarlar”.
İstikrarlı bir dahili Customer ID (ör. UUID) ile başlayın. Bir kez oluşturun, asla yeniden kullanmayın, değiştirmeyin. Müşteri birleşse, yeniden markalaşsa veya e-posta değiştirse bile bu dahili ID raporlama, izinler ve entegrasyonlar için çapa olarak kalır.
Dışsal ID’ler, CRM, faturalama ve destek araçlarının kendi veritabanlarındaki ID’leridir. Bir sistemin ID’sini evrensel yapmaya çalışmayın. Bunları, bir dahili müşteriyi birden çok kayıt ve geçiş boyunca takip edebilmek için özel bir eşleme tablosunda saklayın.
Basit bir eşleme tablosu genelde şöyle görünür (PostgreSQL veya benzeri):
- customer_id (dahili, değişmez)
- system (crm | billing | support)
- external_id (o sistemdeki ID)
- status (active | inactive)
- first_seen_at / last_seen_at
E-posta yalnızca dar durumlarda yararlı bir doğal anahtardır. Onboarding sırasında eşleşme önerisi için yardımcı olabilir, ama ana anahtar olmamalıdır çünkü paylaşılan posta kutuları bir şirketi temsil eder, kişiler B2B’de sık sık iş değiştirir ve sistemler aliasları farklı ele alır.
Yumuşak silme (soft delete) ve denetimler için plan yapın. Bir dışsal kayıt kaldırıldığında veya merge edildiğinde, eşleme satırını tutun ama inaktif olarak işaretleyin ve ne zaman değiştiğini saklayın. Bu, anlaşmazlıklar, iadeler ve “bu müşteri neden kayboldu?” soruşturmaları için geçmiş ID’leri korur.
CRM, faturalama ve destekte işe yarayan dedupe kuralları
Deduping iki ayrı iştir: eşleştirme (matching) ve birleştirme (merging). Eşleştirme olası kopyaları bulur. Birleştirme ise veriyi sonsuza dek değiştiren karardır. Bunları ayrı tutun ki eşleştirmeyi ayarlarken yanlış merge’ler yaratmayın.
Deterministik kurallarla başlayın. Bunlar otomatik merge için en güvenli yoldur çünkü araçlar arasında aynı şey olması gereken tanımlayıcılara dayanır:
- Aynı faturalama müşteri ID’sinin aynı dahili müşteri ID’sine eşlenmiş olması
- Aynı vergi kimlik numarası veya VAT numarası
- Destek portalının verdiği aynı kullanıcı ID’si (varsa) aynı kişiye eşlenmiş olması
- Bir kişi kaydında aynı e-posta adresi, ama sadece e-posta doğrulanmışsa
- Ödeme sağlayıcınızın stabilite garantisi verdiği aynı ödeme yöntemi parmak izi
Sonra “inceleme gerekiyor” kurallarını tanımlayın. Bunlar sürtüşmeyi bulmada iyidir ama otomatik birleştirmeye riskli oldukları için tehlikelidir:
- Benzer isimler artı aynı şirket domaini ([email protected] ve [email protected])
- Aynı telefon numarası (özellikle ana hat)
- Küçük biçim farkları olan aynı teslimat adresi
- Şirket adı varyantları (ACME Inc vs ACME Incorporated)
- Aynı domainden farklı kontaklarla oluşturulmuş destek biletleri
Bir güven puanı eşiği belirleyin ve manuel inceleme kuyruğu kurun. Örneğin: 0.95+ otomatik birleştir, 0.80-0.95 arası incelemeye gönder, 0.80’in altında yok say. İnceleme kuyruğu “neden eşlendiğini”, yan yana değerleri ve geri alma penceresi olan tek bir merge eylemini göstermelidir.
Merge yaptıktan sonra eski kayıt hiç var olmamış gibi davranmayın. Eski ID’leri hayatta tutun ve hayatta kalan dahili müşteri ID’sine yönlendirin, aliasları (eski e-postalar, eski şirket isimleri) saklayın ve gelecekteki senkronizasyonların kopya oluşturmasını önlemek için her cross-system eşleme satırını güncelleyin.
Örnek: faturalama “Acme LLC” diyor ve vergi ID’si var, CRM “ACME, LLC” vergi ID’si olmadan, destek “Acme” biletlerden yaratılmış. Vergi ID’si şirket için otomatik bir merge tetikler. Benzer iletişim e-postaları ise birleştirmeden önce manuel incelemeye gider.
Entegrasyon eşlemesi: ne nereden nereye, hangi tetikleyiciyle
Tek bir müşteri profili ancak gerçekten neyin taşınacağına karar verirseniz “tek” kalır. Her şeyi senkronize etmek güvenli gibi görünür ama çatışmaları, maliyeti ve drift’i artırır.
Senkronize edilecek minimum alanlar (her şey değil)
Her aracın işini yapmasına yetecek en küçük setle başlayın:
- Dahili Customer ID ve dışsal ID’ler (CRM ID, faturalama ID, destek ID)
- Yasal isim ve gösterim adı (B2B ise şirket adı)
- Birincil e-posta ve telefon (doğrulanmış durum dahil)
- Hesap durumu (aktif, gecikmiş, kapalı) ve abonelik özeti
- Sahip/ekip yönlendirmesi (satış sahibi veya destek kuyruğu)
Hızla değişen veya büyük veriyi yerel tutun. Bilet mesajları destekte kalsın. Fatura kalemleri faturalamada kalsın. Aktivite zaman çizelgeleri CRM’de kalsın.
Her alanı eşleyin: kaynak, hedef, yön, sıklık
Eşlemeyi yazılı bir sözleşme gibi tutun. Bu “ping-pong” güncellemelerini önler.
- E-posta: CRM -> destek (değişiklikte gerçek zamanlı), CRM -> faturalama (saatlik batch veya gerçek zamanlı destekleniyorsa)
- Abonelik durumu: faturalama -> CRM, faturalama -> destek (olaylarda gerçek zamanlı)
- Şirket adı: CRM -> faturalama/destek (günlük veya değişiklikte, ama faturalama ihtiyaç duyuyorsa)
- Destek planı seviyesi: faturalama -> destek (gerçek zamanlı), opsiyonel faturalama -> CRM (günlük)
- Birincil telefon: CRM -> destek (değişiklikte), CRM izin veriyorsa geri yazma yapmayın
Her eşlenen alan için izin verilen formatları (büyük-küçük harf, boşluk normalizasyonu, telefon standardizasyonu), boş değerlerin üzerine yazıp yazamayacağını ve iki sistem anlaşmazsa ne olacağını tanımlayın.
Tetikleyiciler: önemli anlar
Sürekli tam senkron yerine olay tetikleyicileri kullanın. Tipik tetikleyiciler: yeni müşteri oluşturuldu, abonelik başladı/yenilendi, bilet oluşturuldu, e-posta değişti, hesap kapandı.
Güncelleme başarısız olursa saklamayın. Giden güncellemeleri kuyruğa alın, üssel geri çekilme (exponential backoff) kullanın ve maksimum yeniden deneme penceresi (ör. 24 saat) belirleyin; sonra olayı elle inceleme için dead-letter kuyruğuna taşıyın.
Ayrıca bir denetim kaydı tutun: dahili customer ID, alan adı, eski değer, yeni değer, zaman damgası ve kaynak sistem.
Canlıya aldıktan sonra drift’i nasıl önlersiniz
“Tek profil” başlandıktan sonra yavaşça tekrar bölünebilir. Drift genelde küçük başlar: bir telefon numarası destekte düzeltilir, faturalama yasal ismi fatura için günceller ve CRM eski değeri tutar. Bir ay sonra kimse profile güvenmez.
Drift genelde kısmi güncellemelerden (sadece bir sistemde değişiklik), yanlış yerde insan düzenlemelerinden ve dünün verisini kopyalamaya devam eden entegrasyon önbelleklerinden gelir. Çözüm daha fazla senkron yapmak değil; hangi değişikliklerin nerede izinli olduğunu net kurmaktır.
Yazma kafesleri koyun (sadece sahibi yazsın)
Her kritik alan için bir sahip sistem seçin ve onu koruyun:
- Mümkünse sahibi olmayan sistemleri o alan için salt okunur yapın (formlardan gizleyin, izinlerle kilitleyin).
- UI’yi kilitleyemiyorsanız entegrasyon katmanında güncellemeyi engelleyin ve açık bir hata döndürün.
- İnsanların çalıştığı yerde düzenleme yönlendirmesi ekleyin: “Adres değişikliği için faturalamayı güncelleyin, CRM’yi değil.”
- Reddedilen her yazma girişimini kim, nereden denedi ve neyi değiştirmeye çalıştığı ile loglayın.
Amaçlı uzlaştırma, doğrulama ve geriye doldurma
Kafesler olsa bile uyumsuzluklar olur. Sistemleri karşılaştıran ve uyumsuzluk raporu üreten küçük bir uzlaştırma işi ekleyin (günlük veya haftalık). Yüksek etkili alanlara odaklanın: yasal isim, fatura adresi, vergi kimliği, birincil e-posta ve hesap durumu.
Kritik alanlar için last_verified_at zaman damgası ekleyin; bu “son değişiklik”ten ayrı olsun. Bir telefon sık değişebilir, ama “doğrulandı” bilgisi doğru olduğunu gösterir.
Geriye dönük değişiklikleri nasıl ele alacağınıza karar verin. Eğer faturalama yasal şirket adını düzeltirse, eski faturaları, geçmiş destek biletlerini ve CRM notlarını geriye dönük günceller misiniz? Alan bazında bir kural yazın: her zaman geriye doldur, sadece yeni kayıtlarda geriye doldur, veya asla geriye doldurma. Bunlar yoksa sistemler sürekli birbirini “düzeltir”.
Adım adım: şemayı oluşturun ve güvenle dağıtın
“İyi”nin nasıl göründüğünü tanımlayın: bir temsilci CRM’i güncellediğinde, faturalama ilk faturayı gönderdiğinde veya destek merge yaptığında profil tutarlı kalsın.
Temeli kontrollü şekilde kurun
Bu sırayla çalışın ki yeni modelinize kaosu dahil etmeyin:
- CRM, faturalama ve destekteki her müşteri ile ilgili alanı envanterleyin ve her alan için bir sahibi atayın.
- Gerçekte saklayacağınız birleşik tabloları tasarlayın: Customer (veya Account), Company/Account, Contact, Mapping (sistemler arası ID’ler) ve Alias (eski isimler, e-postalar, domainler).
- Mevcut dışa aktarılan verileri birleşik modele yükleyin ve aday çoğulları (duplicates) oluşturmak için eşleştirme çalıştırın (henüz otomatik birleştirmeyin).
- Çoğulları çözün, eşlemeleri oluşturun ve alanların üç yerde değiştirilemeyeceği şekilde düzenlemeleri kilitleyin.
- Oluş, güncelleme, merge, iptal için net tetikleyicilerle senkron akışlarını uygulayın ve hatalar ile uyumsuzluklar için monitoring ekleyin.
Küçük bir segmentte pilot çalıştırın. Kaydı geri alması mümkün hataların geri döndürülebileceği yeterince anlamlı ama küçük bir dilim seçin (bir bölge veya bir ürün hattı gibi).
Yeniden iş yapmayı önleyecek dağıtım ipuçları
Her merge kararının sadece “ne yapıldığı” değil “neden yapıldığı”nı da içeren basit bir değişiklik günlüğü tutun. Bir merge daha sonra tartışıldığında zaman kazandırır.
Pilot başlamadan önce bir geri alma planı tanımlayın. Örneğin: profillerin %1’inden fazlası eşleşmezse, senkronu durdur, son temiz snapshot’tan geri yükle ve daha sıkı kurallarla eşleştirmeyi tekrar çalıştır.
Gerçekçi örnek: bir şirket, iki iletişim ve uyumsuz kayıtlar
Acme Parts küçük bir B2B müşterisidir. İki kişi sizinle etkileşimde: Maya (operasyon) ve Jordan (finans). Finans faturaların paylaşılan bir posta kutusuna gitmesini ısrar eder: [email protected]. Üç ay içinde ekibiniz üç destek bileti alır: ikisi Maya’dan, biri paylaşılan fatura adresinden.
Tek müşteri profili şeması uygulanmadan önce aynı gerçek müşteri üç farklı şekilde vardır:
- CRM: “Acme Parts” lead olarak, tek kontak Maya ([email protected])
- Faturalama: “[email protected]” ile müşteri, şirket adı “Acme Parts LLC” ve bir teslimat adresi
- Destek: [email protected] ve [email protected] için requester kayıtları ve biletler CRM lead’ine bağlanmamış
Şimdi pratik bir dedupe kuralı uygulayın: şirket kayıtları yasal isim + normalize edilmiş domain eşleştiğinde birleştirilir (acmeparts.com), ancak kontaklar sadece aynı şirkete ait oldukları için birleştirilmez. Maya ve Jordan ayrı kontaklar olarak bir şirket hesabının altında kalır. Paylaşılan fatura posta kutusu “fatura kontak” rolü olur, birincil kişi olmaz.
Alan düzeyinde sahiplik ve senkron şöyle görünebilir:
| Field | Owned by (system of record) | Synced to | Notes |
|---|---|---|---|
| Company legal name | Billing | CRM, Support | Fatura verileri vergi ve fatura bilgileri konusunda genelde daha güvenilirdir |
| Plan / subscription status | Billing | CRM, Support | Satış veya destek planı tahmin etmesin diye |
| Support priority / SLA tier | Support | CRM | Günlük yetkiyi destek belirler |
| Main phone | CRM | Support | Satış en sık güncelleyen taraf |
| Billing address | Billing | CRM | Gerekiyorsa teslimat ve faturalama adreslerini ayrı tutun |
Maya e-postasını [email protected]’dan [email protected]’a değiştirdiğinde ve yeni bir bilet açtığında ne olur?
Destek yeni requester e-postasıyla bileti alır. Kimlik kurallarınız şu sırayı dener: (1) tam e-posta eşleşmesi, sonra (2) doğrulanmış contact ID eşlemesi, sonra (3) domain ile şirket eşleşmesi ve inceleme gerekiyor bayrağı. Sistem yeni bir requester oluşturur ama bileti domain’e dayanarak Acme Parts hesabına takar. İç bir görev e-posta değişikliğini doğrular. Onaylandıktan sonra Maya’nın kişi bilgisi CRM’de güncellenir (kişi detaylarının sahibi), ve destek requester eşlemesi aynı dahili Contact ID’ye güncellenir. Paylaşılan fatura posta kutusu faturaları almaya devam eder ve şirket tek hesap olarak kalır.
Kontrol listesi ve sonraki adımlar
“Tek profil”i bitirdim demeden önce sıkıcı detayları kontrol edin. Bunlar önce bozulur ve projeyi küçükken düzeltmek en kolay olanıdır.
Hızlı kontrol listesi (drift’i önleyenler)
- ID’ler eksiksiz ve tutarlı. Her müşteri kaydının dahili Customer ID’si var ve bağlantılı her araç kendi dışsal ID’sini eşleme tablosunda saklıyor.
- Her paylaşılan alanın bir sahibi var. Her senkron edilen alan (yasal isim, fatura e-postası, vergi ID, plan, durum) için bir kayıt sistemi ve bir doğruluk yönü ilan edildi.
- Deduping geri alınabilir. Alias ve merge geçmişini (eski e-postalar, eski şirket isimleri, önceki dışsal ID’ler) saklıyor ve birleştirmeyi geri alabiliyorsunuz.
- Senkron hataları amaçlı yönetiliyor. Yeniden denemeler var, başarısız olaylar dead-letter kuyruğuna gidiyor veya beklemeye alınıyor, ve denetim kaydı kim neyi ne zaman gönderdiğini gösteriyor.
- İnsanlar için güvenli geçersiz kılma var. Destek ve finans “otomatik birleştirme yapma” veya “inceleme gerekiyor” işaretleyebiliyor, böylece köşe durumlar sürekli kırılmıyor.
Sonraki adımlar
Gerçek bir iş akışı seçin ve uçtan uca prototipleyin: “yeni şirket kayıt olur, ilk faturayı öder, destek bileti açar.” Sadece gerekli temel varlıkları ve eşlemeleri oluşturun, sonra 20–50 gerçek kaydı çalıştırıp manuel inceleme ihtiyacını ölçün.
Eğer veritabanını, iş akışlarını ve API’leri elle kodlamadan daha hızlı modellemek isterseniz, AppMaster (appmaster.io) içinde şemayı prototipleyebilirsiniz. Önce eşleme tablosu, merge geçmişi ve denetim kaydını modellemeye odaklanın; çünkü entegrasyonlar büyüdükçe kimliği stabil tutan parçalar bunlardır.
SSS
Bir “tek müşteri profili”, CRM, faturalama, destek ve ürün veri tabanınız arasında aynı kişi ve şirketi bağlayan ortak bir kimlik katmanıdır. Bu araçların yerini almaz; “bu kim?” ve “hangi haklara sahip?” sorularına çakışan kayıtlar olmadan tek bir tutarlı yanıt verir.
Gerçek operasyonları yönlendiren en küçük setle başlayın: CRM, faturalama, destek ve ürün kullanıcı veri tabanı. Pazarlama ve analiz araçlarını daha sonra ekleyin; çünkü onlar kapsamı genişletme ve kimlik kurallarını karmaşıklaştırma eğilimindedir.
İki temel varlık kullanın: Person (Kişi) ve Company (Şirket). Buna ek olarak Billing Customer adında, şirketle ilişkilendirilmiş ve faturalar/aboneliklerin bağlandığı ayrı bir varlık oluşturun. Bu, kişi rol değiştirse bile ödeme geçmişini kaybetmemenizi sağlar.
Her alan için bir kayıt sistemi (system of record) seçin; tek bir “ana sistem” yerine alan bazında karar verin. Yaygın düzen: kişi detayları için CRM, yasal isim/adres/abonelik durumu için faturalama, SLA/öncelik için destek. Sonra sahibi olmayan sistemlerin bu alanları salt okunur olarak ele almasını sağlayın.
“Son güncelleme kazandı” kuralından kaçının. Bunun yerine doğrulanmış verinin doğrulanmamış düz yazıyı yendiği, faturalama olaylarının satış notlarını yendiği gibi anlam temelli açık çatışma kuralları kullanın ve bu kuralları yazılı hale getirin.
İçsel, değişmez bir müşteri ID’si (ör. UUID) oluşturun ve her aracın dışsal ID’lerini bu iç ID’ye bağlı bir eşleme tablosunda saklayın. E-posta ve domainler yardımcı ipuçlarıdır; birincil anahtar olarak kullanmayın.
Eşleşme (matching) ile birleştirmeyi (merging) ayırın. Vergi numarası, doğrulanmış e-posta veya aynı faturalama müşteri ID’si gibi deterministik kurallarla otomatik birleştirme yapın; isim benzerliği veya telefon gibi belirsiz eşleşmeleri insan incelemesine yönlendirin.
Abonelik değişiklikleri, hesap kapatma, e-posta güncellemesi ve yeni bilet oluşturma gibi önemli anlar için olay tabanlı tetikleyiciler kullanın. Her sistemin sadece günlük işine yetecek minimum ortak alanları senkronize edin; ağır veya hızlı değişen veriyi kaynak sistemde tutun.
Kritik alanlar için yalnızca sahibi sistemin yazmasına izin veren yazma kısıtları koyun ve reddedilen yazma girişimlerini loglayın. Ayrıca yüksek etkili alanlar için düzenli bir uzlaşma (reconciliation) işi çalıştırın ve last_verified_at gibi doğrulama zaman damgaları tutun.
No-code platformlarda (ör. AppMaster (appmaster.io)) veritabanı şeması, eşleme tablosu ve iş akışlarını prototipleyebilirsiniz; üretime geçmeden önce mapping tablosu, merge geçmişi ve denetim kaydını erken modellemek önemlidir. Prototipten sonra üretime uygun kod veya yapı çıkarabilirsiniz.


