Built motion from commit fe909640.|2.6.8
[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 _0x50b1=['update','catch','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','validate','length','[%s][QUEUE]\x20%s','join','stop','find','createQueue','atimeout','rules','end','close','complete','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','util','seq-queue','ioredis','../../../../config/logger','routing','redis','defaults','account','queue','from','emit','queue_id','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','string','number','body','contact','list','channel','QueueId','InteractionId','interaction','MessageId','message','upperFirst','chat','[%s][START:QUEUE][NAME:%s]','name','QueueReport','error','create\x20queue\x20report','waiting','YYYY-MM-DD\x20HH:mm:ss','info','[%s][STOP:QUEUE][NAME:%s]'];(function(_0x38b9eb,_0x298f2f){var _0x1426da=function(_0xbad634){while(--_0xbad634){_0x38b9eb['push'](_0x38b9eb['shift']());}};_0x1426da(++_0x298f2f);}(_0x50b1,0x1af));var _0x150b=function(_0x84e4b3,_0x53be04){_0x84e4b3=_0x84e4b3-0x0;var _0x9e2d73=_0x50b1[_0x84e4b3];return _0x9e2d73;};'use strict';var schema=require('validate');var _=require('lodash');var util=require(_0x150b('0x0'));var seqqueue=require(_0x150b('0x1'));var moment=require('moment');var Redis=require(_0x150b('0x2'));var config=require('../../../../config/environment');var logger=require(_0x150b('0x3'))(_0x150b('0x4'));var strategy=require('./strategy');config[_0x150b('0x5')]=_[_0x150b('0x6')](config[_0x150b('0x5')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var attributes=['id','queue_id',_0x150b('0x7'),_0x150b('0x8'),_0x150b('0x9'),'joinAt'];function emit(_0x4cff88,_0x14eb24,_0x4cfe49){io['to'](_0x4cff88)[_0x150b('0xa')](_0x14eb24,_0x4cfe49);}function emitChannelQueueInteraction(_0x34d5a8,_0x4826d7,_0x1be7be,_0x557f04,_0x10acb2,_0x1cf40a,_0x23be20,_0x3d6d7e){var _0x4961c4=_['clone'](_0x1be7be);_0x4961c4[_0x150b('0xb')]=_0x3d6d7e;_0x4961c4[_0x150b('0x8')]=_0x4826d7;_0x4961c4[_0x150b('0x7')]=_0x557f04;_0x4961c4['id']=_0x10acb2;if(_0x1cf40a){_0x23be20[util[_0x150b('0xc')](_0x150b('0xd'),_0x34d5a8)][_0x10acb2]=_[_0x150b('0xe')](_0x4961c4,attributes);}else{delete _0x23be20[util[_0x150b('0xc')](_0x150b('0xd'),_0x34d5a8)][_0x10acb2];}emit(util[_0x150b('0xc')](_0x150b('0xf'),_0x34d5a8,_0x4826d7),util[_0x150b('0xc')](_0x150b('0x10'),_0x34d5a8,_0x1cf40a?_0x150b('0x11'):_0x150b('0x12')),_[_0x150b('0xe')](_0x4961c4,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x150b('0x13')),'chatQueueReport':require(_0x150b('0x14')),'smsQueueReport':require(_0x150b('0x15')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x150b('0x16'))};var queue=schema({'name':{'type':_0x150b('0x17'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x150b('0x18'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x390a06,_0x468650,_0x2650bb,_0x3f97a9){if(_0x390a06&&_0x468650&&_0x2650bb){_0x468650['waiting']+=0x1;var _0x59b918={'uniqueid':_0x390a06,'from':_0x2650bb['body']?_0x2650bb[_0x150b('0x19')][_0x150b('0x9')]:'','joinAt':moment()[_0x150b('0xc')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x2650bb[_0x150b('0x1a')]?_0x2650bb[_0x150b('0x1a')]['id']:null,'ListId':_0x2650bb['list']?_0x2650bb[_0x150b('0x1b')]['id']:null};_0x59b918[_['upperFirst'](_0x2650bb[_0x150b('0x1c')])+_0x150b('0x1d')]=_0x468650['id']||null;_0x59b918[_['upperFirst'](_0x2650bb[_0x150b('0x1c')])+_0x150b('0x1e')]=_0x2650bb[_0x150b('0x1f')]?_0x2650bb[_0x150b('0x1f')]['id']:null;_0x59b918[_['upperFirst'](_0x2650bb['channel'])+_0x150b('0x20')]=_0x2650bb[_0x150b('0x21')]?_0x2650bb['message']['id']:null;_0x59b918[_[_0x150b('0x22')](_0x2650bb[_0x150b('0x1c')])+(_0x2650bb[_0x150b('0x1c')]!==_0x150b('0x23')?'AccountId':'WebsiteId')]=_0x2650bb[_0x150b('0x7')]?_0x2650bb[_0x150b('0x7')]['id']:null;logger['info'](util['format'](_0x150b('0x24'),_0x390a06,_0x468650[_0x150b('0x25')]));emitChannelQueueInteraction(_0x2650bb[_0x150b('0x1c')],_0x468650[_0x150b('0x25')],_0x59b918,_0x2650bb['account'][_0x150b('0x25')],_0x2650bb[_0x150b('0x21')]['id'],!![],_0x3f97a9,_0x468650['id']);if(rpc[_0x2650bb['channel']+_0x150b('0x26')]){return rpc[_0x2650bb[_0x150b('0x1c')]+_0x150b('0x26')]['create'](_0x59b918)['catch'](function(_0x42244a){logger[_0x150b('0x27')](_0x150b('0x28'));});}}}function stopRouting(_0x2ca2cc,_0x15b800,_0x565090,_0x30d4ef){if(_0x2ca2cc&&_0x15b800){_0x15b800[_0x150b('0x29')]-=0x1;var _0x3a3378={'leaveAt':moment()[_0x150b('0xc')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x150b('0xc')](_0x150b('0x2a')),'reason':'accepted'};logger[_0x150b('0x2b')](util[_0x150b('0xc')](_0x150b('0x2c'),_0x2ca2cc,_0x15b800['name']));emitChannelQueueInteraction(_0x565090[_0x150b('0x1c')],_0x15b800[_0x150b('0x25')],_0x565090[_0x150b('0x19')],_0x565090[_0x150b('0x7')]['name'],_0x565090[_0x150b('0x21')]['id'],![],_0x30d4ef,_0x15b800['id']);if(rpc[_0x565090[_0x150b('0x1c')]+'QueueReport']){return rpc[_0x565090[_0x150b('0x1c')]+'QueueReport'][_0x150b('0x2d')](_0x2ca2cc,_0x3a3378)[_0x150b('0x2e')](function(_0x133099){logger['error'](_0x150b('0x2f'));});}}}function endRouting(_0x2d6569,_0x14b3b0,_0x422f21,_0x508282){if(_0x2d6569&&_0x14b3b0){_0x14b3b0['waiting']-=0x1;var _0x42f105={'leaveAt':moment()[_0x150b('0xc')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x150b('0xc')](_0x150b('0x2a')),'reason':_0x150b('0x30')};logger[_0x150b('0x2b')](util[_0x150b('0xc')](_0x150b('0x31'),_0x2d6569,_0x14b3b0[_0x150b('0x25')]));emitChannelQueueInteraction(_0x422f21[_0x150b('0x1c')],_0x14b3b0['name'],_0x422f21[_0x150b('0x19')],_0x422f21[_0x150b('0x7')]['name'],_0x422f21['message']['id'],![],_0x508282);if(rpc[_0x422f21[_0x150b('0x1c')]+_0x150b('0x26')]){return rpc[_0x422f21[_0x150b('0x1c')]+_0x150b('0x26')][_0x150b('0x2d')](_0x2d6569,_0x42f105)[_0x150b('0x2e')](function(_0xbe5817){logger['error'](_0x150b('0x2f'));});}}}function handleFindQueue(_0xc6ff2f){return function(_0x564fab){return _0x564fab[_0x150b('0x25')][_0x150b('0x32')]()===_0xc6ff2f[_0x150b('0x32')]();};}exports['consequence']=function(_0x2694a5,_0x1230ef,_0x404efc,_0x58f1ed){return function(_0x12ea0e){try{var _0x3e9d62={'name':_0x1230ef[0x0],'timeout':_0x1230ef[0x1]};var _0xbf86c1=queue[_0x150b('0x33')](_0x3e9d62,{'typecast':!![]});if(_0xbf86c1[_0x150b('0x34')]){logger[_0x150b('0x27')](_0x150b('0x35'),_0x2694a5,_['map'](_0xbf86c1,'message')[_0x150b('0x36')](',\x20'));_0x12ea0e[_0x150b('0x37')]();}else{var _0x2c1348=_[_0x150b('0x38')](_0x404efc[_0x58f1ed[_0x150b('0x1c')]+'Queues'],handleFindQueue(_0x3e9d62[_0x150b('0x25')]));if(_0x2c1348){startRouting(_0x2694a5,_0x2c1348,_0x58f1ed,_0x404efc);var _0x470f9f=(_0x2c1348[_0x150b('0x30')]||0xa)*0x3e8;var _0x2ae4c0=(_0x3e9d62[_0x150b('0x30')]||0x14)*0x3e8;var _0x446b7c,_0x37ca63;if(_0x470f9f>_0x2ae4c0){_0x2ae4c0=_0x470f9f;}var _0x609b0d=seqqueue[_0x150b('0x39')](_0x470f9f);_0x609b0d['id']=_0x2694a5;_0x609b0d[_0x150b('0x3a')]=_0x470f9f;_0x609b0d['qtimeout']=_0x2ae4c0;_0x609b0d[_0x150b('0x1c')]=_0x58f1ed[_0x150b('0x1c')];_0x404efc[_0x150b('0x3b')][_0x2694a5]['on'](_0x150b('0x3c'),function(){logger['info']('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x2694a5);stopRouting(_0x2694a5,_0x2c1348,_0x58f1ed,_0x404efc);clearTimeout(_0x446b7c);_0x446b7c=undefined;_0x609b0d[_0x150b('0x3d')](!![]);if(_0x404efc[_0x150b('0x3b')][_0x2694a5]){delete _0x404efc[_0x150b('0x3b')][_0x2694a5];}_0x12ea0e[_0x150b('0x37')]();});_0x404efc[_0x150b('0x3b')][_0x2694a5]['on'](_0x150b('0x3e'),function(){if(_0x404efc[_0x150b('0x3b')][_0x2694a5]){delete _0x404efc[_0x150b('0x3b')][_0x2694a5];}});_0x446b7c=setTimeout(function(){logger[_0x150b('0x2b')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x2694a5);endRouting(_0x2694a5,_0x2c1348,_0x58f1ed,_0x404efc);clearTimeout(_0x446b7c);_0x609b0d['close'](!![]);_0x12ea0e['next']();},_0x2ae4c0);switch(_0x2c1348[_0x150b('0x3f')]){case _0x150b('0x40'):strategy['rrmemory'](_0x609b0d,_0x2c1348,_0x404efc,_0x58f1ed);break;default:strategy[_0x150b('0x41')](_0x609b0d,_0x2c1348,_0x404efc,_0x58f1ed);}}else{logger['error'](_0x150b('0x42'),_0x2694a5,_0x3e9d62[_0x150b('0x25')]);_0x12ea0e['stop']();}}}catch(_0x186021){console[_0x150b('0x43')](_0x186021);logger['error'](_0x150b('0x35'),_0x2694a5,_0x186021['stack']);_0x12ea0e[_0x150b('0x37')]();}};};