Я пытаюсь отправить аудиопоток обратно в Twilio через WebSocket и позволить Twilio воспроизвести этот голос вызывающему абоненту. Я настроил двунаправленное соединение WebSocket, следуя этому руководству. Я могу принять поток вызовов, но даже если я отправляю звук обратно, я не слышу никакого ответа.
Вот как я создаю двунаправленный поток:
const response = new VoiceResponse();
const connect = response.connect();
const stream = connect.stream({
url: "wss://<my_websocket_address>",
});
response.say("Disconnecting call");
res.type("text/xml");
res.send(response.toString());
вот как я пытаюсь преобразовать текст в аудио с помощью azure-cognitive-services:
const textToSpeech = async (text) => {
return new Promise((resolve, reject) => {
const speechConfig = sdk.SpeechConfig.fromSubscription(
constants.subscriptionkey,
constants.region
);
speechConfig.speechSynthesisLanguage = "en-US";
speechConfig.speechSynthesisVoiceName = "en-US-AvaMultilingualNeural";
speechConfig.speechSynthesisOutputFormat = sdk.SpeechSynthesisOutputFormat.Raw8Khz8BitMonoMULaw;
let audioConfig = null;
const synthesizer = new sdk.SpeechSynthesizer(speechConfig, audioConfig);
synthesizer.speakTextAsync(
text,
(result) => {
const { audioData } = result;
synthesizer.close();
const bufferStream = new PassThrough();
bufferStream.end(Buffer.from(audioData).toString("base64"));
console.info("TTS DONE");
resolve(bufferStream);
}
},
(error) => {
synthesizer.close();
reject(error);
}
);
});
};
и вот как я наконец пытаюсь отправить звук обратно:
let payload = await tts.textToSpeech("Hello, how can i help you?")
var json = {
"event": "media",
"streamSid": "MZ058f55e473ebabd11f57552bc9952861",
"media": {
"payload": payload
}
}
this.connection.send(json)
Я понимаю, что мне нужно отправить звук Mulaw в кодировке Base64 в Twilio, но я думаю, что уже делаю это.
Может кто-нибудь подсказать, где я ошибаюсь? Кроме того, есть ли способ проверить отправленные сообщения WebSocket на панели управления Twilio?
Проповедник разработчиков Twilio здесь.
Вам необходимо преобразовать в строку объект JSON, который вы отправляете в twilio.
this.connection.send(JSON.stringify(json))