Built motion from commit e02f907f.|2.6.14
[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 _0x6f2e=['joinAt','emit','clone','push','InteractionId','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','pick','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','contact','list','channel','QueueId','upperFirst','interaction','MessageId','message','chat','WebsiteId','info','name','QueueReport','create','catch','error','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','validate','length','[%s][QUEUE]\x20%s','map','join','find','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','stack','lodash','moment','ioredis','../../../../config/environment','routing','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','from'];(function(_0x35f7dd,_0x4140bb){var _0x2c8d58=function(_0x376459){while(--_0x376459){_0x35f7dd['push'](_0x35f7dd['shift']());}};_0x2c8d58(++_0x4140bb);}(_0x6f2e,0xe3));var _0xe6f2=function(_0x3a623a,_0x2c8276){_0x3a623a=_0x3a623a-0x0;var _0x4a7107=_0x6f2e[_0x3a623a];return _0x4a7107;};'use strict';var schema=require('validate');var _=require(_0xe6f2('0x0'));var util=require('util');var seqqueue=require('seq-queue');var moment=require(_0xe6f2('0x1'));var Redis=require(_0xe6f2('0x2'));var config=require(_0xe6f2('0x3'));var logger=require('../../../../config/logger')(_0xe6f2('0x4'));var strategy=require('./strategy');config[_0xe6f2('0x5')]=_[_0xe6f2('0x6')](config[_0xe6f2('0x5')],{'host':_0xe6f2('0x7'),'port':0x18eb});var io=require(_0xe6f2('0x8'))(new Redis(config[_0xe6f2('0x5')]));var attributes=['id',_0xe6f2('0x9'),_0xe6f2('0xa'),_0xe6f2('0xb'),_0xe6f2('0xc'),_0xe6f2('0xd')];function emit(_0x3c173e,_0xcb54f9,_0x54547d){io['to'](_0x3c173e)[_0xe6f2('0xe')](_0xcb54f9,_0x54547d);}function emitChannelQueueInteraction(_0x3d1b59,_0x29ffb0,_0x275007,_0x15601c,_0x27f7a3,_0x33069f,_0x3518c3,_0x3354cd){var _0x1a2366=_[_0xe6f2('0xf')](_0x275007);_0x1a2366[_0xe6f2('0x9')]=_0x3354cd;_0x1a2366[_0xe6f2('0xb')]=_0x29ffb0;_0x1a2366[_0xe6f2('0xa')]=_0x15601c;_0x1a2366['id']=_0x27f7a3;if(_0x33069f){attributes[_0xe6f2('0x10')](_['capitalize'](_0x3d1b59)+_0xe6f2('0x11'));_0x3518c3[util[_0xe6f2('0x12')](_0xe6f2('0x13'),_0x3d1b59)][_0x27f7a3]=_['pick'](_0x1a2366,attributes);}else{delete _0x3518c3[util[_0xe6f2('0x12')]('%sQueuesWaitingInteractions',_0x3d1b59)][_0x27f7a3];}emit(util[_0xe6f2('0x12')](_0xe6f2('0x14'),_0x3d1b59,_0x29ffb0),util[_0xe6f2('0x12')](_0xe6f2('0x15'),_0x3d1b59,_0x33069f?_0xe6f2('0x16'):_0xe6f2('0x17')),_[_0xe6f2('0x18')](_0x1a2366,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0xe6f2('0x19')),'smsQueueReport':require(_0xe6f2('0x1a')),'faxQueueReport':require(_0xe6f2('0x1b')),'whatsappQueueReport':require(_0xe6f2('0x1c'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0xe6f2('0x1d')},'timeout':{'type':_0xe6f2('0x1e'),'message':_0xe6f2('0x1f')}});function startRouting(_0x1b09c5,_0x5c352b,_0x4829b9,_0x1ab7eb){if(_0x1b09c5&&_0x5c352b&&_0x4829b9){_0x5c352b[_0xe6f2('0x20')]+=0x1;var _0x3eee85={'uniqueid':_0x1b09c5,'from':_0x4829b9[_0xe6f2('0x21')]?_0x4829b9[_0xe6f2('0x21')][_0xe6f2('0xc')]:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x4829b9[_0xe6f2('0x22')]?_0x4829b9[_0xe6f2('0x22')]['id']:null,'ListId':_0x4829b9[_0xe6f2('0x23')]?_0x4829b9['list']['id']:null};_0x3eee85[_['upperFirst'](_0x4829b9[_0xe6f2('0x24')])+_0xe6f2('0x25')]=_0x5c352b['id']||null;_0x3eee85[_[_0xe6f2('0x26')](_0x4829b9[_0xe6f2('0x24')])+'InteractionId']=_0x4829b9[_0xe6f2('0x27')]?_0x4829b9['interaction']['id']:null;_0x3eee85[_[_0xe6f2('0x26')](_0x4829b9['channel'])+_0xe6f2('0x28')]=_0x4829b9[_0xe6f2('0x29')]?_0x4829b9[_0xe6f2('0x29')]['id']:null;_0x3eee85[_['upperFirst'](_0x4829b9[_0xe6f2('0x24')])+(_0x4829b9['channel']!==_0xe6f2('0x2a')?'AccountId':_0xe6f2('0x2b'))]=_0x4829b9[_0xe6f2('0xa')]?_0x4829b9[_0xe6f2('0xa')]['id']:null;logger[_0xe6f2('0x2c')](util[_0xe6f2('0x12')]('[%s][START:QUEUE][NAME:%s]',_0x1b09c5,_0x5c352b[_0xe6f2('0x2d')]));emitChannelQueueInteraction(_0x4829b9[_0xe6f2('0x24')],_0x5c352b[_0xe6f2('0x2d')],_0x3eee85,_0x4829b9[_0xe6f2('0xa')][_0xe6f2('0x2d')],_0x4829b9[_0xe6f2('0x29')]['id'],!![],_0x1ab7eb,_0x5c352b['id']);if(rpc[_0x4829b9[_0xe6f2('0x24')]+_0xe6f2('0x2e')]){return rpc[_0x4829b9[_0xe6f2('0x24')]+_0xe6f2('0x2e')][_0xe6f2('0x2f')](_0x3eee85)[_0xe6f2('0x30')](function(_0x2d9399){logger[_0xe6f2('0x31')]('create\x20queue\x20report');});}}}function stopRouting(_0x9e5851,_0xfd9167,_0x4d87e7,_0x20ecf9){if(_0x9e5851&&_0xfd9167){_0xfd9167[_0xe6f2('0x20')]-=0x1;var _0x25a0ec={'leaveAt':moment()['format'](_0xe6f2('0x32')),'acceptAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xe6f2('0x33')};logger[_0xe6f2('0x2c')](util[_0xe6f2('0x12')](_0xe6f2('0x34'),_0x9e5851,_0xfd9167[_0xe6f2('0x2d')]));emitChannelQueueInteraction(_0x4d87e7[_0xe6f2('0x24')],_0xfd9167[_0xe6f2('0x2d')],_0x4d87e7[_0xe6f2('0x21')],_0x4d87e7['account'][_0xe6f2('0x2d')],_0x4d87e7[_0xe6f2('0x29')]['id'],![],_0x20ecf9,_0xfd9167['id']);if(rpc[_0x4d87e7[_0xe6f2('0x24')]+_0xe6f2('0x2e')]){return rpc[_0x4d87e7['channel']+_0xe6f2('0x2e')][_0xe6f2('0x35')](_0x9e5851,_0x25a0ec)[_0xe6f2('0x30')](function(_0x485e2f){logger['error'](_0xe6f2('0x36'));});}}}function endRouting(_0x5b26bf,_0x5721cd,_0x24ccce,_0x28d368){if(_0x5b26bf&&_0x5721cd){_0x5721cd['waiting']-=0x1;var _0x2aede5={'leaveAt':moment()[_0xe6f2('0x12')](_0xe6f2('0x32')),'exitAt':moment()[_0xe6f2('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0xe6f2('0x2c')](util[_0xe6f2('0x12')](_0xe6f2('0x37'),_0x5b26bf,_0x5721cd[_0xe6f2('0x2d')]));emitChannelQueueInteraction(_0x24ccce['channel'],_0x5721cd[_0xe6f2('0x2d')],_0x24ccce[_0xe6f2('0x21')],_0x24ccce['account']['name'],_0x24ccce['message']['id'],![],_0x28d368);if(rpc[_0x24ccce['channel']+'QueueReport']){return rpc[_0x24ccce['channel']+'QueueReport'][_0xe6f2('0x35')](_0x5b26bf,_0x2aede5)[_0xe6f2('0x30')](function(_0x2b750f){logger[_0xe6f2('0x31')](_0xe6f2('0x36'));});}}}function handleFindQueue(_0x29d297){return function(_0x435289){return _0x435289[_0xe6f2('0x2d')][_0xe6f2('0x38')]()===_0x29d297['toLowerCase']();};}exports[_0xe6f2('0x39')]=function(_0x47e8e0,_0x504bac,_0xc80427,_0x41a4a4){return function(_0x3b4b7b){try{var _0x3b9df3={'name':_0x504bac[0x0],'timeout':_0x504bac[0x1]};var _0x1360e8=queue[_0xe6f2('0x3a')](_0x3b9df3,{'typecast':!![]});if(_0x1360e8[_0xe6f2('0x3b')]){logger['error'](_0xe6f2('0x3c'),_0x47e8e0,_[_0xe6f2('0x3d')](_0x1360e8,_0xe6f2('0x29'))[_0xe6f2('0x3e')](',\x20'));_0x3b4b7b['stop']();}else{var _0x4ae8a9=_[_0xe6f2('0x3f')](_0xc80427[_0x41a4a4['channel']+_0xe6f2('0x40')],handleFindQueue(_0x3b9df3[_0xe6f2('0x2d')]));if(_0x4ae8a9){startRouting(_0x47e8e0,_0x4ae8a9,_0x41a4a4,_0xc80427);var _0x472101=(_0x4ae8a9[_0xe6f2('0x41')]||0xa)*0x3e8;var _0x529382=(_0x3b9df3[_0xe6f2('0x41')]||0x14)*0x3e8;var _0x2b2bc3;if(_0x472101>_0x529382){_0x529382=_0x472101;}var _0x44d891=seqqueue[_0xe6f2('0x42')](_0x472101);_0x44d891['id']=_0x47e8e0;_0x44d891[_0xe6f2('0x43')]=_0x472101;_0x44d891[_0xe6f2('0x44')]=_0x529382;_0x44d891[_0xe6f2('0x24')]=_0x41a4a4[_0xe6f2('0x24')];_0xc80427[_0xe6f2('0x45')][_0x47e8e0]['on'](_0xe6f2('0x46'),function(){logger[_0xe6f2('0x2c')](_0xe6f2('0x47'),_0x47e8e0);stopRouting(_0x47e8e0,_0x4ae8a9,_0x41a4a4,_0xc80427);clearTimeout(_0x2b2bc3);_0x2b2bc3=undefined;_0x44d891[_0xe6f2('0x48')](!![]);if(_0xc80427['rules'][_0x47e8e0]){delete _0xc80427[_0xe6f2('0x45')][_0x47e8e0];}_0x3b4b7b['stop']();});_0xc80427[_0xe6f2('0x45')][_0x47e8e0]['on'](_0xe6f2('0x49'),function(){if(_0xc80427['rules'][_0x47e8e0]){delete _0xc80427[_0xe6f2('0x45')][_0x47e8e0];}});_0x2b2bc3=setTimeout(function(){logger[_0xe6f2('0x2c')](_0xe6f2('0x4a'),_0x47e8e0);endRouting(_0x47e8e0,_0x4ae8a9,_0x41a4a4,_0xc80427);clearTimeout(_0x2b2bc3);_0x44d891[_0xe6f2('0x48')](!![]);_0x3b4b7b[_0xe6f2('0x4b')]();},_0x529382);switch(_0x4ae8a9[_0xe6f2('0x4c')]){case _0xe6f2('0x4d'):strategy[_0xe6f2('0x4d')](_0x44d891,_0x4ae8a9,_0xc80427,_0x41a4a4);break;default:strategy[_0xe6f2('0x4e')](_0x44d891,_0x4ae8a9,_0xc80427,_0x41a4a4);}}else{logger[_0xe6f2('0x31')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x47e8e0,_0x3b9df3[_0xe6f2('0x2d')]);_0x3b4b7b['stop']();}}}catch(_0x289ba7){console['log'](_0x289ba7);logger['error'](_0xe6f2('0x3c'),_0x47e8e0,_0x289ba7[_0xe6f2('0x4f')]);_0x3b4b7b['stop']();}};};