Built motion from commit 3c2ce842.|2.6.31
[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 _0x474f=['YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','message','AccountId','WebsiteId','name','QueueReport','create','catch','error','waiting','info','[%s][STOP:QUEUE][NAME:%s]','update','timeout','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','[%s][QUEUE]\x20%s','map','join','stop','Queues','createQueue','atimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','validate','lodash','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','socket.io-emitter','queue_id','queue','from','joinAt','emit','clone','account','capitalize','InteractionId','pick','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body'];(function(_0x56510d,_0x38220a){var _0x167cae=function(_0x7dc22c){while(--_0x7dc22c){_0x56510d['push'](_0x56510d['shift']());}};_0x167cae(++_0x38220a);}(_0x474f,0x1cd));var _0xf474=function(_0x430144,_0x3cc6ea){_0x430144=_0x430144-0x0;var _0x377f50=_0x474f[_0x430144];return _0x377f50;};'use strict';var schema=require(_0xf474('0x0'));var _=require(_0xf474('0x1'));var util=require(_0xf474('0x2'));var seqqueue=require(_0xf474('0x3'));var moment=require(_0xf474('0x4'));var Redis=require(_0xf474('0x5'));var config=require(_0xf474('0x6'));var logger=require(_0xf474('0x7'))(_0xf474('0x8'));var strategy=require(_0xf474('0x9'));config[_0xf474('0xa')]=_[_0xf474('0xb')](config[_0xf474('0xa')],{'host':'localhost','port':0x18eb});var io=require(_0xf474('0xc'))(new Redis(config[_0xf474('0xa')]));var attributes=['id',_0xf474('0xd'),'account',_0xf474('0xe'),_0xf474('0xf'),_0xf474('0x10')];function emit(_0x20bc55,_0x4d7a26,_0xaca716){io['to'](_0x20bc55)[_0xf474('0x11')](_0x4d7a26,_0xaca716);}function emitChannelQueueInteraction(_0x320847,_0x160382,_0x5d035a,_0x2648da,_0x1643eb,_0x393c4e,_0x6c0c25,_0xe8c4a3){var _0x29c712=_[_0xf474('0x12')](_0x5d035a);_0x29c712['queue_id']=_0xe8c4a3;_0x29c712['queue']=_0x160382;_0x29c712[_0xf474('0x13')]=_0x2648da;_0x29c712['id']=_0x1643eb;if(_0x393c4e){attributes['push'](_[_0xf474('0x14')](_0x320847)+_0xf474('0x15'));_0x6c0c25[util['format']('%sQueuesWaitingInteractions',_0x320847)][_0x1643eb]=_[_0xf474('0x16')](_0x29c712,attributes);}else{delete _0x6c0c25[util[_0xf474('0x17')](_0xf474('0x18'),_0x320847)][_0x1643eb];}emit(util[_0xf474('0x17')](_0xf474('0x19'),_0x320847,_0x160382),util[_0xf474('0x17')](_0xf474('0x1a'),_0x320847,_0x393c4e?_0xf474('0x1b'):_0xf474('0x1c')),_[_0xf474('0x16')](_0x29c712,attributes));}var rpc={'openchannelQueueReport':require(_0xf474('0x1d')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0xf474('0x1e')),'faxQueueReport':require(_0xf474('0x1f')),'whatsappQueueReport':require(_0xf474('0x20')),'chatInteraction':require(_0xf474('0x21')),'faxInteraction':require(_0xf474('0x22')),'mailInteraction':require(_0xf474('0x23')),'openchannelInteraction':require(_0xf474('0x24')),'smsInteraction':require(_0xf474('0x25')),'whatsappInteraction':require(_0xf474('0x26'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0xf474('0x27')},'timeout':{'type':_0xf474('0x28'),'message':_0xf474('0x29')}});function startRouting(_0x8d3b9e,_0x42d5d4,_0x31f170,_0x457dcd){if(_0x8d3b9e&&_0x42d5d4&&_0x31f170){_0x42d5d4['waiting']+=0x1;var _0xca9a15={'uniqueid':_0x8d3b9e,'from':_0x31f170[_0xf474('0x2a')]?_0x31f170['body']['from']:'','joinAt':moment()[_0xf474('0x17')](_0xf474('0x2b')),'ContactId':_0x31f170[_0xf474('0x2c')]?_0x31f170[_0xf474('0x2c')]['id']:null,'ListId':_0x31f170[_0xf474('0x2d')]?_0x31f170['list']['id']:null};_0xca9a15[_[_0xf474('0x2e')](_0x31f170[_0xf474('0x2f')])+_0xf474('0x30')]=_0x42d5d4['id']||null;_0xca9a15[_[_0xf474('0x2e')](_0x31f170[_0xf474('0x2f')])+'InteractionId']=_0x31f170[_0xf474('0x31')]?_0x31f170[_0xf474('0x31')]['id']:null;_0xca9a15[_[_0xf474('0x2e')](_0x31f170[_0xf474('0x2f')])+'MessageId']=_0x31f170[_0xf474('0x32')]?_0x31f170[_0xf474('0x32')]['id']:null;_0xca9a15[_[_0xf474('0x2e')](_0x31f170[_0xf474('0x2f')])+(_0x31f170['channel']!=='chat'?_0xf474('0x33'):_0xf474('0x34'))]=_0x31f170[_0xf474('0x13')]?_0x31f170['account']['id']:null;logger['info'](util[_0xf474('0x17')]('[%s][START:QUEUE][NAME:%s]',_0x8d3b9e,_0x42d5d4[_0xf474('0x35')]));emitChannelQueueInteraction(_0x31f170[_0xf474('0x2f')],_0x42d5d4['name'],_0xca9a15,_0x31f170[_0xf474('0x13')][_0xf474('0x35')],_0x31f170[_0xf474('0x32')]['id'],!![],_0x457dcd,_0x42d5d4['id']);if(rpc[_0x31f170['channel']+_0xf474('0x36')]){return rpc[_0x31f170[_0xf474('0x2f')]+_0xf474('0x36')][_0xf474('0x37')](_0xca9a15)[_0xf474('0x38')](function(_0x1c4c55){logger[_0xf474('0x39')]('create\x20queue\x20report',_0x1c4c55);});}}}function stopRouting(_0x168a89,_0x302f72,_0x3af53d,_0x56a137){if(_0x168a89&&_0x302f72){_0x302f72[_0xf474('0x3a')]-=0x1;var _0x3f515f={'leaveAt':moment()['format'](_0xf474('0x2b')),'acceptAt':moment()['format'](_0xf474('0x2b')),'reason':'accepted'};logger[_0xf474('0x3b')](util[_0xf474('0x17')](_0xf474('0x3c'),_0x168a89,_0x302f72[_0xf474('0x35')]));emitChannelQueueInteraction(_0x3af53d[_0xf474('0x2f')],_0x302f72[_0xf474('0x35')],_0x3af53d['body'],_0x3af53d[_0xf474('0x13')][_0xf474('0x35')],_0x3af53d['message']['id'],![],_0x56a137,_0x302f72['id']);return rpc[_0x3af53d[_0xf474('0x2f')]+'Interaction'][_0xf474('0x3d')](_0x3af53d[_0xf474('0x31')]['id'],{'queueId':_0x302f72['id']})['then'](function(){if(rpc[_0x3af53d['channel']+_0xf474('0x36')]){return rpc[_0x3af53d['channel']+_0xf474('0x36')]['update'](_0x168a89,_0x3f515f)['catch'](function(_0x208d05){logger['error']('update\x20queue\x20report',_0x208d05);});}});}}function endRouting(_0x18c09b,_0x325dd0,_0x527de4,_0x5150af){if(_0x18c09b&&_0x325dd0){_0x325dd0['waiting']-=0x1;var _0xa393de={'leaveAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0xf474('0x17')](_0xf474('0x2b')),'reason':_0xf474('0x3e')};logger[_0xf474('0x3b')](util['format'](_0xf474('0x3f'),_0x18c09b,_0x325dd0[_0xf474('0x35')]));emitChannelQueueInteraction(_0x527de4[_0xf474('0x2f')],_0x325dd0[_0xf474('0x35')],_0x527de4['body'],_0x527de4[_0xf474('0x13')][_0xf474('0x35')],_0x527de4[_0xf474('0x32')]['id'],![],_0x5150af);if(rpc[_0x527de4['channel']+_0xf474('0x36')]){return rpc[_0x527de4['channel']+'QueueReport'][_0xf474('0x3d')](_0x18c09b,_0xa393de)[_0xf474('0x38')](function(_0x491089){logger[_0xf474('0x39')](_0xf474('0x40'),_0x491089);});}}}function handleFindQueue(_0x57bd07){return function(_0x1f0ad6){return _0x1f0ad6[_0xf474('0x35')][_0xf474('0x41')]()===_0x57bd07['toLowerCase']();};}exports[_0xf474('0x42')]=function(_0x36e265,_0x63e135,_0x12dc17,_0x1d33ad){return function(_0x34a87c){try{var _0x39ad8c={'name':_0x63e135[0x0],'timeout':_0x63e135[0x1]};var _0x5d3bf1=queue[_0xf474('0x0')](_0x39ad8c,{'typecast':!![]});if(_0x5d3bf1['length']){logger[_0xf474('0x39')](_0xf474('0x43'),_0x36e265,_[_0xf474('0x44')](_0x5d3bf1,_0xf474('0x32'))[_0xf474('0x45')](',\x20'));_0x34a87c[_0xf474('0x46')]();}else{var _0x8e8bb5=_['find'](_0x12dc17[_0x1d33ad[_0xf474('0x2f')]+_0xf474('0x47')],handleFindQueue(_0x39ad8c['name']));if(_0x8e8bb5){startRouting(_0x36e265,_0x8e8bb5,_0x1d33ad,_0x12dc17);var _0x64d899=(_0x8e8bb5['timeout']||0xa)*0x3e8;var _0x4a48a6=(_0x39ad8c['timeout']||0x14)*0x3e8;var _0x21c226;if(_0x64d899>_0x4a48a6){_0x4a48a6=_0x64d899;}var _0x4900ee=seqqueue[_0xf474('0x48')](_0x64d899);_0x4900ee['id']=_0x36e265;_0x4900ee[_0xf474('0x49')]=_0x64d899;_0x4900ee['qtimeout']=_0x4a48a6;_0x4900ee['channel']=_0x1d33ad[_0xf474('0x2f')];_0x12dc17[_0xf474('0x4a')][_0x36e265]['on'](_0xf474('0x4b'),function(){logger[_0xf474('0x3b')](_0xf474('0x4c'),_0x36e265);stopRouting(_0x36e265,_0x8e8bb5,_0x1d33ad,_0x12dc17);clearTimeout(_0x21c226);_0x21c226=undefined;_0x4900ee[_0xf474('0x4d')](!![]);if(_0x12dc17[_0xf474('0x4a')][_0x36e265]){delete _0x12dc17[_0xf474('0x4a')][_0x36e265];}_0x34a87c[_0xf474('0x46')]();});_0x12dc17['rules'][_0x36e265]['on'](_0xf474('0x4e'),function(){if(_0x12dc17['rules'][_0x36e265]){delete _0x12dc17[_0xf474('0x4a')][_0x36e265];}});_0x21c226=setTimeout(function(){logger[_0xf474('0x3b')](_0xf474('0x4f'),_0x36e265);endRouting(_0x36e265,_0x8e8bb5,_0x1d33ad,_0x12dc17);clearTimeout(_0x21c226);_0x4900ee[_0xf474('0x4d')](!![]);_0x34a87c[_0xf474('0x50')]();},_0x4a48a6);switch(_0x8e8bb5[_0xf474('0x51')]){case _0xf474('0x52'):strategy['rrmemory'](_0x4900ee,_0x8e8bb5,_0x12dc17,_0x1d33ad);break;default:strategy['beepall'](_0x4900ee,_0x8e8bb5,_0x12dc17,_0x1d33ad);}}else{logger['error'](_0xf474('0x53'),_0x36e265,_0x39ad8c[_0xf474('0x35')]);_0x34a87c['stop']();}}}catch(_0x2588c4){logger['error'](_0xf474('0x43'),_0x36e265,_0x2588c4['stack']);_0x34a87c['stop']();}};};