d888dcb1c733fcbc084ea2d1620fcc9d7623b8fc
[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 _0x2c91=['accepted','info','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','then','timeout','update\x20queue\x20report','toLowerCase','consequence','[%s][QUEUE]\x20%s','join','stop','find','Queues','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','lodash','seq-queue','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','defaults','redis','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','emit','clone','push','capitalize','pick','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/whatsappInteraction','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','waiting','body','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','catch','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x419e17,_0x7fe78c){var _0x1f2044=function(_0x3723e6){while(--_0x3723e6){_0x419e17['push'](_0x419e17['shift']());}};_0x1f2044(++_0x7fe78c);}(_0x2c91,0x1db));var _0x12c9=function(_0x10c712,_0x223e99){_0x10c712=_0x10c712-0x0;var _0x184cd3=_0x2c91[_0x10c712];return _0x184cd3;};'use strict';var schema=require(_0x12c9('0x0'));var _=require(_0x12c9('0x1'));var util=require('util');var seqqueue=require(_0x12c9('0x2'));var moment=require('moment');var Redis=require(_0x12c9('0x3'));var config=require(_0x12c9('0x4'));var logger=require(_0x12c9('0x5'))(_0x12c9('0x6'));var strategy=require(_0x12c9('0x7'));config['redis']=_[_0x12c9('0x8')](config[_0x12c9('0x9')],{'host':_0x12c9('0xa'),'port':0x18eb});var io=require(_0x12c9('0xb'))(new Redis(config['redis']));var attributes=['id',_0x12c9('0xc'),_0x12c9('0xd'),_0x12c9('0xe'),_0x12c9('0xf'),_0x12c9('0x10')];function emit(_0x346976,_0x221cd4,_0x54f3ed){io['to'](_0x346976)[_0x12c9('0x11')](_0x221cd4,_0x54f3ed);}function emitChannelQueueInteraction(_0x289081,_0x50eee8,_0x1ad2c0,_0x4bc9f6,_0x4a7b07,_0x3fcec5,_0x38a414,_0x39425c){var _0xa6572c=_[_0x12c9('0x12')](_0x1ad2c0);_0xa6572c[_0x12c9('0xc')]=_0x39425c;_0xa6572c[_0x12c9('0xe')]=_0x50eee8;_0xa6572c[_0x12c9('0xd')]=_0x4bc9f6;_0xa6572c['id']=_0x4a7b07;if(_0x3fcec5){attributes[_0x12c9('0x13')](_[_0x12c9('0x14')](_0x289081)+'InteractionId');_0x38a414[util['format']('%sQueuesWaitingInteractions',_0x289081)][_0x4a7b07]=_[_0x12c9('0x15')](_0xa6572c,attributes);}else{delete _0x38a414[util[_0x12c9('0x16')](_0x12c9('0x17'),_0x289081)][_0x4a7b07];}emit(util['format'](_0x12c9('0x18'),_0x289081,_0x50eee8),util[_0x12c9('0x16')](_0x12c9('0x19'),_0x289081,_0x3fcec5?_0x12c9('0x1a'):_0x12c9('0x1b')),_[_0x12c9('0x15')](_0xa6572c,attributes));}var rpc={'openchannelQueueReport':require(_0x12c9('0x1c')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x12c9('0x1d')),'smsQueueReport':require(_0x12c9('0x1e')),'faxQueueReport':require(_0x12c9('0x1f')),'whatsappQueueReport':require(_0x12c9('0x20')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0x12c9('0x21')),'mailInteraction':require(_0x12c9('0x22')),'openchannelInteraction':require(_0x12c9('0x23')),'smsInteraction':require('../../rpc/smsInteraction'),'whatsappInteraction':require(_0x12c9('0x24'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x12c9('0x25')},'timeout':{'type':'number','message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x5e24c3,_0xa3ad35,_0x10729a,_0x301786){if(_0x5e24c3&&_0xa3ad35&&_0x10729a){_0xa3ad35[_0x12c9('0x26')]+=0x1;var _0xb56f79={'uniqueid':_0x5e24c3,'from':_0x10729a[_0x12c9('0x27')]?_0x10729a[_0x12c9('0x27')][_0x12c9('0xf')]:'','joinAt':moment()[_0x12c9('0x16')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x10729a['contact']?_0x10729a[_0x12c9('0x28')]['id']:null,'ListId':_0x10729a['list']?_0x10729a[_0x12c9('0x29')]['id']:null};_0xb56f79[_[_0x12c9('0x2a')](_0x10729a[_0x12c9('0x2b')])+_0x12c9('0x2c')]=_0xa3ad35['id']||null;_0xb56f79[_[_0x12c9('0x2a')](_0x10729a[_0x12c9('0x2b')])+_0x12c9('0x2d')]=_0x10729a[_0x12c9('0x2e')]?_0x10729a[_0x12c9('0x2e')]['id']:null;_0xb56f79[_[_0x12c9('0x2a')](_0x10729a[_0x12c9('0x2b')])+_0x12c9('0x2f')]=_0x10729a[_0x12c9('0x30')]?_0x10729a['message']['id']:null;_0xb56f79[_[_0x12c9('0x2a')](_0x10729a[_0x12c9('0x2b')])+(_0x10729a[_0x12c9('0x2b')]!==_0x12c9('0x31')?_0x12c9('0x32'):_0x12c9('0x33'))]=_0x10729a[_0x12c9('0xd')]?_0x10729a[_0x12c9('0xd')]['id']:null;logger['info'](util[_0x12c9('0x16')](_0x12c9('0x34'),_0x5e24c3,_0xa3ad35[_0x12c9('0x35')]));emitChannelQueueInteraction(_0x10729a[_0x12c9('0x2b')],_0xa3ad35['name'],_0xb56f79,_0x10729a[_0x12c9('0xd')]['name'],_0x10729a[_0x12c9('0x30')]['id'],!![],_0x301786,_0xa3ad35['id']);if(rpc[_0x10729a['channel']+_0x12c9('0x36')]){return rpc[_0x10729a['channel']+_0x12c9('0x36')]['create'](_0xb56f79)[_0x12c9('0x37')](function(_0x39a8a4){logger[_0x12c9('0x38')](_0x12c9('0x39'),_0x39a8a4);});}}}function stopRouting(_0x17657,_0x2515e0,_0x3badcf,_0x304b60){if(_0x17657&&_0x2515e0){_0x2515e0[_0x12c9('0x26')]-=0x1;var _0xed0cf9={'leaveAt':moment()[_0x12c9('0x16')](_0x12c9('0x3a')),'acceptAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x12c9('0x3b')};logger[_0x12c9('0x3c')](util[_0x12c9('0x16')](_0x12c9('0x3d'),_0x17657,_0x2515e0[_0x12c9('0x35')]));emitChannelQueueInteraction(_0x3badcf[_0x12c9('0x2b')],_0x2515e0[_0x12c9('0x35')],_0x3badcf['body'],_0x3badcf[_0x12c9('0xd')][_0x12c9('0x35')],_0x3badcf[_0x12c9('0x30')]['id'],![],_0x304b60,_0x2515e0['id']);return rpc[_0x3badcf[_0x12c9('0x2b')]+_0x12c9('0x3e')][_0x12c9('0x3f')](_0x3badcf[_0x12c9('0x2e')]['id'],{'queueId':_0x2515e0['id']})[_0x12c9('0x40')](function(){if(rpc[_0x3badcf[_0x12c9('0x2b')]+_0x12c9('0x36')]){return rpc[_0x3badcf[_0x12c9('0x2b')]+_0x12c9('0x36')][_0x12c9('0x3f')](_0x17657,_0xed0cf9)[_0x12c9('0x37')](function(_0x944014){logger[_0x12c9('0x38')]('update\x20queue\x20report',_0x944014);});}});}}function endRouting(_0x42ec3c,_0x24856b,_0xaef8ed,_0x49ee29){if(_0x42ec3c&&_0x24856b){_0x24856b[_0x12c9('0x26')]-=0x1;var _0x3cae0a={'leaveAt':moment()[_0x12c9('0x16')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x12c9('0x16')](_0x12c9('0x3a')),'reason':_0x12c9('0x41')};logger[_0x12c9('0x3c')](util[_0x12c9('0x16')]('[%s][END:QUEUE][NAME:%s]',_0x42ec3c,_0x24856b[_0x12c9('0x35')]));emitChannelQueueInteraction(_0xaef8ed[_0x12c9('0x2b')],_0x24856b[_0x12c9('0x35')],_0xaef8ed['body'],_0xaef8ed[_0x12c9('0xd')][_0x12c9('0x35')],_0xaef8ed[_0x12c9('0x30')]['id'],![],_0x49ee29);if(rpc[_0xaef8ed['channel']+'QueueReport']){return rpc[_0xaef8ed[_0x12c9('0x2b')]+_0x12c9('0x36')][_0x12c9('0x3f')](_0x42ec3c,_0x3cae0a)[_0x12c9('0x37')](function(_0x640552){logger['error'](_0x12c9('0x42'),_0x640552);});}}}function handleFindQueue(_0x468d29){return function(_0x39d3ed){return _0x39d3ed['name'][_0x12c9('0x43')]()===_0x468d29[_0x12c9('0x43')]();};}exports[_0x12c9('0x44')]=function(_0x1f4b33,_0x59fe73,_0x4d8783,_0x3d016a){return function(_0x252c8f){try{var _0x41dca5={'name':_0x59fe73[0x0],'timeout':_0x59fe73[0x1]};var _0x44f27e=queue[_0x12c9('0x0')](_0x41dca5,{'typecast':!![]});if(_0x44f27e['length']){logger[_0x12c9('0x38')](_0x12c9('0x45'),_0x1f4b33,_['map'](_0x44f27e,_0x12c9('0x30'))[_0x12c9('0x46')](',\x20'));_0x252c8f[_0x12c9('0x47')]();}else{var _0x47bbc0=_[_0x12c9('0x48')](_0x4d8783[_0x3d016a['channel']+_0x12c9('0x49')],handleFindQueue(_0x41dca5[_0x12c9('0x35')]));if(_0x47bbc0){startRouting(_0x1f4b33,_0x47bbc0,_0x3d016a,_0x4d8783);var _0x2202c5=(_0x47bbc0['timeout']||0xa)*0x3e8;var _0x73bc8d=(_0x41dca5[_0x12c9('0x41')]||0x14)*0x3e8;var _0x18b441;if(_0x2202c5>_0x73bc8d){_0x73bc8d=_0x2202c5;}var _0x31340e=seqqueue[_0x12c9('0x4a')](_0x2202c5);_0x31340e['id']=_0x1f4b33;_0x31340e[_0x12c9('0x4b')]=_0x2202c5;_0x31340e[_0x12c9('0x4c')]=_0x73bc8d;_0x31340e[_0x12c9('0x2b')]=_0x3d016a[_0x12c9('0x2b')];_0x4d8783[_0x12c9('0x4d')][_0x1f4b33]['on'](_0x12c9('0x4e'),function(){logger[_0x12c9('0x3c')](_0x12c9('0x4f'),_0x1f4b33);stopRouting(_0x1f4b33,_0x47bbc0,_0x3d016a,_0x4d8783);clearTimeout(_0x18b441);_0x18b441=undefined;_0x31340e[_0x12c9('0x50')](!![]);if(_0x4d8783[_0x12c9('0x4d')][_0x1f4b33]){delete _0x4d8783[_0x12c9('0x4d')][_0x1f4b33];}_0x252c8f[_0x12c9('0x47')]();});_0x4d8783[_0x12c9('0x4d')][_0x1f4b33]['on'](_0x12c9('0x51'),function(){if(_0x4d8783['rules'][_0x1f4b33]){delete _0x4d8783[_0x12c9('0x4d')][_0x1f4b33];}});_0x18b441=setTimeout(function(){logger[_0x12c9('0x3c')](_0x12c9('0x52'),_0x1f4b33);endRouting(_0x1f4b33,_0x47bbc0,_0x3d016a,_0x4d8783);clearTimeout(_0x18b441);_0x31340e[_0x12c9('0x50')](!![]);_0x252c8f[_0x12c9('0x53')]();},_0x73bc8d);switch(_0x47bbc0[_0x12c9('0x54')]){case _0x12c9('0x55'):strategy[_0x12c9('0x55')](_0x31340e,_0x47bbc0,_0x4d8783,_0x3d016a);break;default:strategy[_0x12c9('0x56')](_0x31340e,_0x47bbc0,_0x4d8783,_0x3d016a);}}else{logger['error'](_0x12c9('0x57'),_0x1f4b33,_0x41dca5['name']);_0x252c8f[_0x12c9('0x47')]();}}}catch(_0x57f777){logger['error'](_0x12c9('0x45'),_0x1f4b33,_0x57f777[_0x12c9('0x58')]);_0x252c8f[_0x12c9('0x47')]();}};};