0f675b1eebabc6a542cfcd4b5d698e7f28adcb12
[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 _0x5089=['stringify','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','close','timeout','hangup','sync','production','YYYY-MM-DD\x20HH:mm:ss','omit','start','clear','gotoc\x20block\x20stop\x20traverse\x20BFS','context','priority','response','result','isUndefined','toString','finally','traverseBFS','[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','extension','continueAt','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20VOICE\x20IS\x20DISABLED','listening','connection','xml2json','lodash','util','moment','../../config/environment','../../config/logger','agi','./rpc','./graph','./vertices','127.0.0.1','nextTick','stack','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','info','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','error','[%s]\x20%s','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','calleridname','callerid','dnid','uniqueid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','root','agicommand','hasOwnProperty','retry','mxCell','isArray','length','source','target','addEdge','value','getSquareProject','then','catch','createSquareReport','indexOf','agi_','substring','debug','variables'];(function(_0xdea41a,_0x552987){var _0x15d0d8=function(_0x1e0d0b){while(--_0x1e0d0b){_0xdea41a['push'](_0xdea41a['shift']());}};_0x15d0d8(++_0x552987);}(_0x5089,0x1bb));var _0x9508=function(_0x5b87ce,_0x20b7f6){_0x5b87ce=_0x5b87ce-0x0;var _0x597aa7=_0x5089[_0x5b87ce];return _0x597aa7;};'use strict';var parser=require(_0x9508('0x0'));var _=require(_0x9508('0x1'));var syncho=require('syncho');var util=require(_0x9508('0x2'));var moment=require(_0x9508('0x3'));var config=require(_0x9508('0x4'));var logger=require(_0x9508('0x5'))(_0x9508('0x6'));var utilLicense=require('../../config/license/util');var rpc=require(_0x9508('0x7'));var mailRpc=require('./mailRpc');var Graph=require(_0x9508('0x8'));var Vertices=require(_0x9508('0x9'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x9508('0x6')]=_['defaults'](config[_0x9508('0x6')],{'ip':_0x9508('0xa'),'port':0x11dd});function connectionHandler(_0x55a5de){process[_0x9508('0xb')](function(){syncho(function(){try{setChannelVariables(_0x55a5de);agiHandler(_0x55a5de);}catch(_0x338897){logger['error'](_0x338897[_0x9508('0xc')]);}});});}function listeningHandler(){console['log'](_0x9508('0xd'),config[_0x9508('0x6')][_0x9508('0xe')]);logger[_0x9508('0xf')](util[_0x9508('0x10')](_0x9508('0x11'),config['agi']['ip'],config[_0x9508('0x6')]['port']));}function errorHandler(_0x2c4fd9){if(_0x2c4fd9&&_0x2c4fd9[_0x9508('0x12')]&&_0x2c4fd9['message']){logger[_0x9508('0x13')](util[_0x9508('0x10')](_0x9508('0x14'),_0x2c4fd9[_0x9508('0x12')],_0x2c4fd9['message']));}else{logger[_0x9508('0x13')](util[_0x9508('0x10')]('[ERROR]\x20%s',_0x2c4fd9[_0x9508('0xc')]));}}function closeHandler(){logger['info'](util[_0x9508('0x10')](_0x9508('0x15'),this[_0x9508('0x16')],this[_0x9508('0x17')],this[_0x9508('0x18')],this[_0x9508('0x19')],this[_0x9508('0x1a')]));try{createSquareReport(this);}catch(_0x20df7d){logger['error'](_0x20df7d[_0x9508('0xc')]);}}function timeoutHandler(){logger[_0x9508('0xf')](util[_0x9508('0x10')](_0x9508('0x1b'),this[_0x9508('0x16')],this[_0x9508('0x17')],this['callerid'],this['dnid'],this[_0x9508('0x1a')]));}function hangupHandler(){logger['info'](util[_0x9508('0x10')]('[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x9508('0x16')],this[_0x9508('0x17')],this[_0x9508('0x18')],this[_0x9508('0x19')],this[_0x9508('0x1a')]));this[_0x9508('0x1c')]=!![];}function getRoot(_0x20eb53){return parser['toJson'](_0x20eb53,{'object':!![]})['mxGraphModel'][_0x9508('0x1d')];}function addVertex(_0x1b70e6,_0x39e6b0,_0xf70830){_0x39e6b0[_0x9508('0x1e')]=_0xf70830;if(_0x39e6b0[_0x9508('0x1f')]('retry')){_0x39e6b0['maxRetry']=parseInt(_0x39e6b0[_0x9508('0x20')],0xa);}_0x1b70e6['addVertex'](_['omit'](_0x39e6b0,_0x9508('0x21')));}function initGraph(_0x576614,_0x5db4e1){var _0x1c9b3e=new Graph();for(var _0x30da92 in _0x576614){if(_0x576614['hasOwnProperty'](_0x30da92)){if(_[_0x9508('0x22')](_0x576614[_0x30da92])){for(var _0x32b0dd=0x0;_0x32b0dd<_0x576614[_0x30da92][_0x9508('0x23')];_0x32b0dd+=0x1){addVertex(_0x1c9b3e,_0x576614[_0x30da92][_0x32b0dd],_0x30da92);}}else{addVertex(_0x1c9b3e,_0x576614[_0x30da92],_0x30da92);}}}for(var _0x4529a8=0x0;_0x4529a8<_0x5db4e1[_0x9508('0x23')];_0x4529a8+=0x1){if(_0x5db4e1[_0x4529a8][_0x9508('0x24')]&&_0x5db4e1[_0x4529a8][_0x9508('0x25')]){_0x1c9b3e[_0x9508('0x26')](_0x5db4e1[_0x4529a8][_0x9508('0x24')],_0x5db4e1[_0x4529a8][_0x9508('0x25')],_0x5db4e1[_0x4529a8][_0x9508('0x27')]);}}return _0x1c9b3e;}function getSquareProject(_0x55f36c,_0x231f12){rpc[_0x9508('0x28')](_0x55f36c)[_0x9508('0x29')](function(_0x5853a2){_0x231f12(null,_0x5853a2);})[_0x9508('0x2a')](function(_0x38686a){_0x231f12(null,_0x38686a);});}function createSquareReport(_0x5e1d31,_0x3334d4){rpc[_0x9508('0x2b')](_0x5e1d31)['then'](function(_0x1bce4f){if(_0x3334d4){_0x3334d4(null,_0x1bce4f);}})[_0x9508('0x2a')](function(_0xb06b10){if(_0x3334d4){_0x3334d4(null,_0xb06b10);}});}function setChannelVariables(_0x36de9f){for(var _0x502bc6 in _0x36de9f){if(_0x36de9f['hasOwnProperty'](_0x502bc6)){if(_0x502bc6[_0x9508('0x2c')](_0x9508('0x2d'))===0x0){_0x36de9f[_0x502bc6[_0x9508('0x2e')](0x4)]=_0x36de9f[_0x502bc6];delete _0x36de9f[_0x502bc6];}}}}function getLogFromObject(_0x4bbc6f){return util['inspect'](_0x4bbc6f,{'showHidden':![],'depth':null});}function agiHandler(_0x301dd0){var _0x14be59,_0x29da35,_0x1633a4,_0xc4ae52,_0x3f86d4;logger[_0x9508('0x2f')](_0x9508('0x30'),JSON[_0x9508('0x31')](_0x301dd0,null,0x2));logger[_0x9508('0xf')](util['format'](_0x9508('0x32'),_0x301dd0[_0x9508('0x16')],_0x301dd0['calleridname'],_0x301dd0[_0x9508('0x18')],_0x301dd0[_0x9508('0x19')],_0x301dd0[_0x9508('0x1a')]));_0x301dd0['on'](_0x9508('0x13'),errorHandler);_0x301dd0['on'](_0x9508('0x33'),closeHandler);_0x301dd0['on'](_0x9508('0x34'),timeoutHandler);_0x301dd0[_0x9508('0x1c')]=![];_0x301dd0['on'](_0x9508('0x35'),hangupHandler);var _0xfb6676=getSquareProject[_0x9508('0x36')](null,_0x301dd0[_0x9508('0x16')]);if(_0xfb6676){if(_0xfb6676['production']){_0x14be59=getRoot(_0xfb6676[_0x9508('0x37')]);if(_0x14be59&&_0x14be59['start']){logger[_0x9508('0x2f')](_0x9508('0x1d'),JSON[_0x9508('0x31')](_0x14be59,null,0x2));_0x301dd0['joinAt']=moment()['format'](_0x9508('0x38'));_0x29da35=initGraph(_[_0x9508('0x39')](_0x14be59,_0x9508('0x21')),_0x14be59[_0x9508('0x21')]);_0x1633a4=new Vertices(_0x301dd0,rpc,mailRpc);logger['info'](util[_0x9508('0x10')]('[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x301dd0[_0x9508('0x16')],_0x301dd0[_0x9508('0x17')],_0x301dd0['callerid'],_0x301dd0[_0x9508('0x19')],_0x301dd0[_0x9508('0x1a')]));_0x29da35['traverseBFS'](_0x14be59[_0x9508('0x3a')]['id'],function(_0x1e6851){try{_0x1e6851=_0x1633a4[_0x9508('0x3b')](_0x1e6851);logger[_0x9508('0x2f')]('vertex',JSON['stringify'](_0x1e6851,null,0x2));if(_0x1e6851[_0x9508('0x1e')]==='gotoc'){logger[_0x9508('0xf')](_0x9508('0x3c'));_0x301dd0[_0x9508('0x3d')]=_0x1e6851[_0x9508('0x3d')]||_0x301dd0['context'];_0x301dd0['extension']=_0x1e6851['extension'];_0x301dd0[_0x9508('0x3e')]=_0x1e6851['priority']?_0x1e6851[_0x9508('0x3e')]-0x1:0x1;return null;}else if(_0x1e6851&&_0x1633a4[_0x1e6851['agicommand']]){_0x3f86d4=_0x1633a4[_0x1e6851[_0x9508('0x1e')]](_0x1e6851);logger[_0x9508('0xf')](_0x9508('0x3f'),JSON[_0x9508('0x31')](_0x3f86d4,null,0x2));if(_0x3f86d4&&_0x3f86d4['code']===AGI_CODE_SUCCESS&&_0x3f86d4[_0x9508('0x40')]!==AGI_RESULT_ERROR&&!_0x301dd0[_0x9508('0x1c')]){logger[_0x9508('0x2f')]('response',getLogFromObject(_0x3f86d4));return _[_0x9508('0x41')](_0x3f86d4[_0x9508('0x40')])?null:_0x3f86d4['result'][_0x9508('0x42')]();}else{logger['error'](_0x9508('0x3f'),getLogFromObject(_0x3f86d4));return null;}}else{logger['error']('agicommand\x20not\x20found');return null;}}catch(_0x4194be){logger[_0x9508('0x13')](_0x4194be[_0x9508('0xc')]);return null;}});if(_0x14be59[_0x9508('0x43')]){logger[_0x9508('0xf')](util[_0x9508('0x10')]('[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x301dd0[_0x9508('0x16')],_0x301dd0[_0x9508('0x17')],_0x301dd0[_0x9508('0x18')],_0x301dd0['dnid'],_0x301dd0[_0x9508('0x1a')]));_0x29da35[_0x9508('0x44')](_0x14be59[_0x9508('0x43')]['id'],function(_0x30fafd){try{_0x30fafd=_0x1633a4['clear'](_0x30fafd);logger[_0x9508('0x2f')]('vertex',JSON[_0x9508('0x31')](_0x30fafd,null,0x2));if(_0x30fafd&&_0x1633a4[_0x30fafd[_0x9508('0x1e')]]){_0x3f86d4=_0x1633a4[_0x30fafd['agicommand']](_0x30fafd);if(_0x3f86d4){logger[_0x9508('0x2f')](_0x9508('0x3f'),getLogFromObject(_0x3f86d4));return _['isUndefined'](_0x3f86d4[_0x9508('0x40')])?null:_0x3f86d4[_0x9508('0x40')]['toString']();}else{logger[_0x9508('0x13')]('response',getLogFromObject(_0x3f86d4));return null;}}else{logger[_0x9508('0x13')]('agicommand\x20not\x20found');return null;}}catch(_0x1e6c8c){logger['error'](_0x1e6c8c['stack']);return null;}});}logger['info'](util['format'](_0x9508('0x45'),_0x301dd0[_0x9508('0x16')],_0x301dd0[_0x9508('0x17')],_0x301dd0[_0x9508('0x18')],_0x301dd0[_0x9508('0x19')],_0x301dd0[_0x9508('0x1a')]));logger[_0x9508('0xf')](util[_0x9508('0x10')](_0x9508('0x46'),_0x301dd0['context'],_0x301dd0[_0x9508('0x47')],parseInt(_0x301dd0[_0x9508('0x3e')],0xa)+0x1));_0x301dd0[_0x9508('0x48')](_0x301dd0[_0x9508('0x3d')],_0x301dd0[_0x9508('0x47')],parseInt(_0x301dd0['priority'],0xa)+0x1);_0x301dd0['close']();}}else{logger[_0x9508('0x13')](util['format'](_0x9508('0x49'),_0x301dd0[_0x9508('0x16')]));_0x301dd0['continueAt'](_0x301dd0[_0x9508('0x3d')],_0x301dd0['extension'],parseInt(_0x301dd0['priority'],0xa)+0x1);_0x301dd0[_0x9508('0x33')]();}}else{logger[_0x9508('0x13')](util['format'](_0x9508('0x4a'),_0x301dd0[_0x9508('0x16')]));_0x301dd0[_0x9508('0x48')](_0x301dd0[_0x9508('0x3d')],_0x301dd0[_0x9508('0x47')],parseInt(_0x301dd0[_0x9508('0x3e')],0xa)+0x1);_0x301dd0[_0x9508('0x33')]();}}function main(){var _0x767549;return utilLicense[_0x9508('0x4b')]()[_0x9508('0x29')](function(_0x122934){if(_0x122934){if(_0x122934[_0x9508('0x4c')]){if(_0x122934[_0x9508('0x4d')]&&_0x122934[_0x9508('0x4d')]>0x0){logger['info'](util[_0x9508('0x10')](_0x9508('0x4e'),_0x122934['callysquare']));_0x767549=_0x122934[_0x9508('0x4d')];}else{logger['info']('[LICENSE]\x20CHANNELS:\x20UNLIMITED');}}else{logger[_0x9508('0xf')](_0x9508('0x4f'));_0x767549=-0x1;}}})['catch'](function(_0x199c2e){logger[_0x9508('0x13')]('[LICENSE]',_0x199c2e[_0x9508('0xc')]);})[_0x9508('0x43')](function(){var _0x279e31=require('./server')(config[_0x9508('0x6')][_0x9508('0xe')],config[_0x9508('0x6')]['ip'],_0x767549);_0x279e31['on'](_0x9508('0x13'),errorHandler);_0x279e31['on'](_0x9508('0x50'),listeningHandler);_0x279e31['on'](_0x9508('0x51'),connectionHandler);_0x279e31['on']('close',closeHandler);});}main();