Call Translator: перевод телефонного разговора на ходу и ИИ-агент, который звонит за вас
Позвонить в клинику, хозяину квартиры или поставщику на языке, который знаешь плохо, - это стресс, а для бизнеса с иностранными клиентами - ежедневные потери. Call Translator позволяет каждому говорить на своём языке в одном звонке, а ещё может отправить ИИ-агента сделать звонок и принести ответы.
Задача
Многие в Испании живут на чужом языке. Обычный звонок - записаться к врачу, уточнить доставку, сообщить хозяину квартиры о поломке - превращается в проблему: собеседник отвечает слишком быстро, и половина информации теряется. У бизнеса с иностранными клиентами та же проблема, только с другой стороны.
Переводчик стоит дорого, и договариваться с ним нужно заранее, поэтому мы сделали сервис, в котором перевод происходит прямо внутри звонка.
Звонок, где каждый говорит на своём языке
Звонящий выбирает язык собеседника - доступно 13 языков, по умолчанию испанский - и начинает звонок. Дальше:
- Каждый говорит на своём языке, и примерно через полторы секунды после конца фразы собеседник слышит её в переводе.
- Голос оригинала остаётся, но тише: по умолчанию он приглушён на 15 дБ, а перевод звучит поверх, так что интонация и паузы слышны. Ползунок можно подвинуть или выключить оригинал совсем.
- Субтитры обеих сторон идут на экране во время разговора.
- Язык можно сменить посреди звонка, если выяснится, что собеседнику удобнее другой.
Технически каждая сторона сидит в своей аудиокомнате, а агент-переводчик подключён к обеим. Для каждого слушателя он публикует одну дорожку: приглушённый голос собеседника и перевод. Если связь с моделью перевода обрывается, агент сразу пускает оригинал на полной громкости, переподключается, а приложение показывает, что перевод восстанавливается.
Звонки на обычные номера
Собеседнику не нужно никакое приложение. Звонки на обычные телефоны идут через SIP-транк оператора Zadarma и собственный сервер LiveKit SIP; звонящий слышит гудки, пока на том конце не ответят.
LiveKit работает на наших серверах, а не в облачном сервисе, и ключи сервисов перевода и телефонии остаются на сервере: приложение и браузер получают только временный токен доступа к одной комнате.
История и расшифровки без записей
Звук звонков никогда не пишется на диск. Хранится сам звонок - кто, когда, сколько длился, на каком языке - и расшифровка: каждая фраза обеих сторон в оригинале и в переводе, с моментом в разговоре. Пользователь может открыть историю, перезвонить на тот же номер, удалить один звонок или всю историю и удалить аккаунт.
До начала разговора собеседник должен узнать, что звонок переводит машина. Тексты этого предупреждения задаются по языкам в админке, а бизнес может написать свои в кабинете.
ИИ-агент, который звонит за вас
Вторая половина сервиса - ИИ-агент, который звонит вместо вас. Вы своими словами описываете, что нужно, - “узнай в зуботехнической лаборатории, готова ли коронка по заказу 1042 и когда её привезут”, - а ИИ превращает это в задание: цель, список вопросов с типом ответа (да/нет, дата и время, число, текст, выбор из вариантов), что можно сообщить о вас и на что нельзя соглашаться. Вы проверяете задание, при необходимости правите и запускаете звонок.
Агент говорит на языке собеседника. Сначала он сообщает, что это ИИ-ассистент, который звонит от чьего-то имени, и что разговор расшифровывается, задаёт по одному вопросу, проговаривает обратно имена, числа и даты и записывает каждый ответ в тот момент, когда его слышит, вместе с фразой, на которой ответ основан. Он умеет нажимать кнопки в голосовом меню, ждать на линии и оставлять сообщение на автоответчике. На вопрос “вы робот?” он отвечает честно; если человек не хочет говорить с ИИ, извиняется и кладёт трубку, а просьба “больше не звоните” заносит номер в стоп-лист.
После звонка отдельный анализ готовит карточку результата: ответ на каждый вопрос с цитатой из разговора, итог (всё выяснено, частично, автоответчик, не прошли меню, отказ и т. д.) с причиной в одну строку, краткое содержание и следующие шаги на вашем языке, а ниже - расшифровку с переводом.
Ограничения встроены: принимаются только справочные и бытовые задания, а продажи, реклама, розыгрыши и попытки выдать агента за заказчика отклоняются при составлении задания и ещё раз при старте звонка; экстренные и платные номера заблокированы; звонки идут только в дневные часы по времени страны номера; есть дневные лимиты на заказчика и на номер, а если занято или не ответили - повторы. Режим репетиции позволяет самому сыграть собеседника в приложении и проверить агента на том же задании и с теми же инструкциями, прежде чем он кому-то позвонит. Для автоматических проверок есть боты-собеседники: регистратура клиники, голосовое меню с музыкой ожидания, автоответчик, отказ и вопрос “вы робот?”.
Для бизнеса: кабинет, API, вебхуки и SDK
У бизнеса свой кабинет: менеджеры с приглашениями и переключателем “на смене”, клиенты, история звонков с двуязычными расшифровками, идущие сейчас звонки, свои тексты предупреждения и ИИ-звонки - задание пишется обычными словами, ИИ его готовит, менеджер проверяет и запускает звонок.
Всё это доступно и через API с документацией OpenAPI: начать звонок, получить его статус, расшифровку и стоимость, положить трубку, составить и запустить ИИ-звонок. Подписанные вебхуки сообщают, что звонок звонит, принят, пропущен или завершён, присылают расшифровку по мере разговора и отдают результат ИИ-звонка; доставки повторяются и записываются в журнал. Два SDK - для веба и для Flutter - позволяют встроить звонок с переводом в сайт или приложение бизнеса.
Админка и себестоимость
Админка показывает каждый звонок с хронологией - кто подключился, время до первого перевода, задержка каждой фразы, обрывы и переподключения - и его себестоимость, рассчитанную по прайсу поставщика. Страница сервисов проверяет состояние сервиса перевода, медиасервера, SIP и телефонии.
Android-приложение
Мобильное приложение написано на Flutter, на том же SDK, что получает бизнес. Вход - по номеру телефона или почте, номер можно выбрать из контактов, во время звонка видны субтитры, а после - расшифровка парами: что сказала одна сторона рядом с тем, что услышала другая. В приложении есть режим бизнеса для менеджеров, а ИИ-звонки заказываются прямо с телефона: задание своими словами, черновик на проверку, затем карточка результата.
Технологии
- Бэкенд: Laravel 13, Inertia + React 19 + Ant Design (админка и кабинет бизнеса)
- Реальное время: LiveKit и LiveKit SIP (на своих серверах), Laravel Reverb, очереди Horizon
- Агент-переводчик: Python, LiveKit Agents, модели OpenAI Realtime
- Анализ ИИ-звонков: текстовая модель OpenAI со строгой JSON-схемой
- Телефония: SIP-транк Zadarma
- Мобильное приложение: Flutter (Android)
- SDK: веб (npm) и Flutter
- API: REST с документацией OpenAPI, подписанные вебхуки
- База данных: MySQL, Redis
- Инфраструктура: кластер k3s в ЕС, Docker, GitLab CI, Argo CD; медиасервер на отдельном VPSРезультат
Звонок через языковой барьер становится обычным разговором: каждый говорит на своём языке, слышит другого с небольшой задержкой и видит субтитры, а после остаётся расшифровка на двух языках и никакой записи. Когда звонить некогда, ИИ-агент звонит по понятному заданию и приносит ответы вместе с цитатами, из которых они взяты. Статус: сервис - прототип на тестовом сервере; приложение пока только для Android, а ИИ-агент до сих пор звонил только тестовым ботам и людям, игравшим собеседника в режиме репетиции, но не настоящим организациям.




