3ff773d86c001dfcb7c126fe0c7d98394c3baf56
[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 _0x8819=['dnid','uniqueid','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','root','agicommand','maxRetry','addVertex','omit','mxCell','hasOwnProperty','isArray','length','target','addEdge','value','getSquareProject','then','catch','indexOf','agi_','inspect','debug','variables','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','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','start','vertex','gotoc','context','extension','priority','response','code','result','isUndefined','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','clear','toString','agicommand\x20not\x20found','[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','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','listening','connection','syncho','util','moment','../../config/environment','../../config/logger','../../config/license/util','./rpc','./mailRpc','./graph','./vertices','agi','nextTick','stack','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','error','[ERROR]\x20%s','info','arg_1','calleridname','callerid'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x8819,0x94));var _0x9881=function(_0x5aa163,_0x5e3209){_0x5aa163=_0x5aa163-0x0;var _0x192c47=_0x8819[_0x5aa163];return _0x192c47;};'use strict';var parser=require('xml2json');var _=require('lodash');var syncho=require(_0x9881('0x0'));var util=require(_0x9881('0x1'));var moment=require(_0x9881('0x2'));var config=require(_0x9881('0x3'));var logger=require(_0x9881('0x4'))('agi');var utilLicense=require(_0x9881('0x5'));var rpc=require(_0x9881('0x6'));var mailRpc=require(_0x9881('0x7'));var Graph=require(_0x9881('0x8'));var Vertices=require(_0x9881('0x9'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x9881('0xa')]=_['defaults'](config[_0x9881('0xa')],{'ip':'127.0.0.1','port':0x11dd});function connectionHandler(_0x530547){process[_0x9881('0xb')](function(){syncho(function(){try{setChannelVariables(_0x530547);agiHandler(_0x530547);}catch(_0x48d5a6){logger['error'](_0x48d5a6[_0x9881('0xc')]);}});});}function listeningHandler(){console['log'](_0x9881('0xd'),config[_0x9881('0xa')][_0x9881('0xe')]);logger['info'](util[_0x9881('0xf')](_0x9881('0x10'),config[_0x9881('0xa')]['ip'],config[_0x9881('0xa')]['port']));}function errorHandler(_0x3c4a2c){if(_0x3c4a2c&&_0x3c4a2c[_0x9881('0x11')]&&_0x3c4a2c['message']){logger[_0x9881('0x12')](util['format']('[%s]\x20%s',_0x3c4a2c['name'],_0x3c4a2c['message']));}else{logger[_0x9881('0x12')](util[_0x9881('0xf')](_0x9881('0x13'),_0x3c4a2c[_0x9881('0xc')]));}}function closeHandler(){logger[_0x9881('0x14')](util[_0x9881('0xf')]('[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x9881('0x15')],this[_0x9881('0x16')],this[_0x9881('0x17')],this['dnid'],this['uniqueid']));try{createSquareReport(this);}catch(_0x4c92c9){logger[_0x9881('0x12')](_0x4c92c9['stack']);}}function timeoutHandler(){logger[_0x9881('0x14')](util['format']('[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0x9881('0x15')],this[_0x9881('0x16')],this[_0x9881('0x17')],this[_0x9881('0x18')],this[_0x9881('0x19')]));}function hangupHandler(){logger[_0x9881('0x14')](util[_0x9881('0xf')](_0x9881('0x1a'),this[_0x9881('0x15')],this[_0x9881('0x16')],this[_0x9881('0x17')],this[_0x9881('0x18')],this[_0x9881('0x19')]));this[_0x9881('0x1b')]=!![];}function getRoot(_0x174b39){return parser['toJson'](_0x174b39,{'object':!![]})['mxGraphModel'][_0x9881('0x1c')];}function addVertex(_0x513545,_0x499461,_0x1ba558){_0x499461[_0x9881('0x1d')]=_0x1ba558;if(_0x499461['hasOwnProperty']('retry')){_0x499461[_0x9881('0x1e')]=parseInt(_0x499461['retry'],0xa);}_0x513545[_0x9881('0x1f')](_[_0x9881('0x20')](_0x499461,_0x9881('0x21')));}function initGraph(_0x418263,_0x2c3cd1){var _0x14e6f9=new Graph();for(var _0x2f6b7c in _0x418263){if(_0x418263[_0x9881('0x22')](_0x2f6b7c)){if(_[_0x9881('0x23')](_0x418263[_0x2f6b7c])){for(var _0x23727b=0x0;_0x23727b<_0x418263[_0x2f6b7c][_0x9881('0x24')];_0x23727b+=0x1){addVertex(_0x14e6f9,_0x418263[_0x2f6b7c][_0x23727b],_0x2f6b7c);}}else{addVertex(_0x14e6f9,_0x418263[_0x2f6b7c],_0x2f6b7c);}}}for(var _0x2bcdc3=0x0;_0x2bcdc3<_0x2c3cd1[_0x9881('0x24')];_0x2bcdc3+=0x1){if(_0x2c3cd1[_0x2bcdc3]['source']&&_0x2c3cd1[_0x2bcdc3][_0x9881('0x25')]){_0x14e6f9[_0x9881('0x26')](_0x2c3cd1[_0x2bcdc3]['source'],_0x2c3cd1[_0x2bcdc3][_0x9881('0x25')],_0x2c3cd1[_0x2bcdc3][_0x9881('0x27')]);}}return _0x14e6f9;}function getSquareProject(_0x4970be,_0xf59d65){rpc[_0x9881('0x28')](_0x4970be)[_0x9881('0x29')](function(_0x204f2b){_0xf59d65(null,_0x204f2b);})[_0x9881('0x2a')](function(_0x383ff0){_0xf59d65(null,_0x383ff0);});}function createSquareReport(_0x225a4c,_0x2d2b65){rpc['createSquareReport'](_0x225a4c)[_0x9881('0x29')](function(_0xab2a2c){if(_0x2d2b65){_0x2d2b65(null,_0xab2a2c);}})[_0x9881('0x2a')](function(_0x4685a4){if(_0x2d2b65){_0x2d2b65(null,_0x4685a4);}});}function setChannelVariables(_0xffc845){for(var _0x237fce in _0xffc845){if(_0xffc845['hasOwnProperty'](_0x237fce)){if(_0x237fce[_0x9881('0x2b')](_0x9881('0x2c'))===0x0){_0xffc845[_0x237fce['substring'](0x4)]=_0xffc845[_0x237fce];delete _0xffc845[_0x237fce];}}}}function getLogFromObject(_0x2ad5ba){return util[_0x9881('0x2d')](_0x2ad5ba,{'showHidden':![],'depth':null});}function agiHandler(_0x23537b){var _0x101e6e,_0x3d4801,_0x48b39c,_0x3ed677,_0x152abc;logger[_0x9881('0x2e')](_0x9881('0x2f'),JSON[_0x9881('0x30')](_0x23537b,null,0x2));logger[_0x9881('0x14')](util[_0x9881('0xf')](_0x9881('0x31'),_0x23537b[_0x9881('0x15')],_0x23537b[_0x9881('0x16')],_0x23537b[_0x9881('0x17')],_0x23537b[_0x9881('0x18')],_0x23537b[_0x9881('0x19')]));_0x23537b['on'](_0x9881('0x12'),errorHandler);_0x23537b['on'](_0x9881('0x32'),closeHandler);_0x23537b['on'](_0x9881('0x33'),timeoutHandler);_0x23537b['evtHangup']=![];_0x23537b['on'](_0x9881('0x34'),hangupHandler);var _0x5f14d5=getSquareProject[_0x9881('0x35')](null,_0x23537b['arg_1']);if(_0x5f14d5){if(_0x5f14d5[_0x9881('0x36')]){_0x101e6e=getRoot(_0x5f14d5[_0x9881('0x36')]);if(_0x101e6e&&_0x101e6e['start']){logger[_0x9881('0x2e')]('root',JSON[_0x9881('0x30')](_0x101e6e,null,0x2));_0x23537b[_0x9881('0x37')]=moment()[_0x9881('0xf')](_0x9881('0x38'));_0x3d4801=initGraph(_['omit'](_0x101e6e,_0x9881('0x21')),_0x101e6e[_0x9881('0x21')]);_0x48b39c=new Vertices(_0x23537b,rpc,mailRpc);logger[_0x9881('0x14')](util[_0x9881('0xf')](_0x9881('0x39'),_0x23537b[_0x9881('0x15')],_0x23537b[_0x9881('0x16')],_0x23537b['callerid'],_0x23537b[_0x9881('0x18')],_0x23537b['uniqueid']));_0x3d4801[_0x9881('0x3a')](_0x101e6e[_0x9881('0x3b')]['id'],function(_0x1c0396){try{_0x1c0396=_0x48b39c['clear'](_0x1c0396);logger[_0x9881('0x2e')](_0x9881('0x3c'),JSON[_0x9881('0x30')](_0x1c0396,null,0x2));if(_0x1c0396['agicommand']===_0x9881('0x3d')){logger[_0x9881('0x14')]('gotoc\x20block\x20stop\x20traverse\x20BFS');_0x23537b[_0x9881('0x3e')]=_0x1c0396[_0x9881('0x3e')]||_0x23537b[_0x9881('0x3e')];_0x23537b[_0x9881('0x3f')]=_0x1c0396[_0x9881('0x3f')];_0x23537b[_0x9881('0x40')]=_0x1c0396[_0x9881('0x40')]?_0x1c0396[_0x9881('0x40')]-0x1:0x1;return null;}else if(_0x1c0396&&_0x48b39c[_0x1c0396[_0x9881('0x1d')]]){_0x152abc=_0x48b39c[_0x1c0396[_0x9881('0x1d')]](_0x1c0396);logger['info'](_0x9881('0x41'),JSON[_0x9881('0x30')](_0x152abc,null,0x2));if(_0x152abc&&_0x152abc[_0x9881('0x42')]===AGI_CODE_SUCCESS&&_0x152abc[_0x9881('0x43')]!==AGI_RESULT_ERROR&&!_0x23537b[_0x9881('0x1b')]){logger['debug'](_0x9881('0x41'),getLogFromObject(_0x152abc));return _[_0x9881('0x44')](_0x152abc[_0x9881('0x43')])?null:_0x152abc[_0x9881('0x43')]['toString']();}else{logger[_0x9881('0x12')](_0x9881('0x41'),getLogFromObject(_0x152abc));return null;}}else{logger[_0x9881('0x12')]('agicommand\x20not\x20found');return null;}}catch(_0x249c07){logger[_0x9881('0x12')](_0x249c07[_0x9881('0xc')]);return null;}});if(_0x101e6e[_0x9881('0x45')]){logger[_0x9881('0x14')](util[_0x9881('0xf')](_0x9881('0x46'),_0x23537b[_0x9881('0x15')],_0x23537b[_0x9881('0x16')],_0x23537b[_0x9881('0x17')],_0x23537b['dnid'],_0x23537b[_0x9881('0x19')]));_0x3d4801[_0x9881('0x3a')](_0x101e6e[_0x9881('0x45')]['id'],function(_0x5c5d51){try{_0x5c5d51=_0x48b39c[_0x9881('0x47')](_0x5c5d51);logger[_0x9881('0x2e')](_0x9881('0x3c'),JSON['stringify'](_0x5c5d51,null,0x2));if(_0x5c5d51&&_0x48b39c[_0x5c5d51['agicommand']]){_0x152abc=_0x48b39c[_0x5c5d51[_0x9881('0x1d')]](_0x5c5d51);if(_0x152abc){logger[_0x9881('0x2e')](_0x9881('0x41'),getLogFromObject(_0x152abc));return _[_0x9881('0x44')](_0x152abc['result'])?null:_0x152abc['result'][_0x9881('0x48')]();}else{logger[_0x9881('0x12')](_0x9881('0x41'),getLogFromObject(_0x152abc));return null;}}else{logger['error'](_0x9881('0x49'));return null;}}catch(_0x20cea3){logger['error'](_0x20cea3[_0x9881('0xc')]);return null;}});}logger[_0x9881('0x14')](util[_0x9881('0xf')](_0x9881('0x4a'),_0x23537b[_0x9881('0x15')],_0x23537b[_0x9881('0x16')],_0x23537b[_0x9881('0x17')],_0x23537b['dnid'],_0x23537b[_0x9881('0x19')]));logger['info'](util[_0x9881('0xf')](_0x9881('0x4b'),_0x23537b[_0x9881('0x3e')],_0x23537b[_0x9881('0x3f')],parseInt(_0x23537b['priority'],0xa)+0x1));_0x23537b['continueAt'](_0x23537b[_0x9881('0x3e')],_0x23537b[_0x9881('0x3f')],parseInt(_0x23537b[_0x9881('0x40')],0xa)+0x1);_0x23537b['close']();}}else{logger[_0x9881('0x12')](util[_0x9881('0xf')](_0x9881('0x4c'),_0x23537b[_0x9881('0x15')]));_0x23537b[_0x9881('0x4d')](_0x23537b[_0x9881('0x3e')],_0x23537b['extension'],parseInt(_0x23537b[_0x9881('0x40')],0xa)+0x1);_0x23537b[_0x9881('0x32')]();}}else{logger[_0x9881('0x12')](util[_0x9881('0xf')](_0x9881('0x4e'),_0x23537b['arg_1']));_0x23537b['continueAt'](_0x23537b['context'],_0x23537b[_0x9881('0x3f')],parseInt(_0x23537b[_0x9881('0x40')],0xa)+0x1);_0x23537b[_0x9881('0x32')]();}}function main(){var _0x11a9fb;return utilLicense[_0x9881('0x4f')]()[_0x9881('0x29')](function(_0x4da4bf){if(_0x4da4bf){if(_0x4da4bf['voice']){if(_0x4da4bf[_0x9881('0x50')]&&_0x4da4bf[_0x9881('0x50')]>0x0){logger['info'](util[_0x9881('0xf')](_0x9881('0x51'),_0x4da4bf[_0x9881('0x50')]));_0x11a9fb=_0x4da4bf[_0x9881('0x50')];}else{logger['info'](_0x9881('0x52'));}}else{logger['info'](_0x9881('0x53'));_0x11a9fb=-0x1;}}})[_0x9881('0x2a')](function(_0x4c11cb){logger['error']('[LICENSE]',_0x4c11cb['stack']);})[_0x9881('0x45')](function(){var _0x131ea3=require('./server')(config[_0x9881('0xa')][_0x9881('0xe')],config[_0x9881('0xa')]['ip'],_0x11a9fb);_0x131ea3['on'](_0x9881('0x12'),errorHandler);_0x131ea3['on'](_0x9881('0x54'),listeningHandler);_0x131ea3['on'](_0x9881('0x55'),connectionHandler);_0x131ea3['on'](_0x9881('0x32'),closeHandler);});}main();