Реализация голосового AI-бота для IVR (Interactive Voice Response)
AI-IVR заменяет тональное меню («нажмите 1 для...») на естественный диалог: пользователь говорит что хочет, система направляет его в нужное место без нажатия кнопок. Снижает время навигации с 60–120 сек до 10–20 сек.
Сравнение традиционного и AI-IVR
| Параметр | DTMF IVR | AI IVR |
|---|---|---|
| Навигация | 3–5 уровней меню | 1–2 вопроса |
| Время до оператора | 60–120 сек | 10–20 сек |
| Caller experience | Низкое | Высокое |
| Точность маршрутизации | ~90% (при правильных кнопках) | 85–95% |
| Стоимость разработки | Низкая | Средняя |
NLU для маршрутизации
ROUTING_DESTINATIONS = {
"technical_support": [
"не работает", "сломалось", "ошибка", "проблема с", "техподдержка"
],
"billing": [
"оплата", "счёт", "задолженность", "списание", "тариф", "деньги"
],
"new_connection": [
"подключить", "новый договор", "тариф", "оформить", "заявка"
],
"general_info": [
"информация", "узнать", "как работает", "что такое"
]
}
async def route_call(user_text: str) -> str:
"""Определяем направление маршрутизации"""
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "system",
"content": f"""Маршрутизируй звонок. Направления: {list(ROUTING_DESTINATIONS.keys())}.
Верни JSON: {{"destination": "...", "confidence": 0.0-1.0}}"""
}, {"role": "user", "content": user_text}],
response_format={"type": "json_object"}
)
result = json.loads(response.choices[0].message.content)
if result["confidence"] < 0.7:
return "clarification_needed"
return result["destination"]
Сбор данных в IVR
DATA_COLLECTION_PROMPTS = {
"phone_verification": "Назовите последние 4 цифры вашего номера телефона.",
"order_number": "Назовите номер вашего заказа.",
"date_of_birth": "Назовите дату вашего рождения для верификации."
}
def extract_digits(text: str) -> str:
"""Извлекаем цифры из распознанного текста"""
import re
# "три четыре пять шесть" → "3456"
num_words = {
"один": "1", "два": "2", "три": "3", "четыре": "4",
"пять": "5", "шесть": "6", "семь": "7", "восемь": "8",
"девять": "9", "ноль": "0"
}
result = text
for word, digit in num_words.items():
result = result.replace(word, digit)
return re.sub(r'[^\d]', '', result)
Интеграция с телефонными платформами
Поддерживаем интеграцию с:
- Twilio: TwiML + Media Streams WebSocket
- Voximplant: VoxEngine + WebSocket
- FreePBX/Asterisk: AGI + ARI
Сроки: базовый AI-IVR с 5 направлениями — 2–3 недели. Полная замена DTMF с аналитикой — 4–6 недель.







