Voice PoC (LAN-62, REF-150). Связывает аудио-конвейер с агентом Smarty.
AudioWsServer.on('audio')
→ ML-сервис (faster-whisper, WS)
→ {transcript, isFinal, uuid}
→ VoiceSession.onTranscript(text)
→ agentService.run({bot, provider, messages, ...})
→ {text}
→ TTS (Kokoro/LuxTTS → 16k WAV)
→ EslGateway.broadcast(uuid, file)
ML-сервис отправляет JSON-сообщение:
{
"transcript": "текст транскрипции",
"isFinal": true,
"uuid": "freeswitch-channel-uuid"
}
isFinal: true — признак финального результата (не промежуточного).
agentService.run({
bot, // Mongoose bot document (обязателен)
provider, // AI провайдер (обязателен)
messages, // [{role:'user', content: transcript}] (обязателен)
botSettings, // конфиг бота (обязателен)
participants: [], // участники диалога (PoC: пустой массив)
dialogId: null, // ID диалога (PoC: null — вне контекста)
currentMessage: { text } // текущее сообщение (PoC: только text)
})
Возвращает {text: string}.
TTS принимает текст, генерирует моно-16k PCM .wav файл. Результат транслируется через EslGateway.broadcast(uuid, file).
VoiceSession → WebSocket-клиент к faster-whisper_ttsStub) → вызов Kokoro/LuxTTSdialogId, participants — подставить реальный контекст диалога