I am using asterisk AudioSocket to send streams to Nodejs server
here is my asterisk extensions.conf
same => n,AudioSocket(${UUID()},ip:1579)
same => n, wait(10)
same => n,Playback(goodbye)
same => n,Hangup()
and my nodejs server
const net = require('net');
const speech = require('@google-cloud/speech');
const port = 1579;
const server = net.createServer((socket) => {
console.log('β‘ Asterisk connected');
socket.on('data', (data) => {
console.log('π§ Received audio chunk:', data.length, 'bytes');
});
socket.on('close', () => {
console.log('β Socket closed');
});
socket.on('end', () => {
console.log('π Asterisk disconnected');
recognizeStream.end();
});
socket.on('error', (err) => {
console.error('π₯ Socket error:', err);
recognizeStream.destroy();
});
});
server.on('connection', () => {
console.log('π New connection event fired');
});
server.on('error', (err) => {
console.error('π₯ Server error:', err);
});
server.listen(port, '0.0.0.0', () => {
console.log(`π TCP server listening on port ${port}`);
});
on dialing the number from 3cx call gets connected to nodejs server, it logs asterisk connected.
But on data it prints only once that data is recieved and that is 19 bytes on every call.
is there any issue in this setup?
my goal is - user can interact through speech and stream i will redirect to nodejs server that further will paas to google speech and stt will be passed to agentic apis to get the response and then via google tts i will paas the answer stream back to asterisk.
Any help on this
Update1
i have integrated google speech like this
const net = require('net');
const speech = require('@google-cloud/speech');
const port = 1579;
const client = new speech.SpeechClient();
const requestConfig = {
config: {
encoding: 'LINEAR16',
sampleRateHertz: 8000,
languageCode: 'en-US',
audioChannelCount: 1,
enableAutomaticPunctuation: true,
},
interimResults: false, // Set to true if you want real-time partial results
};
const server = net.createServer((socket) => {
console.log('β‘ Asterisk connected');
// Create Google STT stream for each connection
const recognizeStream = client
.streamingRecognize(requestConfig)
.on('error', (err) => {
console.error('π Google STT error:', err);
})
.on('data', (data) => {
console.log(" .on ~ data:", data);
if (data.results[0] && data.results[0].alternatives[0]) {
console.log('π£ Recognized:', data.results[0].alternatives[0].transcript);
} else {
console.log('π£ No transcription result');
}
});
socket.on('data', (data) => {
console.log('π§ Received audio chunk:', data.length, 'bytes');
recognizeStream.write(data); // Send audio to Google
});
socket.on('close', () => {
console.log('β Socket closed');
recognizeStream.destroy();
});
socket.on('end', () => {
console.log('π Asterisk disconnected');
recognizeStream.end();
});
socket.on('error', (err) => {
console.error('π₯ Socket error:', err);
recognizeStream.destroy();
});
});
server.on('connection', () => {
console.log('π New connection event fired');
});
server.on('error', (err) => {
console.error('π₯ Server error:', err);
});
server.listen(port, '0.0.0.0', () => {
console.log(`π TCP server listening on port ${port}`);
});
due to this chunk issues i guess i am getting
β‘ Asterisk connected
π New connection event fired
π§ Received audio chunk: 19 bytes
π Google STT error: ApiError: Audio Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time.
at new ApiError (/mnt/c/users/sgarg/desktop/dev/nodejs/node_modules/@google-cloud/common/build/src/util.js:73:15)
at PassThrough.transform [as _transform] (/mnt/c/users/sgarg/desktop/dev/nodejs/node_modules/@google-cloud/speech/build/src/helpers.js:101:34)
at Transform._write (node:internal/streams/transform:175:8)
at writeOrBuffer (node:internal/streams/writable:392:12)
at _write (node:internal/streams/writable:333:10)
at Writable.write (node:internal/streams/writable:337:10)
at StreamProxy.ondata (/mnt/c/users/sgarg/desktop/dev/nodejs/node_modules/duplexify/node_modules/readable-stream/lib/_stream_readable.js:629:20)
at StreamProxy.emit (node:events:517:28)
at addChunk (/mnt/c/users/sgarg/desktop/dev/nodejs/node_modules/duplexify/node_modules/readable-stream/lib/_stream_readable.js:279:12)
at readableAddChunk (/mnt/c/users/sgarg/desktop/dev/nodejs/node_modules/duplexify/node_modules/readable-stream/lib/_stream_readable.js:262:11) {
code: 11,
errors: undefined,
response: undefined
}
-
Maybe you should look at that 19 bytes and see what it is?miken32– miken322025εΉ΄06ζ05ζ₯ 22:19:15 +00:00Commented Jun 5, 2025 at 22:19
-
@miken32 how can i read that not a text file!! otherwise code is correct? can you please helpCode Guru– Code Guru2025εΉ΄06ζ06ζ₯ 05:29:32 +00:00Commented Jun 6, 2025 at 5:29