0Pricing
AI Agents · Ders

Müşteri Bağlamı ve Geçmişi Yönetimi

Geçmiş satın alımları, biletleri ve tercihleri kullanarak kişiselleştirilmiş yanıtlar oluşturma.

Müşteri Bağlamı ve Geçmişi Yönetimi, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

Bağlam Temsilcileri Neden İnsan Gibi Hissettirir?

Vasat ve mükemmel bir müşteri hizmetleri temsilcisi arasındaki fark bağlamdır. Temsilci “Aboneliğinizin gelecek hafta yenileneceğini görüyorum — o zamandan önce duraklatmak ister misiniz?” dediğinde müşteri yalnızca bir işlemden geçiyormuş gibi değil, tanınıyormuş gibi hisseder.

Bu derste temsilcileriniz için zengin bir müşteri bağlamı katmanı oluşturmayı ele alıyoruz.

Müşteri Profili Şeması

Birden çok kaynaktaki verileri birleştiren standart bir müşteri profili tanımlayın. Temsilci, her görüşmenin başında bu sözlüğü alır.

from dataclasses import dataclass, field
from datetime import date

@dataclass
class CustomerProfile:
    customer_id: str
    name: str
    email: str
    join_date: date
    subscription_tier: str          # 'free', 'pro', 'enterprise'
    account_age_days: int
    lifetime_value_usd: float
    previous_tickets: list[dict] = field(default_factory=list)
    recent_purchases: list[dict]  = field(default_factory=list)
    preferences: dict             = field(default_factory=dict)

    @property
    def is_long_term_customer(self) -> bool:
        return self.account_age_days > 365

if __name__ == '__main__':
    from datetime import date
    profile = CustomerProfile(
        customer_id='cust_1', name='Jane Doe', email='jane@example.com',
        join_date=date(2023, 1, 15), subscription_tier='pro',
        account_age_days=400, lifetime_value_usd=1250.50,
    )
    print(f'{profile.name} ({profile.subscription_tier}) - long-term customer: {profile.is_long_term_customer}')

Satın Alma Geçmişini Getirme

E-ticaret arka ucunuzdan son N siparişi getirin. Sipariş tarihini, ürünleri, toplam tutarı ve durumu ekleyin. Bu bilgiler, ajana müşterinin neler satın aldığını ve yakın tarihli siparişlerde sorun olup olmadığını gösterir.

import requests

SHOP_API = 'https://api.yourshop.com'
SHOP_KEY  = 'YOUR_SHOP_API_KEY'

def get_purchase_history(customer_id: str, limit: int = 10) -> list[dict]:
    resp = requests.get(
        f'{SHOP_API}/customers/{customer_id}/orders',
        headers={'Authorization': f'Bearer {SHOP_KEY}'},
        params={'limit': limit, 'sort': '-created_at'}
    )
    resp.raise_for_status()
    orders = resp.json()['orders']
    return [
        {
            'order_id':   o['id'],
            'date':       o['created_at'][:10],
            'total_usd':  o['total'],
            'status':     o['status'],
            'items':      [i['name'] for i in o['line_items']]
        }
        for o in orders
    ]

Önceki Destek Taleplerini Getirme

Tekrarlayan sorunları anlamak için son N destek talebini getirin. Müşterinin aynı sorunu üç kez çözüme kavuşturması, bunun bir ürün sorunu olduğunu gösterir; durumu uygun şekilde üst ekibe iletin ve işaretleyin.

def get_support_history(customer_id: str, limit: int = 5) -> list[dict]:
    resp = requests.get(
        f'{SHOP_API}/customers/{customer_id}/tickets',
        headers={'Authorization': f'Bearer {SHOP_KEY}'},
        params={'limit': limit, 'sort': '-created_at'}
    )
    resp.raise_for_status()
    tickets = resp.json()['tickets']
    return [
        {
            'ticket_id': t['id'],
            'subject':   t['subject'],
            'status':    t['status'],
            'resolved':  t.get('resolved_at', ''),
            'category':  t.get('category', 'general')
        }
        for t in tickets
    ]

def has_recurring_issue(tickets: list[dict], category: str) -> bool:
    return sum(1 for t in tickets if t['category'] == category) >= 3

