Criar o WebSocket
Primeiro, trate do connection evento para que você possa informar quando seu servidor de webhook estiver online e pronto para receber o áudio da chamada:
expressWs.getWss().on('connection', function (ws) {
console.log('Websocket connection is open');
});
Ao enviar áudio para um WebSocket da Voice API, espera-se que o áudio esteja no formato formato específico. Para isso, você precisará de uma função que separe os dados de áudio binários em matrizes do tamanho correto:
function chunkArray(array, chunkSize) {
var chunkedArray = [];
for (var i = 0; i < array.length; i += chunkSize)
chunkedArray.push(array.slice(i, i + chunkSize));
return chunkedArray;
}
Em seguida, crie um manipulador de rota para o /socket rota. Quando o WebSocket estiver conectado, essa rota será chamada:
app.ws('/socket', (ws, req) => {
const wav = new WaveFile(fs.readFileSync("./sound.wav"));
wav.toSampleRate(16000);
wav.toBitDepth("16");
const samples = chunkArray(wav.getSamples()[0], 320);
for (var index = 0; index < samples.length; ++index) {
ws.send(Uint16Array.from(samples[index]).buffer);
}
})
A rota carrega um arquivo de áudio do disco; você pode baixar esse mesmo arquivo em GitHub, utiliza a biblioteca WaveFile para alterar a taxa de amostragem e a profundidade de bits da Voice API. Em seguida, obtém as amostras de áudio do primeiro canal de áudio e utiliza a função mencionada anteriormente para alterar o tamanho da matriz de dados binários de áudio. Por fim, os dados binários de áudio são percorridos e enviados para a chamada por meio do WebSocket com o send() função.
NOTA: A Vonage armazenará em buffer apenas 3.072 mensagens o que deve ser suficiente para cerca de 60 segundos de áudio; se o seu arquivo for mais longo do que isso, você deve implementar um intervalo de 18 a 19 ms entre cada mensagem.
Reproduzir áudio em um WebSocket
Aprenda a conectar uma chamada recebida da Voice API a um WebSocket e, em seguida, reproduzir áudio com JavaScript.