Голос и телефония
STT, TTS, транспорты и PSTN-операторы — всё в UI, без env-переменных, без vendor lock-in.
Платформа принимает и совершает голосовые звонки с ИИ-агентом. Всё настраивается в UI — без env-переменных, без привязки к конкретным вендорам. Можно начать за 15 минут с облачных провайдеров и перейти на self-hosted когда понадобится.
Зачем голос в 2026
Текстовые чаты закрывают часть обращений, но голос остаётся главным каналом для:
- Пожилой аудитории — они не пишут, только звонят.
- Сложных эмоциональных тем (жалобы, болезнь, финансовые проблемы).
- Мобильного контекста — люди в машине, на улице, с ребёнком — не пишут.
- Регионов с плохим интернетом — звонок работает всегда.
- Высокочувствительных переговоров (запись на приём к врачу, подписка на дорогой продукт).
Телеком-статистика подтверждает: 50-70% клиентских обращений идут по телефону даже в 2026 году. Это огромный пул автоматизации.
Что даёт голосовой бот
24/7 приём звонков
Без пропущенных, без «наши операторы перегружены».
0 секунд ожидания
Бот отвечает с первого гудка. NPS вырастает мгновенно.
Параллельность
1000 звонков одновременно = 1000 агентов. Не надо нанимать в сезон.
Консистентность
Тон, скрипт, качество — одинаковые у всех. Нет «попал на неопытного оператора».
Аналитика речи
Транскрипт каждого звонка. Анализируйте, о чём говорят клиенты, где теряются.
Снижение затрат
Типовой колл-центр стоит $20-40/час на оператора. Бот — $0.05-0.20 за минуту разговора.
Четыре сценария использования
Клиент на вашем сайте жмёт кнопку «Позвонить» — разговаривает в браузере.
Как это работает:
- Клиент жмёт кнопку в виджете.
- Браузер просит разрешение на микрофон.
- Начинается разговор прямо в браузере — без установки приложений, без платных звонков.
Когда использовать:
- SaaS-продукты с консультациями.
- B2B-сервисы, где клиент хочет быстро уточнить детали.
- Онлайн-магазины с визуальными продуктами (мебель, одежда).
Стек: browser-webrtc + любой STT + любой TTS.
Клиент набирает ваш городской или мобильный номер — попадает на бота.
Как это работает:
- Вы покупаете номер у телеком-оператора (Twilio, Telnyx, российские).
- Настраиваете у оператора переадресацию SIP на наш endpoint.
- Все звонки на этот номер идут к боту.
Когда использовать:
- Массовое обслуживание (поддержка, запись, консультации).
- Замена колл-центра на первой линии.
- Ночные смены / выходные без операторов.
Стек: sip-media-stream + STT + TTS + номер у оператора.
Бот сам набирает клиента и разговаривает.
Сценарии:
- Напоминания о записи («завтра в 14:00 запись к доктору Иванову»).
- Подтверждения заказа («подтверждаете доставку на сегодня?»).
- Холодные звонки (квалификация лидов).
- NPS-опросы («как вам понравилось обслуживание?»).
- Обзвон должников (мягкое напоминание).
Как это работает:
- Flow-triggered или API-triggered запуск.
- Берётся номер клиента из CRM.
- Бот набирает через PSTN-оператора.
- Когда клиент поднял — начинается разговор.
Стек: pstn-rest-api (телеком-оператор) + STT + TTS.
Вы встраиваете бота в свою существующую корпоративную АТС.
Суть: у вас уже есть номера, SIP-trunk, оператор связи. Вам не надо это менять — просто ставите бота как «первый оператор» в IVR.
Как это работает:
- В АТС настраиваете IVR-правило: «новый звонок → передать медиа на SIP-URI нашего сервера».
- АТС форкает медиа-поток (обычно μ-law 8 кГц) на наш endpoint.
- Платформа обрабатывает и возвращает ответ.
Когда использовать:
- Крупный бизнес с корпоративной телефонией (Asterisk, FreeSWITCH, Avaya).
- Колл-центры 100+ операторов, хотят «помощника» на первой линии.
- Когда нельзя менять номера (банки, госсектор).
Стек: sip-media-stream (SIP-мост) + STT + TTS.
Ничего не залочено на вендора
Принцип платформы
В платформе нет жёстких имён Twilio, Telnyx, Deepgram, ElevenLabs, OpenAI. Любой провайдер голоса — обычная запись в настройках с URL, ключом, моделью и голосом.
Почему это важно
Традиционный рынок: вендоры продают «всё в одном пакете» — Twilio даёт номера + STT + TTS, Deepgram — только STT, ElevenLabs — только TTS. При этом каждый вендор привязывает вас к себе через проприетарный API.
Проблемы lock-in:
- Цены повышаются — вы не можете легко уйти.
- Появляется более качественный вариант — надо переписывать интеграцию.
- Провайдер закрывается / меняет стратегию — у вас проблема.
- На compliance-аудите: «ваши данные идут в US? Переделайте».
Как устроено у нас
Каждый провайдер — запись в таблице настроек с:
- URL API (куда слать запросы).
- Ключ доступа.
- Модель / голос / параметры.
- Тип драйвера (как именно общаться с этим API).
Пример: вам нравится качество Deepgram — настраиваете. Через полгода появился Rev.ai дешевле — настраиваете вторым провайдером, переключаете в один клик, старый оставляете как fallback.
Свобода, которую это даёт
- Смена поставщика = правка одной записи. Без пересборки, без простоя.
- Изоляция воркспейсов. Каждый клиент платформы держит свои ключи и свой стек.
- Гибридный подход. Один STT для бизнеса, другой для тестов — оба работают параллельно.
- Compliance. Self-hosted Whisper для регулируемых кейсов, облачный — для остального.
Четыре слоя голоса
Клиент
│
▼
┌─────────────┐ как пришёл звук
│ Transport │ (браузер / SIP / PSTN)
└──────┬──────┘
▼
┌─────────────┐ распознавание речи
│ STT │ (аудио → текст)
└──────┬──────┘
▼
┌─────────────┐ логика разговора
│ Flow + LLM │
└──────┬──────┘
▼
┌─────────────┐ синтез речи
│ TTS │ (текст → аудио)
└──────┬──────┘
▼
КлиентКаждый слой настраивается отдельно. Можно менять TTS не трогая STT. Можно переключать Transport не ломая голос. Это главное преимущество архитектуры.
Слой 1 — STT (распознавание речи)
Задача: превратить аудио клиента в текст. От качества зависит всё дальнейшее — если STT плохо распознал, LLM получит мусор на входе.
Варианты подключения
Как работает: клиент говорит → накапливается 2-5 секунд аудио → отправляется целиком на сервер → возвращается текст.
Плюсы: проще в реализации, работает с любым OpenAI-совместимым сервером (Whisper, локальный OpenAI-совместимый Whisper-сервер).
Минусы: задержка 1-3 секунды между концом фразы клиента и получением текста. Для живого диалога — на грани комфорта.
Когда брать: начинаете с облачного OpenAI Whisper или self-hosted OpenAI-compatible сервера, задержка 2-3 сек допустима.
Что нужно знать: адрес сервера, ключ, опционально — модель и язык.
Как работает: клиент говорит → аудио стримится по чанкам → сервер отвечает промежуточными транскрипциями по мере речи → финальная версия в конце фразы.
Плюсы: задержка менее 500ms после конца фразы. Живой диалог. Можно показывать клиенту промежуточный текст (что он сказал — в реальном времени).
Минусы: сложнее настроить. Часто платные сервисы.
Когда брать: production, где важна отзывчивость. Практически все массовые голосовые боты на streaming STT.
Что нужно знать: WebSocket URL, ключ, опционально — модель и язык.
Популярные STT-провайдеры
| Провайдер | Формат | Языки | Цена | Примечание |
|---|---|---|---|---|
| OpenAI Whisper API | HTTP | 100+ | $6/час | Стандарт, хорошо с русским |
| Deepgram | WS | 30+ | $3-7/час | Самый быстрый streaming |
| AssemblyAI | WS | 30+ | $4-12/час | Хорошая аналитика |
| Google Speech | WS | 125+ | $9-17/час | Enterprise-решение |
| Self-hosted Whisper | HTTP | 100+ | ~$0 (если GPU есть) | Полный контроль |
| Яндекс SpeechKit | WS | 10+ | ₽1.5/мин | Для российского рынка |
Рекомендации по выбору
Слой 2 — TTS (синтез речи)
Задача: озвучить ответ агента. От качества зависит ощущение клиента — «говорит с роботом» vs «говорит с человеком».
Варианты подключения
Стандарт. POST на /v1/audio/speech с JSON, получаете аудио.
Плюсы: простой, работает с OpenAI TTS и совместимыми (Deepgram Aura, Groq TTS, self-hosted).
Что нужно: адрес сервера, ключ, голос по умолчанию.
Универсальный адаптер для нестандартных API (ElevenLabs, Yandex, кастомные TTS).
Плюсы: работает с любым поставщиком, который умеет вернуть аудио стримом.
Что нужно: вы сами настраиваете шаблон тела запроса через плейсхолдеры
{{text}} и {{voiceId}}.
Популярные TTS-провайдеры
| Провайдер | Качество | Русский | Цена | Примечание |
|---|---|---|---|---|
| ElevenLabs | 🏆 | ✅ | $0.30-1/1000 символов | Эталон — «звучит как человек» |
| OpenAI TTS | ✅ | ✅ | $15/1M символов | Надёжный, быстрый |
| Deepgram Aura | ✅ | 🟡 | $0.015/минута | Только английский на top quality |
| Яндекс SpeechKit | ✅ | 🏆 | ₽2/1000 символов | Лучший для русского |
| Self-hosted XTTS v2 | ✅ | ✅ | ~$0 | Open-source, нужен GPU |
| Google Cloud TTS | ✅ | ✅ | $4-16/1M | Enterprise |
Параметры голоса
- Voice ID — конкретный «голос». У ElevenLabs — тысячи пользовательских голосов, можно создать свой. У OpenAI — 10 голосов (alloy, echo, fable, nova, onyx, shimmer…).
- Speed — скорость речи. 1.0 = нормальная. 1.1-1.2 часто ускоряется для улучшения UX.
- Sample rate — частота дискретизации (8кГц / 16кГц / 24кГц). Для SIP — 8кГц, для WebRTC — 16кГц.
Рекомендации по выбору
Слой 3 — Transport (откуда приходит звук)
Определяет канал — как голос попадает в платформу.
Клиент говорит прямо в браузере через WebRTC. Без ключей — используются STT/TTS воркспейса по умолчанию.
Технически: браузер открывает WebSocket к нашему endpoint, PCM16 аудио стримится в обе стороны.
Когда использовать:
- Веб-виджет на сайте.
- Демо для потенциальных клиентов.
- Внутренний тест новых сценариев.
Ограничения:
- Страница должна быть по HTTPS (WebRTC не работает по HTTP).
- Клиент должен разрешить микрофон.
- На iOS Safari есть особенности инициализации микрофона.
Для корпоративных АТС / SBC / провайдеров связи.
Технически: наш endpoint /telephony/sip-stream/ws принимает
WebSocket-стрим с μ-law или PCM аудио. Ваша АТС настроена форкать
медиа туда.
Когда использовать:
- У вас есть корпоративная АТС (Asterisk, FreeSWITCH, Avaya, Cisco CUCM).
- У вас SIP-trunk от телеком-оператора — хотите добавить AI-линию.
- Нужна интеграция с существующим IVR.
Что настраивать со стороны АТС:
- В диалплане правило: для определённых номеров / кнопок IVR — передать медиа на SIP-URI нашего сервера.
- Кодек μ-law 8 кГц (стандарт телефонии).
- Если SIP-over-TLS — установить сертификаты.
Время настройки: обычно 1-3 часа с инженером АТС.
Текстовый режим без реального аудио. Для тестов, smoke-checks, CI/CD.
Полезно в dev-окружении — тестировать сценарии без реальных звонков и без оплаты STT/TTS.
Слой 4 — Telephony (исходящие в PSTN)
Задача: чтобы агент мог сам позвонить клиенту на обычный телефон. Нужен телеком-оператор с REST API для call-control.
Как работает
- Ваш flow или API дёргает «позвонить клиенту X на номер Y».
- Платформа обращается к оператору:
POST /calls { to: "+79...", from: "+79...", webhookUrl: "..." }. - Оператор физически набирает номер через PSTN.
- Клиент поднимает трубку → оператор создаёт SIP-соединение → медиа начинает стримиться в нашу платформу.
- Дальше — как SIP-звонок (STT → Flow → TTS).
Популярные операторы
| Оператор | Гео | Цена за минуту | Примечание |
|---|---|---|---|
| Twilio | Global | $0.013-0.08 | Стандарт рынка, API отличный |
| Telnyx | Global (сильны в Европе) | $0.0035-0.05 | Дешевле Twilio |
| Plivo | Global | $0.008-0.06 | Азия сильная |
| Vonage (Nexmo) | Global | $0.01-0.08 | Enterprise-friendly |
| Sinch | Global | $0.007-0.07 | - |
| Wavix / Flowroute | US | $0.005-0.02 | Только для США |
| Zadarma | Россия+СНГ | ₽0.25-1.5 | Удобный для РФ |
| Sipuni | Россия | ₽0.3-2 | - |
Требование — REST call-control API
Оператор должен уметь принимать:
POST /calls { to, from, webhookUrl, applicationId }
→ { id, status }Большинство современных операторов это поддерживают. Наш адаптер
pstn-rest-api — универсальный, настраивается полями:
- Адрес API оператора.
- Ключ авторизации.
- ID приложения у оператора.
- Номер отправителя по умолчанию.
- Webhook-URL для callback-ов (статусы звонков).
Первый запуск: веб-виджет за 15 минут
Настройки → Голос и телефония
Откройте раздел. Увидите 4 секции: STT, TTS, Transport, Telephony.
Добавьте STT-провайдер
Нажмите «Добавить STT».
Для быстрого старта: выберите OpenAI Whisper.
Заполните:
- Имя: «OpenAI Whisper Main».
- Base URL:
https://api.openai.com/v1. - API-ключ: ваш ключ OpenAI.
- Модель:
whisper-1. - Язык:
ru(или auto).
Сохраните → пометьте Default.
Добавьте TTS-провайдер
Нажмите «Добавить TTS».
Для быстрого старта: выберите OpenAI TTS.
Заполните:
- Имя: «OpenAI TTS Main».
- Base URL:
https://api.openai.com/v1. - API-ключ: тот же ключ OpenAI.
- Модель:
tts-1-hd(качество) илиtts-1(скорость). - Голос:
nova(женский) илиonyx(мужской).
Сохраните → пометьте Default.
Добавьте Transport
Нажмите «Добавить Transport».
Выберите Браузерный микрофон.
Без дополнительных полей — просто сохраните и пометьте Default.
Готово — протестируйте
Откройте виджет чата в админке → включите голосовой режим → жмите микрофон → разговаривайте.
Должно работать за 15 минут с момента старта.
Что дальше
- Для исходящих звонков: добавьте Telephony провайдера (ваш телеком-оператор) → Default.
- Для SIP-АТС: замените Transport default на SIP-мост, настройте АТС форкать медиа в наш endpoint.
Жизненный цикл звонка — подробно
/voice/ws.voice:sessions, workspace.voice_minute для биллинга.dial({to, flowId}).POST /calls на API оператора.Оптимизация качества голоса
Проблема: робот звучит как робот
Симптомы: клиенты сразу просят «позовите человека», жалуются в отзывах «разговаривал с роботом».
Причины и фиксы:
Проблема: большая задержка
Симптомы: клиент сказал → пауза 3-5 секунд → бот отвечает. Разговор неестественный.
Из чего складывается задержка:
Клиент говорит 3 сек
│
├─ +200ms: STT-streaming финализирует транскрипт
│
├─ +1500ms: LLM генерирует первый токен ответа
│
├─ +300ms: TTS начинает генерировать аудио
│
└─ +200ms: первые байты аудио долетают до клиента
────────
~2200msОптимизации:
- Streaming STT вместо HTTP — экономит 1-2 сек.
- Лёгкая модель (GPT-4o-mini вместо GPT-4o) — экономит 500ms.
- Короткий системный промпт — меньше токенов input → быстрее.
- Streaming TTS — бот начинает говорить через 300ms вместо 2 сек.
- Географическая близость к провайдерам — для России лучше брать российские или европейские endpoint-ы (не US).
Реалистичная цель: 1.5-2.5 секунды задержки после конца фразы клиента. Меньше 1 секунды — только с идеальной инфрой.
Проблема: плохое распознавание
Симптомы: бот «не понял, повторите», транскрипция содержит бред.
Фиксы:
- Явно указать язык в настройках STT (не auto).
- Более точная модель (Whisper large-v3 вместо base).
- Шумоподавление на клиенте — для WebRTC это браузер, для SIP — на АТС.
- Частота дискретизации — 16 кГц лучше 8 кГц. Для SIP — используйте HD-кодеки (Opus) если оператор поддерживает.
Безопасность
Как устроена изоляция
- 🔒 API-ключи провайдеров хранятся только в БД. В UI-ответах — лишь индикатор «ключ сохранён», сами байты не возвращаются.
- 🔒 Каждый запрос привязан к воркспейсу — нельзя прочитать чужие ключи или чужих операторов.
- 🔒 WebSocket для голоса требует платформенного API-ключа с правом
voice:sessions. Без него клиент получает 401. - 🔒 Повторное подключение к уже активной сессии отклоняется — защита от перехвата.
- 🔒 Все минуты пишутся в
usage_eventsс привязкой к воркспейсу для корректного биллинга. - 🔒 Записи звонков (если включены) шифруются в S3 + доступ только по роли Admin+.
Compliance
Тарификация
Голос считается в минутах активного разговора. Минута начинается с открытия сессии, заканчивается при close. Лимит в месяц — по плану.
Что входит в минуту:
- Работа STT (аудио → текст).
- LLM-запросы для генерации ответов.
- Работа TTS (текст → аудио).
- Использование MCP-инструментов во время звонка.
Что НЕ входит (оплачивается отдельно провайдерам):
- Стоимость минуты у телеком-оператора (для исходящих звонков).
- Стоимость LLM-токенов у LLM-провайдера.
Реальная экономика на типичном кейсе:
- Средняя длительность разговора: 2.5 минуты.
- Стоимость за минуту у нас: ~$0.05.
- Стоимость у телеком-оператора: ~$0.02/мин.
- Стоимость LLM-токенов: ~$0.01 на разговор.
- Стоимость STT/TTS: ~$0.03 на разговор.
Итого: ~$0.20 за разговор. Живой оператор — $1.50-3.00. Экономия ~10×.
Отладка типичных проблем
Метрики здоровья голосового канала
| Метрика | Здоровое | Тревога |
|---|---|---|
| Average Speech Time (средняя длина сессии) | 2-4 мин | >5 мин — бот «застрял» |
| First Response Time (до первого ответа клиента) | <2 сек | >4 сек — неестественно |
| Average Latency (между репликами) | 1-3 сек | >5 сек — клиент уходит |
| STT Accuracy (точность распознавания) | 85-95% | <75% — модель не та |
| Call Abandonment Rate (бросают звонок) | 10-20% | >35% — бот раздражает |
| Successful Goal Rate (запись/продажа/решение) | 40-70% | <25% — flow не работает |
| CSAT после звонка (если опрос) | 4+ из 5 | <3.5 — системная проблема |