Abonelik Seviyesini ve Durumunu Okuma

Abonelik seviyesi, müşterinin hangi haklara sahip olduğunu belirler. Planında bulunmayan bir özellik hakkında soru soran Pro müşterisine verilecek yanıt, aynı soruyu soran bir Enterprise müşterisine verilecek yanıttan farklı olmalıdır.

def get_subscription_info(customer_id: str) -> dict:
    resp = requests.get(
        f'{SHOP_API}/customers/{customer_id}/subscription',
        headers={'Authorization': f'Bearer {SHOP_KEY}'}
    )
    if resp.status_code == 404:
        return {'tier': 'free', 'status': 'active', 'renewal_date': None}
    resp.raise_for_status()
    sub = resp.json()
    return {
        'tier':         sub['plan'],
        'status':       sub['status'],        # active / past_due / canceled
        'renewal_date': sub.get('current_period_end', '')[:10],
        'cancel_at':    sub.get('cancel_at_period_end', False)
    }

Hesap Yaşını Hesaplama

Hesap yaşı, müşteri bağlılığı hakkında bilgi verir. 2021'den beri sizinle olan bir müşteriye, dün kaydolan birinden farklı şekilde yaklaşılmalıdır. Yakınlık kurmak için uygun olduğunda müşterinin ne kadar süredir sizinle olduğunu belirtin.

from datetime import datetime, timezone

def calculate_account_age(join_date_str: str) -> dict:
    join = datetime.fromisoformat(join_date_str.replace('Z', '+00:00'))
    now  = datetime.now(timezone.utc)
    delta = now - join
    years  = delta.days // 365
    months = (delta.days % 365) // 30
    return {
        'days':   delta.days,
        'years':  years,
        'months': months,
        'label':  f'{years} year(s) and {months} month(s)' if years else f'{months} month(s)'
    }

age = calculate_account_age('2021-03-15T00:00:00Z')
print(age['label'])  # e.g. '5 year(s) and 2 month(s)'

LLM için Bağlam Dizesi Oluşturma

Müşteri profilini, sistem istemine eklenen kısa bir bağlam bloğuna dönüştürün. Kısa tutun; yalnızca mevcut oturumla doğrudan ilgili bilgileri ekleyin.

def build_context_block(profile: CustomerProfile) -> str:
    recent_order = profile.recent_purchases[0] if profile.recent_purchases else None
    last_ticket  = profile.previous_tickets[0]  if profile.previous_tickets  else None
    parts = [
        f'Customer: {profile.name} ({profile.email})',
        f'Account age: {profile.account_age_days} days | Tier: {profile.subscription_tier}',
        f'Lifetime value: USD {profile.lifetime_value_usd:.0f}',
    ]
    if recent_order:
        parts.append(
            f'Last order: {recent_order["date"]} — '
            f'{', '.join(recent_order["items"][:2])} ({recent_order["status"]})'
        )
    if last_ticket:
        parts.append(f'Last ticket: "{last_ticket["subject"]}" ({last_ticket["status"]})')
    return '\n'.join(parts)

Yanıtları Bağlamla Kişiselleştirme

LLM'nin kendisine açıkça söylenmeden yanıtlarında bu bağlama doğal biçimde başvurabilmesi için bağlam bloğunu sistem istemine ekleyin.

import openai

client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')

def respond_with_context(user_message: str, profile: CustomerProfile) -> str:
    context = build_context_block(profile)
    system_prompt = (
        f'You are a helpful customer service agent for ShopCo.\n'
        f'Customer context:\n{context}\n\n'
        f'Be warm and personal. Reference their history when relevant. '
        f'Address the customer by first name.'
    )
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': system_prompt},
            {'role': 'user',   'content': user_message}
        ]
    )
    return resp.choices[0].message.content

Müşteri Bağlamını Önbelleğe Alma

Her iletide birden fazla API'den profil verisi getirmek yavaş ve maliyetlidir. Görüşmenin başında profili önbelleğe alın ve yalnızca değişebilecek alanları (sipariş durumu, talep durumu) güncelleyin.

import time

