49259e904bd7af504189d13638f2b68de5f932e6
[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 _0xad26=['QueueReport','catch','create\x20queue\x20report','accepted','info','Interaction','update','then','update\x20queue\x20report','timeout','error','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','stop','atimeout','qtimeout','rules','end','close','complete','next','rrmemory','beepall','stack','validate','lodash','util','seq-queue','moment','../../../../config/environment','../../../../config/logger','routing','./strategy','defaults','redis','localhost','socket.io-emitter','queue_id','account','queue','from','clone','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','pick','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/mailInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','channel','QueueId','upperFirst','interaction','message','AccountId','name'];(function(_0x197b3b,_0x4beb55){var _0x18a817=function(_0x584285){while(--_0x584285){_0x197b3b['push'](_0x197b3b['shift']());}};_0x18a817(++_0x4beb55);}(_0xad26,0x1b1));var _0x6ad2=function(_0x1969a7,_0x5a133a){_0x1969a7=_0x1969a7-0x0;var _0x3d665f=_0xad26[_0x1969a7];return _0x3d665f;};'use strict';var schema=require(_0x6ad2('0x0'));var _=require(_0x6ad2('0x1'));var util=require(_0x6ad2('0x2'));var seqqueue=require(_0x6ad2('0x3'));var moment=require(_0x6ad2('0x4'));var Redis=require('ioredis');var config=require(_0x6ad2('0x5'));var logger=require(_0x6ad2('0x6'))(_0x6ad2('0x7'));var strategy=require(_0x6ad2('0x8'));config['redis']=_[_0x6ad2('0x9')](config[_0x6ad2('0xa')],{'host':_0x6ad2('0xb'),'port':0x18eb});var io=require(_0x6ad2('0xc'))(new Redis(config[_0x6ad2('0xa')]));var attributes=['id',_0x6ad2('0xd'),_0x6ad2('0xe'),_0x6ad2('0xf'),_0x6ad2('0x10'),'joinAt'];function emit(_0x3c6335,_0x5cd744,_0x149f8c){io['to'](_0x3c6335)['emit'](_0x5cd744,_0x149f8c);}function emitChannelQueueInteraction(_0x2cf794,_0x203926,_0x295358,_0x4c5a23,_0xb0d59b,_0x1f8cca,_0x3170f9,_0x2f134f){var _0x573fdb=_[_0x6ad2('0x11')](_0x295358);_0x573fdb[_0x6ad2('0xd')]=_0x2f134f;_0x573fdb[_0x6ad2('0xf')]=_0x203926;_0x573fdb['account']=_0x4c5a23;_0x573fdb['id']=_0xb0d59b;if(_0x1f8cca){attributes[_0x6ad2('0x12')](_[_0x6ad2('0x13')](_0x2cf794)+_0x6ad2('0x14'));_0x3170f9[util[_0x6ad2('0x15')](_0x6ad2('0x16'),_0x2cf794)][_0xb0d59b]=_['pick'](_0x573fdb,attributes);}else{delete _0x3170f9[util['format'](_0x6ad2('0x16'),_0x2cf794)][_0xb0d59b];}emit(util[_0x6ad2('0x15')](_0x6ad2('0x17'),_0x2cf794,_0x203926),util[_0x6ad2('0x15')](_0x6ad2('0x18'),_0x2cf794,_0x1f8cca?_0x6ad2('0x19'):_0x6ad2('0x1a')),_[_0x6ad2('0x1b')](_0x573fdb,attributes));}var rpc={'openchannelQueueReport':require(_0x6ad2('0x1c')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x6ad2('0x1d')),'smsQueueReport':require(_0x6ad2('0x1e')),'faxQueueReport':require(_0x6ad2('0x1f')),'whatsappQueueReport':require(_0x6ad2('0x20')),'chatInteraction':require(_0x6ad2('0x21')),'faxInteraction':require('../../rpc/faxInteraction'),'mailInteraction':require(_0x6ad2('0x22')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require(_0x6ad2('0x23')),'whatsappInteraction':require(_0x6ad2('0x24'))};var queue=schema({'name':{'type':_0x6ad2('0x25'),'required':!![],'message':_0x6ad2('0x26')},'timeout':{'type':_0x6ad2('0x27'),'message':_0x6ad2('0x28')}});function startRouting(_0x3ab3b0,_0x47c94b,_0x169531,_0x10f3b9){if(_0x3ab3b0&&_0x47c94b&&_0x169531){_0x47c94b[_0x6ad2('0x29')]+=0x1;var _0x5c36dc={'uniqueid':_0x3ab3b0,'from':_0x169531[_0x6ad2('0x2a')]?_0x169531['body'][_0x6ad2('0x10')]:'','joinAt':moment()[_0x6ad2('0x15')](_0x6ad2('0x2b')),'ContactId':_0x169531[_0x6ad2('0x2c')]?_0x169531[_0x6ad2('0x2c')]['id']:null,'ListId':_0x169531[_0x6ad2('0x2d')]?_0x169531[_0x6ad2('0x2d')]['id']:null};_0x5c36dc[_['upperFirst'](_0x169531[_0x6ad2('0x2e')])+_0x6ad2('0x2f')]=_0x47c94b['id']||null;_0x5c36dc[_[_0x6ad2('0x30')](_0x169531['channel'])+_0x6ad2('0x14')]=_0x169531[_0x6ad2('0x31')]?_0x169531['interaction']['id']:null;_0x5c36dc[_[_0x6ad2('0x30')](_0x169531[_0x6ad2('0x2e')])+'MessageId']=_0x169531[_0x6ad2('0x32')]?_0x169531[_0x6ad2('0x32')]['id']:null;_0x5c36dc[_[_0x6ad2('0x30')](_0x169531[_0x6ad2('0x2e')])+(_0x169531[_0x6ad2('0x2e')]!=='chat'?_0x6ad2('0x33'):'WebsiteId')]=_0x169531['account']?_0x169531[_0x6ad2('0xe')]['id']:null;logger['info'](util[_0x6ad2('0x15')]('[%s][START:QUEUE][NAME:%s]',_0x3ab3b0,_0x47c94b[_0x6ad2('0x34')]));emitChannelQueueInteraction(_0x169531[_0x6ad2('0x2e')],_0x47c94b[_0x6ad2('0x34')],_0x5c36dc,_0x169531[_0x6ad2('0xe')][_0x6ad2('0x34')],_0x169531[_0x6ad2('0x32')]['id'],!![],_0x10f3b9,_0x47c94b['id']);if(rpc[_0x169531[_0x6ad2('0x2e')]+_0x6ad2('0x35')]){return rpc[_0x169531[_0x6ad2('0x2e')]+_0x6ad2('0x35')]['create'](_0x5c36dc)[_0x6ad2('0x36')](function(_0x1177a5){logger['error'](_0x6ad2('0x37'),_0x1177a5);});}}}function stopRouting(_0x1e1440,_0x454ccb,_0x23a7ee,_0x2444ea){if(_0x1e1440&&_0x454ccb){_0x454ccb['waiting']-=0x1;var _0x54d532={'leaveAt':moment()[_0x6ad2('0x15')](_0x6ad2('0x2b')),'acceptAt':moment()['format'](_0x6ad2('0x2b')),'reason':_0x6ad2('0x38')};logger[_0x6ad2('0x39')](util[_0x6ad2('0x15')]('[%s][STOP:QUEUE][NAME:%s]',_0x1e1440,_0x454ccb[_0x6ad2('0x34')]));emitChannelQueueInteraction(_0x23a7ee['channel'],_0x454ccb[_0x6ad2('0x34')],_0x23a7ee[_0x6ad2('0x2a')],_0x23a7ee[_0x6ad2('0xe')][_0x6ad2('0x34')],_0x23a7ee['message']['id'],![],_0x2444ea,_0x454ccb['id']);return rpc[_0x23a7ee['channel']+_0x6ad2('0x3a')][_0x6ad2('0x3b')](_0x23a7ee['interaction']['id'],{'queueId':_0x454ccb['id']})[_0x6ad2('0x3c')](function(){if(rpc[_0x23a7ee[_0x6ad2('0x2e')]+_0x6ad2('0x35')]){return rpc[_0x23a7ee[_0x6ad2('0x2e')]+'QueueReport'][_0x6ad2('0x3b')](_0x1e1440,_0x54d532)[_0x6ad2('0x36')](function(_0x392c20){logger['error'](_0x6ad2('0x3d'),_0x392c20);});}});}}function endRouting(_0x55ae76,_0x89efe2,_0x256467,_0x5b887b){if(_0x55ae76&&_0x89efe2){_0x89efe2[_0x6ad2('0x29')]-=0x1;var _0x115cf1={'leaveAt':moment()[_0x6ad2('0x15')](_0x6ad2('0x2b')),'exitAt':moment()[_0x6ad2('0x15')](_0x6ad2('0x2b')),'reason':_0x6ad2('0x3e')};logger[_0x6ad2('0x39')](util[_0x6ad2('0x15')]('[%s][END:QUEUE][NAME:%s]',_0x55ae76,_0x89efe2[_0x6ad2('0x34')]));emitChannelQueueInteraction(_0x256467[_0x6ad2('0x2e')],_0x89efe2[_0x6ad2('0x34')],_0x256467['body'],_0x256467['account'][_0x6ad2('0x34')],_0x256467[_0x6ad2('0x32')]['id'],![],_0x5b887b);if(rpc[_0x256467[_0x6ad2('0x2e')]+_0x6ad2('0x35')]){return rpc[_0x256467[_0x6ad2('0x2e')]+_0x6ad2('0x35')][_0x6ad2('0x3b')](_0x55ae76,_0x115cf1)[_0x6ad2('0x36')](function(_0x74a047){logger[_0x6ad2('0x3f')](_0x6ad2('0x3d'),_0x74a047);});}}}function handleFindQueue(_0xb7dbe9){return function(_0x41bc14){return _0x41bc14[_0x6ad2('0x34')][_0x6ad2('0x40')]()===_0xb7dbe9['toLowerCase']();};}exports[_0x6ad2('0x41')]=function(_0x4f06d2,_0x39bfe7,_0x11d3de,_0x480d2d){return function(_0x343e6b){try{var _0x4cd550={'name':_0x39bfe7[0x0],'timeout':_0x39bfe7[0x1]};var _0x169610=queue[_0x6ad2('0x0')](_0x4cd550,{'typecast':!![]});if(_0x169610[_0x6ad2('0x42')]){logger[_0x6ad2('0x3f')](_0x6ad2('0x43'),_0x4f06d2,_[_0x6ad2('0x44')](_0x169610,'message')[_0x6ad2('0x45')](',\x20'));_0x343e6b[_0x6ad2('0x46')]();}else{var _0x2f515a=_['find'](_0x11d3de[_0x480d2d[_0x6ad2('0x2e')]+'Queues'],handleFindQueue(_0x4cd550[_0x6ad2('0x34')]));if(_0x2f515a){startRouting(_0x4f06d2,_0x2f515a,_0x480d2d,_0x11d3de);var _0x8b16bf=(_0x2f515a[_0x6ad2('0x3e')]||0xa)*0x3e8;var _0x55d063=(_0x4cd550[_0x6ad2('0x3e')]||0x14)*0x3e8;var _0x24b129;if(_0x8b16bf>_0x55d063){_0x55d063=_0x8b16bf;}var _0x21ba4b=seqqueue['createQueue'](_0x8b16bf);_0x21ba4b['id']=_0x4f06d2;_0x21ba4b[_0x6ad2('0x47')]=_0x8b16bf;_0x21ba4b[_0x6ad2('0x48')]=_0x55d063;_0x21ba4b['channel']=_0x480d2d['channel'];_0x11d3de[_0x6ad2('0x49')][_0x4f06d2]['on'](_0x6ad2('0x4a'),function(){logger['info']('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x4f06d2);stopRouting(_0x4f06d2,_0x2f515a,_0x480d2d,_0x11d3de);clearTimeout(_0x24b129);_0x24b129=undefined;_0x21ba4b[_0x6ad2('0x4b')](!![]);if(_0x11d3de['rules'][_0x4f06d2]){delete _0x11d3de[_0x6ad2('0x49')][_0x4f06d2];}_0x343e6b['stop']();});_0x11d3de[_0x6ad2('0x49')][_0x4f06d2]['on'](_0x6ad2('0x4c'),function(){if(_0x11d3de[_0x6ad2('0x49')][_0x4f06d2]){delete _0x11d3de['rules'][_0x4f06d2];}});_0x24b129=setTimeout(function(){logger[_0x6ad2('0x39')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x4f06d2);endRouting(_0x4f06d2,_0x2f515a,_0x480d2d,_0x11d3de);clearTimeout(_0x24b129);_0x21ba4b[_0x6ad2('0x4b')](!![]);_0x343e6b[_0x6ad2('0x4d')]();},_0x55d063);switch(_0x2f515a['strategy']){case _0x6ad2('0x4e'):strategy['rrmemory'](_0x21ba4b,_0x2f515a,_0x11d3de,_0x480d2d);break;default:strategy[_0x6ad2('0x4f')](_0x21ba4b,_0x2f515a,_0x11d3de,_0x480d2d);}}else{logger[_0x6ad2('0x3f')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x4f06d2,_0x4cd550[_0x6ad2('0x34')]);_0x343e6b[_0x6ad2('0x46')]();}}}catch(_0x25ff87){logger[_0x6ad2('0x3f')](_0x6ad2('0x43'),_0x4f06d2,_0x25ff87[_0x6ad2('0x50')]);_0x343e6b[_0x6ad2('0x46')]();}};};