45fecd52d4a73fbdbe60d8ecd688e96c546a944d
[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 _0x30d3=['variables','stringify','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','close','timeout','evtHangup','hangup','sync','production','SQUAREROOT','YYYY-MM-DD\x20HH:mm:ss','mxCell','start','clear','vertex','gotoc','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','result','toString','agicommand\x20not\x20found','finally','traverseBFS','isUndefined','[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','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','[LICENSE]','./server','listening','connection','lodash','util','moment','../../config/environment','../../config/logger','agi','../../config/license/util','./mailRpc','./graph','defaults','127.0.0.1','nextTick','error','stack','log','port','info','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','message','[%s]\x20%s','format','[ERROR]\x20%s','arg_1','calleridname','dnid','callerid','uniqueid','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','toJson','mxGraphModel','root','agicommand','hasOwnProperty','retry','maxRetry','addVertex','omit','isArray','length','target','addEdge','source','value','getSquareProject','then','catch','substring','inspect','debug'];(function(_0x4ea22c,_0x4f800f){var _0x3eeb9c=function(_0x33acc8){while(--_0x33acc8){_0x4ea22c['push'](_0x4ea22c['shift']());}};_0x3eeb9c(++_0x4f800f);}(_0x30d3,0xe0));var _0x330d=function(_0x40cf17,_0x183e22){_0x40cf17=_0x40cf17-0x0;var _0x35e5c8=_0x30d3[_0x40cf17];return _0x35e5c8;};'use strict';var parser=require('xml2json');var _=require(_0x330d('0x0'));var syncho=require('syncho');var util=require(_0x330d('0x1'));var moment=require(_0x330d('0x2'));var config=require(_0x330d('0x3'));var logger=require(_0x330d('0x4'))(_0x330d('0x5'));var utilLicense=require(_0x330d('0x6'));var rpc=require('./rpc');var mailRpc=require(_0x330d('0x7'));var Graph=require(_0x330d('0x8'));var Vertices=require('./vertices');var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x330d('0x5')]=_[_0x330d('0x9')](config[_0x330d('0x5')],{'ip':_0x330d('0xa'),'port':0x11dd});function connectionHandler(_0x5df9d8){process[_0x330d('0xb')](function(){syncho(function(){try{setChannelVariables(_0x5df9d8);agiHandler(_0x5df9d8);}catch(_0x3c293d){logger[_0x330d('0xc')](_0x3c293d[_0x330d('0xd')]);}});});}function listeningHandler(){console[_0x330d('0xe')]('Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!',config[_0x330d('0x5')][_0x330d('0xf')]);logger[_0x330d('0x10')](util['format'](_0x330d('0x11'),config['agi']['ip'],config['agi']['port']));}function errorHandler(_0x3fec0d){if(_0x3fec0d&&_0x3fec0d['name']&&_0x3fec0d[_0x330d('0x12')]){logger[_0x330d('0xc')](util['format'](_0x330d('0x13'),_0x3fec0d['name'],_0x3fec0d[_0x330d('0x12')]));}else{logger[_0x330d('0xc')](util[_0x330d('0x14')](_0x330d('0x15'),_0x3fec0d[_0x330d('0xd')]));}}function closeHandler(){logger['info'](util[_0x330d('0x14')]('[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x330d('0x16')],this[_0x330d('0x17')],this['callerid'],this[_0x330d('0x18')],this['uniqueid']));try{createSquareReport(this);}catch(_0x352988){logger[_0x330d('0xc')](_0x352988[_0x330d('0xd')]);}}function timeoutHandler(){logger[_0x330d('0x10')](util[_0x330d('0x14')]('[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x330d('0x16')],this[_0x330d('0x17')],this[_0x330d('0x19')],this[_0x330d('0x18')],this[_0x330d('0x1a')]));}function hangupHandler(){logger[_0x330d('0x10')](util[_0x330d('0x14')](_0x330d('0x1b'),this[_0x330d('0x16')],this[_0x330d('0x17')],this[_0x330d('0x19')],this['dnid'],this[_0x330d('0x1a')]));this['evtHangup']=!![];}function getRoot(_0xb73739){return parser[_0x330d('0x1c')](_0xb73739,{'object':!![]})[_0x330d('0x1d')][_0x330d('0x1e')];}function addVertex(_0x5f00ca,_0x9c7488,_0x2d8e3b){_0x9c7488[_0x330d('0x1f')]=_0x2d8e3b;if(_0x9c7488[_0x330d('0x20')](_0x330d('0x21'))){_0x9c7488[_0x330d('0x22')]=parseInt(_0x9c7488[_0x330d('0x21')],0xa);}_0x5f00ca[_0x330d('0x23')](_[_0x330d('0x24')](_0x9c7488,'mxCell'));}function initGraph(_0x31ad1b,_0x1cf1bf){var _0x4b7bb2=new Graph();for(var _0x224408 in _0x31ad1b){if(_0x31ad1b['hasOwnProperty'](_0x224408)){if(_[_0x330d('0x25')](_0x31ad1b[_0x224408])){for(var _0x42bfc8=0x0;_0x42bfc8<_0x31ad1b[_0x224408][_0x330d('0x26')];_0x42bfc8+=0x1){addVertex(_0x4b7bb2,_0x31ad1b[_0x224408][_0x42bfc8],_0x224408);}}else{addVertex(_0x4b7bb2,_0x31ad1b[_0x224408],_0x224408);}}}for(var _0x41a43a=0x0;_0x41a43a<_0x1cf1bf[_0x330d('0x26')];_0x41a43a+=0x1){if(_0x1cf1bf[_0x41a43a]['source']&&_0x1cf1bf[_0x41a43a][_0x330d('0x27')]){_0x4b7bb2[_0x330d('0x28')](_0x1cf1bf[_0x41a43a][_0x330d('0x29')],_0x1cf1bf[_0x41a43a]['target'],_0x1cf1bf[_0x41a43a][_0x330d('0x2a')]);}}return _0x4b7bb2;}function getSquareProject(_0x10b689,_0x55dfb3){rpc[_0x330d('0x2b')](_0x10b689)[_0x330d('0x2c')](function(_0xb6f15f){_0x55dfb3(null,_0xb6f15f);})['catch'](function(_0x13c0f9){_0x55dfb3(null,_0x13c0f9);});}function createSquareReport(_0x586733,_0x2adb17){rpc['createSquareReport'](_0x586733)[_0x330d('0x2c')](function(_0x31a81e){if(_0x2adb17){_0x2adb17(null,_0x31a81e);}})[_0x330d('0x2d')](function(_0x489f02){if(_0x2adb17){_0x2adb17(null,_0x489f02);}});}function setChannelVariables(_0x516879){for(var _0xd3ba8d in _0x516879){if(_0x516879[_0x330d('0x20')](_0xd3ba8d)){if(_0xd3ba8d['indexOf']('agi_')===0x0){_0x516879[_0xd3ba8d[_0x330d('0x2e')](0x4)]=_0x516879[_0xd3ba8d];delete _0x516879[_0xd3ba8d];}}}}function getLogFromObject(_0x20e758){return util[_0x330d('0x2f')](_0x20e758,{'showHidden':![],'depth':null});}function agiHandler(_0x4fac40){var _0x6a20de,_0x8c0bd2,_0x74fd2f,_0x337611,_0x394aec;logger[_0x330d('0x30')](_0x330d('0x31'),JSON[_0x330d('0x32')](_0x4fac40,null,0x2));logger[_0x330d('0x10')](util['format'](_0x330d('0x33'),_0x4fac40[_0x330d('0x16')],_0x4fac40[_0x330d('0x17')],_0x4fac40[_0x330d('0x19')],_0x4fac40['dnid'],_0x4fac40[_0x330d('0x1a')]));_0x4fac40['on']('error',errorHandler);_0x4fac40['on'](_0x330d('0x34'),closeHandler);_0x4fac40['on'](_0x330d('0x35'),timeoutHandler);_0x4fac40[_0x330d('0x36')]=![];_0x4fac40['on'](_0x330d('0x37'),hangupHandler);var _0x4c38d2=getSquareProject[_0x330d('0x38')](null,_0x4fac40[_0x330d('0x16')]);if(_0x4c38d2){if(_0x4c38d2[_0x330d('0x39')]){_0x6a20de=getRoot(_0x4c38d2['production']);console[_0x330d('0xe')](_0x330d('0x3a'),_0x6a20de);if(_0x6a20de&&_0x6a20de['start']){logger['debug'](_0x330d('0x1e'),JSON['stringify'](_0x6a20de,null,0x2));_0x4fac40['joinAt']=moment()[_0x330d('0x14')](_0x330d('0x3b'));_0x8c0bd2=initGraph(_['omit'](_0x6a20de,_0x330d('0x3c')),_0x6a20de['mxCell']);_0x74fd2f=new Vertices(_0x4fac40,rpc,mailRpc);logger[_0x330d('0x10')](util[_0x330d('0x14')]('[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x4fac40[_0x330d('0x16')],_0x4fac40[_0x330d('0x17')],_0x4fac40[_0x330d('0x19')],_0x4fac40[_0x330d('0x18')],_0x4fac40[_0x330d('0x1a')]));_0x8c0bd2['traverseBFS'](_0x6a20de[_0x330d('0x3d')]['id'],function(_0x7a5b38){try{_0x7a5b38=_0x74fd2f[_0x330d('0x3e')](_0x7a5b38);logger['debug'](_0x330d('0x3f'),JSON[_0x330d('0x32')](_0x7a5b38,null,0x2));if(_0x7a5b38[_0x330d('0x1f')]===_0x330d('0x40')){logger['info'](_0x330d('0x41'));_0x4fac40['context']=_0x7a5b38[_0x330d('0x42')]||_0x4fac40[_0x330d('0x42')];_0x4fac40['extension']=_0x7a5b38[_0x330d('0x43')];_0x4fac40[_0x330d('0x44')]=_0x7a5b38[_0x330d('0x44')]?_0x7a5b38[_0x330d('0x44')]-0x1:0x1;return null;}else if(_0x7a5b38&&_0x74fd2f[_0x7a5b38['agicommand']]){_0x394aec=_0x74fd2f[_0x7a5b38['agicommand']](_0x7a5b38);logger['info']('response',JSON[_0x330d('0x32')](_0x394aec,null,0x2));if(_0x394aec&&_0x394aec['code']===AGI_CODE_SUCCESS&&_0x394aec['result']!==AGI_RESULT_ERROR&&!_0x4fac40[_0x330d('0x36')]){logger[_0x330d('0x30')](_0x330d('0x45'),getLogFromObject(_0x394aec));return _['isUndefined'](_0x394aec[_0x330d('0x46')])?null:_0x394aec['result'][_0x330d('0x47')]();}else{logger[_0x330d('0xc')]('response',getLogFromObject(_0x394aec));return null;}}else{logger['error'](_0x330d('0x48'));return null;}}catch(_0x57014c){logger['error'](_0x57014c[_0x330d('0xd')]);return null;}});if(_0x6a20de[_0x330d('0x49')]){logger[_0x330d('0x10')](util[_0x330d('0x14')]('[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x4fac40[_0x330d('0x16')],_0x4fac40[_0x330d('0x17')],_0x4fac40[_0x330d('0x19')],_0x4fac40['dnid'],_0x4fac40[_0x330d('0x1a')]));_0x8c0bd2[_0x330d('0x4a')](_0x6a20de['finally']['id'],function(_0x2fcf0d){try{_0x2fcf0d=_0x74fd2f['clear'](_0x2fcf0d);logger['debug'](_0x330d('0x3f'),JSON['stringify'](_0x2fcf0d,null,0x2));if(_0x2fcf0d&&_0x74fd2f[_0x2fcf0d['agicommand']]){_0x394aec=_0x74fd2f[_0x2fcf0d['agicommand']](_0x2fcf0d);if(_0x394aec){logger['debug'](_0x330d('0x45'),getLogFromObject(_0x394aec));return _[_0x330d('0x4b')](_0x394aec[_0x330d('0x46')])?null:_0x394aec[_0x330d('0x46')]['toString']();}else{logger[_0x330d('0xc')]('response',getLogFromObject(_0x394aec));return null;}}else{logger['error'](_0x330d('0x48'));return null;}}catch(_0x303fff){logger[_0x330d('0xc')](_0x303fff['stack']);return null;}});}logger[_0x330d('0x10')](util[_0x330d('0x14')](_0x330d('0x4c'),_0x4fac40['arg_1'],_0x4fac40[_0x330d('0x17')],_0x4fac40[_0x330d('0x19')],_0x4fac40[_0x330d('0x18')],_0x4fac40[_0x330d('0x1a')]));logger[_0x330d('0x10')](util[_0x330d('0x14')](_0x330d('0x4d'),_0x4fac40['context'],_0x4fac40[_0x330d('0x43')],parseInt(_0x4fac40[_0x330d('0x44')],0xa)+0x1));_0x4fac40[_0x330d('0x4e')](_0x4fac40[_0x330d('0x42')],_0x4fac40[_0x330d('0x43')],parseInt(_0x4fac40['priority'],0xa)+0x1);_0x4fac40['close']();}}else{logger[_0x330d('0xc')](util[_0x330d('0x14')](_0x330d('0x4f'),_0x4fac40[_0x330d('0x16')]));_0x4fac40['continueAt'](_0x4fac40[_0x330d('0x42')],_0x4fac40[_0x330d('0x43')],parseInt(_0x4fac40[_0x330d('0x44')],0xa)+0x1);_0x4fac40['close']();}}else{logger[_0x330d('0xc')](util[_0x330d('0x14')](_0x330d('0x50'),_0x4fac40[_0x330d('0x16')]));_0x4fac40['continueAt'](_0x4fac40['context'],_0x4fac40[_0x330d('0x43')],parseInt(_0x4fac40[_0x330d('0x44')],0xa)+0x1);_0x4fac40[_0x330d('0x34')]();}}function main(){var _0x11ea5d;return utilLicense[_0x330d('0x51')]()[_0x330d('0x2c')](function(_0x476eb8){if(_0x476eb8){if(_0x476eb8[_0x330d('0x52')]){if(_0x476eb8['callysquare']&&_0x476eb8[_0x330d('0x53')]>0x0){logger[_0x330d('0x10')](util[_0x330d('0x14')](_0x330d('0x54'),_0x476eb8[_0x330d('0x53')]));_0x11ea5d=_0x476eb8[_0x330d('0x53')];}else{logger[_0x330d('0x10')](_0x330d('0x55'));}}else{logger[_0x330d('0x10')](_0x330d('0x56'));_0x11ea5d=-0x1;}}})[_0x330d('0x2d')](function(_0xa94f6e){logger['error'](_0x330d('0x57'),_0xa94f6e[_0x330d('0xd')]);})['finally'](function(){var _0x525b08=require(_0x330d('0x58'))(config['agi'][_0x330d('0xf')],config['agi']['ip'],_0x11ea5d);_0x525b08['on'](_0x330d('0xc'),errorHandler);_0x525b08['on'](_0x330d('0x59'),listeningHandler);_0x525b08['on'](_0x330d('0x5a'),connectionHandler);_0x525b08['on']('close',closeHandler);});}main();