c34be0d964ead3c7f13591fb94ae3b071cdee7d3
[motion.git] / server / config / ami / acw.js
1 var moment = require('moment');
2 var asteriskManager = null;
3
4
5 function ACW(ami) {
6   console.log('ACW Initialization...');
7   asteriskManager = ami;
8 }
9
10 ACW.prototype.agentcomplete = function(evt) {
11   if (asteriskManager && asteriskManager.isConnected()) {
12     if (evt.interface === 'SIP/massimiliano.bungaro') {
13       asteriskManager.action({
14         action: 'QueuePause',
15         interface: evt.interface,
16         paused: true,
17         reason: 'UNAVAILABLE BY ACW'
18       }, function(err, res) {
19         if (err) {
20           console.error(err);
21           return;
22         }
23         console.log('PAUSE ACW in all queue for the agent ' + evt.interface);
24         asteriskManager.action({
25           action: 'QueuePause',
26           interface: evt.interface,
27           queue: evt.queue,
28           paused: true,
29           reason: 'ACW'
30         }, function(err, res) {
31           if (err) {
32             console.error(err);
33             return;
34           }
35           console.log('SINGLE PAUSE ACW in ' + evt.queue + ' for the agent ' + evt.interface);
36           findAndUpdateFlag(evt);
37           setTimeout(function() {
38             asteriskManager.action({
39               action: 'QueuePause',
40               interface: evt.interface,
41               paused: false,
42             }, function(err, res) {
43               if (err) {
44                 console.error(err)
45               }
46               console.log('UNPAUSE ACW in all queue for the agent ' + evt.interface);
47             });
48           }, 5000);
49         });
50       });
51     }
52   }
53 }
54
55 ACW.prototype.agentpause = function(evt) {
56   if ((evt.reason === 'ACW' || evt.reason === 'UNAVAILABLE BY ACW') && evt.paused === '1') {
57     return;
58   }
59
60   // findAndUpdateTime(evt);
61 }
62
63 function findAndUpdateTime(evt) {
64   var agent = require('../../models').ReportAgent;
65   agent
66     .findAll({
67       where: {
68         agentcomplete: true,
69         agentacw: true,
70         acwtime: null,
71         queue: evt.queue,
72         interface: evt.interface
73       }
74     })
75     .then(function(agents) {
76       if (agents.length > 0) {
77         var agent = agents[agents.length - 1]; // get last inserted agent
78         var diff = moment().diff(agent.agentcompleteAt, 'seconds'); // diff seconds now - completeAt
79         agent
80           .updateAttributes({
81             acwtime: diff
82           })
83           .then(function(res) {
84             console.log('[acw] agent acw ' + res.membername + ' updated seconds ' + diff + ' ACW in queue ' + res.queue);
85           })
86           .catch(function(err) {
87             console.error('[acw] agent acw  ' + err);
88           });
89       } else {
90         console.error(new Error('[acw] agent acw  not found!'));
91       }
92     })
93     .catch(function(err) {
94       console.error('[acw] agent acw  ' + err);
95     });
96 }
97
98 function findAndUpdateFlag(evt) {
99
100   var agent = require('../../models').ReportAgent;
101   agent
102     .update({
103       agentacw: true
104     }, {
105       where: {
106         uniqueid: evt.uniqueid,
107         destuniqueid: evt.destuniqueid
108       }
109     })
110     .then(function(agent) {
111       console.log('[acw] agent acw updated');
112     })
113     .catch(function(err) {
114       console.error('[acw] agent acw update error:  ' + err);
115     });
116 }
117
118 module.exports = ACW;