Built motion from commit e6806ed6.|2.6.0
[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 _0x2fed=['body','YYYY-MM-DD\x20HH:mm:ss','contact','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','accepted','info','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','stop','find','Queues','createQueue','atimeout','qtimeout','end','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','lodash','util','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','localhost','socket.io-emitter','queue_id','account','queue','emit','clone','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting'];(function(_0x68f857,_0x207c98){var _0x142b1e=function(_0x21781f){while(--_0x21781f){_0x68f857['push'](_0x68f857['shift']());}};_0x142b1e(++_0x207c98);}(_0x2fed,0x11b));var _0xd2fe=function(_0x4e58fd,_0x279965){_0x4e58fd=_0x4e58fd-0x0;var _0x65f22e=_0x2fed[_0x4e58fd];return _0x65f22e;};'use strict';var schema=require(_0xd2fe('0x0'));var _=require(_0xd2fe('0x1'));var util=require(_0xd2fe('0x2'));var seqqueue=require('seq-queue');var moment=require(_0xd2fe('0x3'));var Redis=require(_0xd2fe('0x4'));var config=require(_0xd2fe('0x5'));var logger=require(_0xd2fe('0x6'))(_0xd2fe('0x7'));var strategy=require(_0xd2fe('0x8'));config[_0xd2fe('0x9')]=_['defaults'](config['redis'],{'host':_0xd2fe('0xa'),'port':0x18eb});var io=require(_0xd2fe('0xb'))(new Redis(config[_0xd2fe('0x9')]));var attributes=['id',_0xd2fe('0xc'),_0xd2fe('0xd'),_0xd2fe('0xe'),'from','joinAt'];function emit(_0x28cd68,_0x342018,_0x1a55f7){io['to'](_0x28cd68)[_0xd2fe('0xf')](_0x342018,_0x1a55f7);}function emitChannelQueueInteraction(_0xcb4ff8,_0x31d3e9,_0x324155,_0x5bfb16,_0x38c41e,_0x1493e9,_0x1df499,_0x16323e){var _0x5c4a32=_[_0xd2fe('0x10')](_0x324155);_0x5c4a32[_0xd2fe('0xc')]=_0x16323e;_0x5c4a32[_0xd2fe('0xe')]=_0x31d3e9;_0x5c4a32[_0xd2fe('0xd')]=_0x5bfb16;_0x5c4a32['id']=_0x38c41e;if(_0x1493e9){_0x1df499[util['format'](_0xd2fe('0x11'),_0xcb4ff8)][_0x38c41e]=_[_0xd2fe('0x12')](_0x5c4a32,attributes);}else{delete _0x1df499[util[_0xd2fe('0x13')](_0xd2fe('0x11'),_0xcb4ff8)][_0x38c41e];}emit(util[_0xd2fe('0x13')](_0xd2fe('0x14'),_0xcb4ff8,_0x31d3e9),util[_0xd2fe('0x13')](_0xd2fe('0x15'),_0xcb4ff8,_0x1493e9?_0xd2fe('0x16'):_0xd2fe('0x17')),_[_0xd2fe('0x12')](_0x5c4a32,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xd2fe('0x18')),'chatQueueReport':require(_0xd2fe('0x19')),'smsQueueReport':require(_0xd2fe('0x1a')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0xd2fe('0x1b'))};var queue=schema({'name':{'type':_0xd2fe('0x1c'),'required':!![],'message':_0xd2fe('0x1d')},'timeout':{'type':_0xd2fe('0x1e'),'message':_0xd2fe('0x1f')}});function startRouting(_0xc7858a,_0x3de237,_0x59e67b,_0x2a1478){if(_0xc7858a&&_0x3de237&&_0x59e67b){_0x3de237[_0xd2fe('0x20')]+=0x1;var _0x34c26b={'uniqueid':_0xc7858a,'from':_0x59e67b['body']?_0x59e67b[_0xd2fe('0x21')]['from']:'','joinAt':moment()[_0xd2fe('0x13')](_0xd2fe('0x22')),'ContactId':_0x59e67b[_0xd2fe('0x23')]?_0x59e67b[_0xd2fe('0x23')]['id']:null,'ListId':_0x59e67b['list']?_0x59e67b['list']['id']:null};_0x34c26b[_[_0xd2fe('0x24')](_0x59e67b[_0xd2fe('0x25')])+_0xd2fe('0x26')]=_0x3de237['id']||null;_0x34c26b[_['upperFirst'](_0x59e67b['channel'])+_0xd2fe('0x27')]=_0x59e67b[_0xd2fe('0x28')]?_0x59e67b[_0xd2fe('0x28')]['id']:null;_0x34c26b[_[_0xd2fe('0x24')](_0x59e67b[_0xd2fe('0x25')])+_0xd2fe('0x29')]=_0x59e67b[_0xd2fe('0x2a')]?_0x59e67b[_0xd2fe('0x2a')]['id']:null;_0x34c26b[_['upperFirst'](_0x59e67b[_0xd2fe('0x25')])+(_0x59e67b[_0xd2fe('0x25')]!==_0xd2fe('0x2b')?_0xd2fe('0x2c'):'WebsiteId')]=_0x59e67b['account']?_0x59e67b[_0xd2fe('0xd')]['id']:null;logger['info'](util[_0xd2fe('0x13')](_0xd2fe('0x2d'),_0xc7858a,_0x3de237[_0xd2fe('0x2e')]));emitChannelQueueInteraction(_0x59e67b[_0xd2fe('0x25')],_0x3de237[_0xd2fe('0x2e')],_0x34c26b,_0x59e67b[_0xd2fe('0xd')][_0xd2fe('0x2e')],_0x59e67b[_0xd2fe('0x2a')]['id'],!![],_0x2a1478,_0x3de237['id']);if(rpc[_0x59e67b[_0xd2fe('0x25')]+'QueueReport']){return rpc[_0x59e67b[_0xd2fe('0x25')]+_0xd2fe('0x2f')][_0xd2fe('0x30')](_0x34c26b)[_0xd2fe('0x31')](function(_0x229c0a){logger[_0xd2fe('0x32')](_0xd2fe('0x33'));});}}}function stopRouting(_0x32e396,_0x6b6856,_0x235057,_0x57d8f0){if(_0x32e396&&_0x6b6856){_0x6b6856['waiting']-=0x1;var _0x329f71={'leaveAt':moment()[_0xd2fe('0x13')](_0xd2fe('0x22')),'acceptAt':moment()[_0xd2fe('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xd2fe('0x34')};logger[_0xd2fe('0x35')](util['format']('[%s][STOP:QUEUE][NAME:%s]',_0x32e396,_0x6b6856[_0xd2fe('0x2e')]));emitChannelQueueInteraction(_0x235057['channel'],_0x6b6856[_0xd2fe('0x2e')],_0x235057[_0xd2fe('0x21')],_0x235057[_0xd2fe('0xd')][_0xd2fe('0x2e')],_0x235057['message']['id'],![],_0x57d8f0,_0x6b6856['id']);if(rpc[_0x235057['channel']+_0xd2fe('0x2f')]){return rpc[_0x235057[_0xd2fe('0x25')]+_0xd2fe('0x2f')]['update'](_0x32e396,_0x329f71)[_0xd2fe('0x31')](function(_0x2ac040){logger[_0xd2fe('0x32')](_0xd2fe('0x36'));});}}}function endRouting(_0x1f4021,_0x2ce6be,_0x22d8f0,_0x5dc720){if(_0x1f4021&&_0x2ce6be){_0x2ce6be[_0xd2fe('0x20')]-=0x1;var _0x1d5749={'leaveAt':moment()[_0xd2fe('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xd2fe('0x37')};logger['info'](util['format'](_0xd2fe('0x38'),_0x1f4021,_0x2ce6be[_0xd2fe('0x2e')]));emitChannelQueueInteraction(_0x22d8f0['channel'],_0x2ce6be[_0xd2fe('0x2e')],_0x22d8f0['body'],_0x22d8f0[_0xd2fe('0xd')][_0xd2fe('0x2e')],_0x22d8f0[_0xd2fe('0x2a')]['id'],![],_0x5dc720);if(rpc[_0x22d8f0[_0xd2fe('0x25')]+'QueueReport']){return rpc[_0x22d8f0[_0xd2fe('0x25')]+'QueueReport'][_0xd2fe('0x39')](_0x1f4021,_0x1d5749)[_0xd2fe('0x31')](function(_0x4cd820){logger[_0xd2fe('0x32')]('update\x20queue\x20report');});}}}function handleFindQueue(_0x419b88){return function(_0x40855a){return _0x40855a[_0xd2fe('0x2e')][_0xd2fe('0x3a')]()===_0x419b88[_0xd2fe('0x3a')]();};}exports[_0xd2fe('0x3b')]=function(_0x3f700d,_0x2a1a7e,_0x40f530,_0x10be9){return function(_0x48a36b){try{var _0x4915d5={'name':_0x2a1a7e[0x0],'timeout':_0x2a1a7e[0x1]};var _0x187115=queue['validate'](_0x4915d5,{'typecast':!![]});if(_0x187115[_0xd2fe('0x3c')]){logger['error'](_0xd2fe('0x3d'),_0x3f700d,_[_0xd2fe('0x3e')](_0x187115,_0xd2fe('0x2a'))['join'](',\x20'));_0x48a36b[_0xd2fe('0x3f')]();}else{var _0x1271f2=_[_0xd2fe('0x40')](_0x40f530[_0x10be9[_0xd2fe('0x25')]+_0xd2fe('0x41')],handleFindQueue(_0x4915d5['name']));if(_0x1271f2){startRouting(_0x3f700d,_0x1271f2,_0x10be9,_0x40f530);var _0x45528e=(_0x1271f2['timeout']||0xa)*0x3e8;var _0x199d77=(_0x4915d5[_0xd2fe('0x37')]||0x14)*0x3e8;var _0x98dd33,_0x31c716;if(_0x45528e>_0x199d77){_0x199d77=_0x45528e;}var _0x20e88c=seqqueue[_0xd2fe('0x42')](_0x45528e);_0x20e88c['id']=_0x3f700d;_0x20e88c[_0xd2fe('0x43')]=_0x45528e;_0x20e88c[_0xd2fe('0x44')]=_0x199d77;_0x20e88c[_0xd2fe('0x25')]=_0x10be9[_0xd2fe('0x25')];_0x40f530['rules'][_0x3f700d]['on'](_0xd2fe('0x45'),function(){logger[_0xd2fe('0x35')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x3f700d);stopRouting(_0x3f700d,_0x1271f2,_0x10be9,_0x40f530);clearTimeout(_0x98dd33);_0x98dd33=undefined;_0x20e88c[_0xd2fe('0x46')](!![]);if(_0x40f530[_0xd2fe('0x47')][_0x3f700d]){delete _0x40f530['rules'][_0x3f700d];}_0x48a36b[_0xd2fe('0x3f')]();});_0x40f530['rules'][_0x3f700d]['on'](_0xd2fe('0x48'),function(){if(_0x40f530[_0xd2fe('0x47')][_0x3f700d]){delete _0x40f530[_0xd2fe('0x47')][_0x3f700d];}});_0x98dd33=setTimeout(function(){logger['info'](_0xd2fe('0x49'),_0x3f700d);endRouting(_0x3f700d,_0x1271f2,_0x10be9,_0x40f530);clearTimeout(_0x98dd33);_0x20e88c[_0xd2fe('0x46')](!![]);_0x48a36b[_0xd2fe('0x4a')]();},_0x199d77);switch(_0x1271f2['strategy']){case _0xd2fe('0x4b'):strategy[_0xd2fe('0x4b')](_0x20e88c,_0x1271f2,_0x40f530,_0x10be9);break;default:strategy[_0xd2fe('0x4c')](_0x20e88c,_0x1271f2,_0x40f530,_0x10be9);}}else{logger[_0xd2fe('0x32')](_0xd2fe('0x4d'),_0x3f700d,_0x4915d5[_0xd2fe('0x2e')]);_0x48a36b[_0xd2fe('0x3f')]();}}}catch(_0x23d200){console['log'](_0x23d200);logger[_0xd2fe('0x32')](_0xd2fe('0x3d'),_0x3f700d,_0x23d200[_0xd2fe('0x4e')]);_0x48a36b[_0xd2fe('0x3f')]();}};};