Разработка AI-системы обработки входящих обращений клиентов
AI-система обработки обращений автоматически классифицирует, приоритизирует и маршрутизирует входящие запросы по всем каналам (звонки, чаты, email, мессенджеры), не требуя ручной сортировки операторами.
Омниканальная архитектура
from abc import ABC, abstractmethod
from dataclasses import dataclass
@dataclass
class IncomingRequest:
id: str
channel: str # voice | chat | email | telegram | whatsapp
raw_content: str # транскрипт или текст
metadata: dict
customer_id: str = None
class RequestProcessor(ABC):
@abstractmethod
async def process(self, request: IncomingRequest) -> dict:
pass
class UnifiedRequestOrchestrator:
def __init__(self):
self.processors = {
"voice": VoiceRequestProcessor(),
"chat": ChatRequestProcessor(),
"email": EmailRequestProcessor(),
}
self.classifier = RequestClassifier()
self.router = RequestRouter()
async def handle(self, request: IncomingRequest) -> dict:
# 1. Классификация намерения и тональности
classification = await self.classifier.classify(request)
# 2. Проверка: нужна ли немедленная реакция (жалоба, VIP, SLA)
priority = self.calculate_priority(request, classification)
# 3. Маршрутизация к нужному обработчику
return await self.router.route(request, classification, priority)
AI-классификатор обращений
CLASSIFICATION_SCHEMA = {
"type": "object",
"properties": {
"intent": {
"type": "string",
"enum": ["order_inquiry", "complaint", "technical_support",
"billing", "general_info", "cancellation", "compliment"]
},
"urgency": {"type": "string", "enum": ["critical", "high", "medium", "low"]},
"sentiment": {"type": "string", "enum": ["positive", "neutral", "negative", "angry"]},
"entities": {
"type": "object",
"properties": {
"order_id": {"type": "string"},
"product_name": {"type": "string"}
}
},
"summary": {"type": "string"},
"requires_human": {"type": "boolean"}
}
}
async def classify_request(text: str) -> dict:
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "system",
"content": f"Классифицируй обращение клиента. JSON по схеме."
}, {"role": "user", "content": text}],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)
Приоритизация SLA
PRIORITY_RULES = {
("critical", "angry"): {"score": 100, "max_wait_sec": 60},
("high", "negative"): {"score": 80, "max_wait_sec": 180},
("medium", "neutral"): {"score": 50, "max_wait_sec": 600},
("low", "positive"): {"score": 20, "max_wait_sec": 1800},
}
def calculate_sla(intent: str, sentiment: str, is_vip: bool) -> dict:
base = PRIORITY_RULES.get((urgency, sentiment),
{"score": 40, "max_wait_sec": 900})
if is_vip:
base["score"] += 30
base["max_wait_sec"] //= 2
return base
Сроки: классификатор + роутер — 2–3 недели. Полная омниканальная система — 2–3 месяца.







