Реалізація голосового AI-бота для обробки вхідних звернень Бот вхідних звернень — перша лінія підтримки клієнтів. Самостійно вирішує типові запити (статус, баланс, розклад), за необхідності ескалює з повним контекстом на оператора. Цільовий Containment Rate: 60-75%. ### Типологія вхідних звернень | Тип | Частка | Автоматизованість | |-----|------|-------------------| | Перевірка статусу 35% | 95% | | Зміна даних 20% | 75% | | FAQ / інформація | 25% | 90% | | Скарги 10% | 20% | | Строкові питання | 10% | 40% | ### Мультисценарний бот
from typing import Callable
@dataclass
class DialogScenario:
name: str
triggers: list[str] # фразы для определения сценария
handler: Callable
priority: int = 0
SCENARIOS = [
DialogScenario(
name="order_status",
triggers=["заказ", "статус", "где посылка", "когда доставят"],
handler=handle_order_status_scenario,
priority=10
),
DialogScenario(
name="account_balance",
triggers=["баланс", "остаток", "сколько денег", "счёт"],
handler=handle_balance_scenario,
priority=10
),
DialogScenario(
name="technical_issue",
triggers=["не работает", "ошибка", "сломалось", "проблема"],
handler=handle_tech_support_scenario,
priority=5
),
]
async def route_to_scenario(user_text: str) -> DialogScenario:
# Используем LLM для точной маршрутизации
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "system",
"content": f"Определи сценарий из: {[s.name for s in SCENARIOS]}. JSON: {{'scenario': '...'}}"
}, {"role": "user", "content": user_text}],
response_format={"type": "json_object"}
)
scenario_name = json.loads(response.choices[0].message.content)["scenario"]
return next((s for s in SCENARIOS if s.name == scenario_name), SCENARIOS[-1])
```### Передача контексту оператору```python
async def transfer_to_agent(session: CallSession, reason: str):
"""Эскалируем с полным контекстом диалога"""
context = {
"call_id": session.call_id,
"phone": session.phone,
"customer": await lookup_customer(session.phone),
"dialog_summary": await summarize_dialog(session.history),
"intent": session.current_intent,
"escalation_reason": reason,
"timestamp": datetime.utcnow().isoformat()
}
await crm.create_case(context)
await telephony.transfer_call(session.call_id, agent_queue="support")
```### Повідомлення оператора перед з'єднанням```python
AGENT_BRIEFING_TEMPLATE = """
Переключаю клиента {phone}.
Причина обращения: {intent}.
Клиент уже сообщил: {summary}.
Не нужно спрашивать: номер заказа и имя — уже получены.
"""
```Терміни: бот для однієї категорії звернень – 2 тижні. Повноцінний мультисценарний бот - 2-3 місяці.