Модуль v.3 · Урок 3
Приватный высокопроизводительный транспорт на active-call
Чему вы научитесь
- Понимать, зачем для голоса берут инфраструктуру на Rust
- Видеть, какие протоколы и кодеки покрывает active-call
- Различать конвейерный и native realtime режимы в одном крейте
- Понимать ценность локальных ASR и TTS для приватности
- Объяснять идею stateful-сценариев в формате Playbook
Когда нужен Rust и self-hosting
AVA из прошлого урока решает интеграцию с Asterisk. Но иногда нужно другое: максимальная производительность, полный контроль над транспортом и гарантия, что звук вообще не покидает ваш контур.
Здесь подходит active-call — инфраструктурный Rust-крейт для голосовых агентов. Это не готовый продукт, а строительный блок: мульти-протокольный аудио-шлюз плюс движок диалога.
Что покрывает active-call
Крейт берёт на себя весь транспортный слой и часть логики диалога.
| Слой | Что поддерживает |
|---|---|
| Протоколы | SIP (UDP/TCP/TLS/WS), WebRTC (SRTP), Voice-over-WebSocket |
| Кодеки | PCM16, G.711, G.722, Opus |
| Конвейер | VAD → ASR → LLM → TTS |
| Native realtime | OpenAI Realtime, Azure Realtime напрямую |
| Offline-режим | Локальные ASR (SenseVoice) и TTS (Supertonic) |
То есть один крейт умеет и классический конвейер, и подключение к realtime API, и полностью локальный режим без облака.
Конвейер или realtime — в одном месте
active-call не навязывает архитектуру: вы выбираете её под сценарий, прямо как в дереве решений из урока v.2/03.
- Нужна естественность и облако приемлемо — подключаете native realtime.
- Нужна приватность — собираете конвейер на локальных ASR и TTS.
Перевод звонка на человека реализован через стандартный механизм SIP
(refer), так что эскалация из урока
v.1/02 здесь работает на уровне протокола.
Локальные ASR и TTS: данные не уходят
Главная ценность active-call для РФ — offline-режим. Распознавание и синтез речи выполняются локально (SenseVoice для ASR, Supertonic для TTS), поэтому аудио не отправляется во внешнее облако.
Playbook: сценарий как stateful-документ
В active-call логика разговора описывается в формате Playbook — это stateful-агенты, заданные в Markdown. Вместо жёсткого кода вы описываете состояния и переходы диалога в читаемом текстовом файле.
Это удобно для сложных сценариев: запись на приём с подтверждением, квалификация лида по шагам, многоэтапная поддержка. Сценарий видно целиком, его легко править и ревьюить.
Кому это подходит
active-call — выбор для тех, у кого есть Rust-разработчики и жёсткие требования к приватности или производительности: телеком, крупные интеграторы, продукты с собственной телефонной платформой.
Если это не ваш случай, знание о таком варианте всё равно полезно: вы понимаете, что у self-hosted приватного голоса есть зрелый фундамент, и можете осознанно выбрать между ним, AVA и no-code.
Следующий урок
Входящие и исходящие звонки через Twilio и FastRTC — соберём двустороннюю телефонию production-уровня.