Skip to content

Instantly share code, notes, and snippets.

@victor-shelepen
Created November 28, 2019 08:39
Show Gist options
  • Save victor-shelepen/0a3b07f3e752598924e8ccb792a3aabc to your computer and use it in GitHub Desktop.
Save victor-shelepen/0a3b07f3e752598924e8ccb792a3aabc to your computer and use it in GitHub Desktop.
Asterisk AGI managment by NodeJS
const net = require('net');
const lib = require('./lib');
const server = net.createServer();
server.on('connection', async socket => {
const variables = await lib.dataAwaiting(socket);
console.log('variables', variables.toString());
const data1= await lib.request(socket, Buffer.from('ANSWER\n'));
const data2 = await lib.request(socket, Buffer.from('SAY DIGITS 321 X\n'));
const data3 = await lib.request(socket, Buffer.from('Hangup\n'));
await socket.end();
console.log(data1, data2, data3);
});
server.listen(3007);
/**
* Sends data and retrieves data to/from socket.
*
* @param socket
* @param data
* @returns {Promise<unknown>}
*/
const request = (socket, data) => {
return new Promise(async (resolve, reject) => {
socket.once('data', data => {
resolve(data);
});
socket.once('error', error => {
reject(error);
});
await socket.write(data);
});
};
/**
* Waits for data from the socket.
*
* @param socket
* @returns {Promise<unknown>}
*/
const dataAwaiting = (socket) => {
return new Promise((resolve) => {
socket.once('data', (data) => {
resolve(data);
});
});
};
module.exports = {
request, dataAwaiting
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment