Perutean Tiket dan Logika Eskalasi
Mengklasifikasikan maksud, merutekan ke agen spesialis, dan menentukan pemicu eskalasi.
Perutean Tiket dan Logika Eskalasi adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Masalah Perutean
Agen layanan pelanggan menerima ribuan pesan beragam setiap hari: sengketa penagihan, pengaturan ulang kata sandi, cacat produk, keterlambatan pengiriman, dan permintaan fitur. Mengirim setiap pesan ke penangan yang sama menghasilkan respons yang lambat dan berkualitas rendah.
Perutean tiket mengklasifikasikan setiap pesan dan mengirimkannya kepada tim yang paling mampu menyelesaikannya.
Klasifikasi Maksud dengan LLM
Lapisan perutean memanggil LLM dengan perintah klasifikasi. Model mengembalikan respons terstruktur dengan label intent dan skor confidence.
import openai, json
client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')
INTENTS = ['billing', 'technical_support', 'returns_refunds',
'account_access', 'shipping', 'general_inquiry']
def classify_intent(message: str) -> dict:
prompt = (
f'Classify this customer message into exactly one intent.\n'
f'Intents: {INTENTS}\n'
f'Message: "{message}"\n'
f'Respond with JSON: {{"intent": "...", "confidence": 0.0-1.0}}'
)
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
response_format={'type': 'json_object'}
)
return json.loads(resp.choices[0].message.content)Merutekan ke Antrean Spesialis
Setelah maksud diketahui, rutekan tiket ke antrean spesialis yang sesuai. Setiap antrean memiliki templat respons, SLA, dan aturan eskalasinya sendiri.
ROUTING_MAP = {
'billing': 'queue_billing',
'technical_support': 'queue_tech',
'returns_refunds': 'queue_returns',
'account_access': 'queue_tech',
'shipping': 'queue_fulfillment',
'general_inquiry': 'queue_general'
}
def route_ticket(ticket: dict) -> str:
result = classify_intent(ticket['message'])
intent = result['intent']
confidence = result['confidence']
queue = ROUTING_MAP.get(intent, 'queue_general')
ticket['intent'] = intent
ticket['confidence'] = confidence
ticket['queue'] = queue
return queueAmbang Keyakinan untuk Eskalasi
Jika pengklasifikasi tidak yakin (keyakinan di bawah 0,7), perutean otomatis mungkin keliru. Tiket dengan keyakinan rendah sebaiknya dieskalasikan kepada manusia untuk triase manual, bukan dirutekan otomatis ke spesialis.
CONFIDENCE_THRESHOLD = 0.70
def route_with_escalation(ticket: dict) -> dict:
result = classify_intent(ticket['message'])
intent = result['intent']
confidence = result['confidence']
if confidence < CONFIDENCE_THRESHOLD:
return {
'ticket_id': ticket['id'],
'action': 'escalate_to_human',
'reason': f'Low confidence: {confidence:.2f}',
'suggested_intent': intent
}
queue = ROUTING_MAP.get(intent, 'queue_general')
return {
'ticket_id': ticket['id'],
'action': 'route_to_queue',
'queue': queue,
'intent': intent,
'confidence': confidence
}Eskalasi Prioritas Berdasarkan SLA
Bahkan tiket yang dirutekan otomatis dapat melanggar SLA jika tidak diselesaikan tepat waktu. Tugas latar belakang memeriksa usia tiket terhadap target SLA dan mengeskalasikan tiket yang melewati batas waktu ke antrean supervisor.
from datetime import datetime, timezone
SLA_HOURS = {
'queue_billing': 4,
'queue_tech': 8,
'queue_returns': 24,
'queue_fulfillment': 12,
'queue_general': 48
}
def check_sla_breach(ticket: dict) -> bool:
created = datetime.fromisoformat(ticket['created_at'])
age_hours = (datetime.now(timezone.utc) - created).total_seconds() / 3600
sla = SLA_HOURS.get(ticket['queue'], 24)
if age_hours > sla and ticket['status'] == 'open':
ticket['queue'] = 'queue_supervisor_escalation'
ticket['escalation_reason'] = f'SLA breach: {age_hours:.1f}h > {sla}h'
return True
return False
if __name__ == '__main__':
from datetime import datetime, timedelta, timezone
old_ticket = {
'created_at': (datetime.now(timezone.utc) - timedelta(hours=10)).isoformat(),
'queue': 'queue_billing',
'status': 'open',
}
breached = check_sla_breach(old_ticket)
print(f'SLA breached: {breached}')
if breached:
print('Escalation reason:', old_ticket['escalation_reason'])
Perutean Multi-Label untuk Tiket Kompleks
Beberapa pesan menyentuh berbagai bidang: 'Pesanan saya tiba dalam keadaan rusak dan saya ditagih dua kali.' Pengklasifikasi multi-label mengembalikan beberapa maksud; tiket diduplikasi ke kedua antrean, lalu para agen berkoordinasi untuk menyelesaikannya.
def classify_multi_intent(message: str) -> list[dict]:
prompt = (
f'A customer message may have multiple intents.\n'
f'Intents: {INTENTS}\n'
f'Message: "{message}"\n'
f'Return JSON array: [{{"intent": "...", "confidence": 0.0}}]\n'
f'Include only intents with confidence > 0.5'
)
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
response_format={'type': 'json_object'}
)
data = json.loads(resp.choices[0].message.content)
return data.get('intents', [])
# Route to multiple queues
def route_multi(ticket: dict) -> list[str]:
intents = classify_multi_intent(ticket['message'])
return [ROUTING_MAP.get(i['intent'], 'queue_general') for i in intents]Mengekstrak Metadata Tiket
Sebelum melakukan perutean, ekstrak metadata dari pesan untuk membantu spesialis: nomor pesanan, nama produk, dan ID akun. Hal ini mempercepat penyelesaian dengan menghilangkan putaran pertama pertanyaan klarifikasi.
def extract_metadata(message: str) -> dict:
prompt = (
f'Extract structured metadata from this customer message.\n'
f'Return JSON: {{"order_id": null, "product": null, "account_email": null}}\n'
f'Use null for fields not mentioned.\n'
f'Message: "{message}"'
)
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
response_format={'type': 'json_object'}
)
return json.loads(resp.choices[0].message.content)
meta = extract_metadata('My order #A12345 for the blue headphones never arrived.')
print(meta) # {'order_id': 'A12345', 'product': 'blue headphones', 'account_email': None}Peningkatan Prioritas Berdasarkan Sentimen
Pelanggan yang marah lebih mungkin berhenti berlangganan. Deteksi sentimen negatif dan tingkatkan prioritas tiket agar pelanggan yang tidak puas menerima respons lebih cepat, meskipun batas waktu SLA mereka belum berakhir.
def detect_sentiment(message: str) -> str:
prompt = f'Classify sentiment as positive/neutral/negative.\nMessage: "{message}"\nReturn JSON: {{"sentiment": "..."}}'
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
response_format={'type': 'json_object'}
)
return json.loads(resp.choices[0].message.content)['sentiment']
def set_priority(ticket: dict) -> str:
sentiment = detect_sentiment(ticket['message'])
if sentiment == 'negative':
ticket['priority'] = 'high'
elif sentiment == 'positive':
ticket['priority'] = 'low'
else:
ticket['priority'] = 'normal'
return ticket['priority']Menentukan Rantai Eskalasi
Tentukan rantai eskalasi yang jelas agar setiap antrean memiliki jalur cadangan. Jika antrean lini depan gagal menyelesaikan tiket dalam SLA, tiket berpindah ke tingkat 2, lalu tingkat 3 (spesialis senior), dan kemudian supervisor.
ESCALATION_CHAIN = {
'queue_tech': 'queue_tech_tier2',
'queue_tech_tier2': 'queue_tech_senior',
'queue_tech_senior': 'queue_supervisor_escalation',
'queue_billing': 'queue_billing_senior',
'queue_billing_senior': 'queue_supervisor_escalation',
'queue_returns': 'queue_supervisor_escalation',
'queue_fulfillment': 'queue_supervisor_escalation',
'queue_general': 'queue_supervisor_escalation',
'queue_supervisor_escalation': None # terminal — human manager
}
def escalate(ticket: dict) -> str | None:
next_queue = ESCALATION_CHAIN.get(ticket['queue'])
if next_queue:
ticket['queue'] = next_queue
return next_queue
if __name__ == '__main__':
ticket = {'queue': 'queue_tech'}
for _ in range(3):
nxt = escalate(ticket)
print(f"Escalated to: {ticket['queue']}")
if nxt is None:
break
Alur Perutean Lengkap
Gabungkan klasifikasi, ekstraksi metadata, analisis sentimen, dan pemeriksaan SLA ke dalam satu alur pemrosesan yang berjalan pada setiap tiket masuk.
def process_ticket(raw_ticket: dict) -> dict:
ticket = dict(raw_ticket)
# Step 1: Classify and route
routing = route_with_escalation(ticket)
ticket.update(routing)
# Step 2: Extract metadata
ticket['metadata'] = extract_metadata(ticket['message'])
# Step 3: Set priority from sentiment
ticket['priority'] = set_priority(ticket)
# Step 4: Check if already breaching SLA
if ticket.get('created_at'):
check_sla_breach(ticket)
return ticket
result = process_ticket({
'id': 'T001',
'message': 'I was charged twice for my subscription last month!',
'created_at': '2026-05-28T10:00:00+00:00',
'status': 'open'
})
print(result)Memantau Keakuratan Perutean
Pantau keakuratan perutean dengan mengambil sampel persentase tertentu dari tiket yang dirutekan otomatis untuk ditinjau oleh manusia. Saat seorang spesialis mengalihkan tiket ke antrean lain, hal itu merupakan kesalahan perutean. Gunakan kesalahan tersebut untuk meningkatkan perintah atau menyempurnakan pengklasifikasi.
import random
def log_routing_decision(ticket: dict, final_queue: str):
was_correct = ticket.get('queue') == final_queue
if not was_correct:
print(f'[ROUTING_ERROR] ticket={ticket["id"]} '
f'predicted={ticket["queue"]} actual={final_queue} '
f'confidence={ticket.get("confidence", 0):.2f}')
# Specialist reassigns ticket: log the discrepancy
def specialist_reassign(ticket: dict, new_queue: str):
log_routing_decision(ticket, new_queue)
ticket['queue'] = new_queue
return ticket
if __name__ == '__main__':
ticket = {'id': 'T-1001', 'queue': 'queue_billing', 'confidence': 0.62}
specialist_reassign(ticket, 'queue_tech')
Ambang keyakinan berapa yang harus memicu eskalasi kepada manusia, bukan perutean otomatis?
Memilih ambang keyakinan yang tepat menyeimbangkan tingkat otomatisasi dengan keakuratan perutean. Ambang yang terlalu tinggi menyebabkan terlalu banyak eskalasi, sedangkan ambang yang terlalu rendah menyebabkan salah perutean.
Ringkasan Perutean Tiket
Perutean tiket yang efektif menggabungkan klasifikasi maksud oleh LLM dengan ambang keyakinan untuk eskalasi kepada manusia, ekstraksi metadata untuk penyelesaian yang lebih cepat, prioritas berdasarkan sentimen bagi pelanggan yang berisiko, dan rantai eskalasi SLA untuk memastikan tidak ada tiket yang terabaikan.
Belajar AI Agents dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 60
- Pelajaran
- 239
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Perutean Tiket dan Logika Eskalasi” gratis?
Ya — teks lengkap “Perutean Tiket dan Logika Eskalasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Perutean Tiket dan Logika Eskalasi”?
Mengklasifikasikan maksud, merutekan ke agen spesialis, dan menentukan pemicu eskalasi. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Perutean Tiket dan Logika Eskalasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Perutean Tiket dan Logika Eskalasi
- Integrasi CRM: Salesforce dan HubSpot
- Protokol Pengalihan ke Manusia
- Pengelolaan Konteks dan Riwayat Pelanggan