Crear el WebSocket
En primer lugar, ocúpate de la connection evento para que puedas notificar cuándo tu servidor de webhooks está en línea y listo para recibir el audio de la llamada:
expressWs.getWss().on('connection', function (ws) {
console.log('Websocket connection is open');
});
Al escribir audio en un WebSocket de la Voice API, se espera que el audio esté en un formato formato específico. Para ello, necesitarás una función que separe los datos binarios de audio en matrices del tamaño correcto:
function chunkArray(array, chunkSize) {
var chunkedArray = [];
for (var i = 0; i < array.length; i += chunkSize)
chunkedArray.push(array.slice(i, i + chunkSize));
return chunkedArray;
}
A continuación, cree un manejador de rutas para el /socket ruta. Cuando se conecte el WebSocket, se llamará a esta ruta:
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);
}
})
La ruta carga un archivo de audio desde el disco; puedes descargar ese mismo archivo desde GitHub, utiliza la biblioteca WaveFile para modificar la frecuencia de muestreo y la profundidad de bits de la Voice API. A continuación, obtiene las muestras de audio del primer canal de audio y utiliza la función anterior para modificar el tamaño de la matriz de datos de audio binarios. Por último, se recorre la matriz de datos de audio binarios y se envían a la llamada a través del WebSocket con el send() función.
NOTA: Vonage solo almacenará en búfer 3072 mensajes que debería ser suficiente para unos 60 segundos de audio, si tu archivo es más largo que esto deberías implementar un retardo de 18-19ms entre cada mensaje.
Reproducir audio en un WebSocket
Aprende a conectar una llamada entrante de la Voice API a un WebSocket y, a continuación, reproduce audio con JavaScript.