22c22858d694aee1f7868dcc90bb8f286b8e1f70
[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 _0x3792=['callysquare','[LICENSE]\x20VOICE\x20IS\x20DISABLED','[LICENSE]','./server','listening','connection','xml2json','lodash','util','moment','../../config/environment','../../config/logger','../../config/license/util','./rpc','./mailRpc','./graph','./vertices','agi','defaults','127.0.0.1','nextTick','error','stack','log','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','info','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','message','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','calleridname','dnid','uniqueid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','callerid','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','agicommand','hasOwnProperty','retry','maxRetry','addVertex','omit','mxCell','isArray','length','source','value','getSquareProject','then','createSquareReport','catch','indexOf','agi_','substring','inspect','debug','variables','stringify','close','production','SQUAREROOT','start','root','joinAt','YYYY-MM-DD\x20HH:mm:ss','[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','traverseBFS','clear','vertex','VERTEX','gotoc','context','extension','priority','response','isUndefined','result','toString','agicommand\x20not\x20found','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','finally','[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','Project\x20%s\x20not\x20published','continueAt','Project\x20%s\x20not\x20found','getLicense','voice'];(function(_0x476a4e,_0x44ec5f){var _0x58e8e7=function(_0x33b19a){while(--_0x33b19a){_0x476a4e['push'](_0x476a4e['shift']());}};_0x58e8e7(++_0x44ec5f);}(_0x3792,0xbe));var _0x2379=function(_0xad5672,_0x5c612b){_0xad5672=_0xad5672-0x0;var _0x294745=_0x3792[_0xad5672];return _0x294745;};'use strict';var parser=require(_0x2379('0x0'));var _=require(_0x2379('0x1'));var syncho=require('syncho');var util=require(_0x2379('0x2'));var moment=require(_0x2379('0x3'));var config=require(_0x2379('0x4'));var logger=require(_0x2379('0x5'))('agi');var utilLicense=require(_0x2379('0x6'));var rpc=require(_0x2379('0x7'));var mailRpc=require(_0x2379('0x8'));var Graph=require(_0x2379('0x9'));var Vertices=require(_0x2379('0xa'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x2379('0xb')]=_[_0x2379('0xc')](config[_0x2379('0xb')],{'ip':_0x2379('0xd'),'port':0x11dd});function connectionHandler(_0xb519ed){process[_0x2379('0xe')](function(){syncho(function(){try{setChannelVariables(_0xb519ed);agiHandler(_0xb519ed);}catch(_0x3d5005){logger[_0x2379('0xf')](_0x3d5005[_0x2379('0x10')]);}});});}function listeningHandler(){console[_0x2379('0x11')](_0x2379('0x12'),config['agi'][_0x2379('0x13')]);logger[_0x2379('0x14')](util[_0x2379('0x15')](_0x2379('0x16'),config[_0x2379('0xb')]['ip'],config['agi'][_0x2379('0x13')]));}function errorHandler(_0xd4525b){if(_0xd4525b&&_0xd4525b['name']&&_0xd4525b[_0x2379('0x17')]){logger[_0x2379('0xf')](util[_0x2379('0x15')]('[%s]\x20%s',_0xd4525b['name'],_0xd4525b['message']));}else{logger[_0x2379('0xf')](util[_0x2379('0x15')]('[ERROR]\x20%s',_0xd4525b[_0x2379('0x10')]));}}function closeHandler(){logger[_0x2379('0x14')](util['format'](_0x2379('0x18'),this[_0x2379('0x19')],this[_0x2379('0x1a')],this['callerid'],this[_0x2379('0x1b')],this[_0x2379('0x1c')]));try{createSquareReport(this);}catch(_0x556875){logger[_0x2379('0xf')](_0x556875[_0x2379('0x10')]);}}function timeoutHandler(){logger[_0x2379('0x14')](util[_0x2379('0x15')](_0x2379('0x1d'),this[_0x2379('0x19')],this[_0x2379('0x1a')],this[_0x2379('0x1e')],this[_0x2379('0x1b')],this[_0x2379('0x1c')]));}function hangupHandler(){logger[_0x2379('0x14')](util[_0x2379('0x15')](_0x2379('0x1f'),this[_0x2379('0x19')],this[_0x2379('0x1a')],this[_0x2379('0x1e')],this[_0x2379('0x1b')],this['uniqueid']));this[_0x2379('0x20')]=!![];}function getRoot(_0x54e6f3){return parser[_0x2379('0x21')](_0x54e6f3,{'object':!![]})['mxGraphModel']['root'];}function addVertex(_0x281053,_0x5499e4,_0x5c5475){_0x5499e4[_0x2379('0x22')]=_0x5c5475;if(_0x5499e4[_0x2379('0x23')](_0x2379('0x24'))){_0x5499e4[_0x2379('0x25')]=parseInt(_0x5499e4['retry'],0xa);}_0x281053[_0x2379('0x26')](_[_0x2379('0x27')](_0x5499e4,_0x2379('0x28')));}function initGraph(_0x3ee76c,_0x70416a){var _0xb09ef3=new Graph();for(var _0x3acc2b in _0x3ee76c){if(_0x3ee76c['hasOwnProperty'](_0x3acc2b)){if(_[_0x2379('0x29')](_0x3ee76c[_0x3acc2b])){for(var _0x395f72=0x0;_0x395f72<_0x3ee76c[_0x3acc2b][_0x2379('0x2a')];_0x395f72+=0x1){addVertex(_0xb09ef3,_0x3ee76c[_0x3acc2b][_0x395f72],_0x3acc2b);}}else{addVertex(_0xb09ef3,_0x3ee76c[_0x3acc2b],_0x3acc2b);}}}for(var _0x5b33f1=0x0;_0x5b33f1<_0x70416a[_0x2379('0x2a')];_0x5b33f1+=0x1){if(_0x70416a[_0x5b33f1][_0x2379('0x2b')]&&_0x70416a[_0x5b33f1]['target']){_0xb09ef3['addEdge'](_0x70416a[_0x5b33f1]['source'],_0x70416a[_0x5b33f1]['target'],_0x70416a[_0x5b33f1][_0x2379('0x2c')]);}}return _0xb09ef3;}function getSquareProject(_0x4100b5,_0x2c66d4){rpc[_0x2379('0x2d')](_0x4100b5)[_0x2379('0x2e')](function(_0x52fd44){_0x2c66d4(null,_0x52fd44);})['catch'](function(_0x165f8a){_0x2c66d4(null,_0x165f8a);});}function createSquareReport(_0x44e705,_0x372bc2){rpc[_0x2379('0x2f')](_0x44e705)['then'](function(_0x5bb09f){if(_0x372bc2){_0x372bc2(null,_0x5bb09f);}})[_0x2379('0x30')](function(_0x4d2fa2){if(_0x372bc2){_0x372bc2(null,_0x4d2fa2);}});}function setChannelVariables(_0x21c263){for(var _0x596b0a in _0x21c263){if(_0x21c263[_0x2379('0x23')](_0x596b0a)){if(_0x596b0a[_0x2379('0x31')](_0x2379('0x32'))===0x0){_0x21c263[_0x596b0a[_0x2379('0x33')](0x4)]=_0x21c263[_0x596b0a];delete _0x21c263[_0x596b0a];}}}}function getLogFromObject(_0x1d5fa1){return util[_0x2379('0x34')](_0x1d5fa1,{'showHidden':![],'depth':null});}function agiHandler(_0x23679a){var _0x4a679e,_0x10800d,_0x3f2a05,_0x1644c0,_0x506933;logger[_0x2379('0x35')](_0x2379('0x36'),JSON[_0x2379('0x37')](_0x23679a,null,0x2));logger['info'](util[_0x2379('0x15')]('[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x23679a['arg_1'],_0x23679a[_0x2379('0x1a')],_0x23679a['callerid'],_0x23679a[_0x2379('0x1b')],_0x23679a[_0x2379('0x1c')]));_0x23679a['on']('error',errorHandler);_0x23679a['on'](_0x2379('0x38'),closeHandler);_0x23679a['on']('timeout',timeoutHandler);_0x23679a[_0x2379('0x20')]=![];_0x23679a['on']('hangup',hangupHandler);var _0x1fc1e3=getSquareProject['sync'](null,_0x23679a[_0x2379('0x19')]);if(_0x1fc1e3){if(_0x1fc1e3[_0x2379('0x39')]){_0x4a679e=getRoot(_0x1fc1e3[_0x2379('0x39')]);console[_0x2379('0x11')](_0x2379('0x3a'),_0x4a679e);if(_0x4a679e&&_0x4a679e[_0x2379('0x3b')]){logger[_0x2379('0x35')](_0x2379('0x3c'),JSON[_0x2379('0x37')](_0x4a679e,null,0x2));_0x23679a[_0x2379('0x3d')]=moment()['format'](_0x2379('0x3e'));_0x10800d=initGraph(_[_0x2379('0x27')](_0x4a679e,'mxCell'),_0x4a679e['mxCell']);_0x3f2a05=new Vertices(_0x23679a,rpc,mailRpc);console[_0x2379('0x11')]('vertices',_0x3f2a05);logger[_0x2379('0x14')](util[_0x2379('0x15')](_0x2379('0x3f'),_0x23679a[_0x2379('0x19')],_0x23679a['calleridname'],_0x23679a[_0x2379('0x1e')],_0x23679a[_0x2379('0x1b')],_0x23679a[_0x2379('0x1c')]));console[_0x2379('0x11')]('LOOP\x20through\x20graph');_0x10800d[_0x2379('0x40')](_0x4a679e[_0x2379('0x3b')]['id'],function(_0x11d76d){try{_0x11d76d=_0x3f2a05[_0x2379('0x41')](_0x11d76d);logger[_0x2379('0x35')](_0x2379('0x42'),JSON[_0x2379('0x37')](_0x11d76d,null,0x2));console['log'](_0x2379('0x43'),_0x11d76d);if(_0x11d76d[_0x2379('0x22')]===_0x2379('0x44')){logger['info']('gotoc\x20block\x20stop\x20traverse\x20BFS');_0x23679a[_0x2379('0x45')]=_0x11d76d[_0x2379('0x45')]||_0x23679a[_0x2379('0x45')];_0x23679a[_0x2379('0x46')]=_0x11d76d[_0x2379('0x46')];_0x23679a[_0x2379('0x47')]=_0x11d76d[_0x2379('0x47')]?_0x11d76d['priority']-0x1:0x1;return null;}else if(_0x11d76d&&_0x3f2a05[_0x11d76d[_0x2379('0x22')]]){_0x506933=_0x3f2a05[_0x11d76d[_0x2379('0x22')]](_0x11d76d);console[_0x2379('0x11')]('vresponse',_0x506933);logger['info'](_0x2379('0x48'),JSON[_0x2379('0x37')](_0x506933,null,0x2));if(_0x506933&&_0x506933['code']===AGI_CODE_SUCCESS&&_0x506933['result']!==AGI_RESULT_ERROR&&!_0x23679a['evtHangup']){logger[_0x2379('0x35')]('response',getLogFromObject(_0x506933));return _[_0x2379('0x49')](_0x506933['result'])?null:_0x506933[_0x2379('0x4a')][_0x2379('0x4b')]();}else{logger[_0x2379('0xf')](_0x2379('0x48'),getLogFromObject(_0x506933));return null;}}else{logger['error'](_0x2379('0x4c'));return null;}}catch(_0x565d94){logger[_0x2379('0xf')](_0x565d94[_0x2379('0x10')]);return null;}});if(_0x4a679e['finally']){logger[_0x2379('0x14')](util['format'](_0x2379('0x4d'),_0x23679a[_0x2379('0x19')],_0x23679a[_0x2379('0x1a')],_0x23679a[_0x2379('0x1e')],_0x23679a['dnid'],_0x23679a[_0x2379('0x1c')]));_0x10800d['traverseBFS'](_0x4a679e[_0x2379('0x4e')]['id'],function(_0x3aaede){try{_0x3aaede=_0x3f2a05[_0x2379('0x41')](_0x3aaede);logger[_0x2379('0x35')](_0x2379('0x42'),JSON[_0x2379('0x37')](_0x3aaede,null,0x2));if(_0x3aaede&&_0x3f2a05[_0x3aaede[_0x2379('0x22')]]){_0x506933=_0x3f2a05[_0x3aaede[_0x2379('0x22')]](_0x3aaede);if(_0x506933){logger[_0x2379('0x35')](_0x2379('0x48'),getLogFromObject(_0x506933));return _[_0x2379('0x49')](_0x506933[_0x2379('0x4a')])?null:_0x506933['result'][_0x2379('0x4b')]();}else{logger[_0x2379('0xf')](_0x2379('0x48'),getLogFromObject(_0x506933));return null;}}else{logger[_0x2379('0xf')]('agicommand\x20not\x20found');return null;}}catch(_0x5cd36b){logger[_0x2379('0xf')](_0x5cd36b['stack']);return null;}});}logger[_0x2379('0x14')](util[_0x2379('0x15')](_0x2379('0x4f'),_0x23679a[_0x2379('0x19')],_0x23679a['calleridname'],_0x23679a[_0x2379('0x1e')],_0x23679a[_0x2379('0x1b')],_0x23679a[_0x2379('0x1c')]));logger['info'](util[_0x2379('0x15')](_0x2379('0x50'),_0x23679a['context'],_0x23679a[_0x2379('0x46')],parseInt(_0x23679a[_0x2379('0x47')],0xa)+0x1));_0x23679a['continueAt'](_0x23679a[_0x2379('0x45')],_0x23679a['extension'],parseInt(_0x23679a['priority'],0xa)+0x1);_0x23679a['close']();}}else{logger['error'](util[_0x2379('0x15')](_0x2379('0x51'),_0x23679a[_0x2379('0x19')]));_0x23679a[_0x2379('0x52')](_0x23679a[_0x2379('0x45')],_0x23679a[_0x2379('0x46')],parseInt(_0x23679a[_0x2379('0x47')],0xa)+0x1);_0x23679a[_0x2379('0x38')]();}}else{logger[_0x2379('0xf')](util[_0x2379('0x15')](_0x2379('0x53'),_0x23679a['arg_1']));_0x23679a[_0x2379('0x52')](_0x23679a[_0x2379('0x45')],_0x23679a[_0x2379('0x46')],parseInt(_0x23679a['priority'],0xa)+0x1);_0x23679a['close']();}}function main(){var _0x383b6d;return utilLicense[_0x2379('0x54')]()[_0x2379('0x2e')](function(_0x145f4d){if(_0x145f4d){if(_0x145f4d[_0x2379('0x55')]){if(_0x145f4d['callysquare']&&_0x145f4d['callysquare']>0x0){logger[_0x2379('0x14')](util[_0x2379('0x15')]('[LICENSE]\x20CHANNELS:\x20%s',_0x145f4d[_0x2379('0x56')]));_0x383b6d=_0x145f4d[_0x2379('0x56')];}else{logger[_0x2379('0x14')]('[LICENSE]\x20CHANNELS:\x20UNLIMITED');}}else{logger[_0x2379('0x14')](_0x2379('0x57'));_0x383b6d=-0x1;}}})[_0x2379('0x30')](function(_0x127d77){logger[_0x2379('0xf')](_0x2379('0x58'),_0x127d77[_0x2379('0x10')]);})[_0x2379('0x4e')](function(){var _0x441b38=require(_0x2379('0x59'))(config['agi'][_0x2379('0x13')],config['agi']['ip'],_0x383b6d);_0x441b38['on']('error',errorHandler);_0x441b38['on'](_0x2379('0x5a'),listeningHandler);_0x441b38['on'](_0x2379('0x5b'),connectionHandler);_0x441b38['on']('close',closeHandler);});}main();