8ebe57cffe25caeb03a75229069bfbceb0dc6c21
[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 _0x7a59=['[END]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','Project\x20%s\x20not\x20published','continueAt','voice','callysquare','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','[LICENSE]','listening','connection','xml2json','util','moment','../../config/environment','../../config/logger','agi','./rpc','./mailRpc','./graph','defaults','127.0.0.1','nextTick','stack','log','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','format','[%s]\x20%s','[ERROR]\x20%s','info','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','callerid','uniqueid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','calleridname','dnid','evtHangup','toJson','root','agicommand','hasOwnProperty','retry','maxRetry','addVertex','omit','mxCell','isArray','length','target','addEdge','value','then','catch','createSquareReport','indexOf','substring','inspect','debug','variables','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','error','close','timeout','hangup','sync','production','start','stringify','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','gotoc','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','code','result','isUndefined','toString','agicommand\x20not\x20found','finally','vertex'];(function(_0x339f0e,_0x3a66a6){var _0x3a7321=function(_0x15c671){while(--_0x15c671){_0x339f0e['push'](_0x339f0e['shift']());}};_0x3a7321(++_0x3a66a6);}(_0x7a59,0x16e));var _0x97a5=function(_0x5a2285,_0x3212d1){_0x5a2285=_0x5a2285-0x0;var _0x48f6ed=_0x7a59[_0x5a2285];return _0x48f6ed;};'use strict';var parser=require(_0x97a5('0x0'));var _=require('lodash');var syncho=require('syncho');var util=require(_0x97a5('0x1'));var moment=require(_0x97a5('0x2'));var config=require(_0x97a5('0x3'));var logger=require(_0x97a5('0x4'))(_0x97a5('0x5'));var utilLicense=require('../../config/license/util');var rpc=require(_0x97a5('0x6'));var mailRpc=require(_0x97a5('0x7'));var Graph=require(_0x97a5('0x8'));var Vertices=require('./vertices');var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x97a5('0x5')]=_[_0x97a5('0x9')](config[_0x97a5('0x5')],{'ip':_0x97a5('0xa'),'port':0x11dd});function connectionHandler(_0x27e8a6){process[_0x97a5('0xb')](function(){syncho(function(){try{setChannelVariables(_0x27e8a6);agiHandler(_0x27e8a6);}catch(_0x260690){logger['error'](_0x260690[_0x97a5('0xc')]);}});});}function listeningHandler(){console[_0x97a5('0xd')](_0x97a5('0xe'),config[_0x97a5('0x5')][_0x97a5('0xf')]);logger['info'](util['format'](_0x97a5('0x10'),config[_0x97a5('0x5')]['ip'],config[_0x97a5('0x5')]['port']));}function errorHandler(_0x5c6143){if(_0x5c6143&&_0x5c6143[_0x97a5('0x11')]&&_0x5c6143['message']){logger['error'](util[_0x97a5('0x12')](_0x97a5('0x13'),_0x5c6143['name'],_0x5c6143['message']));}else{logger['error'](util['format'](_0x97a5('0x14'),_0x5c6143[_0x97a5('0xc')]));}}function closeHandler(){logger[_0x97a5('0x15')](util['format'](_0x97a5('0x16'),this[_0x97a5('0x17')],this['calleridname'],this[_0x97a5('0x18')],this['dnid'],this[_0x97a5('0x19')]));try{createSquareReport(this);}catch(_0x55071b){logger['error'](_0x55071b['stack']);}}function timeoutHandler(){logger[_0x97a5('0x15')](util['format'](_0x97a5('0x1a'),this[_0x97a5('0x17')],this[_0x97a5('0x1b')],this[_0x97a5('0x18')],this['dnid'],this['uniqueid']));}function hangupHandler(){logger[_0x97a5('0x15')](util[_0x97a5('0x12')]('[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this['arg_1'],this[_0x97a5('0x1b')],this[_0x97a5('0x18')],this[_0x97a5('0x1c')],this['uniqueid']));this[_0x97a5('0x1d')]=!![];}function getRoot(_0x3a5849){return parser[_0x97a5('0x1e')](_0x3a5849,{'object':!![]})['mxGraphModel'][_0x97a5('0x1f')];}function addVertex(_0x33d6da,_0x4e2074,_0x5e731e){_0x4e2074[_0x97a5('0x20')]=_0x5e731e;if(_0x4e2074[_0x97a5('0x21')](_0x97a5('0x22'))){_0x4e2074[_0x97a5('0x23')]=parseInt(_0x4e2074[_0x97a5('0x22')],0xa);}_0x33d6da[_0x97a5('0x24')](_[_0x97a5('0x25')](_0x4e2074,_0x97a5('0x26')));}function initGraph(_0x5dc52f,_0x2038dd){var _0x46ee45=new Graph();for(var _0x2ca97c in _0x5dc52f){if(_0x5dc52f[_0x97a5('0x21')](_0x2ca97c)){if(_[_0x97a5('0x27')](_0x5dc52f[_0x2ca97c])){for(var _0x46846f=0x0;_0x46846f<_0x5dc52f[_0x2ca97c]['length'];_0x46846f+=0x1){addVertex(_0x46ee45,_0x5dc52f[_0x2ca97c][_0x46846f],_0x2ca97c);}}else{addVertex(_0x46ee45,_0x5dc52f[_0x2ca97c],_0x2ca97c);}}}for(var _0x1dcf5f=0x0;_0x1dcf5f<_0x2038dd[_0x97a5('0x28')];_0x1dcf5f+=0x1){if(_0x2038dd[_0x1dcf5f]['source']&&_0x2038dd[_0x1dcf5f][_0x97a5('0x29')]){_0x46ee45[_0x97a5('0x2a')](_0x2038dd[_0x1dcf5f]['source'],_0x2038dd[_0x1dcf5f][_0x97a5('0x29')],_0x2038dd[_0x1dcf5f][_0x97a5('0x2b')]);}}return _0x46ee45;}function getSquareProject(_0x5c1c67,_0x2546ee){rpc['getSquareProject'](_0x5c1c67)[_0x97a5('0x2c')](function(_0x3c5d02){_0x2546ee(null,_0x3c5d02);})[_0x97a5('0x2d')](function(_0x1188d4){_0x2546ee(null,_0x1188d4);});}function createSquareReport(_0x4845ed,_0x524ee8){rpc[_0x97a5('0x2e')](_0x4845ed)[_0x97a5('0x2c')](function(_0x418498){if(_0x524ee8){_0x524ee8(null,_0x418498);}})['catch'](function(_0x3e2a58){if(_0x524ee8){_0x524ee8(null,_0x3e2a58);}});}function setChannelVariables(_0x1da16b){for(var _0x5adcaf in _0x1da16b){if(_0x1da16b[_0x97a5('0x21')](_0x5adcaf)){if(_0x5adcaf[_0x97a5('0x2f')]('agi_')===0x0){_0x1da16b[_0x5adcaf[_0x97a5('0x30')](0x4)]=_0x1da16b[_0x5adcaf];delete _0x1da16b[_0x5adcaf];}}}}function getLogFromObject(_0x96de29){return util[_0x97a5('0x31')](_0x96de29,{'showHidden':![],'depth':null});}function agiHandler(_0x4a2b5d){var _0x2fe8a2,_0x427459,_0x347ad5,_0xcc9d91,_0x4cf1ff;logger[_0x97a5('0x32')](_0x97a5('0x33'),JSON['stringify'](_0x4a2b5d,null,0x2));logger[_0x97a5('0x15')](util[_0x97a5('0x12')](_0x97a5('0x34'),_0x4a2b5d[_0x97a5('0x17')],_0x4a2b5d[_0x97a5('0x1b')],_0x4a2b5d[_0x97a5('0x18')],_0x4a2b5d[_0x97a5('0x1c')],_0x4a2b5d[_0x97a5('0x19')]));_0x4a2b5d['on'](_0x97a5('0x35'),errorHandler);_0x4a2b5d['on'](_0x97a5('0x36'),closeHandler);_0x4a2b5d['on'](_0x97a5('0x37'),timeoutHandler);_0x4a2b5d[_0x97a5('0x1d')]=![];_0x4a2b5d['on'](_0x97a5('0x38'),hangupHandler);var _0x49b19a=getSquareProject[_0x97a5('0x39')](null,_0x4a2b5d[_0x97a5('0x17')]);if(_0x49b19a){if(_0x49b19a[_0x97a5('0x3a')]){_0x2fe8a2=getRoot(_0x49b19a[_0x97a5('0x3a')]);if(_0x2fe8a2&&_0x2fe8a2[_0x97a5('0x3b')]){logger['debug']('root',JSON[_0x97a5('0x3c')](_0x2fe8a2,null,0x2));_0x4a2b5d[_0x97a5('0x3d')]=moment()[_0x97a5('0x12')](_0x97a5('0x3e'));_0x427459=initGraph(_[_0x97a5('0x25')](_0x2fe8a2,_0x97a5('0x26')),_0x2fe8a2['mxCell']);_0x347ad5=new Vertices(_0x4a2b5d,rpc,mailRpc);logger[_0x97a5('0x15')](util['format'](_0x97a5('0x3f'),_0x4a2b5d[_0x97a5('0x17')],_0x4a2b5d[_0x97a5('0x1b')],_0x4a2b5d[_0x97a5('0x18')],_0x4a2b5d[_0x97a5('0x1c')],_0x4a2b5d['uniqueid']));_0x427459[_0x97a5('0x40')](_0x2fe8a2[_0x97a5('0x3b')]['id'],function(_0x64505){try{_0x64505=_0x347ad5[_0x97a5('0x41')](_0x64505);logger[_0x97a5('0x32')]('vertex',JSON['stringify'](_0x64505,null,0x2));if(_0x64505[_0x97a5('0x20')]===_0x97a5('0x42')){logger[_0x97a5('0x15')](_0x97a5('0x43'));_0x4a2b5d['context']=_0x64505[_0x97a5('0x44')]||_0x4a2b5d['context'];_0x4a2b5d[_0x97a5('0x45')]=_0x64505[_0x97a5('0x45')];_0x4a2b5d[_0x97a5('0x46')]=_0x64505['priority']?_0x64505[_0x97a5('0x46')]-0x1:0x1;return null;}else if(_0x64505&&_0x347ad5[_0x64505[_0x97a5('0x20')]]){_0x4cf1ff=_0x347ad5[_0x64505['agicommand']](_0x64505);logger[_0x97a5('0x15')](_0x97a5('0x47'),JSON[_0x97a5('0x3c')](_0x4cf1ff,null,0x2));if(_0x4cf1ff&&_0x4cf1ff[_0x97a5('0x48')]===AGI_CODE_SUCCESS&&_0x4cf1ff[_0x97a5('0x49')]!==AGI_RESULT_ERROR&&!_0x4a2b5d[_0x97a5('0x1d')]){logger[_0x97a5('0x32')](_0x97a5('0x47'),getLogFromObject(_0x4cf1ff));return _[_0x97a5('0x4a')](_0x4cf1ff[_0x97a5('0x49')])?null:_0x4cf1ff[_0x97a5('0x49')][_0x97a5('0x4b')]();}else{logger['error'](_0x97a5('0x47'),getLogFromObject(_0x4cf1ff));return null;}}else{logger[_0x97a5('0x35')](_0x97a5('0x4c'));return null;}}catch(_0x5237fc){logger[_0x97a5('0x35')](_0x5237fc[_0x97a5('0xc')]);return null;}});if(_0x2fe8a2[_0x97a5('0x4d')]){logger[_0x97a5('0x15')](util[_0x97a5('0x12')]('[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x4a2b5d[_0x97a5('0x17')],_0x4a2b5d[_0x97a5('0x1b')],_0x4a2b5d[_0x97a5('0x18')],_0x4a2b5d[_0x97a5('0x1c')],_0x4a2b5d[_0x97a5('0x19')]));_0x427459['traverseBFS'](_0x2fe8a2[_0x97a5('0x4d')]['id'],function(_0x4f2eb8){try{_0x4f2eb8=_0x347ad5[_0x97a5('0x41')](_0x4f2eb8);logger[_0x97a5('0x32')](_0x97a5('0x4e'),JSON['stringify'](_0x4f2eb8,null,0x2));if(_0x4f2eb8&&_0x347ad5[_0x4f2eb8[_0x97a5('0x20')]]){_0x4cf1ff=_0x347ad5[_0x4f2eb8[_0x97a5('0x20')]](_0x4f2eb8);if(_0x4cf1ff){logger[_0x97a5('0x32')](_0x97a5('0x47'),getLogFromObject(_0x4cf1ff));return _[_0x97a5('0x4a')](_0x4cf1ff[_0x97a5('0x49')])?null:_0x4cf1ff['result'][_0x97a5('0x4b')]();}else{logger[_0x97a5('0x35')](_0x97a5('0x47'),getLogFromObject(_0x4cf1ff));return null;}}else{logger[_0x97a5('0x35')]('agicommand\x20not\x20found');return null;}}catch(_0x4582e9){logger[_0x97a5('0x35')](_0x4582e9['stack']);return null;}});}logger[_0x97a5('0x15')](util[_0x97a5('0x12')](_0x97a5('0x4f'),_0x4a2b5d['arg_1'],_0x4a2b5d[_0x97a5('0x1b')],_0x4a2b5d[_0x97a5('0x18')],_0x4a2b5d['dnid'],_0x4a2b5d[_0x97a5('0x19')]));logger[_0x97a5('0x15')](util[_0x97a5('0x12')]('[GOTO]\x20context:\x20%s\x20extension:\x20%s\x20priority:\x20%s',_0x4a2b5d[_0x97a5('0x44')],_0x4a2b5d[_0x97a5('0x45')],parseInt(_0x4a2b5d[_0x97a5('0x46')],0xa)+0x1));_0x4a2b5d['continueAt'](_0x4a2b5d['context'],_0x4a2b5d[_0x97a5('0x45')],parseInt(_0x4a2b5d[_0x97a5('0x46')],0xa)+0x1);_0x4a2b5d[_0x97a5('0x36')]();}}else{logger[_0x97a5('0x35')](util['format'](_0x97a5('0x50'),_0x4a2b5d[_0x97a5('0x17')]));_0x4a2b5d[_0x97a5('0x51')](_0x4a2b5d['context'],_0x4a2b5d['extension'],parseInt(_0x4a2b5d['priority'],0xa)+0x1);_0x4a2b5d[_0x97a5('0x36')]();}}else{logger[_0x97a5('0x35')](util[_0x97a5('0x12')]('Project\x20%s\x20not\x20found',_0x4a2b5d[_0x97a5('0x17')]));_0x4a2b5d[_0x97a5('0x51')](_0x4a2b5d[_0x97a5('0x44')],_0x4a2b5d[_0x97a5('0x45')],parseInt(_0x4a2b5d[_0x97a5('0x46')],0xa)+0x1);_0x4a2b5d[_0x97a5('0x36')]();}}function main(){var _0xf56f86;return utilLicense['getLicense']()[_0x97a5('0x2c')](function(_0x4fcb2a){if(_0x4fcb2a){if(_0x4fcb2a[_0x97a5('0x52')]){if(_0x4fcb2a['callysquare']&&_0x4fcb2a['callysquare']>0x0){logger[_0x97a5('0x15')](util[_0x97a5('0x12')]('[LICENSE]\x20CHANNELS:\x20%s',_0x4fcb2a[_0x97a5('0x53')]));_0xf56f86=_0x4fcb2a[_0x97a5('0x53')];}else{logger['info'](_0x97a5('0x54'));}}else{logger['info'](_0x97a5('0x55'));_0xf56f86=-0x1;}}})['catch'](function(_0x296688){logger['error'](_0x97a5('0x56'),_0x296688[_0x97a5('0xc')]);})['finally'](function(){var _0x42cc2b=require('./server')(config[_0x97a5('0x5')]['port'],config['agi']['ip'],_0xf56f86);_0x42cc2b['on']('error',errorHandler);_0x42cc2b['on'](_0x97a5('0x57'),listeningHandler);_0x42cc2b['on'](_0x97a5('0x58'),connectionHandler);_0x42cc2b['on'](_0x97a5('0x36'),closeHandler);});}main();