Голосовой ИИ-ассистент, который разговаривает с людьми по телефону: принимает входящие и совершает исходящие звонки через WhatsApp Business Calling API. Голос и диалог построены на ElevenLabs, а распознавание речи и понимание намерений я сделал локально, на своих сервисах.
Как устроено
- Звонки. Backend на Go для входящих и исходящих звонков через WhatsApp Business Calling: создание звонка, отмена, конечный автомат состояний и журнал событий. Обе стороны разговора записываются в приватное хранилище.
- Голос — ElevenLabs. ElevenLabs Agents ведут диалог и синтезируют речь. Голос, стабильность и агент настраиваются, есть альтернативный провайдер на OpenAI.
- Локальный транскрибатор. Свой ASR-сервис на Python с Vosk: распознаёт русский, казахский и английский параллельно тремя моделями и сам выбирает самую уверенную. Для русского есть потоковая модель T-one. Звук не сохраняется на диске, а текст не попадает в логи.
- Детектор речи. Silero VAD на ONNX Runtime выделяет фразы из потока, чтобы ассистент понимал, когда человек договорил.
- Классификатор. Отдельный NLU-сервис на эмбеддингах определяет, чего хочет человек, быстрее и дешевле, чем каждый раз спрашивать большую модель.
- Потоковое аудио. Браузер через AudioWorklet отдаёт PCM 16 кГц пакетами по 100 мс по WebSocket, а Go держит один поток к ASR на разговор.
Стек
Go (луковичная архитектура), Python (Vosk, T-one, SpeechBrain, ONNX), Silero VAD, ElevenLabs Agents и Scribe, OpenAI, WhatsApp Business Calling API, PostgreSQL, MinIO, WebSocket, React/Vite для тестового интерфейса, Docker Compose.