Merge dev to main #1
78
index.js
78
index.js
|
|
@ -1,5 +1,5 @@
|
||||||
import dotenv from 'dotenv';
|
import dotenv from 'dotenv';
|
||||||
dotenv.config({quiet: true})
|
dotenv.config({ quiet: true })
|
||||||
import AMISocket from 'ami';
|
import AMISocket from 'ami';
|
||||||
const sock = new AMISocket({
|
const sock = new AMISocket({
|
||||||
connect: {
|
connect: {
|
||||||
|
|
@ -21,20 +21,78 @@ const cfTypes = {
|
||||||
CFU: "Unavailable",
|
CFU: "Unavailable",
|
||||||
}
|
}
|
||||||
|
|
||||||
sock.on('event', async (event) => {
|
const main = () => {
|
||||||
console.log(event)
|
var respData = [];
|
||||||
})
|
|
||||||
|
|
||||||
const startup = async () => {
|
// getList for CF, CFB, CFU
|
||||||
sock.connect().then(() => {
|
|
||||||
console.log(sock.amiVersion)
|
|
||||||
sock.getList({
|
sock.getList({
|
||||||
action: 'DBGetTree',
|
action: 'DBGetTree',
|
||||||
family: 'CF'
|
family: 'CF'
|
||||||
}).then(async (response) => {
|
}).then(async (response) => {
|
||||||
console.log(response)
|
// Responses are an array of objects. The first should always have eventlist: 'start', and last should have eventlist: 'complete'. Remove these, make an array of objects {key, val} based on the rest of the response objects.
|
||||||
})
|
let entries = response.filter(r => r.eventlist !== 'start' && r.eventlist !== 'complete').map(r => ({ key: r.key, val: r.val }));
|
||||||
})
|
for (let entry of entries) {
|
||||||
|
let [type, ext] = entry.key.split('/');
|
||||||
|
if (cfTypes[type]) {
|
||||||
|
respData.push({
|
||||||
|
extension: ext,
|
||||||
|
type: type,
|
||||||
|
target: entry.val
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}).then(() => {
|
||||||
|
sock.getList({
|
||||||
|
action: 'DBGetTree',
|
||||||
|
family: 'CFB'
|
||||||
|
}).then(async (response) => {
|
||||||
|
let entries = response.filter(r => r.eventlist !== 'start' && r.eventlist !== 'complete').map(r => ({ key: r.key, val: r.val }));
|
||||||
|
for (let entry of entries) {
|
||||||
|
let [type, ext] = entry.key.split('/');
|
||||||
|
if (cfTypes[type]) {
|
||||||
|
respData.push({
|
||||||
|
extension: ext,
|
||||||
|
type: type,
|
||||||
|
target: entry.val
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).then(() => {
|
||||||
|
sock.getList({
|
||||||
|
action: 'DBGetTree',
|
||||||
|
family: 'CFU'
|
||||||
|
}).then(async (response) => {
|
||||||
|
let entries = response.filter(r => r.eventlist !== 'start' && r.eventlist !== 'complete').map(r => ({ key: r.key, val: r.val }));
|
||||||
|
for (let entry of entries) {
|
||||||
|
let [type, ext] = entry.key.split('/');
|
||||||
|
if (cfTypes[type]) {
|
||||||
|
respData.push({
|
||||||
|
extension: ext,
|
||||||
|
type: type,
|
||||||
|
target: entry.val
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).then(() => {
|
||||||
|
console.log(`Found ${respData.length} call forwards.`);
|
||||||
|
for (let cf of respData) {
|
||||||
|
console.log(`Extension ${cf.extension} has ${cfTypes[cf.type]} call forward to ${cf.target}`);
|
||||||
|
}
|
||||||
|
setTimeout(main, 60000); // Repeat every 60 seconds
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const startup = async () => {
|
||||||
|
sock.connect().then(() => {
|
||||||
|
console.log(sock.amiVersion)
|
||||||
|
main();
|
||||||
|
}).catch((err) => {
|
||||||
|
console.error('Error connecting to AMI:', err);
|
||||||
|
setTimeout(startup, 10000); // Retry after 10 seconds
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
startup();
|
startup();
|
||||||
Loading…
Reference in a new issue