Перейти к основному содержимому

Телефония и SIP

Голосовые агенты могут принимать и совершать телефонные звонки через SIP-интеграцию. Это позволяет подключить AI-агента к реальным телефонным линиям для автоматизации call-центра, обработки входящих звонков и проведения исходящих кампаний. Подробнее о конфигурации см. в разделе Телефония и SIP.

Архитектура телефонии​

Телефонная интеграция построена на базе LiveKit SIP Bridge:

Телефон → [SIP-провайдер] → [SIP-транк] → [LiveKit SIP Bridge] → [Voice Agent]

Для работы телефонии необходимо настроить:

  1. SIP-транки -- подключения к SIP-провайдерам
  2. Правила маршрутизации (Dispatch Rules) -- определяют, какой агент обрабатывает звонок
  3. Телефонные номера -- номера, привязанные к агентам

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 IDID голосового агента, который будет обрабатывать звонок
Trunk IDsФильтр по конкретным SIP-транкам (опционально)
Phone NumbersФильтр по номерам телефонов (опционально)
Hide Phone NumberСкрыть номер звонящего

Типы маршрутизации​

  • Room -- каждый звонок создаёт отдельную комнату LiveKit с указанным префиксом. Это стандартный режим для большинства сценариев.
  • Individual -- каждый звонок получает индивидуальную комнату
  • Direct -- прямая маршрутизация в конкретную комнату

Пример настройки​

Для маршрутизации всех звонков на номер +15551234567 к агенту поддержки:

  1. Создайте входящий SIP-транк с номером +15551234567
  2. Создайте правило маршрутизации:
    • Rule Type: Room
    • Agent ID: ID вашего голосового агента
    • Phone Numbers: +15551234567

Телефонные номера​

Телефонные номера управляются на вкладке Номера телефонов раздела Интеграции. Номер нужно добавить туда до того, как использовать его в транке: в формах транков номера выбираются из этого списка.

Добавление номера​

Для добавления номера нажмите Добавить номер и заполните:

ПолеОписаниеОбязательное
Номер телефонаНомер в формате E.164 (например, +15551234567). После добавления изменить его нельзяДа
НазваниеПонятное название для номера (например, "Линия поддержки")Нет
ПровайдерСпособ подключения номера: SIP-транк (свой оператор)Да
АгентГолосовой агент, обрабатывающий звонки на этот номерНет

Управление номерами​

В таблице номеров отображаются:

  • Номер -- телефонный номер
  • Название -- дружественное имя
  • Провайдер -- SIP-провайдер
  • Агент -- привязанный голосовой агент (или "Не назначен")
  • Статус -- активен / неактивен
  • Добавлен -- дата добавления

Доступные действия (через контекстное меню):

  • Копировать номер
  • Редактировать
  • Удалить
Примечание

Номер, который используется в SIP-транке, удалить нельзя: платформа сообщит, в каком транке он занят. Сначала уберите номер из транка, затем удалите его.


Исходящие звонки​

Платформа поддерживает инициирование исходящих звонков через API.

Тестовый звонок​

Проверить исходящий транк можно без API. В разделе Интеграции на вкладке SIP нажмите Тестовый звонок (кнопка активна, когда есть хотя бы один исходящий транк) и укажите:

ПолеОписание
Номер телефонаНомер, на который позвонит агент
АгентГолосовой агент, который будет вести разговор
Исходящий транкТранк, через который пойдёт звонок
Номер отправителя (Caller ID)Номер, который увидит абонент. Если не указан -- используется номер транка по умолчанию

Нажмите Позвонить. Платформа сообщит номер созданной сессии; звонок сразу появляется на вкладке Сессии со статусом "Набор номера".

Параметры исходящего звонка​

ПараметрОписание
phone_numberНомер для звонка (E.164)
agent_idID голосового агента
trunk_idID исходящего SIP-транка (опционально, выбирается автоматически)
caller_idНомер, отображаемый у вызываемого абонента
room_nameИмя комнаты LiveKit (генерируется автоматически)

Определение автоответчика (AMD)​

При исходящих звонках автоматически запускается Answering Machine Detection (AMD) -- определение, ответил ли живой человек или автоответчик.

AMD работает следующим образом:

  1. Собирает первые ~5 секунд транскрипции после ответа
  2. Отправляет текст на классификацию с помощью LLM
  3. Определяет тип ответа: human (человек), voicemail (автоответчик), ivr (голосовое меню)
  4. Если определён автоответчик или IVR -- звонок автоматически завершается
Fail-Open

AMD работает по принципу "fail-open": при любых ошибках (нет транскрипции, ошибка LLM) система считает ответ человеческим. Это гарантирует, что живые люди не будут сброшены из-за ошибок определения.

Ожидание ответа​

При исходящем звонке агент не начинает говорить сразу. Вместо этого:

  1. Ожидает появления аудио-трека от удалённого участника (индикатор ответа на звонок)
  2. Делает короткую паузу (~0.8 сек), чтобы пользователь успел поднести телефон к уху
  3. Произносит приветственное сообщение

Таймаут ожидания ответа: 60 секунд.


Интеграция с MMD Smart​

Платформа поддерживает интеграцию с MMD Smart -- системой call-центра для входящих и исходящих звонков.

Настройка подключения​

Для интеграции с MMD создайте Телефонное подключение (Telephony Connection):

ПараметрОписание
Organization IDИдентификатор организации в MMD
BFF WebSocket URLURL WebSocket-сервиса MMD (по умолчанию: wss://ccc.mmdsmart.com)
Keycloak URLURL аутентификации (по умолчанию: https://auth.mmdsmart.com/auth)
Keycloak RealmRealm аутентификации (по умолчанию: 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.