Built motion from commit 67e5df37.|2.0.68
[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 _0xa962=['../../rpc/smsQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','body','format','contact','list','channel','QueueId','upperFirst','InteractionId','interaction','MessageId','message','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','catch','create\x20queue\x20report','waiting','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','update','timeout','error','update\x20queue\x20report','toLowerCase','consequence','length','join','stop','Queues','atimeout','qtimeout','rules','close','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stringify','validate','lodash','seq-queue','moment','../../../../config/logger','routing','socket.io-emitter','localhost','account','from','joinAt','emit','queue','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport'];(function(_0x3e6d5d,_0x264c7a){var _0x238923=function(_0x201b19){while(--_0x201b19){_0x3e6d5d['push'](_0x3e6d5d['shift']());}};_0x238923(++_0x264c7a);}(_0xa962,0xea));var _0x2a96=function(_0x3031e5,_0x2a73a9){_0x3031e5=_0x3031e5-0x0;var _0x2e48b4=_0xa962[_0x3031e5];return _0x2e48b4;};'use strict';var schema=require(_0x2a96('0x0'));var _=require(_0x2a96('0x1'));var util=require('util');var seqqueue=require(_0x2a96('0x2'));var moment=require(_0x2a96('0x3'));var logger=require(_0x2a96('0x4'))(_0x2a96('0x5'));var strategy=require('./strategy');var io=require(_0x2a96('0x6'))({'host':_0x2a96('0x7'),'port':0x18eb});var attributes=['id',_0x2a96('0x8'),'queue',_0x2a96('0x9'),_0x2a96('0xa')];function emit(_0x2dcf0c,_0x60e02){io[_0x2a96('0xb')](_0x2dcf0c,_0x60e02);}function emitChannelQueueInteraction(_0x5499d6,_0x438363,_0x2a6371,_0x431069,_0x4d8e6a,_0xc20916,_0x575e85){_0x2a6371[_0x2a96('0xc')]=_0x438363;_0x2a6371['account']=_0x431069;_0x2a6371['id']=_0x4d8e6a;if(_0xc20916){_0x575e85[util['format'](_0x2a96('0xd'),_0x5499d6)][_0x4d8e6a]=_[_0x2a96('0xe')](_0x2a6371,attributes);}else{delete _0x575e85[util['format'](_0x2a96('0xd'),_0x5499d6)][_0x4d8e6a];}emit(util['format'](_0x2a96('0xf'),_0x5499d6,_0xc20916?'save':_0x2a96('0x10')),_[_0x2a96('0xe')](_0x2a6371,attributes));}var rpc={'openchannelQueueReport':require(_0x2a96('0x11')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x2a96('0x12')),'faxQueueReport':require('../../rpc/faxQueueReport')};var queue=schema({'name':{'type':_0x2a96('0x13'),'required':!![],'message':_0x2a96('0x14')},'timeout':{'type':'number','message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x23997b,_0x5da80e,_0x224b1b,_0x452229){if(_0x23997b&&_0x5da80e&&_0x224b1b){_0x5da80e['waiting']+=0x1;var _0x3238ad={'uniqueid':_0x23997b,'from':_0x224b1b[_0x2a96('0x15')]?_0x224b1b[_0x2a96('0x15')][_0x2a96('0x9')]:'','joinAt':moment()[_0x2a96('0x16')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x224b1b['contact']?_0x224b1b[_0x2a96('0x17')]['id']:null,'ListId':_0x224b1b[_0x2a96('0x18')]?_0x224b1b[_0x2a96('0x18')]['id']:null};_0x3238ad[_['upperFirst'](_0x224b1b[_0x2a96('0x19')])+_0x2a96('0x1a')]=_0x5da80e['id']||null;_0x3238ad[_[_0x2a96('0x1b')](_0x224b1b[_0x2a96('0x19')])+_0x2a96('0x1c')]=_0x224b1b[_0x2a96('0x1d')]?_0x224b1b['interaction']['id']:null;_0x3238ad[_['upperFirst'](_0x224b1b['channel'])+_0x2a96('0x1e')]=_0x224b1b['message']?_0x224b1b[_0x2a96('0x1f')]['id']:null;_0x3238ad[_[_0x2a96('0x1b')](_0x224b1b[_0x2a96('0x19')])+(_0x224b1b[_0x2a96('0x19')]!=='chat'?'AccountId':_0x2a96('0x20'))]=_0x224b1b[_0x2a96('0x8')]?_0x224b1b[_0x2a96('0x8')]['id']:null;logger[_0x2a96('0x21')](util[_0x2a96('0x16')](_0x2a96('0x22'),_0x23997b,_0x5da80e['name']));emitChannelQueueInteraction(_0x224b1b[_0x2a96('0x19')],_0x5da80e[_0x2a96('0x23')],_0x3238ad,_0x224b1b[_0x2a96('0x8')][_0x2a96('0x23')],_0x224b1b[_0x2a96('0x1f')]['id'],!![],_0x452229);if(rpc[_0x224b1b['channel']+_0x2a96('0x24')]){return rpc[_0x224b1b[_0x2a96('0x19')]+'QueueReport']['create'](_0x3238ad)[_0x2a96('0x25')](function(_0x4ebf17){logger['error'](_0x2a96('0x26'));});}}}function stopRouting(_0x33522e,_0x3ea82c,_0x54770e,_0x94b4a8){if(_0x33522e&&_0x3ea82c){_0x3ea82c[_0x2a96('0x27')]-=0x1;var _0x53f2ce={'leaveAt':moment()['format'](_0x2a96('0x28')),'acceptAt':moment()[_0x2a96('0x16')](_0x2a96('0x28')),'reason':_0x2a96('0x29')};logger[_0x2a96('0x21')](util[_0x2a96('0x16')](_0x2a96('0x2a'),_0x33522e,_0x3ea82c[_0x2a96('0x23')]));emitChannelQueueInteraction(_0x54770e['channel'],_0x3ea82c[_0x2a96('0x23')],_0x54770e['body'],_0x54770e[_0x2a96('0x8')][_0x2a96('0x23')],_0x54770e[_0x2a96('0x1f')]['id'],![],_0x94b4a8);if(rpc[_0x54770e[_0x2a96('0x19')]+_0x2a96('0x24')]){return rpc[_0x54770e[_0x2a96('0x19')]+_0x2a96('0x24')][_0x2a96('0x2b')](_0x33522e,_0x53f2ce)[_0x2a96('0x25')](function(_0x1b0840){logger['error']('update\x20queue\x20report');});}}}function endRouting(_0x2c6fe8,_0x1c2ec0,_0x3c2cc6,_0x3adb83){if(_0x2c6fe8&&_0x1c2ec0){_0x1c2ec0[_0x2a96('0x27')]-=0x1;var _0x184680={'leaveAt':moment()[_0x2a96('0x16')](_0x2a96('0x28')),'exitAt':moment()[_0x2a96('0x16')](_0x2a96('0x28')),'reason':_0x2a96('0x2c')};logger[_0x2a96('0x21')](util[_0x2a96('0x16')]('[%s][END:QUEUE][NAME:%s]',_0x2c6fe8,_0x1c2ec0['name']));emitChannelQueueInteraction(_0x3c2cc6['channel'],_0x1c2ec0['name'],_0x3c2cc6[_0x2a96('0x15')],_0x3c2cc6[_0x2a96('0x8')][_0x2a96('0x23')],_0x3c2cc6[_0x2a96('0x1f')]['id'],![],_0x3adb83);if(rpc[_0x3c2cc6[_0x2a96('0x19')]+'QueueReport']){return rpc[_0x3c2cc6[_0x2a96('0x19')]+'QueueReport'][_0x2a96('0x2b')](_0x2c6fe8,_0x184680)[_0x2a96('0x25')](function(_0x2ba539){logger[_0x2a96('0x2d')](_0x2a96('0x2e'));});}}}function handleFindQueue(_0x350085){return function(_0x42ed22){return _0x42ed22[_0x2a96('0x23')][_0x2a96('0x2f')]()===_0x350085[_0x2a96('0x2f')]();};}exports[_0x2a96('0x30')]=function(_0xe1e151,_0x3c9d2a,_0x1a7803,_0x59e200){return function(_0x599d35){try{var _0x2eb0c7={'name':_0x3c9d2a[0x0],'timeout':_0x3c9d2a[0x1]};var _0x281029=queue['validate'](_0x2eb0c7,{'typecast':!![]});if(_0x281029[_0x2a96('0x31')]){logger[_0x2a96('0x2d')]('[%s][QUEUE]\x20%s',_0xe1e151,_['map'](_0x281029,'message')[_0x2a96('0x32')](',\x20'));_0x599d35[_0x2a96('0x33')]();}else{var _0x1121e5=_['find'](_0x1a7803[_0x59e200['channel']+_0x2a96('0x34')],handleFindQueue(_0x2eb0c7[_0x2a96('0x23')]));if(_0x1121e5){startRouting(_0xe1e151,_0x1121e5,_0x59e200,_0x1a7803);var _0x10085e=(_0x1121e5['timeout']||0xa)*0x3e8;var _0x563887=(_0x2eb0c7[_0x2a96('0x2c')]||0x14)*0x3e8;var _0x5cb72a,_0x359528;if(_0x10085e>_0x563887){_0x563887=_0x10085e;}var _0x3a0448=seqqueue['createQueue'](_0x10085e);_0x3a0448['id']=_0xe1e151;_0x3a0448[_0x2a96('0x35')]=_0x10085e;_0x3a0448[_0x2a96('0x36')]=_0x563887;_0x3a0448[_0x2a96('0x19')]=_0x59e200[_0x2a96('0x19')];_0x359528=setInterval(function(){if(_0x1a7803[_0x2a96('0x37')]&&!_0x1a7803[_0x2a96('0x37')][_0xe1e151]){stopRouting(_0xe1e151,_0x1121e5,_0x59e200,_0x1a7803);clearTimeout(_0x5cb72a);clearInterval(_0x359528);_0x5cb72a=undefined;_0x3a0448[_0x2a96('0x38')](!![]);_0x599d35[_0x2a96('0x33')]();}},0x3e8);_0x5cb72a=setTimeout(function(){endRouting(_0xe1e151,_0x1121e5,_0x59e200,_0x1a7803);clearInterval(_0x359528);_0x359528=undefined;_0x3a0448['close'](!![]);_0x599d35[_0x2a96('0x39')]();},_0x563887);switch(_0x1121e5[_0x2a96('0x3a')]){case _0x2a96('0x3b'):strategy[_0x2a96('0x3b')](_0x3a0448,_0x1121e5,_0x1a7803,_0x59e200);break;default:strategy['beepall'](_0x3a0448,_0x1121e5,_0x1a7803,_0x59e200);}}else{logger['error'](_0x2a96('0x3c'),_0xe1e151,_0x2eb0c7[_0x2a96('0x23')]);_0x599d35[_0x2a96('0x33')]();}}}catch(_0x866a6c){console[_0x2a96('0x3d')](_0x866a6c);logger['error']('[%s][QUEUE]\x20%s',_0xe1e151,JSON[_0x2a96('0x3e')](_0x866a6c));_0x599d35[_0x2a96('0x33')]();}};};