57189f5d6b43289dc225a4f5bd1d59d8694c82bf
[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 _0xe08b=['account','queue','from','joinAt','emit','format','%sQueuesWaitingInteractions','%s:queue:%s','save','remove','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','InteractionId','interaction','channel','MessageId','message','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','create\x20queue\x20report','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','error','update\x20queue\x20report','info','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','consequence','validate','length','map','join','stop','find','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','close','next','strategy','rrmemory','log','[%s][QUEUE]\x20%s','stack','lodash','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','redis','localhost','socket.io-emitter','queue_id'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0xe08b,0x184));var _0xbe08=function(_0x2160a9,_0x3cbd9e){_0x2160a9=_0x2160a9-0x0;var _0xa88cf7=_0xe08b[_0x2160a9];return _0xa88cf7;};'use strict';var schema=require('validate');var _=require(_0xbe08('0x0'));var util=require(_0xbe08('0x1'));var seqqueue=require(_0xbe08('0x2'));var moment=require(_0xbe08('0x3'));var Redis=require(_0xbe08('0x4'));var config=require(_0xbe08('0x5'));var logger=require(_0xbe08('0x6'))(_0xbe08('0x7'));var strategy=require('./strategy');config[_0xbe08('0x8')]=_['defaults'](config[_0xbe08('0x8')],{'host':_0xbe08('0x9'),'port':0x18eb});var io=require(_0xbe08('0xa'))(new Redis(config[_0xbe08('0x8')]));var attributes=['id',_0xbe08('0xb'),_0xbe08('0xc'),_0xbe08('0xd'),_0xbe08('0xe'),_0xbe08('0xf')];function emit(_0x6ea1d8,_0x438ca1,_0x29b3fa){io['to'](_0x6ea1d8)[_0xbe08('0x10')](_0x438ca1,_0x29b3fa);}function emitChannelQueueInteraction(_0x2bf1db,_0x504852,_0x28049f,_0x1a0c25,_0x393650,_0x410555,_0x56043b,_0x4d9bc7){var _0x349272=_['clone'](_0x28049f);_0x349272[_0xbe08('0xb')]=_0x4d9bc7;_0x349272['queue']=_0x504852;_0x349272[_0xbe08('0xc')]=_0x1a0c25;_0x349272['id']=_0x393650;if(_0x410555){_0x56043b[util[_0xbe08('0x11')](_0xbe08('0x12'),_0x2bf1db)][_0x393650]=_['pick'](_0x349272,attributes);}else{delete _0x56043b[util['format']('%sQueuesWaitingInteractions',_0x2bf1db)][_0x393650];}emit(util[_0xbe08('0x11')](_0xbe08('0x13'),_0x2bf1db,_0x504852),util[_0xbe08('0x11')]('%s_queue_waiting_interaction:%s',_0x2bf1db,_0x410555?_0xbe08('0x14'):_0xbe08('0x15')),_[_0xbe08('0x16')](_0x349272,attributes));}var rpc={'openchannelQueueReport':require(_0xbe08('0x17')),'mailQueueReport':require(_0xbe08('0x18')),'chatQueueReport':require(_0xbe08('0x19')),'smsQueueReport':require(_0xbe08('0x1a')),'faxQueueReport':require(_0xbe08('0x1b')),'whatsappQueueReport':require(_0xbe08('0x1c'))};var queue=schema({'name':{'type':_0xbe08('0x1d'),'required':!![],'message':_0xbe08('0x1e')},'timeout':{'type':'number','message':_0xbe08('0x1f')}});function startRouting(_0x134458,_0x1bec70,_0x15880a,_0x3a6e6d){if(_0x134458&&_0x1bec70&&_0x15880a){_0x1bec70['waiting']+=0x1;var _0x334dbc={'uniqueid':_0x134458,'from':_0x15880a['body']?_0x15880a[_0xbe08('0x20')]['from']:'','joinAt':moment()[_0xbe08('0x11')](_0xbe08('0x21')),'ContactId':_0x15880a[_0xbe08('0x22')]?_0x15880a[_0xbe08('0x22')]['id']:null,'ListId':_0x15880a[_0xbe08('0x23')]?_0x15880a[_0xbe08('0x23')]['id']:null};_0x334dbc[_[_0xbe08('0x24')](_0x15880a['channel'])+'QueueId']=_0x1bec70['id']||null;_0x334dbc[_[_0xbe08('0x24')](_0x15880a['channel'])+_0xbe08('0x25')]=_0x15880a[_0xbe08('0x26')]?_0x15880a['interaction']['id']:null;_0x334dbc[_[_0xbe08('0x24')](_0x15880a[_0xbe08('0x27')])+_0xbe08('0x28')]=_0x15880a[_0xbe08('0x29')]?_0x15880a[_0xbe08('0x29')]['id']:null;_0x334dbc[_['upperFirst'](_0x15880a[_0xbe08('0x27')])+(_0x15880a[_0xbe08('0x27')]!=='chat'?_0xbe08('0x2a'):_0xbe08('0x2b'))]=_0x15880a[_0xbe08('0xc')]?_0x15880a[_0xbe08('0xc')]['id']:null;logger['info'](util[_0xbe08('0x11')](_0xbe08('0x2c'),_0x134458,_0x1bec70[_0xbe08('0x2d')]));emitChannelQueueInteraction(_0x15880a[_0xbe08('0x27')],_0x1bec70[_0xbe08('0x2d')],_0x334dbc,_0x15880a[_0xbe08('0xc')][_0xbe08('0x2d')],_0x15880a[_0xbe08('0x29')]['id'],!![],_0x3a6e6d,_0x1bec70['id']);if(rpc[_0x15880a[_0xbe08('0x27')]+_0xbe08('0x2e')]){return rpc[_0x15880a[_0xbe08('0x27')]+'QueueReport'][_0xbe08('0x2f')](_0x334dbc)[_0xbe08('0x30')](function(_0x292664){logger['error'](_0xbe08('0x31'));});}}}function stopRouting(_0x43c529,_0x37a299,_0xbbebcf,_0x11e058){if(_0x43c529&&_0x37a299){_0x37a299[_0xbe08('0x32')]-=0x1;var _0xf5adf2={'leaveAt':moment()['format'](_0xbe08('0x21')),'acceptAt':moment()[_0xbe08('0x11')](_0xbe08('0x21')),'reason':_0xbe08('0x33')};logger['info'](util['format'](_0xbe08('0x34'),_0x43c529,_0x37a299[_0xbe08('0x2d')]));emitChannelQueueInteraction(_0xbbebcf['channel'],_0x37a299[_0xbe08('0x2d')],_0xbbebcf['body'],_0xbbebcf['account'][_0xbe08('0x2d')],_0xbbebcf['message']['id'],![],_0x11e058,_0x37a299['id']);if(rpc[_0xbbebcf[_0xbe08('0x27')]+'QueueReport']){return rpc[_0xbbebcf['channel']+'QueueReport']['update'](_0x43c529,_0xf5adf2)[_0xbe08('0x30')](function(_0x10f303){logger[_0xbe08('0x35')](_0xbe08('0x36'));});}}}function endRouting(_0x4eaaac,_0x1eb482,_0x9039f7,_0x1ec70f){if(_0x4eaaac&&_0x1eb482){_0x1eb482[_0xbe08('0x32')]-=0x1;var _0x9ad9f9={'leaveAt':moment()[_0xbe08('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0xbe08('0x37')](util[_0xbe08('0x11')](_0xbe08('0x38'),_0x4eaaac,_0x1eb482[_0xbe08('0x2d')]));emitChannelQueueInteraction(_0x9039f7[_0xbe08('0x27')],_0x1eb482[_0xbe08('0x2d')],_0x9039f7[_0xbe08('0x20')],_0x9039f7[_0xbe08('0xc')][_0xbe08('0x2d')],_0x9039f7[_0xbe08('0x29')]['id'],![],_0x1ec70f);if(rpc[_0x9039f7[_0xbe08('0x27')]+_0xbe08('0x2e')]){return rpc[_0x9039f7[_0xbe08('0x27')]+_0xbe08('0x2e')][_0xbe08('0x39')](_0x4eaaac,_0x9ad9f9)['catch'](function(_0x45b689){logger[_0xbe08('0x35')]('update\x20queue\x20report');});}}}function handleFindQueue(_0x3d2d6a){return function(_0x1709fd){return _0x1709fd[_0xbe08('0x2d')]['toLowerCase']()===_0x3d2d6a[_0xbe08('0x3a')]();};}exports[_0xbe08('0x3b')]=function(_0x567b9f,_0x2f7aa5,_0x389e98,_0x130684){return function(_0x5188f7){try{var _0x3e31fd={'name':_0x2f7aa5[0x0],'timeout':_0x2f7aa5[0x1]};var _0x1b8998=queue[_0xbe08('0x3c')](_0x3e31fd,{'typecast':!![]});if(_0x1b8998[_0xbe08('0x3d')]){logger['error']('[%s][QUEUE]\x20%s',_0x567b9f,_[_0xbe08('0x3e')](_0x1b8998,_0xbe08('0x29'))[_0xbe08('0x3f')](',\x20'));_0x5188f7[_0xbe08('0x40')]();}else{var _0x2cc622=_[_0xbe08('0x41')](_0x389e98[_0x130684[_0xbe08('0x27')]+_0xbe08('0x42')],handleFindQueue(_0x3e31fd['name']));if(_0x2cc622){startRouting(_0x567b9f,_0x2cc622,_0x130684,_0x389e98);var _0x2995ab=(_0x2cc622[_0xbe08('0x43')]||0xa)*0x3e8;var _0x222c22=(_0x3e31fd[_0xbe08('0x43')]||0x14)*0x3e8;var _0x48e47b,_0x4c3ab6;if(_0x2995ab>_0x222c22){_0x222c22=_0x2995ab;}var _0xbee424=seqqueue[_0xbe08('0x44')](_0x2995ab);_0xbee424['id']=_0x567b9f;_0xbee424[_0xbe08('0x45')]=_0x2995ab;_0xbee424[_0xbe08('0x46')]=_0x222c22;_0xbee424[_0xbe08('0x27')]=_0x130684[_0xbe08('0x27')];_0x389e98[_0xbe08('0x47')][_0x567b9f]['on'](_0xbe08('0x48'),function(){logger[_0xbe08('0x37')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x567b9f);stopRouting(_0x567b9f,_0x2cc622,_0x130684,_0x389e98);clearTimeout(_0x48e47b);_0x48e47b=undefined;_0xbee424[_0xbe08('0x49')](!![]);if(_0x389e98[_0xbe08('0x47')][_0x567b9f]){delete _0x389e98[_0xbe08('0x47')][_0x567b9f];}_0x5188f7[_0xbe08('0x40')]();});_0x389e98[_0xbe08('0x47')][_0x567b9f]['on']('complete',function(){if(_0x389e98['rules'][_0x567b9f]){delete _0x389e98[_0xbe08('0x47')][_0x567b9f];}});_0x48e47b=setTimeout(function(){logger[_0xbe08('0x37')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x567b9f);endRouting(_0x567b9f,_0x2cc622,_0x130684,_0x389e98);clearTimeout(_0x48e47b);_0xbee424['close'](!![]);_0x5188f7[_0xbe08('0x4a')]();},_0x222c22);switch(_0x2cc622[_0xbe08('0x4b')]){case _0xbe08('0x4c'):strategy[_0xbe08('0x4c')](_0xbee424,_0x2cc622,_0x389e98,_0x130684);break;default:strategy['beepall'](_0xbee424,_0x2cc622,_0x389e98,_0x130684);}}else{logger[_0xbe08('0x35')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x567b9f,_0x3e31fd[_0xbe08('0x2d')]);_0x5188f7['stop']();}}}catch(_0x46c0a3){console[_0xbe08('0x4d')](_0x46c0a3);logger['error'](_0xbe08('0x4e'),_0x567b9f,_0x46c0a3[_0xbe08('0x4f')]);_0x5188f7[_0xbe08('0x40')]();}};};