23b0cac085e16baf1e747fd555bc62279687b611
[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 _0xaa7c=['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','start','joinAt','YYYY-MM-DD\x20HH:mm:ss','mxCell','[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','clear','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','result','isUndefined','toString','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','vertex','agicommand\x20not\x20found','[END]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','continueAt','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','./server','listening','connection','xml2json','../../config/environment','../../config/logger','../../config/license/util','./rpc','./mailRpc','./graph','./vertices','defaults','nextTick','stack','log','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','agi','port','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','message','error','[%s]\x20%s','name','info','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','calleridname','callerid','dnid','uniqueid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','mxGraphModel','root','agicommand','hasOwnProperty','maxRetry','retry','addVertex','omit','isArray','length','source','addEdge','target','value','getSquareProject','then','catch','createSquareReport','indexOf','substring','inspect','debug'];(function(_0x3e966b,_0x3adcb0){var _0x3dc430=function(_0x228aee){while(--_0x228aee){_0x3e966b['push'](_0x3e966b['shift']());}};_0x3dc430(++_0x3adcb0);}(_0xaa7c,0x1ec));var _0xcaa7=function(_0x28c870,_0x5079a8){_0x28c870=_0x28c870-0x0;var _0x13e292=_0xaa7c[_0x28c870];return _0x13e292;};'use strict';var parser=require(_0xcaa7('0x0'));var _=require('lodash');var syncho=require('syncho');var util=require('util');var moment=require('moment');var config=require(_0xcaa7('0x1'));var logger=require(_0xcaa7('0x2'))('agi');var utilLicense=require(_0xcaa7('0x3'));var rpc=require(_0xcaa7('0x4'));var mailRpc=require(_0xcaa7('0x5'));var Graph=require(_0xcaa7('0x6'));var Vertices=require(_0xcaa7('0x7'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config['agi']=_[_0xcaa7('0x8')](config['agi'],{'ip':'127.0.0.1','port':0x11dd});function connectionHandler(_0x4e4fc1){process[_0xcaa7('0x9')](function(){syncho(function(){try{setChannelVariables(_0x4e4fc1);agiHandler(_0x4e4fc1);}catch(_0x4e74c5){logger['error'](_0x4e74c5[_0xcaa7('0xa')]);}});});}function listeningHandler(){console[_0xcaa7('0xb')](_0xcaa7('0xc'),config[_0xcaa7('0xd')][_0xcaa7('0xe')]);logger['info'](util[_0xcaa7('0xf')](_0xcaa7('0x10'),config[_0xcaa7('0xd')]['ip'],config[_0xcaa7('0xd')][_0xcaa7('0xe')]));}function errorHandler(_0xf57d3c){if(_0xf57d3c&&_0xf57d3c['name']&&_0xf57d3c[_0xcaa7('0x11')]){logger[_0xcaa7('0x12')](util[_0xcaa7('0xf')](_0xcaa7('0x13'),_0xf57d3c[_0xcaa7('0x14')],_0xf57d3c[_0xcaa7('0x11')]));}else{logger[_0xcaa7('0x12')](util['format']('[ERROR]\x20%s',_0xf57d3c[_0xcaa7('0xa')]));}}function closeHandler(){logger[_0xcaa7('0x15')](util[_0xcaa7('0xf')](_0xcaa7('0x16'),this['arg_1'],this[_0xcaa7('0x17')],this[_0xcaa7('0x18')],this[_0xcaa7('0x19')],this[_0xcaa7('0x1a')]));try{createSquareReport(this);}catch(_0x46d9b4){logger[_0xcaa7('0x12')](_0x46d9b4[_0xcaa7('0xa')]);}}function timeoutHandler(){logger['info'](util['format'](_0xcaa7('0x1b'),this[_0xcaa7('0x1c')],this[_0xcaa7('0x17')],this[_0xcaa7('0x18')],this[_0xcaa7('0x19')],this[_0xcaa7('0x1a')]));}function hangupHandler(){logger[_0xcaa7('0x15')](util['format'](_0xcaa7('0x1d'),this[_0xcaa7('0x1c')],this[_0xcaa7('0x17')],this[_0xcaa7('0x18')],this[_0xcaa7('0x19')],this[_0xcaa7('0x1a')]));this[_0xcaa7('0x1e')]=!![];}function getRoot(_0x4259b7){return parser[_0xcaa7('0x1f')](_0x4259b7,{'object':!![]})[_0xcaa7('0x20')][_0xcaa7('0x21')];}function addVertex(_0x140c5a,_0x24a18c,_0x56ee3a){_0x24a18c[_0xcaa7('0x22')]=_0x56ee3a;if(_0x24a18c[_0xcaa7('0x23')]('retry')){_0x24a18c[_0xcaa7('0x24')]=parseInt(_0x24a18c[_0xcaa7('0x25')],0xa);}_0x140c5a[_0xcaa7('0x26')](_[_0xcaa7('0x27')](_0x24a18c,'mxCell'));}function initGraph(_0x5d4e7e,_0x3c0b15){var _0x3e1f78=new Graph();for(var _0x3369f2 in _0x5d4e7e){if(_0x5d4e7e[_0xcaa7('0x23')](_0x3369f2)){if(_[_0xcaa7('0x28')](_0x5d4e7e[_0x3369f2])){for(var _0x4ec9e9=0x0;_0x4ec9e9<_0x5d4e7e[_0x3369f2][_0xcaa7('0x29')];_0x4ec9e9+=0x1){addVertex(_0x3e1f78,_0x5d4e7e[_0x3369f2][_0x4ec9e9],_0x3369f2);}}else{addVertex(_0x3e1f78,_0x5d4e7e[_0x3369f2],_0x3369f2);}}}for(var _0x4c6e87=0x0;_0x4c6e87<_0x3c0b15['length'];_0x4c6e87+=0x1){if(_0x3c0b15[_0x4c6e87][_0xcaa7('0x2a')]&&_0x3c0b15[_0x4c6e87]['target']){_0x3e1f78[_0xcaa7('0x2b')](_0x3c0b15[_0x4c6e87][_0xcaa7('0x2a')],_0x3c0b15[_0x4c6e87][_0xcaa7('0x2c')],_0x3c0b15[_0x4c6e87][_0xcaa7('0x2d')]);}}return _0x3e1f78;}function getSquareProject(_0x248ca5,_0x292222){rpc[_0xcaa7('0x2e')](_0x248ca5)[_0xcaa7('0x2f')](function(_0x492843){_0x292222(null,_0x492843);})[_0xcaa7('0x30')](function(_0x27cfd0){_0x292222(null,_0x27cfd0);});}function createSquareReport(_0x24b192,_0x3b2c4c){rpc[_0xcaa7('0x31')](_0x24b192)['then'](function(_0x25c847){if(_0x3b2c4c){_0x3b2c4c(null,_0x25c847);}})[_0xcaa7('0x30')](function(_0xcbeb84){if(_0x3b2c4c){_0x3b2c4c(null,_0xcbeb84);}});}function setChannelVariables(_0x1e88db){for(var _0x17e418 in _0x1e88db){if(_0x1e88db['hasOwnProperty'](_0x17e418)){if(_0x17e418[_0xcaa7('0x32')]('agi_')===0x0){_0x1e88db[_0x17e418[_0xcaa7('0x33')](0x4)]=_0x1e88db[_0x17e418];delete _0x1e88db[_0x17e418];}}}}function getLogFromObject(_0x5b9b7f){return util[_0xcaa7('0x34')](_0x5b9b7f,{'showHidden':![],'depth':null});}function agiHandler(_0x59f2c7){var _0x289e29,_0xf67857,_0x133114,_0x324c0c,_0x473aee;logger[_0xcaa7('0x35')]('variables',JSON[_0xcaa7('0x36')](_0x59f2c7,null,0x2));logger[_0xcaa7('0x15')](util['format'](_0xcaa7('0x37'),_0x59f2c7[_0xcaa7('0x1c')],_0x59f2c7[_0xcaa7('0x17')],_0x59f2c7[_0xcaa7('0x18')],_0x59f2c7['dnid'],_0x59f2c7[_0xcaa7('0x1a')]));_0x59f2c7['on'](_0xcaa7('0x12'),errorHandler);_0x59f2c7['on'](_0xcaa7('0x38'),closeHandler);_0x59f2c7['on'](_0xcaa7('0x39'),timeoutHandler);_0x59f2c7[_0xcaa7('0x1e')]=![];_0x59f2c7['on'](_0xcaa7('0x3a'),hangupHandler);var _0xcb5439=getSquareProject[_0xcaa7('0x3b')](null,_0x59f2c7[_0xcaa7('0x1c')]);if(_0xcb5439){if(_0xcb5439[_0xcaa7('0x3c')]){_0x289e29=getRoot(_0xcb5439[_0xcaa7('0x3c')]);if(_0x289e29&&_0x289e29[_0xcaa7('0x3d')]){logger['debug'](_0xcaa7('0x21'),JSON[_0xcaa7('0x36')](_0x289e29,null,0x2));_0x59f2c7[_0xcaa7('0x3e')]=moment()[_0xcaa7('0xf')](_0xcaa7('0x3f'));_0xf67857=initGraph(_['omit'](_0x289e29,_0xcaa7('0x40')),_0x289e29[_0xcaa7('0x40')]);_0x133114=new Vertices(_0x59f2c7,rpc,mailRpc);logger[_0xcaa7('0x15')](util['format'](_0xcaa7('0x41'),_0x59f2c7[_0xcaa7('0x1c')],_0x59f2c7[_0xcaa7('0x17')],_0x59f2c7[_0xcaa7('0x18')],_0x59f2c7['dnid'],_0x59f2c7[_0xcaa7('0x1a')]));_0xf67857['traverseBFS'](_0x289e29[_0xcaa7('0x3d')]['id'],function(_0x524735){try{_0x524735=_0x133114[_0xcaa7('0x42')](_0x524735);logger['debug']('vertex',JSON[_0xcaa7('0x36')](_0x524735,null,0x2));if(_0x524735[_0xcaa7('0x22')]==='gotoc'){logger[_0xcaa7('0x15')](_0xcaa7('0x43'));_0x59f2c7[_0xcaa7('0x44')]=_0x524735[_0xcaa7('0x44')]||_0x59f2c7[_0xcaa7('0x44')];_0x59f2c7[_0xcaa7('0x45')]=_0x524735[_0xcaa7('0x45')];_0x59f2c7[_0xcaa7('0x46')]=_0x524735['priority']?_0x524735[_0xcaa7('0x46')]-0x1:0x1;return null;}else if(_0x524735&&_0x133114[_0x524735[_0xcaa7('0x22')]]){_0x473aee=_0x133114[_0x524735[_0xcaa7('0x22')]](_0x524735);logger[_0xcaa7('0x15')](_0xcaa7('0x47'),JSON[_0xcaa7('0x36')](_0x473aee,null,0x2));if(_0x473aee&&_0x473aee['code']===AGI_CODE_SUCCESS&&_0x473aee[_0xcaa7('0x48')]!==AGI_RESULT_ERROR&&!_0x59f2c7[_0xcaa7('0x1e')]){logger[_0xcaa7('0x35')](_0xcaa7('0x47'),getLogFromObject(_0x473aee));return _[_0xcaa7('0x49')](_0x473aee['result'])?null:_0x473aee[_0xcaa7('0x48')][_0xcaa7('0x4a')]();}else{logger[_0xcaa7('0x12')]('response',getLogFromObject(_0x473aee));return null;}}else{logger[_0xcaa7('0x12')]('agicommand\x20not\x20found');return null;}}catch(_0x23c9bf){logger[_0xcaa7('0x12')](_0x23c9bf[_0xcaa7('0xa')]);return null;}});if(_0x289e29[_0xcaa7('0x4b')]){logger[_0xcaa7('0x15')](util[_0xcaa7('0xf')](_0xcaa7('0x4c'),_0x59f2c7['arg_1'],_0x59f2c7['calleridname'],_0x59f2c7[_0xcaa7('0x18')],_0x59f2c7['dnid'],_0x59f2c7[_0xcaa7('0x1a')]));_0xf67857['traverseBFS'](_0x289e29[_0xcaa7('0x4b')]['id'],function(_0x492cd0){try{_0x492cd0=_0x133114[_0xcaa7('0x42')](_0x492cd0);logger[_0xcaa7('0x35')](_0xcaa7('0x4d'),JSON[_0xcaa7('0x36')](_0x492cd0,null,0x2));if(_0x492cd0&&_0x133114[_0x492cd0[_0xcaa7('0x22')]]){_0x473aee=_0x133114[_0x492cd0[_0xcaa7('0x22')]](_0x492cd0);if(_0x473aee){logger['debug']('response',getLogFromObject(_0x473aee));return _[_0xcaa7('0x49')](_0x473aee[_0xcaa7('0x48')])?null:_0x473aee['result'][_0xcaa7('0x4a')]();}else{logger[_0xcaa7('0x12')](_0xcaa7('0x47'),getLogFromObject(_0x473aee));return null;}}else{logger[_0xcaa7('0x12')](_0xcaa7('0x4e'));return null;}}catch(_0x2ca644){logger[_0xcaa7('0x12')](_0x2ca644[_0xcaa7('0xa')]);return null;}});}logger[_0xcaa7('0x15')](util[_0xcaa7('0xf')](_0xcaa7('0x4f'),_0x59f2c7[_0xcaa7('0x1c')],_0x59f2c7[_0xcaa7('0x17')],_0x59f2c7[_0xcaa7('0x18')],_0x59f2c7[_0xcaa7('0x19')],_0x59f2c7[_0xcaa7('0x1a')]));logger['info'](util[_0xcaa7('0xf')]('[GOTO]\x20context:\x20%s\x20extension:\x20%s\x20priority:\x20%s',_0x59f2c7[_0xcaa7('0x44')],_0x59f2c7[_0xcaa7('0x45')],parseInt(_0x59f2c7[_0xcaa7('0x46')],0xa)+0x1));_0x59f2c7[_0xcaa7('0x50')](_0x59f2c7[_0xcaa7('0x44')],_0x59f2c7[_0xcaa7('0x45')],parseInt(_0x59f2c7[_0xcaa7('0x46')],0xa)+0x1);_0x59f2c7[_0xcaa7('0x38')]();}}else{logger[_0xcaa7('0x12')](util[_0xcaa7('0xf')](_0xcaa7('0x51'),_0x59f2c7['arg_1']));_0x59f2c7[_0xcaa7('0x50')](_0x59f2c7[_0xcaa7('0x44')],_0x59f2c7[_0xcaa7('0x45')],parseInt(_0x59f2c7['priority'],0xa)+0x1);_0x59f2c7[_0xcaa7('0x38')]();}}else{logger['error'](util[_0xcaa7('0xf')](_0xcaa7('0x52'),_0x59f2c7[_0xcaa7('0x1c')]));_0x59f2c7[_0xcaa7('0x50')](_0x59f2c7['context'],_0x59f2c7[_0xcaa7('0x45')],parseInt(_0x59f2c7[_0xcaa7('0x46')],0xa)+0x1);_0x59f2c7[_0xcaa7('0x38')]();}}function main(){var _0x19a784;return utilLicense[_0xcaa7('0x53')]()[_0xcaa7('0x2f')](function(_0x1a8bc9){if(_0x1a8bc9){if(_0x1a8bc9[_0xcaa7('0x54')]){if(_0x1a8bc9['callysquare']&&_0x1a8bc9[_0xcaa7('0x55')]>0x0){logger[_0xcaa7('0x15')](util[_0xcaa7('0xf')](_0xcaa7('0x56'),_0x1a8bc9[_0xcaa7('0x55')]));_0x19a784=_0x1a8bc9[_0xcaa7('0x55')];}else{logger['info'](_0xcaa7('0x57'));}}else{logger[_0xcaa7('0x15')]('[LICENSE]\x20VOICE\x20IS\x20DISABLED');_0x19a784=-0x1;}}})[_0xcaa7('0x30')](function(_0x1a4a4c){logger[_0xcaa7('0x12')]('[LICENSE]',_0x1a4a4c[_0xcaa7('0xa')]);})[_0xcaa7('0x4b')](function(){var _0x49cfd6=require(_0xcaa7('0x58'))(config[_0xcaa7('0xd')][_0xcaa7('0xe')],config[_0xcaa7('0xd')]['ip'],_0x19a784);_0x49cfd6['on'](_0xcaa7('0x12'),errorHandler);_0x49cfd6['on'](_0xcaa7('0x59'),listeningHandler);_0x49cfd6['on'](_0xcaa7('0x5a'),connectionHandler);_0x49cfd6['on'](_0xcaa7('0x38'),closeHandler);});}main();