Built motion from commit f6d7e26c.|2.6.14
[motion2.git] / server / services / routing / server / applications / queue.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 _0x6e94=['timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','validate','length','join','stop','find','Queues','createQueue','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','util','moment','ioredis','../../../../config/environment','../../../../config/logger','./strategy','redis','defaults','localhost','queue','from','emit','clone','account','push','InteractionId','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','save','remove','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','MessageId','message','chat','WebsiteId','info','name','QueueReport','catch','error','create\x20queue\x20report','update','update\x20queue\x20report'];(function(_0x3cf045,_0x53fd86){var _0x2a79c7=function(_0x1a0aa4){while(--_0x1a0aa4){_0x3cf045['push'](_0x3cf045['shift']());}};_0x2a79c7(++_0x53fd86);}(_0x6e94,0x1cd));var _0x46e9=function(_0x4ffa9d,_0x56c145){_0x4ffa9d=_0x4ffa9d-0x0;var _0x377fd3=_0x6e94[_0x4ffa9d];return _0x377fd3;};'use strict';var schema=require('validate');var _=require('lodash');var util=require(_0x46e9('0x0'));var seqqueue=require('seq-queue');var moment=require(_0x46e9('0x1'));var Redis=require(_0x46e9('0x2'));var config=require(_0x46e9('0x3'));var logger=require(_0x46e9('0x4'))('routing');var strategy=require(_0x46e9('0x5'));config[_0x46e9('0x6')]=_[_0x46e9('0x7')](config['redis'],{'host':_0x46e9('0x8'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x46e9('0x6')]));var attributes=['id','queue_id','account',_0x46e9('0x9'),_0x46e9('0xa'),'joinAt'];function emit(_0x4db4ff,_0x14a9b9,_0x7965b8){io['to'](_0x4db4ff)[_0x46e9('0xb')](_0x14a9b9,_0x7965b8);}function emitChannelQueueInteraction(_0x245758,_0x5220f7,_0x580897,_0x5af7ed,_0x526de4,_0x3bc1b1,_0x5c06bf,_0x18b933){var _0x2c1aa5=_[_0x46e9('0xc')](_0x580897);_0x2c1aa5['queue_id']=_0x18b933;_0x2c1aa5[_0x46e9('0x9')]=_0x5220f7;_0x2c1aa5[_0x46e9('0xd')]=_0x5af7ed;_0x2c1aa5['id']=_0x526de4;if(_0x3bc1b1){attributes[_0x46e9('0xe')](_['capitalize'](_0x245758)+_0x46e9('0xf'));_0x5c06bf[util['format'](_0x46e9('0x10'),_0x245758)][_0x526de4]=_[_0x46e9('0x11')](_0x2c1aa5,attributes);}else{delete _0x5c06bf[util[_0x46e9('0x12')](_0x46e9('0x10'),_0x245758)][_0x526de4];}emit(util[_0x46e9('0x12')](_0x46e9('0x13'),_0x245758,_0x5220f7),util[_0x46e9('0x12')]('%s_queue_waiting_interaction:%s',_0x245758,_0x3bc1b1?_0x46e9('0x14'):_0x46e9('0x15')),_[_0x46e9('0x11')](_0x2c1aa5,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x46e9('0x16')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x46e9('0x17')),'faxQueueReport':require(_0x46e9('0x18')),'whatsappQueueReport':require(_0x46e9('0x19'))};var queue=schema({'name':{'type':_0x46e9('0x1a'),'required':!![],'message':_0x46e9('0x1b')},'timeout':{'type':'number','message':_0x46e9('0x1c')}});function startRouting(_0x12624a,_0x43e053,_0x536a0d,_0x49f45a){if(_0x12624a&&_0x43e053&&_0x536a0d){_0x43e053[_0x46e9('0x1d')]+=0x1;var _0x292417={'uniqueid':_0x12624a,'from':_0x536a0d[_0x46e9('0x1e')]?_0x536a0d[_0x46e9('0x1e')][_0x46e9('0xa')]:'','joinAt':moment()['format'](_0x46e9('0x1f')),'ContactId':_0x536a0d[_0x46e9('0x20')]?_0x536a0d['contact']['id']:null,'ListId':_0x536a0d[_0x46e9('0x21')]?_0x536a0d[_0x46e9('0x21')]['id']:null};_0x292417[_[_0x46e9('0x22')](_0x536a0d[_0x46e9('0x23')])+_0x46e9('0x24')]=_0x43e053['id']||null;_0x292417[_[_0x46e9('0x22')](_0x536a0d[_0x46e9('0x23')])+_0x46e9('0xf')]=_0x536a0d[_0x46e9('0x25')]?_0x536a0d[_0x46e9('0x25')]['id']:null;_0x292417[_[_0x46e9('0x22')](_0x536a0d[_0x46e9('0x23')])+_0x46e9('0x26')]=_0x536a0d[_0x46e9('0x27')]?_0x536a0d[_0x46e9('0x27')]['id']:null;_0x292417[_[_0x46e9('0x22')](_0x536a0d[_0x46e9('0x23')])+(_0x536a0d[_0x46e9('0x23')]!==_0x46e9('0x28')?'AccountId':_0x46e9('0x29'))]=_0x536a0d['account']?_0x536a0d[_0x46e9('0xd')]['id']:null;logger[_0x46e9('0x2a')](util['format']('[%s][START:QUEUE][NAME:%s]',_0x12624a,_0x43e053[_0x46e9('0x2b')]));emitChannelQueueInteraction(_0x536a0d[_0x46e9('0x23')],_0x43e053[_0x46e9('0x2b')],_0x292417,_0x536a0d[_0x46e9('0xd')][_0x46e9('0x2b')],_0x536a0d[_0x46e9('0x27')]['id'],!![],_0x49f45a,_0x43e053['id']);if(rpc[_0x536a0d[_0x46e9('0x23')]+_0x46e9('0x2c')]){return rpc[_0x536a0d[_0x46e9('0x23')]+_0x46e9('0x2c')]['create'](_0x292417)[_0x46e9('0x2d')](function(_0x6a6d49){logger[_0x46e9('0x2e')](_0x46e9('0x2f'));});}}}function stopRouting(_0x1a43f0,_0x3d2a2e,_0x16fd8a,_0x3b3229){if(_0x1a43f0&&_0x3d2a2e){_0x3d2a2e[_0x46e9('0x1d')]-=0x1;var _0x3202ee={'leaveAt':moment()[_0x46e9('0x12')](_0x46e9('0x1f')),'acceptAt':moment()[_0x46e9('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'accepted'};logger[_0x46e9('0x2a')](util[_0x46e9('0x12')]('[%s][STOP:QUEUE][NAME:%s]',_0x1a43f0,_0x3d2a2e[_0x46e9('0x2b')]));emitChannelQueueInteraction(_0x16fd8a[_0x46e9('0x23')],_0x3d2a2e['name'],_0x16fd8a[_0x46e9('0x1e')],_0x16fd8a[_0x46e9('0xd')]['name'],_0x16fd8a[_0x46e9('0x27')]['id'],![],_0x3b3229,_0x3d2a2e['id']);if(rpc[_0x16fd8a[_0x46e9('0x23')]+_0x46e9('0x2c')]){return rpc[_0x16fd8a[_0x46e9('0x23')]+_0x46e9('0x2c')][_0x46e9('0x30')](_0x1a43f0,_0x3202ee)[_0x46e9('0x2d')](function(_0x2c3e5a){logger[_0x46e9('0x2e')](_0x46e9('0x31'));});}}}function endRouting(_0x4f0d86,_0x4de44c,_0x45de4f,_0x4e0a01){if(_0x4f0d86&&_0x4de44c){_0x4de44c[_0x46e9('0x1d')]-=0x1;var _0x29aceb={'leaveAt':moment()[_0x46e9('0x12')](_0x46e9('0x1f')),'exitAt':moment()[_0x46e9('0x12')](_0x46e9('0x1f')),'reason':_0x46e9('0x32')};logger[_0x46e9('0x2a')](util[_0x46e9('0x12')](_0x46e9('0x33'),_0x4f0d86,_0x4de44c[_0x46e9('0x2b')]));emitChannelQueueInteraction(_0x45de4f[_0x46e9('0x23')],_0x4de44c[_0x46e9('0x2b')],_0x45de4f[_0x46e9('0x1e')],_0x45de4f[_0x46e9('0xd')][_0x46e9('0x2b')],_0x45de4f[_0x46e9('0x27')]['id'],![],_0x4e0a01);if(rpc[_0x45de4f['channel']+_0x46e9('0x2c')]){return rpc[_0x45de4f['channel']+'QueueReport'][_0x46e9('0x30')](_0x4f0d86,_0x29aceb)['catch'](function(_0x27257f){logger['error'](_0x46e9('0x31'));});}}}function handleFindQueue(_0x7d60b){return function(_0x137893){return _0x137893[_0x46e9('0x2b')]['toLowerCase']()===_0x7d60b[_0x46e9('0x34')]();};}exports[_0x46e9('0x35')]=function(_0x2d3dc5,_0xbd3d7,_0x3d2193,_0x46ff71){return function(_0x4d52af){try{var _0x229948={'name':_0xbd3d7[0x0],'timeout':_0xbd3d7[0x1]};var _0x53afc4=queue[_0x46e9('0x36')](_0x229948,{'typecast':!![]});if(_0x53afc4[_0x46e9('0x37')]){logger[_0x46e9('0x2e')]('[%s][QUEUE]\x20%s',_0x2d3dc5,_['map'](_0x53afc4,_0x46e9('0x27'))[_0x46e9('0x38')](',\x20'));_0x4d52af[_0x46e9('0x39')]();}else{var _0x266f95=_[_0x46e9('0x3a')](_0x3d2193[_0x46ff71[_0x46e9('0x23')]+_0x46e9('0x3b')],handleFindQueue(_0x229948[_0x46e9('0x2b')]));if(_0x266f95){startRouting(_0x2d3dc5,_0x266f95,_0x46ff71,_0x3d2193);var _0x2cf81a=(_0x266f95['timeout']||0xa)*0x3e8;var _0x5c1e27=(_0x229948[_0x46e9('0x32')]||0x14)*0x3e8;var _0x19077f;if(_0x2cf81a>_0x5c1e27){_0x5c1e27=_0x2cf81a;}var _0x5d8eb7=seqqueue[_0x46e9('0x3c')](_0x2cf81a);_0x5d8eb7['id']=_0x2d3dc5;_0x5d8eb7['atimeout']=_0x2cf81a;_0x5d8eb7['qtimeout']=_0x5c1e27;_0x5d8eb7[_0x46e9('0x23')]=_0x46ff71['channel'];_0x3d2193[_0x46e9('0x3d')][_0x2d3dc5]['on'](_0x46e9('0x3e'),function(){logger[_0x46e9('0x2a')](_0x46e9('0x3f'),_0x2d3dc5);stopRouting(_0x2d3dc5,_0x266f95,_0x46ff71,_0x3d2193);clearTimeout(_0x19077f);_0x19077f=undefined;_0x5d8eb7[_0x46e9('0x40')](!![]);if(_0x3d2193[_0x46e9('0x3d')][_0x2d3dc5]){delete _0x3d2193[_0x46e9('0x3d')][_0x2d3dc5];}_0x4d52af[_0x46e9('0x39')]();});_0x3d2193[_0x46e9('0x3d')][_0x2d3dc5]['on'](_0x46e9('0x41'),function(){if(_0x3d2193[_0x46e9('0x3d')][_0x2d3dc5]){delete _0x3d2193[_0x46e9('0x3d')][_0x2d3dc5];}});_0x19077f=setTimeout(function(){logger[_0x46e9('0x2a')](_0x46e9('0x42'),_0x2d3dc5);endRouting(_0x2d3dc5,_0x266f95,_0x46ff71,_0x3d2193);clearTimeout(_0x19077f);_0x5d8eb7[_0x46e9('0x40')](!![]);_0x4d52af[_0x46e9('0x43')]();},_0x5c1e27);switch(_0x266f95[_0x46e9('0x44')]){case _0x46e9('0x45'):strategy['rrmemory'](_0x5d8eb7,_0x266f95,_0x3d2193,_0x46ff71);break;default:strategy['beepall'](_0x5d8eb7,_0x266f95,_0x3d2193,_0x46ff71);}}else{logger[_0x46e9('0x2e')](_0x46e9('0x46'),_0x2d3dc5,_0x229948['name']);_0x4d52af[_0x46e9('0x39')]();}}}catch(_0x19683d){console[_0x46e9('0x47')](_0x19683d);logger[_0x46e9('0x2e')]('[%s][QUEUE]\x20%s',_0x2d3dc5,_0x19683d[_0x46e9('0x48')]);_0x4d52af[_0x46e9('0x39')]();}};};