Built motion from commit ff78e754.|2.6.29
[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 _0x9d55=['QueueReport','update\x20queue\x20report','timeout','consequence','[%s][QUEUE]\x20%s','stop','Queues','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','validate','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','queue_id','account','queue','from','joinAt','emit','clone','capitalize','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/smsInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','list','upperFirst','channel','InteractionId','interaction','message','AccountId','info','[%s][START:QUEUE][NAME:%s]','name','catch','error','accepted','[%s][STOP:QUEUE][NAME:%s]','Interaction','update'];(function(_0x96de21,_0x273177){var _0x40e967=function(_0x34dffb){while(--_0x34dffb){_0x96de21['push'](_0x96de21['shift']());}};_0x40e967(++_0x273177);}(_0x9d55,0xac));var _0x59d5=function(_0x51ad75,_0x3294a0){_0x51ad75=_0x51ad75-0x0;var _0x40f155=_0x9d55[_0x51ad75];return _0x40f155;};'use strict';var schema=require(_0x59d5('0x0'));var _=require('lodash');var util=require(_0x59d5('0x1'));var seqqueue=require(_0x59d5('0x2'));var moment=require(_0x59d5('0x3'));var Redis=require(_0x59d5('0x4'));var config=require(_0x59d5('0x5'));var logger=require(_0x59d5('0x6'))(_0x59d5('0x7'));var strategy=require(_0x59d5('0x8'));config[_0x59d5('0x9')]=_[_0x59d5('0xa')](config['redis'],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x59d5('0x9')]));var attributes=['id',_0x59d5('0xb'),_0x59d5('0xc'),_0x59d5('0xd'),_0x59d5('0xe'),_0x59d5('0xf')];function emit(_0x151d85,_0x30c7df,_0xeeeed1){io['to'](_0x151d85)[_0x59d5('0x10')](_0x30c7df,_0xeeeed1);}function emitChannelQueueInteraction(_0x39942e,_0x157a59,_0x5aa1b6,_0x775cd3,_0x2d0170,_0x510eca,_0x1d8bb3,_0x508080){var _0x17055d=_[_0x59d5('0x11')](_0x5aa1b6);_0x17055d[_0x59d5('0xb')]=_0x508080;_0x17055d[_0x59d5('0xd')]=_0x157a59;_0x17055d[_0x59d5('0xc')]=_0x775cd3;_0x17055d['id']=_0x2d0170;if(_0x510eca){attributes['push'](_[_0x59d5('0x12')](_0x39942e)+'InteractionId');_0x1d8bb3[util[_0x59d5('0x13')](_0x59d5('0x14'),_0x39942e)][_0x2d0170]=_[_0x59d5('0x15')](_0x17055d,attributes);}else{delete _0x1d8bb3[util[_0x59d5('0x13')](_0x59d5('0x14'),_0x39942e)][_0x2d0170];}emit(util[_0x59d5('0x13')](_0x59d5('0x16'),_0x39942e,_0x157a59),util[_0x59d5('0x13')](_0x59d5('0x17'),_0x39942e,_0x510eca?'save':_0x59d5('0x18')),_[_0x59d5('0x15')](_0x17055d,attributes));}var rpc={'openchannelQueueReport':require(_0x59d5('0x19')),'mailQueueReport':require(_0x59d5('0x1a')),'chatQueueReport':require(_0x59d5('0x1b')),'smsQueueReport':require(_0x59d5('0x1c')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x59d5('0x1d')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0x59d5('0x1e')),'mailInteraction':require(_0x59d5('0x1f')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require(_0x59d5('0x20')),'whatsappInteraction':require('../../rpc/whatsappInteraction')};var queue=schema({'name':{'type':_0x59d5('0x21'),'required':!![],'message':_0x59d5('0x22')},'timeout':{'type':_0x59d5('0x23'),'message':_0x59d5('0x24')}});function startRouting(_0x35721b,_0x27169,_0x58755a,_0x1eff57){if(_0x35721b&&_0x27169&&_0x58755a){_0x27169[_0x59d5('0x25')]+=0x1;var _0x18229f={'uniqueid':_0x35721b,'from':_0x58755a['body']?_0x58755a[_0x59d5('0x26')][_0x59d5('0xe')]:'','joinAt':moment()[_0x59d5('0x13')](_0x59d5('0x27')),'ContactId':_0x58755a['contact']?_0x58755a['contact']['id']:null,'ListId':_0x58755a[_0x59d5('0x28')]?_0x58755a[_0x59d5('0x28')]['id']:null};_0x18229f[_[_0x59d5('0x29')](_0x58755a[_0x59d5('0x2a')])+'QueueId']=_0x27169['id']||null;_0x18229f[_['upperFirst'](_0x58755a[_0x59d5('0x2a')])+_0x59d5('0x2b')]=_0x58755a[_0x59d5('0x2c')]?_0x58755a['interaction']['id']:null;_0x18229f[_[_0x59d5('0x29')](_0x58755a[_0x59d5('0x2a')])+'MessageId']=_0x58755a[_0x59d5('0x2d')]?_0x58755a['message']['id']:null;_0x18229f[_[_0x59d5('0x29')](_0x58755a['channel'])+(_0x58755a[_0x59d5('0x2a')]!=='chat'?_0x59d5('0x2e'):'WebsiteId')]=_0x58755a['account']?_0x58755a['account']['id']:null;logger[_0x59d5('0x2f')](util['format'](_0x59d5('0x30'),_0x35721b,_0x27169['name']));emitChannelQueueInteraction(_0x58755a[_0x59d5('0x2a')],_0x27169[_0x59d5('0x31')],_0x18229f,_0x58755a[_0x59d5('0xc')][_0x59d5('0x31')],_0x58755a['message']['id'],!![],_0x1eff57,_0x27169['id']);if(rpc[_0x58755a[_0x59d5('0x2a')]+'QueueReport']){return rpc[_0x58755a[_0x59d5('0x2a')]+'QueueReport']['create'](_0x18229f)[_0x59d5('0x32')](function(_0x4feea0){logger[_0x59d5('0x33')]('create\x20queue\x20report',_0x4feea0);});}}}function stopRouting(_0x46db43,_0x4b1f3b,_0x13c827,_0x2dd562){if(_0x46db43&&_0x4b1f3b){_0x4b1f3b[_0x59d5('0x25')]-=0x1;var _0x5f1a46={'leaveAt':moment()[_0x59d5('0x13')](_0x59d5('0x27')),'acceptAt':moment()[_0x59d5('0x13')](_0x59d5('0x27')),'reason':_0x59d5('0x34')};logger[_0x59d5('0x2f')](util[_0x59d5('0x13')](_0x59d5('0x35'),_0x46db43,_0x4b1f3b[_0x59d5('0x31')]));emitChannelQueueInteraction(_0x13c827[_0x59d5('0x2a')],_0x4b1f3b[_0x59d5('0x31')],_0x13c827[_0x59d5('0x26')],_0x13c827[_0x59d5('0xc')][_0x59d5('0x31')],_0x13c827[_0x59d5('0x2d')]['id'],![],_0x2dd562,_0x4b1f3b['id']);return rpc[_0x13c827[_0x59d5('0x2a')]+_0x59d5('0x36')][_0x59d5('0x37')](_0x13c827[_0x59d5('0x2c')]['id'],{'queueId':_0x4b1f3b['id']})['then'](function(){if(rpc[_0x13c827[_0x59d5('0x2a')]+_0x59d5('0x38')]){return rpc[_0x13c827[_0x59d5('0x2a')]+_0x59d5('0x38')][_0x59d5('0x37')](_0x46db43,_0x5f1a46)[_0x59d5('0x32')](function(_0x45623e){logger[_0x59d5('0x33')](_0x59d5('0x39'),_0x45623e);});}});}}function endRouting(_0xe6e1ea,_0x393782,_0x311661,_0x1f7141){if(_0xe6e1ea&&_0x393782){_0x393782[_0x59d5('0x25')]-=0x1;var _0x5e670f={'leaveAt':moment()[_0x59d5('0x13')](_0x59d5('0x27')),'exitAt':moment()[_0x59d5('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x59d5('0x3a')};logger[_0x59d5('0x2f')](util['format']('[%s][END:QUEUE][NAME:%s]',_0xe6e1ea,_0x393782['name']));emitChannelQueueInteraction(_0x311661['channel'],_0x393782['name'],_0x311661[_0x59d5('0x26')],_0x311661[_0x59d5('0xc')][_0x59d5('0x31')],_0x311661[_0x59d5('0x2d')]['id'],![],_0x1f7141);if(rpc[_0x311661[_0x59d5('0x2a')]+'QueueReport']){return rpc[_0x311661[_0x59d5('0x2a')]+_0x59d5('0x38')][_0x59d5('0x37')](_0xe6e1ea,_0x5e670f)[_0x59d5('0x32')](function(_0x11d4f5){logger[_0x59d5('0x33')](_0x59d5('0x39'),_0x11d4f5);});}}}function handleFindQueue(_0xca9ab2){return function(_0x3c5174){return _0x3c5174[_0x59d5('0x31')]['toLowerCase']()===_0xca9ab2['toLowerCase']();};}exports[_0x59d5('0x3b')]=function(_0x54d1ec,_0x17a5e6,_0x1d83c6,_0x150054){return function(_0xf1966e){try{var _0x1c2ff2={'name':_0x17a5e6[0x0],'timeout':_0x17a5e6[0x1]};var _0x24e285=queue['validate'](_0x1c2ff2,{'typecast':!![]});if(_0x24e285['length']){logger[_0x59d5('0x33')](_0x59d5('0x3c'),_0x54d1ec,_['map'](_0x24e285,_0x59d5('0x2d'))['join'](',\x20'));_0xf1966e[_0x59d5('0x3d')]();}else{var _0x3c83c5=_['find'](_0x1d83c6[_0x150054[_0x59d5('0x2a')]+_0x59d5('0x3e')],handleFindQueue(_0x1c2ff2[_0x59d5('0x31')]));if(_0x3c83c5){startRouting(_0x54d1ec,_0x3c83c5,_0x150054,_0x1d83c6);var _0x18785f=(_0x3c83c5[_0x59d5('0x3a')]||0xa)*0x3e8;var _0x529b53=(_0x1c2ff2[_0x59d5('0x3a')]||0x14)*0x3e8;var _0x290151;if(_0x18785f>_0x529b53){_0x529b53=_0x18785f;}var _0x1830b5=seqqueue[_0x59d5('0x3f')](_0x18785f);_0x1830b5['id']=_0x54d1ec;_0x1830b5[_0x59d5('0x40')]=_0x18785f;_0x1830b5[_0x59d5('0x41')]=_0x529b53;_0x1830b5[_0x59d5('0x2a')]=_0x150054['channel'];_0x1d83c6[_0x59d5('0x42')][_0x54d1ec]['on'](_0x59d5('0x43'),function(){logger['info'](_0x59d5('0x44'),_0x54d1ec);stopRouting(_0x54d1ec,_0x3c83c5,_0x150054,_0x1d83c6);clearTimeout(_0x290151);_0x290151=undefined;_0x1830b5[_0x59d5('0x45')](!![]);if(_0x1d83c6['rules'][_0x54d1ec]){delete _0x1d83c6['rules'][_0x54d1ec];}_0xf1966e[_0x59d5('0x3d')]();});_0x1d83c6[_0x59d5('0x42')][_0x54d1ec]['on'](_0x59d5('0x46'),function(){if(_0x1d83c6['rules'][_0x54d1ec]){delete _0x1d83c6[_0x59d5('0x42')][_0x54d1ec];}});_0x290151=setTimeout(function(){logger[_0x59d5('0x2f')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x54d1ec);endRouting(_0x54d1ec,_0x3c83c5,_0x150054,_0x1d83c6);clearTimeout(_0x290151);_0x1830b5['close'](!![]);_0xf1966e[_0x59d5('0x47')]();},_0x529b53);switch(_0x3c83c5[_0x59d5('0x48')]){case _0x59d5('0x49'):strategy[_0x59d5('0x49')](_0x1830b5,_0x3c83c5,_0x1d83c6,_0x150054);break;default:strategy[_0x59d5('0x4a')](_0x1830b5,_0x3c83c5,_0x1d83c6,_0x150054);}}else{logger['error'](_0x59d5('0x4b'),_0x54d1ec,_0x1c2ff2['name']);_0xf1966e['stop']();}}}catch(_0x3e92d3){logger[_0x59d5('0x33')](_0x59d5('0x3c'),_0x54d1ec,_0x3e92d3['stack']);_0xf1966e['stop']();}};};