profile_cache: dict[str, dict] = {}  # customer_id -> {profile, fetched_at}
CACHE_TTL = 300  # 5 minutes

def get_cached_profile(customer_id: str) -> CustomerProfile | None:
    entry = profile_cache.get(customer_id)
    if entry and time.time() - entry['fetched_at'] < CACHE_TTL:
        return entry['profile']
    return None

def set_cached_profile(customer_id: str, profile: CustomerProfile):
    profile_cache[customer_id] = {
        'profile': profile,
        'fetched_at': time.time()
    }

Geçmişten Hassas Durumları Algılama

Geçmiş, özel işlem gerektiren örüntüleri ortaya çıkarabilir: son üç siparişi kusurlu olan bir müşteri, geçen ay aboneliğini iptal etmekle tehdit eden biri veya yedi yıldır sizinle olan bir kullanıcı.

def assess_risk_flags(profile: CustomerProfile) -> list[str]:
    flags = []

    # Check for cancellation risk
    cancel_keywords = ['cancel', 'unsubscribe', 'quit', 'competitor']
    for ticket in profile.previous_tickets:
        if any(kw in ticket.get('subject', '').lower() for kw in cancel_keywords):
            flags.append('cancellation_risk')
            break

    # Defective product pattern
    defective = sum(1 for o in profile.recent_purchases if o.get('status') == 'refunded')
    if defective >= 2:
        flags.append('product_quality_issue')

    # High-value customer
    if profile.lifetime_value_usd > 5000:
        flags.append('high_value_customer')

    return flags

Tam Bağlam Birleştirme Akışı

Tüm veri kaynaklarını, görüşmenin başında bir kez çağrılan tek bir assemble_context() işlevinde birleştirin.

from datetime import date

def assemble_context(email: str) -> CustomerProfile:
    # Try cache first
    # In production: look up customer_id from email in your user DB
    customer_id = 'CUST_123'

    cached = get_cached_profile(customer_id)
    if cached:
        return cached

    # Fetch from all sources
    sub    = get_subscription_info(customer_id)
    orders = get_purchase_history(customer_id)
    tickets = get_support_history(customer_id)

    profile = CustomerProfile(
        customer_id=customer_id,
        name='Alice Smith',
        email=email,
        join_date=date(2021, 3, 15),
        subscription_tier=sub['tier'],
        account_age_days=calculate_account_age('2021-03-15T00:00:00Z')['days'],
        lifetime_value_usd=1240.00,
        previous_tickets=tickets,
        recent_purchases=orders
    )
    set_cached_profile(customer_id, profile)
    return profile

Ajanın "2021'den beri bizimle olduğunuzu görüyorum" demesini en doğrudan sağlayan müşteri bağlamı parçası hangisidir?

Yanıtları kişiselleştirmek, müşteri profilindeki belirli veri noktalarına başvurmayı gerektirir. Bu ifadeyi mümkün kılan alanı belirlemek, uygulamaya dönük bir hatırlama sorusudur.

Müşteri Bağlamının Özeti

İyi bir müşteri hizmetleri ajanı; satın alma geçmişinden, destek taleplerinden, abonelik seviyesinden ve hesap yaşından zengin bir profil oluşturur. Kısa bir bağlam bloğunu sistem istemine ekleyin, oturum boyunca önbelleğe alın ve hassas durumları tırmanmadan önce algılamak için risk işaretlerini kullanın.

Sıkça Sorulan Sorular

“Müşteri Bağlamı ve Geçmişi Yönetimi” dersi ücretsiz mi?

Evet — “Müşteri Bağlamı ve Geçmişi Yönetimi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Müşteri Bağlamı ve Geçmişi Yönetimi” dersinde ne öğreneceğim?

Geçmiş satın alımları, biletleri ve tercihleri kullanarak kişiselleştirilmiş yanıtlar oluşturma. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Müşteri Bağlamı ve Geçmişi Yönetimi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Bilet Yönlendirme ve Üst Birime Aktarma Mantığı
  2. CRM Entegrasyonu: Salesforce ve HubSpot
  3. İnsanlara Devretme Protokolleri
  4. Müşteri Bağlamı ve Geçmişi Yönetimi
← AI Agents Sayfasına Dön