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?
Evangelista desenvolvedor Twilio aqui.
Você precisa restringir o objeto JSON que está enviando para o twilio.