0

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
}
asked Jun 4, 2025 at 13:22
2
  • Maybe you should look at that 19 bytes and see what it is? Commented Jun 5, 2025 at 22:19
  • @miken32 how can i read that not a text file!! otherwise code is correct? can you please help Commented Jun 6, 2025 at 5:29

0

Know someone who can answer? Share a link to this question via email, Twitter, or Facebook.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.