Built motion from commit 8c034dcd.|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 _0x5b21=['../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','QueueId','upperFirst','channel','InteractionId','interaction','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','error','create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','catch','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','find','Queues','atimeout','[%s][QUEUE]\x20ROUTING\x20STOPPED','rules','stop','complete','[%s][QUEUE]\x20APPLICATION\x20END','close','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','validate','util','seq-queue','moment','../../../../config/logger','routing','redis','localhost','socket.io-emitter','account','queue','from','emit','push','capitalize','format','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport'];(function(_0x4b9cb4,_0x1f18a8){var _0x335d39=function(_0x5d6de6){while(--_0x5d6de6){_0x4b9cb4['push'](_0x4b9cb4['shift']());}};_0x335d39(++_0x1f18a8);}(_0x5b21,0x1bf));var _0x15b2=function(_0x1f7ec2,_0x85b955){_0x1f7ec2=_0x1f7ec2-0x0;var _0x21c4f7=_0x5b21[_0x1f7ec2];return _0x21c4f7;};'use strict';var schema=require(_0x15b2('0x0'));var _=require('lodash');var util=require(_0x15b2('0x1'));var seqqueue=require(_0x15b2('0x2'));var moment=require(_0x15b2('0x3'));var Redis=require('ioredis');var config=require('../../../../config/environment');var logger=require(_0x15b2('0x4'))(_0x15b2('0x5'));var strategy=require('./strategy');config[_0x15b2('0x6')]=_['defaults'](config[_0x15b2('0x6')],{'host':_0x15b2('0x7'),'port':0x18eb});var io=require(_0x15b2('0x8'))(new Redis(config[_0x15b2('0x6')]));var attributes=['id','queue_id',_0x15b2('0x9'),_0x15b2('0xa'),_0x15b2('0xb'),'joinAt'];function emit(_0x22c6a0,_0x276716,_0x4ee716){io['to'](_0x22c6a0)[_0x15b2('0xc')](_0x276716,_0x4ee716);}function emitChannelQueueInteraction(_0x1ef7f0,_0x10a7cb,_0x1c69b0,_0x20b28b,_0x35b52b,_0x4f9672,_0x3b145b,_0x5c5378){var _0x46fd9d=_['clone'](_0x1c69b0);_0x46fd9d['queue_id']=_0x5c5378;_0x46fd9d[_0x15b2('0xa')]=_0x10a7cb;_0x46fd9d[_0x15b2('0x9')]=_0x20b28b;_0x46fd9d['id']=_0x35b52b;if(_0x4f9672){attributes[_0x15b2('0xd')](_[_0x15b2('0xe')](_0x1ef7f0)+'InteractionId');_0x3b145b[util[_0x15b2('0xf')](_0x15b2('0x10'),_0x1ef7f0)][_0x35b52b]=_[_0x15b2('0x11')](_0x46fd9d,attributes);}else{delete _0x3b145b[util['format']('%sQueuesWaitingInteractions',_0x1ef7f0)][_0x35b52b];}emit(util[_0x15b2('0xf')]('%s:queue:%s',_0x1ef7f0,_0x10a7cb),util[_0x15b2('0xf')](_0x15b2('0x12'),_0x1ef7f0,_0x4f9672?_0x15b2('0x13'):_0x15b2('0x14')),_[_0x15b2('0x11')](_0x46fd9d,attributes));}var rpc={'openchannelQueueReport':require(_0x15b2('0x15')),'mailQueueReport':require(_0x15b2('0x16')),'chatQueueReport':require(_0x15b2('0x17')),'smsQueueReport':require(_0x15b2('0x18')),'faxQueueReport':require(_0x15b2('0x19')),'whatsappQueueReport':require(_0x15b2('0x1a')),'chatInteraction':require(_0x15b2('0x1b')),'faxInteraction':require(_0x15b2('0x1c')),'mailInteraction':require(_0x15b2('0x1d')),'openchannelInteraction':require(_0x15b2('0x1e')),'smsInteraction':require('../../rpc/smsInteraction'),'whatsappInteraction':require(_0x15b2('0x1f'))};var queue=schema({'name':{'type':_0x15b2('0x20'),'required':!![],'message':_0x15b2('0x21')},'timeout':{'type':'number','message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x38bc41,_0x3ee5e1,_0xee3376,_0x3cbd6e){if(_0x38bc41&&_0x3ee5e1&&_0xee3376){_0x3ee5e1[_0x15b2('0x22')]+=0x1;var _0x23b5f0={'uniqueid':_0x38bc41,'from':_0xee3376['body']?_0xee3376[_0x15b2('0x23')][_0x15b2('0xb')]:'','joinAt':moment()[_0x15b2('0xf')](_0x15b2('0x24')),'ContactId':_0xee3376[_0x15b2('0x25')]?_0xee3376[_0x15b2('0x25')]['id']:null,'ListId':_0xee3376[_0x15b2('0x26')]?_0xee3376[_0x15b2('0x26')]['id']:null};_0x23b5f0[_['upperFirst'](_0xee3376['channel'])+_0x15b2('0x27')]=_0x3ee5e1['id']||null;_0x23b5f0[_[_0x15b2('0x28')](_0xee3376[_0x15b2('0x29')])+_0x15b2('0x2a')]=_0xee3376['interaction']?_0xee3376[_0x15b2('0x2b')]['id']:null;_0x23b5f0[_[_0x15b2('0x28')](_0xee3376[_0x15b2('0x29')])+'MessageId']=_0xee3376['message']?_0xee3376[_0x15b2('0x2c')]['id']:null;_0x23b5f0[_[_0x15b2('0x28')](_0xee3376['channel'])+(_0xee3376[_0x15b2('0x29')]!=='chat'?_0x15b2('0x2d'):_0x15b2('0x2e'))]=_0xee3376[_0x15b2('0x9')]?_0xee3376['account']['id']:null;logger[_0x15b2('0x2f')](util[_0x15b2('0xf')](_0x15b2('0x30'),_0x38bc41,_0x3ee5e1[_0x15b2('0x31')]));emitChannelQueueInteraction(_0xee3376[_0x15b2('0x29')],_0x3ee5e1[_0x15b2('0x31')],_0x23b5f0,_0xee3376['account']['name'],_0xee3376['message']['id'],!![],_0x3cbd6e,_0x3ee5e1['id']);if(rpc[_0xee3376[_0x15b2('0x29')]+_0x15b2('0x32')]){return rpc[_0xee3376['channel']+_0x15b2('0x32')]['create'](_0x23b5f0)['catch'](function(_0x3d1855){logger[_0x15b2('0x33')](_0x15b2('0x34'),_0x3d1855);});}}}function stopRouting(_0x58af8b,_0x1c2124,_0x494bb0,_0x4e73ab){if(_0x58af8b&&_0x1c2124){_0x1c2124[_0x15b2('0x22')]-=0x1;var _0x4c8e28={'leaveAt':moment()[_0x15b2('0xf')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x15b2('0xf')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'accepted'};logger[_0x15b2('0x2f')](util['format'](_0x15b2('0x35'),_0x58af8b,_0x1c2124[_0x15b2('0x31')]));emitChannelQueueInteraction(_0x494bb0[_0x15b2('0x29')],_0x1c2124[_0x15b2('0x31')],_0x494bb0[_0x15b2('0x23')],_0x494bb0['account'][_0x15b2('0x31')],_0x494bb0[_0x15b2('0x2c')]['id'],![],_0x4e73ab,_0x1c2124['id']);return rpc[_0x494bb0['channel']+_0x15b2('0x36')][_0x15b2('0x37')](_0x494bb0[_0x15b2('0x2b')]['id'],{'queueId':_0x1c2124['id']})['then'](function(){if(rpc[_0x494bb0['channel']+_0x15b2('0x32')]){return rpc[_0x494bb0[_0x15b2('0x29')]+_0x15b2('0x32')][_0x15b2('0x37')](_0x58af8b,_0x4c8e28)[_0x15b2('0x38')](function(_0x3d4023){logger['error'](_0x15b2('0x39'),_0x3d4023);});}});}}function endRouting(_0x1ff0fc,_0x40022d,_0x28c24e,_0x1efe1d){if(_0x1ff0fc&&_0x40022d){_0x40022d[_0x15b2('0x22')]-=0x1;var _0x8c0dd3={'leaveAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x15b2('0xf')](_0x15b2('0x24')),'reason':_0x15b2('0x3a')};logger[_0x15b2('0x2f')](util[_0x15b2('0xf')](_0x15b2('0x3b'),_0x1ff0fc,_0x40022d[_0x15b2('0x31')]));emitChannelQueueInteraction(_0x28c24e[_0x15b2('0x29')],_0x40022d[_0x15b2('0x31')],_0x28c24e[_0x15b2('0x23')],_0x28c24e[_0x15b2('0x9')]['name'],_0x28c24e[_0x15b2('0x2c')]['id'],![],_0x1efe1d);if(rpc[_0x28c24e['channel']+_0x15b2('0x32')]){return rpc[_0x28c24e[_0x15b2('0x29')]+_0x15b2('0x32')][_0x15b2('0x37')](_0x1ff0fc,_0x8c0dd3)[_0x15b2('0x38')](function(_0x1e2cab){logger[_0x15b2('0x33')](_0x15b2('0x39'),_0x1e2cab);});}}}function handleFindQueue(_0x2f30be){return function(_0x10a605){return _0x10a605[_0x15b2('0x31')]['toLowerCase']()===_0x2f30be[_0x15b2('0x3c')]();};}exports[_0x15b2('0x3d')]=function(_0xbf86f5,_0x14449f,_0x520849,_0x3416e6){return function(_0x501d4c){try{var _0x4139d6={'name':_0x14449f[0x0],'timeout':_0x14449f[0x1]};var _0x27d146=queue[_0x15b2('0x0')](_0x4139d6,{'typecast':!![]});if(_0x27d146[_0x15b2('0x3e')]){logger[_0x15b2('0x33')](_0x15b2('0x3f'),_0xbf86f5,_[_0x15b2('0x40')](_0x27d146,'message')[_0x15b2('0x41')](',\x20'));_0x501d4c['stop']();}else{var _0x75bc35=_[_0x15b2('0x42')](_0x520849[_0x3416e6['channel']+_0x15b2('0x43')],handleFindQueue(_0x4139d6['name']));if(_0x75bc35){startRouting(_0xbf86f5,_0x75bc35,_0x3416e6,_0x520849);var _0x3ec0c2=(_0x75bc35[_0x15b2('0x3a')]||0xa)*0x3e8;var _0x2159c4=(_0x4139d6[_0x15b2('0x3a')]||0x14)*0x3e8;var _0x408889;if(_0x3ec0c2>_0x2159c4){_0x2159c4=_0x3ec0c2;}var _0x7ccf58=seqqueue['createQueue'](_0x3ec0c2);_0x7ccf58['id']=_0xbf86f5;_0x7ccf58[_0x15b2('0x44')]=_0x3ec0c2;_0x7ccf58['qtimeout']=_0x2159c4;_0x7ccf58[_0x15b2('0x29')]=_0x3416e6[_0x15b2('0x29')];_0x520849['rules'][_0xbf86f5]['on']('end',function(){logger[_0x15b2('0x2f')](_0x15b2('0x45'),_0xbf86f5);stopRouting(_0xbf86f5,_0x75bc35,_0x3416e6,_0x520849);clearTimeout(_0x408889);_0x408889=undefined;_0x7ccf58['close'](!![]);if(_0x520849['rules'][_0xbf86f5]){delete _0x520849[_0x15b2('0x46')][_0xbf86f5];}_0x501d4c[_0x15b2('0x47')]();});_0x520849[_0x15b2('0x46')][_0xbf86f5]['on'](_0x15b2('0x48'),function(){if(_0x520849['rules'][_0xbf86f5]){delete _0x520849[_0x15b2('0x46')][_0xbf86f5];}});_0x408889=setTimeout(function(){logger[_0x15b2('0x2f')](_0x15b2('0x49'),_0xbf86f5);endRouting(_0xbf86f5,_0x75bc35,_0x3416e6,_0x520849);clearTimeout(_0x408889);_0x7ccf58[_0x15b2('0x4a')](!![]);_0x501d4c[_0x15b2('0x4b')]();},_0x2159c4);switch(_0x75bc35[_0x15b2('0x4c')]){case _0x15b2('0x4d'):strategy[_0x15b2('0x4d')](_0x7ccf58,_0x75bc35,_0x520849,_0x3416e6);break;default:strategy['beepall'](_0x7ccf58,_0x75bc35,_0x520849,_0x3416e6);}}else{logger['error'](_0x15b2('0x4e'),_0xbf86f5,_0x4139d6[_0x15b2('0x31')]);_0x501d4c[_0x15b2('0x47')]();}}}catch(_0x236d01){logger[_0x15b2('0x33')]('[%s][QUEUE]\x20%s',_0xbf86f5,_0x236d01['stack']);_0x501d4c[_0x15b2('0x47')]();}};};