acdc9820938d0e544be588bf027a9def5a60d2ef
[motion2.git] / server / services / agi / index.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x4268=['hangup','sync','production','start','joinAt','YYYY-MM-DD\x20HH:mm:ss','traverseBFS','clear','vertex','gotoc','context','extension','priority','response','code','isUndefined','result','toString','agicommand\x20not\x20found','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','[END]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','[GOTO]\x20context:\x20%s\x20extension:\x20%s\x20priority:\x20%s','continueAt','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','voice','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]','./server','listening','connection','xml2json','lodash','syncho','util','../../config/environment','../../config/logger','agi','./rpc','./mailRpc','./graph','./vertices','defaults','127.0.0.1','error','stack','log','port','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','message','[%s]\x20%s','[ERROR]\x20%s','info','callerid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','dnid','uniqueid','evtHangup','toJson','mxGraphModel','root','agicommand','hasOwnProperty','retry','maxRetry','omit','mxCell','isArray','length','source','target','catch','createSquareReport','then','indexOf','debug','stringify','calleridname','close'];(function(_0x43b08,_0x15f967){var _0x5e05f4=function(_0x4bb0cb){while(--_0x4bb0cb){_0x43b08['push'](_0x43b08['shift']());}};_0x5e05f4(++_0x15f967);}(_0x4268,0x77));var _0x8426=function(_0x23afe6,_0xadb445){_0x23afe6=_0x23afe6-0x0;var _0x26751f=_0x4268[_0x23afe6];return _0x26751f;};'use strict';var parser=require(_0x8426('0x0'));var _=require(_0x8426('0x1'));var syncho=require(_0x8426('0x2'));var util=require(_0x8426('0x3'));var moment=require('moment');var config=require(_0x8426('0x4'));var logger=require(_0x8426('0x5'))(_0x8426('0x6'));var utilLicense=require('../../config/license/util');var rpc=require(_0x8426('0x7'));var mailRpc=require(_0x8426('0x8'));var Graph=require(_0x8426('0x9'));var Vertices=require(_0x8426('0xa'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x8426('0x6')]=_[_0x8426('0xb')](config[_0x8426('0x6')],{'ip':_0x8426('0xc'),'port':0x11dd});function connectionHandler(_0x5b0e75){process['nextTick'](function(){syncho(function(){try{setChannelVariables(_0x5b0e75);agiHandler(_0x5b0e75);}catch(_0xb8aa1f){logger[_0x8426('0xd')](_0xb8aa1f[_0x8426('0xe')]);}});});}function listeningHandler(){console[_0x8426('0xf')]('Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!',config[_0x8426('0x6')][_0x8426('0x10')]);logger['info'](util[_0x8426('0x11')](_0x8426('0x12'),config[_0x8426('0x6')]['ip'],config[_0x8426('0x6')][_0x8426('0x10')]));}function errorHandler(_0x4ec2c3){if(_0x4ec2c3&&_0x4ec2c3[_0x8426('0x13')]&&_0x4ec2c3[_0x8426('0x14')]){logger['error'](util[_0x8426('0x11')](_0x8426('0x15'),_0x4ec2c3[_0x8426('0x13')],_0x4ec2c3[_0x8426('0x14')]));}else{logger[_0x8426('0xd')](util['format'](_0x8426('0x16'),_0x4ec2c3[_0x8426('0xe')]));}}function closeHandler(){logger[_0x8426('0x17')](util['format']('[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this['arg_1'],this['calleridname'],this[_0x8426('0x18')],this['dnid'],this['uniqueid']));try{createSquareReport(this);}catch(_0x2d4d76){logger[_0x8426('0xd')](_0x2d4d76[_0x8426('0xe')]);}}function timeoutHandler(){logger[_0x8426('0x17')](util[_0x8426('0x11')](_0x8426('0x19'),this[_0x8426('0x1a')],this['calleridname'],this[_0x8426('0x18')],this[_0x8426('0x1b')],this[_0x8426('0x1c')]));}function hangupHandler(){logger['info'](util[_0x8426('0x11')]('[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x8426('0x1a')],this['calleridname'],this['callerid'],this[_0x8426('0x1b')],this[_0x8426('0x1c')]));this[_0x8426('0x1d')]=!![];}function getRoot(_0x2800f5){return parser[_0x8426('0x1e')](_0x2800f5,{'object':!![]})[_0x8426('0x1f')][_0x8426('0x20')];}function addVertex(_0x4273a8,_0x2853da,_0x17fa7f){_0x2853da[_0x8426('0x21')]=_0x17fa7f;if(_0x2853da[_0x8426('0x22')](_0x8426('0x23'))){_0x2853da[_0x8426('0x24')]=parseInt(_0x2853da[_0x8426('0x23')],0xa);}_0x4273a8['addVertex'](_[_0x8426('0x25')](_0x2853da,_0x8426('0x26')));}function initGraph(_0x27f196,_0x2b6f89){var _0x34d779=new Graph();for(var _0x24c793 in _0x27f196){if(_0x27f196['hasOwnProperty'](_0x24c793)){if(_[_0x8426('0x27')](_0x27f196[_0x24c793])){for(var _0x430539=0x0;_0x430539<_0x27f196[_0x24c793]['length'];_0x430539+=0x1){addVertex(_0x34d779,_0x27f196[_0x24c793][_0x430539],_0x24c793);}}else{addVertex(_0x34d779,_0x27f196[_0x24c793],_0x24c793);}}}for(var _0x5748bd=0x0;_0x5748bd<_0x2b6f89[_0x8426('0x28')];_0x5748bd+=0x1){if(_0x2b6f89[_0x5748bd][_0x8426('0x29')]&&_0x2b6f89[_0x5748bd][_0x8426('0x2a')]){_0x34d779['addEdge'](_0x2b6f89[_0x5748bd][_0x8426('0x29')],_0x2b6f89[_0x5748bd][_0x8426('0x2a')],_0x2b6f89[_0x5748bd]['value']);}}return _0x34d779;}function getSquareProject(_0x5acc51,_0x255cd6){rpc['getSquareProject'](_0x5acc51)['then'](function(_0x4b9140){_0x255cd6(null,_0x4b9140);})[_0x8426('0x2b')](function(_0x3ae3d5){_0x255cd6(null,_0x3ae3d5);});}function createSquareReport(_0x5d65ed,_0x14978d){rpc[_0x8426('0x2c')](_0x5d65ed)[_0x8426('0x2d')](function(_0x359277){if(_0x14978d){_0x14978d(null,_0x359277);}})[_0x8426('0x2b')](function(_0x3d1591){if(_0x14978d){_0x14978d(null,_0x3d1591);}});}function setChannelVariables(_0x16cd24){for(var _0x17f07d in _0x16cd24){if(_0x16cd24['hasOwnProperty'](_0x17f07d)){if(_0x17f07d[_0x8426('0x2e')]('agi_')===0x0){_0x16cd24[_0x17f07d['substring'](0x4)]=_0x16cd24[_0x17f07d];delete _0x16cd24[_0x17f07d];}}}}function getLogFromObject(_0x21b526){return util['inspect'](_0x21b526,{'showHidden':![],'depth':null});}function agiHandler(_0x457c51){var _0x4fa165,_0x5cd62b,_0x26b2ed,_0x1d0cf5,_0x4f2dec;logger[_0x8426('0x2f')]('variables',JSON[_0x8426('0x30')](_0x457c51,null,0x2));logger[_0x8426('0x17')](util[_0x8426('0x11')]('[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x457c51[_0x8426('0x1a')],_0x457c51[_0x8426('0x31')],_0x457c51[_0x8426('0x18')],_0x457c51[_0x8426('0x1b')],_0x457c51[_0x8426('0x1c')]));_0x457c51['on'](_0x8426('0xd'),errorHandler);_0x457c51['on'](_0x8426('0x32'),closeHandler);_0x457c51['on']('timeout',timeoutHandler);_0x457c51['evtHangup']=![];_0x457c51['on'](_0x8426('0x33'),hangupHandler);var _0xc5e689=getSquareProject[_0x8426('0x34')](null,_0x457c51[_0x8426('0x1a')]);if(_0xc5e689){if(_0xc5e689[_0x8426('0x35')]){_0x4fa165=getRoot(_0xc5e689[_0x8426('0x35')]);if(_0x4fa165&&_0x4fa165[_0x8426('0x36')]){logger[_0x8426('0x2f')](_0x8426('0x20'),JSON[_0x8426('0x30')](_0x4fa165,null,0x2));_0x457c51[_0x8426('0x37')]=moment()[_0x8426('0x11')](_0x8426('0x38'));_0x5cd62b=initGraph(_['omit'](_0x4fa165,'mxCell'),_0x4fa165[_0x8426('0x26')]);_0x26b2ed=new Vertices(_0x457c51,rpc,mailRpc);logger[_0x8426('0x17')](util[_0x8426('0x11')]('[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x457c51[_0x8426('0x1a')],_0x457c51[_0x8426('0x31')],_0x457c51['callerid'],_0x457c51[_0x8426('0x1b')],_0x457c51[_0x8426('0x1c')]));_0x5cd62b[_0x8426('0x39')](_0x4fa165[_0x8426('0x36')]['id'],function(_0x4cff71){try{_0x4cff71=_0x26b2ed[_0x8426('0x3a')](_0x4cff71);logger['debug'](_0x8426('0x3b'),JSON[_0x8426('0x30')](_0x4cff71,null,0x2));if(_0x4cff71[_0x8426('0x21')]===_0x8426('0x3c')){logger[_0x8426('0x17')]('gotoc\x20block\x20stop\x20traverse\x20BFS');_0x457c51[_0x8426('0x3d')]=_0x4cff71[_0x8426('0x3d')]||_0x457c51[_0x8426('0x3d')];_0x457c51[_0x8426('0x3e')]=_0x4cff71[_0x8426('0x3e')];_0x457c51[_0x8426('0x3f')]=_0x4cff71[_0x8426('0x3f')]?_0x4cff71[_0x8426('0x3f')]-0x1:0x1;return null;}else if(_0x4cff71&&_0x26b2ed[_0x4cff71['agicommand']]){_0x4f2dec=_0x26b2ed[_0x4cff71['agicommand']](_0x4cff71);logger['info'](_0x8426('0x40'),JSON['stringify'](_0x4f2dec,null,0x2));if(_0x4f2dec&&_0x4f2dec[_0x8426('0x41')]===AGI_CODE_SUCCESS&&_0x4f2dec['result']!==AGI_RESULT_ERROR&&!_0x457c51[_0x8426('0x1d')]){logger['debug'](_0x8426('0x40'),getLogFromObject(_0x4f2dec));return _[_0x8426('0x42')](_0x4f2dec[_0x8426('0x43')])?null:_0x4f2dec['result'][_0x8426('0x44')]();}else{logger[_0x8426('0xd')](_0x8426('0x40'),getLogFromObject(_0x4f2dec));return null;}}else{logger[_0x8426('0xd')](_0x8426('0x45'));return null;}}catch(_0x55b2e4){logger[_0x8426('0xd')](_0x55b2e4['stack']);return null;}});if(_0x4fa165[_0x8426('0x46')]){logger['info'](util[_0x8426('0x11')](_0x8426('0x47'),_0x457c51['arg_1'],_0x457c51[_0x8426('0x31')],_0x457c51[_0x8426('0x18')],_0x457c51[_0x8426('0x1b')],_0x457c51[_0x8426('0x1c')]));_0x5cd62b['traverseBFS'](_0x4fa165[_0x8426('0x46')]['id'],function(_0x4b644e){try{_0x4b644e=_0x26b2ed['clear'](_0x4b644e);logger[_0x8426('0x2f')](_0x8426('0x3b'),JSON[_0x8426('0x30')](_0x4b644e,null,0x2));if(_0x4b644e&&_0x26b2ed[_0x4b644e['agicommand']]){_0x4f2dec=_0x26b2ed[_0x4b644e[_0x8426('0x21')]](_0x4b644e);if(_0x4f2dec){logger[_0x8426('0x2f')](_0x8426('0x40'),getLogFromObject(_0x4f2dec));return _[_0x8426('0x42')](_0x4f2dec[_0x8426('0x43')])?null:_0x4f2dec['result'][_0x8426('0x44')]();}else{logger[_0x8426('0xd')](_0x8426('0x40'),getLogFromObject(_0x4f2dec));return null;}}else{logger['error'](_0x8426('0x45'));return null;}}catch(_0x24c7c0){logger['error'](_0x24c7c0[_0x8426('0xe')]);return null;}});}logger[_0x8426('0x17')](util[_0x8426('0x11')](_0x8426('0x48'),_0x457c51[_0x8426('0x1a')],_0x457c51['calleridname'],_0x457c51[_0x8426('0x18')],_0x457c51[_0x8426('0x1b')],_0x457c51['uniqueid']));logger[_0x8426('0x17')](util[_0x8426('0x11')](_0x8426('0x49'),_0x457c51[_0x8426('0x3d')],_0x457c51['extension'],parseInt(_0x457c51[_0x8426('0x3f')],0xa)+0x1));_0x457c51[_0x8426('0x4a')](_0x457c51[_0x8426('0x3d')],_0x457c51['extension'],parseInt(_0x457c51[_0x8426('0x3f')],0xa)+0x1);_0x457c51[_0x8426('0x32')]();}}else{logger['error'](util[_0x8426('0x11')](_0x8426('0x4b'),_0x457c51[_0x8426('0x1a')]));_0x457c51[_0x8426('0x4a')](_0x457c51[_0x8426('0x3d')],_0x457c51[_0x8426('0x3e')],parseInt(_0x457c51[_0x8426('0x3f')],0xa)+0x1);_0x457c51[_0x8426('0x32')]();}}else{logger[_0x8426('0xd')](util[_0x8426('0x11')](_0x8426('0x4c'),_0x457c51[_0x8426('0x1a')]));_0x457c51[_0x8426('0x4a')](_0x457c51[_0x8426('0x3d')],_0x457c51[_0x8426('0x3e')],parseInt(_0x457c51['priority'],0xa)+0x1);_0x457c51[_0x8426('0x32')]();}}function main(){var _0x4214c7;return utilLicense['getLicense']()[_0x8426('0x2d')](function(_0x274196){if(_0x274196){if(_0x274196[_0x8426('0x4d')]){if(_0x274196[_0x8426('0x4e')]&&_0x274196[_0x8426('0x4e')]>0x0){logger['info'](util[_0x8426('0x11')](_0x8426('0x4f'),_0x274196[_0x8426('0x4e')]));_0x4214c7=_0x274196[_0x8426('0x4e')];}else{logger[_0x8426('0x17')](_0x8426('0x50'));}}else{logger[_0x8426('0x17')]('[LICENSE]\x20VOICE\x20IS\x20DISABLED');_0x4214c7=-0x1;}}})[_0x8426('0x2b')](function(_0x1d0e34){logger[_0x8426('0xd')](_0x8426('0x51'),_0x1d0e34[_0x8426('0xe')]);})[_0x8426('0x46')](function(){var _0x332af7=require(_0x8426('0x52'))(config[_0x8426('0x6')][_0x8426('0x10')],config['agi']['ip'],_0x4214c7);_0x332af7['on'](_0x8426('0xd'),errorHandler);_0x332af7['on'](_0x8426('0x53'),listeningHandler);_0x332af7['on'](_0x8426('0x54'),connectionHandler);_0x332af7['on']('close',closeHandler);});}main();