import dotenv from 'dotenv'; dotenv.config({ quiet: true }) import AMISocket from 'ami'; const sock = new AMISocket({ connect: { host: '127.0.0.1', port: 5038 }, credentials: { username: process.env.AMI_USER, secret: process.env.AMI_SECRET }, events: true }) import Discord from 'discord.js'; const hook = new Discord.WebhookClient({ url: process.env.DISCORD_WEBHOOK_URL }); const cfTypes = { CF: "Unconditional", CFB: "Busy", CFU: "Unavailable", } const main = () => { var respData = []; // getList for CF, CFB, CFU sock.getList({ action: 'DBGetTree', family: 'CF' }).then(async (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 })); console.log(entries) }).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('/').shift(); if (cfTypes[type]) { respData.push({ extension: ext, type: "CFB", 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();