Amobit Call: как мы сделали голосовой ИИ-звонок через Telegram
От кнопки в закрытой панели до настоящего двустороннего разговора с голосовой Лолой.
Мы разработали Amobit Call как управляемое голосовое приложение для Amobit. Оператор вручную начинает личный звонок в Telegram; после ответа собеседника приложение подключает Live-сессию ИИ и передаёт звук в обе стороны. В проекте есть состояния вызова, преобразование аудио, ограниченные очереди, диагностика и защищённый доступ к истории. Реальные звонки подтвердили работающий маршрут, но слышимые паузы пока остаются вопросом качества.

ОПЕРАТОР → выбирает адресата и запускает один звонок
→ TELEGRAM → набирает и соединяет личный вызов
→ LIVE-СЕССИЯ → подключается после ответа
→ АУДИОМОСТ → переводит PCM в обе стороны
→ ЖИЗНЕННЫЙ ЦИКЛ → стоп, таймаут, отбой и очистка
→ ДИАГНОСТИКА → состояния и технические метрики звукаЗадача бизнеса
Целью был естественный голосовой разговор ИИ с человеком в привычном для адресата канале. Текстовый бот или записанное голосовое сообщение не решали задачу: собеседник должен принять вызов, говорить, слышать Лолу и продолжать живой диалог. Поэтому требовался настоящий маршрут звонка, а не только интерфейс переписки.
Это инструмент для работы под контролем оператора. Человек выбирает адресата и запускает звонок в защищённой панели. Текущая реализация допускает один вызов одновременно и не делает автоматическую массовую рассылку. Такой объём позволил увидеть работу первого голосового контура и сохранить контроль над тем, кому звонит система.
Что мы реализовали
Приложение на Python/FastAPI связывает пользовательский аккаунт Telegram, менеджер звонка и отдельное соединение с OpenAI Live. Telethon поддерживает сессию аккаунта; PyTgCalls/NTgCalls передаёт медиа вызова. Веб-панель даёт настройки, выбор адресата, запуск и остановку, текущее состояние и историю вызовов. Доступ к аккаунту и API остаётся за пределами публичной страницы.
Менеджер отвечает за жизненный цикл: допускает один активный звонок, ждёт ответа, запускает Live только после ответа и закрывает обе стороны при остановке, отбое, таймауте или ошибке. Система сохраняет технический итог и аудиосчётчики, чтобы работающий процесс не принимать за доказательство состоявшегося разговора.
Путь от кнопки до разговора
Оператор находит допустимого адресата в Telegram и подтверждает его в панели. Сервер создаёт запись вызова и запускает набор. Пока идёт звонок, речь ещё не отправляется в ИИ-сервис. После ответа вызов переходит в состояние соединения и стартует Live-сессия. Когда она готова, микрофонные кадры передаются модели, а сформированная речь возвращается в Telegram-звонок.
Маршрут проходит состояния подготовки, набора, соединения, разговора и завершения, после чего фиксируется успешный конец либо ошибка. Для ожидания ответа, готовности Live и длительности активной беседы предусмотрены отдельные пределы. Кнопка остановки и отбой собеседника ведут к очистке медиаресурсов.
Главная инженерная работа — звук
Telegram и Live используют разные частоты аудио. Вызов Telegram передаёт моно PCM с частотой 48 кГц, а сторона Live работает с 24 кГц. Потоковый ресемплер преобразует звук в обе стороны, не превращая каждый небольшой пакет в отдельную запись. Раздельные циклы входа и выхода позволяют принимать голос собеседника одновременно с воспроизведением ответа Лолы.
Для выхода в Telegram нужно выдерживать кадры по 10 мс. Во время проверок выяснилось, что нативный медиакод фактически считывал из записи 20 мс только один кадр, теряя половину звука. Мы исправили размер кадров и темп отправки, добавили ограниченные очереди, подсчёт опустошений и адаптивный запас перед воспроизведением. Это исправление конкретной причины искажения, а не обещание нулевой задержки.
Задержки видны в диагностике
Качество разговора зависит от сети, скорости генерации и локального воспроизведения. Слишком короткая очередь создаёт паузы, а бесконтрольное накопление делает ответы поздними. Реализация ограничивает входной буфер, начинает вывод после небольшого запаса и увеличивает этот запас при опустошении. Накопившуюся задержку она сокращает только на тихих участках PCM.
Приложение сохраняет технические снимки очередей, отброшенных байтов, опустошений и промежутков между порциями звука. Так можно искать проблему в захвате, Live или воспроизведении. Но цифры не заменяют прослушивание: в отдельных реальных звонках паузы и замечания к качеству сохранялись даже после исправления кадров и буфера.
Инструкции и приватные данные
Поведение Лолы и контекст её внутреннего консультанта заданы раздельными инструкциями. Оператор может указать тему одного звонка: она добавляется только к текущей сессии. Умение отвечать голосом само по себе не даёт агенту права совершать внешние действия. Политика разговора, аудиотранспорт и панель разделены.
Состояния и технические метрики хранятся в SQLite. Секретные настройки и необязательные текстовые фрагменты встроенной транскрипции Live зашифрованы; авторизованный endpoint отдаёт текст с запретом кэширования. Аудиозаписи нет. При перебивании транскрипт модели может отличаться от услышанного человеком, поэтому его нельзя считать точной записью разговора.
Что доказали реальные проверки
Пользовательский Telegram-аккаунт был подключён и восстанавливался из защищённой сессии. Адресат принял реальный вызов. После устранения первоначальной проблемы с балансом Live тестовые звонки несли входящий и исходящий PCM, а завершённые разговоры оставили данные об использовании модели и состоянии звонка. Оператор мог запустить вызов из панели, и голос ИИ возвращался собеседнику через Telegram.
Проверки отделили работоспособность маршрута от приёмки звучания. Дефект размера кадра давал ускоренную речь с искажениями, и его исправили. Последующая диагностика показала улучшение входной очереди, но в части звонков оставались опустошения выхода и слышимые паузы. Имеющиеся доказательства подтверждают двусторонний вызов; они не подтверждают одинаково естественную речь на разных устройствах и сетях.
Текущий объём и следующая приёмка
Этот кейс посвящён Telegram. В репозитории есть отдельный SIP-маршрут, но последняя документированная проверка показала отказ регистрации; здесь он не представлен как готовая телефонная услуга. WhatsApp разрабатывается отдельно и не входит в подтверждённый результат Telegram. Входящие вызовы и массовые исходящие кампании не реализованы.
Следующий значимый шаг приёмки — согласованный реальный звонок с одновременным наблюдением технических показателей и оценкой звука на слух. Нужно проверить паузы, перебивания, отбой и впечатление адресата на его устройстве и сети. Мы не приписываем проекту конверсию, экономию времени или доказанный коммерческий эффект: инженерные проверки таких результатов не измеряли.
Результат
Amobit Call прошёл путь от идеи голосового ассистента до рабочего маршрута: человек запускает Telegram-звонок, адресат принимает его, а Live-сессия ИИ обменивается речью через аудиомост. Панель, управление жизненным циклом, диагностика и защищённая история делают систему проверяемой и развиваемой, а не разовым голосовым демо.
Практическая ценность — наблюдаемая основа для управляемых голосовых бесед. Оставшаяся работа над звучанием видна в метриках и заметках прослушивания, а не скрыта за общим обещанием «ИИ-оператора». Эти границы важны перед расширением на другие каналы или больший объём звонков.
Реализованный маршрут
- Оператор подтверждает одного адресата
- Telegram набирает и соединяет вызов
- После ответа запускается Live-сессия
- PCM преобразуется и передаётся в обе стороны
- Отбой закрывает медиа и фиксирует технический итог