Node.js

Erstellen Sie den WebSocket

Behandeln Sie zunächst die connection Ereignis, damit Sie melden können, wann Ihr Webhook-Server online und bereit ist, das Audio des Anrufs zu empfangen:

expressWs.getWss().on('connection', function (ws) {
  console.log('Websocket connection is open');
});

Wenn Audio an einen Voice API WebSocket geschrieben wird, wird das Audio in einem spezifisches Format. Dazu benötigen Sie eine Funktion, die die binären Audiodaten in Arrays mit der richtigen Größe aufteilt:

function chunkArray(array, chunkSize) {
    var chunkedArray = [];
    for (var i = 0; i < array.length; i += chunkSize)
        chunkedArray.push(array.slice(i, i + chunkSize));
    return chunkedArray;
}

Erstellen Sie dann einen Route-Handler für die /socket Route. Wenn der WebSocket verbunden ist, wird diese Route aufgerufen:

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);
    }
})

Die Route lädt eine Audiodatei von der Festplatte, Sie können die gleiche Datei auch von GitHubverwendet die WaveFile-Bibliothek, um die Abtastrate und Bittiefe für die Voice API zu ändern. Als Nächstes werden die Audiosamples des ersten Audiokanals abgerufen, und die Funktion von vorhin wird verwendet, um die Größe des binären Audiodatenarrays zu ändern. Schließlich werden die binären Audiodaten iteriert und über den WebSocket mit der Funktion send() Funktion.

HINWEIS: Vonage kann nur 3072 Nachrichten puffern. was für etwa 60 Sekunden Audio ausreichen sollte. Wenn Ihre Datei länger ist, sollten Sie eine Verzögerung von 18-19 ms zwischen jeder Nachricht einbauen.