Estou tentando enviar um fluxo de áudio de volta ao Twilio por meio de um WebSocket e deixar o Twilio reproduzir essa voz para o chamador. Configurei minha conexão WebSocket bidirecional seguindo este guia. Posso receber o fluxo de chamada, mas mesmo enviando o áudio de volta, não consigo ouvir nenhuma resposta.
É assim que estou criando o fluxo bidirecional:
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());
é assim que estou tentando converter o texto em áudio usando serviços cognitivos do Azure:
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.log("TTS DONE");
resolve(bufferStream);
}
},
(error) => {
synthesizer.close();
reject(error);
}
);
});
};
e é assim que estou finalmente tentando enviar o áudio de volta:
let payload = await tts.textToSpeech("Hello, how can i help you?")
var json = {
"event": "media",
"streamSid": "MZ058f55e473ebabd11f57552bc9952861",
"media": {
"payload": payload
}
}
this.connection.send(json)
Entendo que preciso enviar um áudio mulaw codificado em base64 para o Twilio, mas acho que já estou fazendo isso.
Alguém pode sugerir onde estou errando? Além disso, existe alguma maneira de verificar as mensagens WebSocket enviadas no painel do Twilio?