Built motion from commit e1760111.|2.6.18
[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 _0x04e9=['error','create\x20queue\x20report','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','consequence','validate','length','[%s][QUEUE]\x20%s','map','join','stop','find','Queues','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','rrmemory','beepall','log','stack','lodash','util','seq-queue','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','from','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','pick','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','QueueId','upperFirst','channel','interaction','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch'];(function(_0x2b6f2b,_0x29755d){var _0x4c24be=function(_0x29db70){while(--_0x29db70){_0x2b6f2b['push'](_0x2b6f2b['shift']());}};_0x4c24be(++_0x29755d);}(_0x04e9,0xcb));var _0x904e=function(_0x3c7589,_0x756e16){_0x3c7589=_0x3c7589-0x0;var _0x523212=_0x04e9[_0x3c7589];return _0x523212;};'use strict';var schema=require('validate');var _=require(_0x904e('0x0'));var util=require(_0x904e('0x1'));var seqqueue=require(_0x904e('0x2'));var moment=require('moment');var Redis=require(_0x904e('0x3'));var config=require(_0x904e('0x4'));var logger=require(_0x904e('0x5'))(_0x904e('0x6'));var strategy=require(_0x904e('0x7'));config[_0x904e('0x8')]=_[_0x904e('0x9')](config[_0x904e('0x8')],{'host':_0x904e('0xa'),'port':0x18eb});var io=require(_0x904e('0xb'))(new Redis(config[_0x904e('0x8')]));var attributes=['id',_0x904e('0xc'),_0x904e('0xd'),_0x904e('0xe'),_0x904e('0xf'),'joinAt'];function emit(_0x43fbac,_0x90c5d2,_0x2d03ad){io['to'](_0x43fbac)['emit'](_0x90c5d2,_0x2d03ad);}function emitChannelQueueInteraction(_0x58e4e0,_0x1afbab,_0x5b0f0b,_0x3ec8f9,_0x368bf6,_0x4751c4,_0x326d76,_0x405d6a){var _0x4e3274=_['clone'](_0x5b0f0b);_0x4e3274[_0x904e('0xc')]=_0x405d6a;_0x4e3274[_0x904e('0xe')]=_0x1afbab;_0x4e3274[_0x904e('0xd')]=_0x3ec8f9;_0x4e3274['id']=_0x368bf6;if(_0x4751c4){attributes[_0x904e('0x10')](_[_0x904e('0x11')](_0x58e4e0)+_0x904e('0x12'));_0x326d76[util[_0x904e('0x13')](_0x904e('0x14'),_0x58e4e0)][_0x368bf6]=_['pick'](_0x4e3274,attributes);}else{delete _0x326d76[util[_0x904e('0x13')](_0x904e('0x14'),_0x58e4e0)][_0x368bf6];}emit(util[_0x904e('0x13')](_0x904e('0x15'),_0x58e4e0,_0x1afbab),util[_0x904e('0x13')](_0x904e('0x16'),_0x58e4e0,_0x4751c4?_0x904e('0x17'):_0x904e('0x18')),_[_0x904e('0x19')](_0x4e3274,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x904e('0x1a')),'chatQueueReport':require(_0x904e('0x1b')),'smsQueueReport':require(_0x904e('0x1c')),'faxQueueReport':require(_0x904e('0x1d')),'whatsappQueueReport':require(_0x904e('0x1e'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x904e('0x1f')},'timeout':{'type':_0x904e('0x20'),'message':_0x904e('0x21')}});function startRouting(_0x23fe03,_0x490b7e,_0x2252eb,_0xce0fae){if(_0x23fe03&&_0x490b7e&&_0x2252eb){_0x490b7e['waiting']+=0x1;var _0x4eff60={'uniqueid':_0x23fe03,'from':_0x2252eb[_0x904e('0x22')]?_0x2252eb['body']['from']:'','joinAt':moment()[_0x904e('0x13')](_0x904e('0x23')),'ContactId':_0x2252eb[_0x904e('0x24')]?_0x2252eb[_0x904e('0x24')]['id']:null,'ListId':_0x2252eb[_0x904e('0x25')]?_0x2252eb['list']['id']:null};_0x4eff60[_['upperFirst'](_0x2252eb['channel'])+_0x904e('0x26')]=_0x490b7e['id']||null;_0x4eff60[_[_0x904e('0x27')](_0x2252eb[_0x904e('0x28')])+_0x904e('0x12')]=_0x2252eb[_0x904e('0x29')]?_0x2252eb[_0x904e('0x29')]['id']:null;_0x4eff60[_['upperFirst'](_0x2252eb[_0x904e('0x28')])+'MessageId']=_0x2252eb[_0x904e('0x2a')]?_0x2252eb[_0x904e('0x2a')]['id']:null;_0x4eff60[_[_0x904e('0x27')](_0x2252eb[_0x904e('0x28')])+(_0x2252eb['channel']!==_0x904e('0x2b')?_0x904e('0x2c'):_0x904e('0x2d'))]=_0x2252eb[_0x904e('0xd')]?_0x2252eb[_0x904e('0xd')]['id']:null;logger[_0x904e('0x2e')](util[_0x904e('0x13')](_0x904e('0x2f'),_0x23fe03,_0x490b7e[_0x904e('0x30')]));emitChannelQueueInteraction(_0x2252eb[_0x904e('0x28')],_0x490b7e[_0x904e('0x30')],_0x4eff60,_0x2252eb[_0x904e('0xd')][_0x904e('0x30')],_0x2252eb[_0x904e('0x2a')]['id'],!![],_0xce0fae,_0x490b7e['id']);if(rpc[_0x2252eb[_0x904e('0x28')]+_0x904e('0x31')]){return rpc[_0x2252eb[_0x904e('0x28')]+_0x904e('0x31')][_0x904e('0x32')](_0x4eff60)[_0x904e('0x33')](function(_0x378d57){logger[_0x904e('0x34')](_0x904e('0x35'));});}}}function stopRouting(_0x23ba43,_0x50ec48,_0x4e315b,_0x518fa0){if(_0x23ba43&&_0x50ec48){_0x50ec48[_0x904e('0x36')]-=0x1;var _0x59e04a={'leaveAt':moment()[_0x904e('0x13')](_0x904e('0x23')),'acceptAt':moment()[_0x904e('0x13')](_0x904e('0x23')),'reason':_0x904e('0x37')};logger[_0x904e('0x2e')](util[_0x904e('0x13')](_0x904e('0x38'),_0x23ba43,_0x50ec48[_0x904e('0x30')]));emitChannelQueueInteraction(_0x4e315b[_0x904e('0x28')],_0x50ec48[_0x904e('0x30')],_0x4e315b['body'],_0x4e315b['account']['name'],_0x4e315b['message']['id'],![],_0x518fa0,_0x50ec48['id']);if(rpc[_0x4e315b[_0x904e('0x28')]+_0x904e('0x31')]){return rpc[_0x4e315b['channel']+_0x904e('0x31')]['update'](_0x23ba43,_0x59e04a)[_0x904e('0x33')](function(_0x3f07c7){logger[_0x904e('0x34')](_0x904e('0x39'));});}}}function endRouting(_0x49e15c,_0x349962,_0x453202,_0x2ba0b8){if(_0x49e15c&&_0x349962){_0x349962[_0x904e('0x36')]-=0x1;var _0x3520a2={'leaveAt':moment()[_0x904e('0x13')](_0x904e('0x23')),'exitAt':moment()[_0x904e('0x13')](_0x904e('0x23')),'reason':_0x904e('0x3a')};logger['info'](util[_0x904e('0x13')](_0x904e('0x3b'),_0x49e15c,_0x349962[_0x904e('0x30')]));emitChannelQueueInteraction(_0x453202[_0x904e('0x28')],_0x349962[_0x904e('0x30')],_0x453202[_0x904e('0x22')],_0x453202[_0x904e('0xd')]['name'],_0x453202[_0x904e('0x2a')]['id'],![],_0x2ba0b8);if(rpc[_0x453202[_0x904e('0x28')]+_0x904e('0x31')]){return rpc[_0x453202['channel']+'QueueReport'][_0x904e('0x3c')](_0x49e15c,_0x3520a2)[_0x904e('0x33')](function(_0x164e29){logger[_0x904e('0x34')](_0x904e('0x39'));});}}}function handleFindQueue(_0x2f3021){return function(_0x11dd51){return _0x11dd51[_0x904e('0x30')][_0x904e('0x3d')]()===_0x2f3021[_0x904e('0x3d')]();};}exports[_0x904e('0x3e')]=function(_0x1209a0,_0x39bec7,_0x2e03fb,_0x1a9fab){return function(_0x44b11e){try{var _0xb2808d={'name':_0x39bec7[0x0],'timeout':_0x39bec7[0x1]};var _0x1e3af5=queue[_0x904e('0x3f')](_0xb2808d,{'typecast':!![]});if(_0x1e3af5[_0x904e('0x40')]){logger[_0x904e('0x34')](_0x904e('0x41'),_0x1209a0,_[_0x904e('0x42')](_0x1e3af5,_0x904e('0x2a'))[_0x904e('0x43')](',\x20'));_0x44b11e[_0x904e('0x44')]();}else{var _0xef1656=_[_0x904e('0x45')](_0x2e03fb[_0x1a9fab[_0x904e('0x28')]+_0x904e('0x46')],handleFindQueue(_0xb2808d[_0x904e('0x30')]));if(_0xef1656){startRouting(_0x1209a0,_0xef1656,_0x1a9fab,_0x2e03fb);var _0x2b6e56=(_0xef1656[_0x904e('0x3a')]||0xa)*0x3e8;var _0x49407f=(_0xb2808d[_0x904e('0x3a')]||0x14)*0x3e8;var _0x4a969a;if(_0x2b6e56>_0x49407f){_0x49407f=_0x2b6e56;}var _0x2f7b93=seqqueue[_0x904e('0x47')](_0x2b6e56);_0x2f7b93['id']=_0x1209a0;_0x2f7b93[_0x904e('0x48')]=_0x2b6e56;_0x2f7b93[_0x904e('0x49')]=_0x49407f;_0x2f7b93[_0x904e('0x28')]=_0x1a9fab['channel'];_0x2e03fb[_0x904e('0x4a')][_0x1209a0]['on'](_0x904e('0x4b'),function(){logger['info'](_0x904e('0x4c'),_0x1209a0);stopRouting(_0x1209a0,_0xef1656,_0x1a9fab,_0x2e03fb);clearTimeout(_0x4a969a);_0x4a969a=undefined;_0x2f7b93[_0x904e('0x4d')](!![]);if(_0x2e03fb[_0x904e('0x4a')][_0x1209a0]){delete _0x2e03fb[_0x904e('0x4a')][_0x1209a0];}_0x44b11e['stop']();});_0x2e03fb[_0x904e('0x4a')][_0x1209a0]['on'](_0x904e('0x4e'),function(){if(_0x2e03fb[_0x904e('0x4a')][_0x1209a0]){delete _0x2e03fb['rules'][_0x1209a0];}});_0x4a969a=setTimeout(function(){logger['info'](_0x904e('0x4f'),_0x1209a0);endRouting(_0x1209a0,_0xef1656,_0x1a9fab,_0x2e03fb);clearTimeout(_0x4a969a);_0x2f7b93['close'](!![]);_0x44b11e[_0x904e('0x50')]();},_0x49407f);switch(_0xef1656['strategy']){case _0x904e('0x51'):strategy[_0x904e('0x51')](_0x2f7b93,_0xef1656,_0x2e03fb,_0x1a9fab);break;default:strategy[_0x904e('0x52')](_0x2f7b93,_0xef1656,_0x2e03fb,_0x1a9fab);}}else{logger[_0x904e('0x34')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x1209a0,_0xb2808d[_0x904e('0x30')]);_0x44b11e[_0x904e('0x44')]();}}}catch(_0x2946d2){console[_0x904e('0x53')](_0x2946d2);logger[_0x904e('0x34')]('[%s][QUEUE]\x20%s',_0x1209a0,_0x2946d2[_0x904e('0x54')]);_0x44b11e[_0x904e('0x44')]();}};};