Built motion from commit 9d7072cc.|2.5.39
[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 _0xdd8f=['upperFirst','QueueId','channel','InteractionId','interaction','MessageId','message','chat','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','waiting','timeout','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','consequence','length','map','stop','find','createQueue','atimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','[%s][QUEUE]\x20%s','validate','lodash','util','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','socket.io-emitter','queue_id','account','queue','from','emit','%sQueuesWaitingInteractions','format','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list'];(function(_0x37dcaa,_0x43dafe){var _0x1054b8=function(_0x13a8c0){while(--_0x13a8c0){_0x37dcaa['push'](_0x37dcaa['shift']());}};_0x1054b8(++_0x43dafe);}(_0xdd8f,0x1ad));var _0xfdd8=function(_0x8a577c,_0x3c35be){_0x8a577c=_0x8a577c-0x0;var _0x5c5168=_0xdd8f[_0x8a577c];return _0x5c5168;};'use strict';var schema=require(_0xfdd8('0x0'));var _=require(_0xfdd8('0x1'));var util=require(_0xfdd8('0x2'));var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0xfdd8('0x3'));var config=require('../../../../config/environment');var logger=require(_0xfdd8('0x4'))(_0xfdd8('0x5'));var strategy=require(_0xfdd8('0x6'));config[_0xfdd8('0x7')]=_[_0xfdd8('0x8')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0xfdd8('0x9'))(new Redis(config[_0xfdd8('0x7')]));var attributes=['id',_0xfdd8('0xa'),_0xfdd8('0xb'),_0xfdd8('0xc'),_0xfdd8('0xd'),'joinAt'];function emit(_0x1fae7b,_0x845db0,_0x5b9f44){io['to'](_0x1fae7b)[_0xfdd8('0xe')](_0x845db0,_0x5b9f44);}function emitChannelQueueInteraction(_0x34a63b,_0x1e45fe,_0x2d9d64,_0x1a0498,_0x278b3e,_0x54dda9,_0x5914e6,_0x197b6b){var _0x4b0e60=_['clone'](_0x2d9d64);_0x4b0e60[_0xfdd8('0xa')]=_0x197b6b;_0x4b0e60[_0xfdd8('0xc')]=_0x1e45fe;_0x4b0e60[_0xfdd8('0xb')]=_0x1a0498;_0x4b0e60['id']=_0x278b3e;if(_0x54dda9){_0x5914e6[util['format'](_0xfdd8('0xf'),_0x34a63b)][_0x278b3e]=_['pick'](_0x4b0e60,attributes);}else{delete _0x5914e6[util[_0xfdd8('0x10')]('%sQueuesWaitingInteractions',_0x34a63b)][_0x278b3e];}emit(util[_0xfdd8('0x10')](_0xfdd8('0x11'),_0x34a63b,_0x1e45fe),util['format'](_0xfdd8('0x12'),_0x34a63b,_0x54dda9?'save':_0xfdd8('0x13')),_['pick'](_0x4b0e60,attributes));}var rpc={'openchannelQueueReport':require(_0xfdd8('0x14')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0xfdd8('0x15')),'smsQueueReport':require(_0xfdd8('0x16')),'faxQueueReport':require(_0xfdd8('0x17')),'whatsappQueueReport':require(_0xfdd8('0x18'))};var queue=schema({'name':{'type':_0xfdd8('0x19'),'required':!![],'message':_0xfdd8('0x1a')},'timeout':{'type':_0xfdd8('0x1b'),'message':_0xfdd8('0x1c')}});function startRouting(_0x221f81,_0x257c76,_0x321cd9,_0x4ddfdc){if(_0x221f81&&_0x257c76&&_0x321cd9){_0x257c76['waiting']+=0x1;var _0x3952d5={'uniqueid':_0x221f81,'from':_0x321cd9[_0xfdd8('0x1d')]?_0x321cd9[_0xfdd8('0x1d')]['from']:'','joinAt':moment()['format'](_0xfdd8('0x1e')),'ContactId':_0x321cd9['contact']?_0x321cd9[_0xfdd8('0x1f')]['id']:null,'ListId':_0x321cd9[_0xfdd8('0x20')]?_0x321cd9[_0xfdd8('0x20')]['id']:null};_0x3952d5[_[_0xfdd8('0x21')](_0x321cd9['channel'])+_0xfdd8('0x22')]=_0x257c76['id']||null;_0x3952d5[_[_0xfdd8('0x21')](_0x321cd9[_0xfdd8('0x23')])+_0xfdd8('0x24')]=_0x321cd9['interaction']?_0x321cd9[_0xfdd8('0x25')]['id']:null;_0x3952d5[_[_0xfdd8('0x21')](_0x321cd9[_0xfdd8('0x23')])+_0xfdd8('0x26')]=_0x321cd9['message']?_0x321cd9[_0xfdd8('0x27')]['id']:null;_0x3952d5[_['upperFirst'](_0x321cd9['channel'])+(_0x321cd9['channel']!==_0xfdd8('0x28')?'AccountId':'WebsiteId')]=_0x321cd9[_0xfdd8('0xb')]?_0x321cd9[_0xfdd8('0xb')]['id']:null;logger[_0xfdd8('0x29')](util[_0xfdd8('0x10')](_0xfdd8('0x2a'),_0x221f81,_0x257c76['name']));emitChannelQueueInteraction(_0x321cd9[_0xfdd8('0x23')],_0x257c76[_0xfdd8('0x2b')],_0x3952d5,_0x321cd9[_0xfdd8('0xb')][_0xfdd8('0x2b')],_0x321cd9[_0xfdd8('0x27')]['id'],!![],_0x4ddfdc,_0x257c76['id']);if(rpc[_0x321cd9[_0xfdd8('0x23')]+_0xfdd8('0x2c')]){return rpc[_0x321cd9['channel']+_0xfdd8('0x2c')][_0xfdd8('0x2d')](_0x3952d5)[_0xfdd8('0x2e')](function(_0x383779){logger[_0xfdd8('0x2f')](_0xfdd8('0x30'));});}}}function stopRouting(_0x5001eb,_0x2b2c35,_0x36ff88,_0x27fd38){if(_0x5001eb&&_0x2b2c35){_0x2b2c35['waiting']-=0x1;var _0x4fb1cd={'leaveAt':moment()[_0xfdd8('0x10')](_0xfdd8('0x1e')),'acceptAt':moment()[_0xfdd8('0x10')](_0xfdd8('0x1e')),'reason':_0xfdd8('0x31')};logger[_0xfdd8('0x29')](util['format'](_0xfdd8('0x32'),_0x5001eb,_0x2b2c35[_0xfdd8('0x2b')]));emitChannelQueueInteraction(_0x36ff88['channel'],_0x2b2c35[_0xfdd8('0x2b')],_0x36ff88[_0xfdd8('0x1d')],_0x36ff88[_0xfdd8('0xb')][_0xfdd8('0x2b')],_0x36ff88[_0xfdd8('0x27')]['id'],![],_0x27fd38,_0x2b2c35['id']);if(rpc[_0x36ff88[_0xfdd8('0x23')]+_0xfdd8('0x2c')]){return rpc[_0x36ff88[_0xfdd8('0x23')]+'QueueReport']['update'](_0x5001eb,_0x4fb1cd)[_0xfdd8('0x2e')](function(_0x5365f7){logger[_0xfdd8('0x2f')](_0xfdd8('0x33'));});}}}function endRouting(_0x4258ad,_0x1d711e,_0x3cd377,_0x391933){if(_0x4258ad&&_0x1d711e){_0x1d711e[_0xfdd8('0x34')]-=0x1;var _0x219604={'leaveAt':moment()[_0xfdd8('0x10')](_0xfdd8('0x1e')),'exitAt':moment()[_0xfdd8('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xfdd8('0x35')};logger[_0xfdd8('0x29')](util['format'](_0xfdd8('0x36'),_0x4258ad,_0x1d711e[_0xfdd8('0x2b')]));emitChannelQueueInteraction(_0x3cd377[_0xfdd8('0x23')],_0x1d711e[_0xfdd8('0x2b')],_0x3cd377[_0xfdd8('0x1d')],_0x3cd377[_0xfdd8('0xb')][_0xfdd8('0x2b')],_0x3cd377['message']['id'],![],_0x391933);if(rpc[_0x3cd377['channel']+'QueueReport']){return rpc[_0x3cd377[_0xfdd8('0x23')]+_0xfdd8('0x2c')][_0xfdd8('0x37')](_0x4258ad,_0x219604)[_0xfdd8('0x2e')](function(_0x2b6994){logger['error'](_0xfdd8('0x33'));});}}}function handleFindQueue(_0x4ec488){return function(_0x2e3a2d){return _0x2e3a2d[_0xfdd8('0x2b')]['toLowerCase']()===_0x4ec488[_0xfdd8('0x38')]();};}exports[_0xfdd8('0x39')]=function(_0x193de6,_0xa6e954,_0x14a184,_0x12ad96){return function(_0x1eb28b){try{var _0x51f734={'name':_0xa6e954[0x0],'timeout':_0xa6e954[0x1]};var _0x252f5d=queue[_0xfdd8('0x0')](_0x51f734,{'typecast':!![]});if(_0x252f5d[_0xfdd8('0x3a')]){logger[_0xfdd8('0x2f')]('[%s][QUEUE]\x20%s',_0x193de6,_[_0xfdd8('0x3b')](_0x252f5d,_0xfdd8('0x27'))['join'](',\x20'));_0x1eb28b[_0xfdd8('0x3c')]();}else{var _0x4a4c95=_[_0xfdd8('0x3d')](_0x14a184[_0x12ad96[_0xfdd8('0x23')]+'Queues'],handleFindQueue(_0x51f734[_0xfdd8('0x2b')]));if(_0x4a4c95){startRouting(_0x193de6,_0x4a4c95,_0x12ad96,_0x14a184);var _0x1b3431=(_0x4a4c95['timeout']||0xa)*0x3e8;var _0x371007=(_0x51f734[_0xfdd8('0x35')]||0x14)*0x3e8;var _0x58b520,_0x31b80d;if(_0x1b3431>_0x371007){_0x371007=_0x1b3431;}var _0x23b381=seqqueue[_0xfdd8('0x3e')](_0x1b3431);_0x23b381['id']=_0x193de6;_0x23b381[_0xfdd8('0x3f')]=_0x1b3431;_0x23b381['qtimeout']=_0x371007;_0x23b381['channel']=_0x12ad96['channel'];_0x14a184[_0xfdd8('0x40')][_0x193de6]['on'](_0xfdd8('0x41'),function(){logger[_0xfdd8('0x29')](_0xfdd8('0x42'),_0x193de6);stopRouting(_0x193de6,_0x4a4c95,_0x12ad96,_0x14a184);clearTimeout(_0x58b520);_0x58b520=undefined;_0x23b381[_0xfdd8('0x43')](!![]);if(_0x14a184['rules'][_0x193de6]){delete _0x14a184[_0xfdd8('0x40')][_0x193de6];}_0x1eb28b[_0xfdd8('0x3c')]();});_0x14a184[_0xfdd8('0x40')][_0x193de6]['on'](_0xfdd8('0x44'),function(){if(_0x14a184['rules'][_0x193de6]){delete _0x14a184[_0xfdd8('0x40')][_0x193de6];}});_0x58b520=setTimeout(function(){logger['info'](_0xfdd8('0x45'),_0x193de6);endRouting(_0x193de6,_0x4a4c95,_0x12ad96,_0x14a184);clearTimeout(_0x58b520);_0x23b381[_0xfdd8('0x43')](!![]);_0x1eb28b[_0xfdd8('0x46')]();},_0x371007);switch(_0x4a4c95[_0xfdd8('0x47')]){case _0xfdd8('0x48'):strategy[_0xfdd8('0x48')](_0x23b381,_0x4a4c95,_0x14a184,_0x12ad96);break;default:strategy[_0xfdd8('0x49')](_0x23b381,_0x4a4c95,_0x14a184,_0x12ad96);}}else{logger[_0xfdd8('0x2f')](_0xfdd8('0x4a'),_0x193de6,_0x51f734[_0xfdd8('0x2b')]);_0x1eb28b[_0xfdd8('0x3c')]();}}}catch(_0x4bd924){console[_0xfdd8('0x4b')](_0x4bd924);logger['error'](_0xfdd8('0x4c'),_0x193de6,_0x4bd924['stack']);_0x1eb28b[_0xfdd8('0x3c')]();}};};