Телефония и SIP
Голосовые агенты могут принимать и совершать телефонные звонки через SIP-интеграцию. Это позволяет подключить AI-агента к реальным телефонным линиям для автоматизации call-центра, обработки входящих звонков и проведения исходящих кампаний. Подробнее о конфигурации см. в разделе Телефония и SIP.
Архитектура телефонии
Телефонная интеграция построена на базе LiveKit SIP Bridge:
Телефон → [SIP-провайдер] → [SIP-транк] → [LiveKit SIP Bridge] → [Voice Agent]
Для работы телефонии необходимо настроить:
- SIP-транки -- подключения к SIP-провайдерам
- Правила маршрутизации (Dispatch Rules) -- определяют, какой агент обрабатывает звонок
- Телефонные номера -- номера, привязанные к агентам
SIP-транки
SIP-транк -- это подключение к телефонному провайдеру, через которое проходят голосовые звонки.
Входящие транки (Inbound)
Входящие транки принимают звонки из телефонной сети.
| Параметр | Описание |
|---|---|
| Name | Название транка для идентификации |
| Numbers | Телефонные номера в формате E.164 (например, +15551234567) |
| Allowed Addresses | Список разрешённых IP-адресов / CIDR для фильтрации (белый список) |
| Media Encryption | Шифрование медиа: Disabled, Require, Prefer |
| Headers | Передача SIP-заголовков: None, All, X-Headers |
| Krisp Enabled | Включить шумоподавление Krisp на входящем аудио |
| Логин аутентификации | Логин, которым телефонный провайдер авторизуется на транке. Обязательное поле |
| Пароль аутентификации | Пароль транка. Обязательное поле, не короче 16 символов. Кнопка Сгенерировать создаёт надёжный пароль, Копировать пароль -- копирует его в буфер |
Логин и пароль у входящего транка обязательны -- создать транк без них нельзя. Пароль показывается только один раз, при создании: скопируйте и сохраните его сразу, позже посмотреть его не получится.
Если вы подключаете телефонию через Voximplant, в строке транка (и входящего, и исходящего) есть кнопка Сценарий VoxEngine: она показывает готовый сценарий для вставки в Voximplant. В сценарии нужно заменить заглушку пароля на пароль транка, сохранённый при его создании.
Исходящие транки (Outbound)
Исходящие транки используются для совершения звонков из системы.
| Параметр | Описание |
|---|---|
| Name | Название транка |
| Address | Адрес SIP-сервера (IP или hostname) |
| Numbers | Исходящие номера в формате E.164 |
| Transport | Транспортный протокол: Auto, UDP, TCP, TLS |
| Media Encryption | Шифрование медиа |
| Auth Username | Имя пользователя для аутентификации |
| Auth Password | Пароль для аутентификации |
Номера телефонов должны быть в формате E.164: знак +, код страны, номер без пробелов и дефисов. Пример: +14155551234.
Смотрите полную настройку SIP-транков и правил маршрутизации в разделе интеграций.
Правила маршрутизации (Dispatch Rules)
Правила маршрутизации определяют, как входящие SIP-звонки направляются к голосовым агентам.
Параметры правила
| Параметр | Описание |
|---|---|
| Name | Название правила |
| Rule Type | Тип маршрутизации: Room (в комнату), Individual (индивидуальная), Direct (прямая) |
| Room Prefix | Префикс для имени комнаты LiveKit |
| Agent ID | ID голосового агента, который будет обрабатывать звонок |
| Trunk IDs | Фильтр по конкретным SIP-транкам (опционально) |
| Phone Numbers | Фильтр по номерам телефонов (опционально) |
| Hide Phone Number | Скрыть номер звонящего |
Типы маршрутизации
- Room -- каждый звонок создаёт отдельную комнату LiveKit с указанным префиксом. Это стандартный режим для большинства сценариев.
- Individual -- каждый звонок получает индивидуальную комнату
- Direct -- прямая маршрутизация в конкретную комнату
Пример настройки
Для маршрутизации всех звонков на номер +15551234567 к агенту поддержки:
- Создайте входящий SIP-транк с номером
+15551234567 - Создайте правило маршрутизации:
- Rule Type:
Room - Agent ID: ID вашего голосового агента
- Phone Numbers:
+15551234567
- Rule Type:
Телефонные номера
Телефонные номера управляются на вкладке Номера телефонов раздела Интеграции. Номер нужно добавить туда до того, как использовать его в транке: в формах транков номера выбираются из этого списка.
Добавление номера
Для добавления номера нажмите Добавить номер и заполните:
| Поле | Описание | Обязательное |
|---|---|---|
| Номер телефона | Номер в формате E.164 (например, +15551234567). После добавления изменить его нельзя | Да |
| Название | Понятное название для номера (например, "Линия поддержки") | Нет |
| Провайдер | Способ подключения номера: SIP-транк (свой оператор) | Да |
| Агент | Голосовой агент, обрабатывающий звонки на этот номер | Нет |
Управление номерами
В таблице номеров отображаются:
- Номер -- телефонный номер
- Название -- дружественное имя
- Провайдер -- SIP-провайдер
- Агент -- привязанный голосовой агент (или "Не назначен")
- Статус -- активен / неактивен
- Добавлен -- дата добавления
Доступные действия (через контекстное меню):
- Копировать номер
- Редактировать
- Удалить
Номер, который используется в SIP-транке, удалить нельзя: платформа сообщит, в каком транке он занят. Сначала уберите номер из транка, затем удалите его.
Исходящие звонки
Платформа поддерживает инициирование исходящих звонков через API.
Тестовый звонок
Проверить исходящий транк можно без API. В разделе Интеграции на вкладке SIP нажмите Тестовый звонок (кнопка активна, когда есть хотя бы один исходящий транк) и укажите:
| Поле | Описание |
|---|---|
| Номер телефона | Номер, на который позвонит агент |
| Агент | Голосовой агент, который будет вести разговор |
| Исходящий транк | Транк, через который пойдёт звонок |
| Номер отправителя (Caller ID) | Номер, который увидит абонент. Если не указан -- используется номер транка по умолчанию |
Нажмите Позвонить. Платформа сообщит номер созданной сессии; звонок сразу появляется на вкладке Сессии со статусом "Набор номера".
Параметры исходящего звонка
| Параметр | Описание |
|---|---|
| phone_number | Номер для звонка (E.164) |
| agent_id | ID голосового агента |
| trunk_id | ID исходящего SIP-транка (опционально, выбирается автоматически) |
| caller_id | Номер, отображаемый у вызываемого абонента |
| room_name | Имя комнаты LiveKit (генерируется автоматически) |
Определение автоответчика (AMD)
При исходящих звонках автоматически запускается Answering Machine Detection (AMD) -- определение, ответил ли живой человек или автоответчик.
AMD работает следующим образом:
- Собирает первые ~5 секунд транскрипции после ответа
- Отправляет текст на классификацию с помощью LLM
- Определяет тип ответа:
human(человек),voicemail(автоответчик),ivr(голосовое меню) - Если определён автоответчик или IVR -- звонок автоматически завершается
AMD работает по принципу "fail-open": при любых ошибках (нет транскрипции, ошибка LLM) система считает ответ человеческим. Это гарантирует, что живые люди не будут сброшены из-за ошибок определения.
Ожидание ответа
При исходящем звонке агент не начинает говорить сразу. Вместо этого:
- Ожидает появления аудио-трека от удалённого участника (индикатор ответа на звонок)
- Делает короткую паузу (~0.8 сек), чтобы пользователь успел поднести телефон к уху
- Произносит приветственное сообщение
Таймаут ожидания ответа: 60 секунд.
Интеграция с MMD Smart
Платформа поддерживает интеграцию с MMD Smart -- системой call-центра для входящих и исходящих звонков.
Настройка подключения
Для интеграции с MMD создайте Телефонное подключение (Telephony Connection):
| Параметр | Описание |
|---|---|
| Organization ID | Идентификатор организации в MMD |
| BFF WebSocket URL | URL WebSocket-сервиса MMD (по умолчанию: wss://ccc.mmdsmart.com) |
| Keycloak URL | URL аутентификации (по умолчанию: https://auth.mmdsmart.com/auth) |
| Keycloak Realm | Realm аутентификации (по умолчанию: call_center) |
Привязка агентов к MMD
После создания подключения можно привязать голосовых агентов, указав учётные данные MMD-агента:
- Agent ID -- логин агента в MMD
- Password -- пароль агента в MMD
Учётные данные шифруются перед сохранением в базе данных.
Сессии и аналитика
Просмотр сессий
Вкладка Сессии предоставляет полную информацию о звонках:
- Фильтры: по агенту, каналу (Web, SIP Inbound, SIP Outbound, MMD), статусу, диапазону дат
- Статистика: общее количество сессий, успешные/неуспешные, общая продолжительность
- График: визуализация сессий по дням
- Таблица: детальный список всех сессий
Таблица сессий
| Колонка | Что показывает |
|---|---|
| Агент | Агент, который вёл разговор |
| Статус | Для идущих звонков -- индикатор прогресса с подписью: "Ожидание", "Набор номера", "Подключение", "Активен". Для завершённых -- значок с подписью: "Завершён", "Ошибка", "Прерван", "Занято", "Нет ответа" |
| Канал | Веб, SIP входящий, SIP исходящий или MMD, и направление звонка |
| Номера | Номер звонящего → вызываемый номер. Номера показываются полностью, без маскирования |
| Итог | Причина завершения (например, "Абонент положил трубку", "Агент завершил звонок", "Таймаут", "Автоответчик") и SIP-код, если он есть |
| Длительность | Длительность разговора; у идущего звонка -- "В процессе" |
| Реплики | Количество реплик в разговоре |
| Задержка | Средняя задержка ответа агента в миллисекундах. Значения выше 1500 мс выделяются предупреждающим цветом, выше 3000 мс -- красным |
| Токены LLM | Сумма токенов языковой модели; при наведении -- разбивка на промпт и ответ |
| Режим | Pipeline или Realtime |
| Символы TTS | Количество синтезированных символов. Колонка скрыта по умолчанию |
| Аудио STT | Длительность распознанного аудио в секундах. Колонка скрыта по умолчанию |
| Начало, Конец | Время начала и завершения сессии. По умолчанию таблица отсортирована по началу, новые сверху |
Колонки с метриками сортируются: так удобно находить самые долгие, самые "дорогие" по токенам или самые медленные разговоры. Сессии без данных по метрике при сортировке оказываются в конце. Скрытые колонки включаются в настройках колонок таблицы.
В режиме Realtime средняя задержка не измеряется -- в колонке Задержка у таких сессий стоит прочерк. Количество реплик для них считается по строкам транскрипта.
Детали сессии
При нажатии на сессию открывается панель с:
- Транскрипт -- полный диалог (реплики пользователя и агента)
- Метрики:
- LLM: prompt/completion токены, время первого токена
- TTS: количество символов, длительность аудио, время первого байта
- STT: длительность аудио, время обработки
- Общая средняя задержка
- Количество реплик
Каналы в сессиях
| Канал | Описание |
|---|---|
web | Звонок через веб-интерфейс |
sip_inbound | Входящий телефонный звонок |
sip_outbound | Исходящий телефонный звонок |
mmd | Звонок через MMD Bridge |
Телефонные звонки отслеживаются как обычные сессии: в деталях сессии видны канал, направление, номер звонящего и вызываемый номер, причина завершения и SIP-код.
Если во время звонка сессия агента аварийно завершается, платформа сама кладёт трубку (а неотвеченный исходящий вызов отменяет) -- абонент не остаётся слушать тишину или гудки.
Используйте фильтр по каналу для анализа производительности агента в разных сценариях. Например, телефонные звонки обычно имеют бОльшую задержку из-за дополнительного hop через SIP Bridge.