Это должно работать с вашей текущей реализацией, вам нужно сделать несколько изменений. Таким образом, вместо того, чтобы каждый WebSocket находился в одной и той же конечной точке и записывал в один и тот же выходной файл, вам нужно было бы передавать каждый WebSocket по отдельному маршруту и сохранять каждый вывод в разные файлы. Измените свой маршрут сокета, чтобы он выглядел следующим образом:
app.ws('/socket/:identifier', function(ws, req) {
var rawarray = [];
console.log("Websocket Connected")
ws.on('message', function(msg) {
if (isBuffer(msg)) {
rawarray.push(msg);
}
else {
console.log(msg);
}
});
ws.on('close', function(){
console.log("Websocket Closed")
file = fs.createWriteStream('./' + req.params.identifier + '.wav');
file.write(header(16000 * rawarray.length/50 * 2,{
sampleRate: 16000,
channels: 1,
bitDepth: 16}));
rawarray.forEach(function(data){
file.write(data);
});
})
});
Чтобы это работало, вам также необходимо изменить свой NCCO, вместо того, чтобы файл stati c, считанный с диска, сгенерируйте его в маршрут. Я не знаю, что именно у вас есть в файле, но вы можете использовать его как есть и изменить бит соединения сокета на что-то вроде:
app.get('/ncco', function(req, res) {
var ncco = [
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": [
"https://yourserver.com/event"
],
"from": "YOUR_NEXMO_NUMBER",
"endpoint": [
{
"type": "websocket",
"uri": "ws://yourserver.com/socket/" + req.query.from,
"content-type": "audio/l16;rate=16000"
}
]
}
]
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(ncco), 'utf-8');
});