Built motion from commit a61a4a20.|2.5.46
[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 _0xa9f8=['dnid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','callerid','uniqueid','evtHangup','agicommand','hasOwnProperty','maxRetry','retry','omit','mxCell','length','source','addEdge','target','value','getSquareProject','then','createSquareReport','catch','agi_','substring','inspect','debug','variables','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','timeout','sync','production','start','root','stringify','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','vertex','gotoc','gotoc\x20block\x20stop\x20traverse\x20BFS','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','close','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20UNLIMITED','./server','listening','xml2json','lodash','syncho','util','moment','../../config/environment','../../config/logger','agi','./mailRpc','./graph','defaults','127.0.0.1','nextTick','error','log','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','info','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','message','[%s]\x20%s','[ERROR]\x20%s','stack','arg_1','calleridname'];(function(_0x3941b1,_0x3979de){var _0x23bec3=function(_0x2021d3){while(--_0x2021d3){_0x3941b1['push'](_0x3941b1['shift']());}};_0x23bec3(++_0x3979de);}(_0xa9f8,0x93));var _0x8a9f=function(_0x30e0ca,_0x43a65d){_0x30e0ca=_0x30e0ca-0x0;var _0x38e750=_0xa9f8[_0x30e0ca];return _0x38e750;};'use strict';var parser=require(_0x8a9f('0x0'));var _=require(_0x8a9f('0x1'));var syncho=require(_0x8a9f('0x2'));var util=require(_0x8a9f('0x3'));var moment=require(_0x8a9f('0x4'));var config=require(_0x8a9f('0x5'));var logger=require(_0x8a9f('0x6'))(_0x8a9f('0x7'));var utilLicense=require('../../config/license/util');var rpc=require('./rpc');var mailRpc=require(_0x8a9f('0x8'));var Graph=require(_0x8a9f('0x9'));var Vertices=require('./vertices');var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x8a9f('0x7')]=_[_0x8a9f('0xa')](config[_0x8a9f('0x7')],{'ip':_0x8a9f('0xb'),'port':0x11dd});function connectionHandler(_0x2dee63){process[_0x8a9f('0xc')](function(){syncho(function(){try{setChannelVariables(_0x2dee63);agiHandler(_0x2dee63);}catch(_0x2c7f89){logger[_0x8a9f('0xd')](_0x2c7f89['stack']);}});});}function listeningHandler(){console[_0x8a9f('0xe')](_0x8a9f('0xf'),config['agi'][_0x8a9f('0x10')]);logger[_0x8a9f('0x11')](util[_0x8a9f('0x12')](_0x8a9f('0x13'),config[_0x8a9f('0x7')]['ip'],config[_0x8a9f('0x7')][_0x8a9f('0x10')]));}function errorHandler(_0xa10ce0){if(_0xa10ce0&&_0xa10ce0[_0x8a9f('0x14')]&&_0xa10ce0[_0x8a9f('0x15')]){logger[_0x8a9f('0xd')](util['format'](_0x8a9f('0x16'),_0xa10ce0[_0x8a9f('0x14')],_0xa10ce0['message']));}else{logger['error'](util[_0x8a9f('0x12')](_0x8a9f('0x17'),_0xa10ce0[_0x8a9f('0x18')]));}}function closeHandler(){logger[_0x8a9f('0x11')](util['format']('[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x8a9f('0x19')],this[_0x8a9f('0x1a')],this['callerid'],this[_0x8a9f('0x1b')],this['uniqueid']));try{createSquareReport(this);}catch(_0x1bbf44){logger['error'](_0x1bbf44[_0x8a9f('0x18')]);}}function timeoutHandler(){logger[_0x8a9f('0x11')](util[_0x8a9f('0x12')](_0x8a9f('0x1c'),this[_0x8a9f('0x19')],this['calleridname'],this[_0x8a9f('0x1d')],this[_0x8a9f('0x1b')],this[_0x8a9f('0x1e')]));}function hangupHandler(){logger[_0x8a9f('0x11')](util['format']('[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x8a9f('0x19')],this['calleridname'],this[_0x8a9f('0x1d')],this[_0x8a9f('0x1b')],this[_0x8a9f('0x1e')]));this[_0x8a9f('0x1f')]=!![];}function getRoot(_0x5143b5){return parser['toJson'](_0x5143b5,{'object':!![]})['mxGraphModel']['root'];}function addVertex(_0x5ef373,_0x414fd2,_0x520a15){_0x414fd2[_0x8a9f('0x20')]=_0x520a15;if(_0x414fd2[_0x8a9f('0x21')]('retry')){_0x414fd2[_0x8a9f('0x22')]=parseInt(_0x414fd2[_0x8a9f('0x23')],0xa);}_0x5ef373['addVertex'](_[_0x8a9f('0x24')](_0x414fd2,_0x8a9f('0x25')));}function initGraph(_0x368489,_0x3bee4a){var _0xa7477a=new Graph();for(var _0x4effe0 in _0x368489){if(_0x368489['hasOwnProperty'](_0x4effe0)){if(_['isArray'](_0x368489[_0x4effe0])){for(var _0x168150=0x0;_0x168150<_0x368489[_0x4effe0][_0x8a9f('0x26')];_0x168150+=0x1){addVertex(_0xa7477a,_0x368489[_0x4effe0][_0x168150],_0x4effe0);}}else{addVertex(_0xa7477a,_0x368489[_0x4effe0],_0x4effe0);}}}for(var _0x4a70d4=0x0;_0x4a70d4<_0x3bee4a[_0x8a9f('0x26')];_0x4a70d4+=0x1){if(_0x3bee4a[_0x4a70d4][_0x8a9f('0x27')]&&_0x3bee4a[_0x4a70d4]['target']){_0xa7477a[_0x8a9f('0x28')](_0x3bee4a[_0x4a70d4][_0x8a9f('0x27')],_0x3bee4a[_0x4a70d4][_0x8a9f('0x29')],_0x3bee4a[_0x4a70d4][_0x8a9f('0x2a')]);}}return _0xa7477a;}function getSquareProject(_0x1c549e,_0x144235){rpc[_0x8a9f('0x2b')](_0x1c549e)[_0x8a9f('0x2c')](function(_0x3f328e){_0x144235(null,_0x3f328e);})['catch'](function(_0x2f31d8){_0x144235(null,_0x2f31d8);});}function createSquareReport(_0x561d0f,_0x5f56e4){rpc[_0x8a9f('0x2d')](_0x561d0f)['then'](function(_0x5c56f6){if(_0x5f56e4){_0x5f56e4(null,_0x5c56f6);}})[_0x8a9f('0x2e')](function(_0x4f74d8){if(_0x5f56e4){_0x5f56e4(null,_0x4f74d8);}});}function setChannelVariables(_0xd21988){for(var _0xb9631b in _0xd21988){if(_0xd21988[_0x8a9f('0x21')](_0xb9631b)){if(_0xb9631b['indexOf'](_0x8a9f('0x2f'))===0x0){_0xd21988[_0xb9631b[_0x8a9f('0x30')](0x4)]=_0xd21988[_0xb9631b];delete _0xd21988[_0xb9631b];}}}}function getLogFromObject(_0x3ebbea){return util[_0x8a9f('0x31')](_0x3ebbea,{'showHidden':![],'depth':null});}function agiHandler(_0x420281){var _0x3e9d43,_0x30b6df,_0x1902f0,_0x232503,_0x49ec78;logger[_0x8a9f('0x32')](_0x8a9f('0x33'),JSON['stringify'](_0x420281,null,0x2));logger['info'](util[_0x8a9f('0x12')](_0x8a9f('0x34'),_0x420281[_0x8a9f('0x19')],_0x420281[_0x8a9f('0x1a')],_0x420281['callerid'],_0x420281[_0x8a9f('0x1b')],_0x420281[_0x8a9f('0x1e')]));_0x420281['on'](_0x8a9f('0xd'),errorHandler);_0x420281['on']('close',closeHandler);_0x420281['on'](_0x8a9f('0x35'),timeoutHandler);_0x420281[_0x8a9f('0x1f')]=![];_0x420281['on']('hangup',hangupHandler);var _0x5cbd4a=getSquareProject[_0x8a9f('0x36')](null,_0x420281[_0x8a9f('0x19')]);if(_0x5cbd4a){if(_0x5cbd4a['production']){_0x3e9d43=getRoot(_0x5cbd4a[_0x8a9f('0x37')]);if(_0x3e9d43&&_0x3e9d43[_0x8a9f('0x38')]){logger[_0x8a9f('0x32')](_0x8a9f('0x39'),JSON[_0x8a9f('0x3a')](_0x3e9d43,null,0x2));_0x420281['joinAt']=moment()[_0x8a9f('0x12')](_0x8a9f('0x3b'));_0x30b6df=initGraph(_[_0x8a9f('0x24')](_0x3e9d43,'mxCell'),_0x3e9d43[_0x8a9f('0x25')]);_0x1902f0=new Vertices(_0x420281,rpc,mailRpc);logger[_0x8a9f('0x11')](util[_0x8a9f('0x12')](_0x8a9f('0x3c'),_0x420281['arg_1'],_0x420281[_0x8a9f('0x1a')],_0x420281['callerid'],_0x420281['dnid'],_0x420281[_0x8a9f('0x1e')]));_0x30b6df['traverseBFS'](_0x3e9d43[_0x8a9f('0x38')]['id'],function(_0x516693){try{_0x516693=_0x1902f0['clear'](_0x516693);logger['debug'](_0x8a9f('0x3d'),JSON[_0x8a9f('0x3a')](_0x516693,null,0x2));if(_0x516693[_0x8a9f('0x20')]===_0x8a9f('0x3e')){logger['info'](_0x8a9f('0x3f'));_0x420281[_0x8a9f('0x40')]=_0x516693[_0x8a9f('0x40')]||_0x420281[_0x8a9f('0x40')];_0x420281[_0x8a9f('0x41')]=_0x516693['extension'];_0x420281[_0x8a9f('0x42')]=_0x516693[_0x8a9f('0x42')]?_0x516693[_0x8a9f('0x42')]-0x1:0x1;return null;}else if(_0x516693&&_0x1902f0[_0x516693['agicommand']]){_0x49ec78=_0x1902f0[_0x516693[_0x8a9f('0x20')]](_0x516693);logger[_0x8a9f('0x11')](_0x8a9f('0x43'),JSON[_0x8a9f('0x3a')](_0x49ec78,null,0x2));if(_0x49ec78&&_0x49ec78[_0x8a9f('0x44')]===AGI_CODE_SUCCESS&&_0x49ec78['result']!==AGI_RESULT_ERROR&&!_0x420281[_0x8a9f('0x1f')]){logger[_0x8a9f('0x32')](_0x8a9f('0x43'),getLogFromObject(_0x49ec78));return _[_0x8a9f('0x45')](_0x49ec78[_0x8a9f('0x46')])?null:_0x49ec78['result'][_0x8a9f('0x47')]();}else{logger[_0x8a9f('0xd')](_0x8a9f('0x43'),getLogFromObject(_0x49ec78));return null;}}else{logger['error'](_0x8a9f('0x48'));return null;}}catch(_0xe5b4d1){logger['error'](_0xe5b4d1[_0x8a9f('0x18')]);return null;}});if(_0x3e9d43[_0x8a9f('0x49')]){logger[_0x8a9f('0x11')](util[_0x8a9f('0x12')](_0x8a9f('0x4a'),_0x420281['arg_1'],_0x420281[_0x8a9f('0x1a')],_0x420281[_0x8a9f('0x1d')],_0x420281[_0x8a9f('0x1b')],_0x420281[_0x8a9f('0x1e')]));_0x30b6df['traverseBFS'](_0x3e9d43[_0x8a9f('0x49')]['id'],function(_0x131912){try{_0x131912=_0x1902f0['clear'](_0x131912);logger[_0x8a9f('0x32')](_0x8a9f('0x3d'),JSON[_0x8a9f('0x3a')](_0x131912,null,0x2));if(_0x131912&&_0x1902f0[_0x131912[_0x8a9f('0x20')]]){_0x49ec78=_0x1902f0[_0x131912[_0x8a9f('0x20')]](_0x131912);if(_0x49ec78){logger[_0x8a9f('0x32')]('response',getLogFromObject(_0x49ec78));return _[_0x8a9f('0x45')](_0x49ec78['result'])?null:_0x49ec78[_0x8a9f('0x46')][_0x8a9f('0x47')]();}else{logger[_0x8a9f('0xd')](_0x8a9f('0x43'),getLogFromObject(_0x49ec78));return null;}}else{logger[_0x8a9f('0xd')](_0x8a9f('0x48'));return null;}}catch(_0x102915){logger['error'](_0x102915['stack']);return null;}});}logger['info'](util[_0x8a9f('0x12')](_0x8a9f('0x4b'),_0x420281[_0x8a9f('0x19')],_0x420281['calleridname'],_0x420281['callerid'],_0x420281[_0x8a9f('0x1b')],_0x420281[_0x8a9f('0x1e')]));logger[_0x8a9f('0x11')](util['format'](_0x8a9f('0x4c'),_0x420281['context'],_0x420281['extension'],parseInt(_0x420281[_0x8a9f('0x42')],0xa)+0x1));_0x420281[_0x8a9f('0x4d')](_0x420281[_0x8a9f('0x40')],_0x420281['extension'],parseInt(_0x420281['priority'],0xa)+0x1);_0x420281[_0x8a9f('0x4e')]();}}else{logger[_0x8a9f('0xd')](util[_0x8a9f('0x12')](_0x8a9f('0x4f'),_0x420281['arg_1']));_0x420281[_0x8a9f('0x4d')](_0x420281[_0x8a9f('0x40')],_0x420281['extension'],parseInt(_0x420281['priority'],0xa)+0x1);_0x420281['close']();}}else{logger[_0x8a9f('0xd')](util[_0x8a9f('0x12')](_0x8a9f('0x50'),_0x420281[_0x8a9f('0x19')]));_0x420281['continueAt'](_0x420281[_0x8a9f('0x40')],_0x420281[_0x8a9f('0x41')],parseInt(_0x420281['priority'],0xa)+0x1);_0x420281[_0x8a9f('0x4e')]();}}function main(){var _0x3b8b9b;return utilLicense[_0x8a9f('0x51')]()['then'](function(_0x5db064){if(_0x5db064){if(_0x5db064[_0x8a9f('0x52')]){if(_0x5db064[_0x8a9f('0x53')]&&_0x5db064[_0x8a9f('0x53')]>0x0){logger['info'](util['format']('[LICENSE]\x20CHANNELS:\x20%s',_0x5db064['callysquare']));_0x3b8b9b=_0x5db064[_0x8a9f('0x53')];}else{logger[_0x8a9f('0x11')](_0x8a9f('0x54'));}}else{logger[_0x8a9f('0x11')]('[LICENSE]\x20VOICE\x20IS\x20DISABLED');_0x3b8b9b=-0x1;}}})[_0x8a9f('0x2e')](function(_0x9249e6){logger[_0x8a9f('0xd')]('[LICENSE]',_0x9249e6[_0x8a9f('0x18')]);})[_0x8a9f('0x49')](function(){var _0x534db4=require(_0x8a9f('0x55'))(config[_0x8a9f('0x7')][_0x8a9f('0x10')],config[_0x8a9f('0x7')]['ip'],_0x3b8b9b);_0x534db4['on'](_0x8a9f('0xd'),errorHandler);_0x534db4['on'](_0x8a9f('0x56'),listeningHandler);_0x534db4['on']('connection',connectionHandler);_0x534db4['on'](_0x8a9f('0x4e'),closeHandler);});}main();