a8a423a046362b502bcf38eb6520dcc4b511f80c
[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 _0x819d=['../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','upperFirst','channel','QueueId','InteractionId','interaction','message','chat','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','error','create\x20queue\x20report','info','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','catch','toLowerCase','consequence','validate','length','[%s][QUEUE]\x20%s','join','find','Queues','atimeout','qtimeout','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','stop','[%s][QUEUE]\x20APPLICATION\x20END','close','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','lodash','util','moment','../../../../config/logger','./strategy','defaults','socket.io-emitter','redis','queue_id','account','queue','joinAt','emit','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport'];(function(_0x17d9e3,_0x1f969c){var _0x14192d=function(_0x159745){while(--_0x159745){_0x17d9e3['push'](_0x17d9e3['shift']());}};_0x14192d(++_0x1f969c);}(_0x819d,0x10f));var _0xd819=function(_0x68c979,_0x431cff){_0x68c979=_0x68c979-0x0;var _0x4f0001=_0x819d[_0x68c979];return _0x4f0001;};'use strict';var schema=require('validate');var _=require(_0xd819('0x0'));var util=require(_0xd819('0x1'));var seqqueue=require('seq-queue');var moment=require(_0xd819('0x2'));var Redis=require('ioredis');var config=require('../../../../config/environment');var logger=require(_0xd819('0x3'))('routing');var strategy=require(_0xd819('0x4'));config['redis']=_[_0xd819('0x5')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0xd819('0x6'))(new Redis(config[_0xd819('0x7')]));var attributes=['id',_0xd819('0x8'),_0xd819('0x9'),_0xd819('0xa'),'from',_0xd819('0xb')];function emit(_0x9168e9,_0x226cc3,_0x4bd02e){io['to'](_0x9168e9)[_0xd819('0xc')](_0x226cc3,_0x4bd02e);}function emitChannelQueueInteraction(_0x5e5a91,_0x521c37,_0x103810,_0x2e57f8,_0x406ad3,_0x398d45,_0x364503,_0x55d5cb){var _0x4cca2f=_['clone'](_0x103810);_0x4cca2f['queue_id']=_0x55d5cb;_0x4cca2f[_0xd819('0xa')]=_0x521c37;_0x4cca2f[_0xd819('0x9')]=_0x2e57f8;_0x4cca2f['id']=_0x406ad3;if(_0x398d45){_0x364503[util[_0xd819('0xd')](_0xd819('0xe'),_0x5e5a91)][_0x406ad3]=_[_0xd819('0xf')](_0x4cca2f,attributes);}else{delete _0x364503[util['format'](_0xd819('0xe'),_0x5e5a91)][_0x406ad3];}emit(util['format'](_0xd819('0x10'),_0x5e5a91,_0x521c37),util[_0xd819('0xd')](_0xd819('0x11'),_0x5e5a91,_0x398d45?_0xd819('0x12'):_0xd819('0x13')),_[_0xd819('0xf')](_0x4cca2f,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xd819('0x14')),'chatQueueReport':require(_0xd819('0x15')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0xd819('0x16')),'whatsappQueueReport':require(_0xd819('0x17'))};var queue=schema({'name':{'type':_0xd819('0x18'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':'number','message':_0xd819('0x19')}});function startRouting(_0x12fcab,_0x2c372a,_0x160d05,_0x1647ca){if(_0x12fcab&&_0x2c372a&&_0x160d05){_0x2c372a[_0xd819('0x1a')]+=0x1;var _0x231554={'uniqueid':_0x12fcab,'from':_0x160d05[_0xd819('0x1b')]?_0x160d05[_0xd819('0x1b')][_0xd819('0x1c')]:'','joinAt':moment()[_0xd819('0xd')](_0xd819('0x1d')),'ContactId':_0x160d05[_0xd819('0x1e')]?_0x160d05[_0xd819('0x1e')]['id']:null,'ListId':_0x160d05['list']?_0x160d05['list']['id']:null};_0x231554[_[_0xd819('0x1f')](_0x160d05[_0xd819('0x20')])+_0xd819('0x21')]=_0x2c372a['id']||null;_0x231554[_[_0xd819('0x1f')](_0x160d05[_0xd819('0x20')])+_0xd819('0x22')]=_0x160d05['interaction']?_0x160d05[_0xd819('0x23')]['id']:null;_0x231554[_[_0xd819('0x1f')](_0x160d05[_0xd819('0x20')])+'MessageId']=_0x160d05['message']?_0x160d05[_0xd819('0x24')]['id']:null;_0x231554[_[_0xd819('0x1f')](_0x160d05[_0xd819('0x20')])+(_0x160d05[_0xd819('0x20')]!==_0xd819('0x25')?_0xd819('0x26'):_0xd819('0x27'))]=_0x160d05[_0xd819('0x9')]?_0x160d05[_0xd819('0x9')]['id']:null;logger['info'](util[_0xd819('0xd')](_0xd819('0x28'),_0x12fcab,_0x2c372a[_0xd819('0x29')]));emitChannelQueueInteraction(_0x160d05[_0xd819('0x20')],_0x2c372a[_0xd819('0x29')],_0x231554,_0x160d05[_0xd819('0x9')][_0xd819('0x29')],_0x160d05[_0xd819('0x24')]['id'],!![],_0x1647ca,_0x2c372a['id']);if(rpc[_0x160d05[_0xd819('0x20')]+'QueueReport']){return rpc[_0x160d05['channel']+_0xd819('0x2a')][_0xd819('0x2b')](_0x231554)['catch'](function(_0x2d7ac3){logger[_0xd819('0x2c')](_0xd819('0x2d'));});}}}function stopRouting(_0x400ca6,_0x45aee7,_0x5910c1,_0x46f9d6){if(_0x400ca6&&_0x45aee7){_0x45aee7[_0xd819('0x1a')]-=0x1;var _0x583b87={'leaveAt':moment()[_0xd819('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0xd819('0xd')](_0xd819('0x1d')),'reason':'accepted'};logger[_0xd819('0x2e')](util[_0xd819('0xd')](_0xd819('0x2f'),_0x400ca6,_0x45aee7[_0xd819('0x29')]));emitChannelQueueInteraction(_0x5910c1[_0xd819('0x20')],_0x45aee7[_0xd819('0x29')],_0x5910c1[_0xd819('0x1b')],_0x5910c1[_0xd819('0x9')][_0xd819('0x29')],_0x5910c1['message']['id'],![],_0x46f9d6,_0x45aee7['id']);if(rpc[_0x5910c1[_0xd819('0x20')]+'QueueReport']){return rpc[_0x5910c1['channel']+_0xd819('0x2a')][_0xd819('0x30')](_0x400ca6,_0x583b87)['catch'](function(_0xd29858){logger[_0xd819('0x2c')](_0xd819('0x31'));});}}}function endRouting(_0x2b795b,_0x1654bb,_0x1a03f7,_0x127b90){if(_0x2b795b&&_0x1654bb){_0x1654bb[_0xd819('0x1a')]-=0x1;var _0x149f82={'leaveAt':moment()[_0xd819('0xd')](_0xd819('0x1d')),'exitAt':moment()[_0xd819('0xd')](_0xd819('0x1d')),'reason':_0xd819('0x32')};logger[_0xd819('0x2e')](util[_0xd819('0xd')](_0xd819('0x33'),_0x2b795b,_0x1654bb[_0xd819('0x29')]));emitChannelQueueInteraction(_0x1a03f7[_0xd819('0x20')],_0x1654bb[_0xd819('0x29')],_0x1a03f7[_0xd819('0x1b')],_0x1a03f7['account']['name'],_0x1a03f7[_0xd819('0x24')]['id'],![],_0x127b90);if(rpc[_0x1a03f7[_0xd819('0x20')]+_0xd819('0x2a')]){return rpc[_0x1a03f7['channel']+'QueueReport'][_0xd819('0x30')](_0x2b795b,_0x149f82)[_0xd819('0x34')](function(_0x1cb8b3){logger['error'](_0xd819('0x31'));});}}}function handleFindQueue(_0x49f28c){return function(_0x4cdf59){return _0x4cdf59[_0xd819('0x29')]['toLowerCase']()===_0x49f28c[_0xd819('0x35')]();};}exports[_0xd819('0x36')]=function(_0x2a9214,_0x1cadbf,_0x5996b3,_0x4e2043){return function(_0x15015b){try{var _0x5c77f6={'name':_0x1cadbf[0x0],'timeout':_0x1cadbf[0x1]};var _0x1073dd=queue[_0xd819('0x37')](_0x5c77f6,{'typecast':!![]});if(_0x1073dd[_0xd819('0x38')]){logger[_0xd819('0x2c')](_0xd819('0x39'),_0x2a9214,_['map'](_0x1073dd,_0xd819('0x24'))[_0xd819('0x3a')](',\x20'));_0x15015b['stop']();}else{var _0x2683bc=_[_0xd819('0x3b')](_0x5996b3[_0x4e2043['channel']+_0xd819('0x3c')],handleFindQueue(_0x5c77f6['name']));if(_0x2683bc){startRouting(_0x2a9214,_0x2683bc,_0x4e2043,_0x5996b3);var _0x580e94=(_0x2683bc['timeout']||0xa)*0x3e8;var _0xa483c5=(_0x5c77f6[_0xd819('0x32')]||0x14)*0x3e8;var _0x4ec7e2,_0x47e1dd;if(_0x580e94>_0xa483c5){_0xa483c5=_0x580e94;}var _0x5f2f6b=seqqueue['createQueue'](_0x580e94);_0x5f2f6b['id']=_0x2a9214;_0x5f2f6b[_0xd819('0x3d')]=_0x580e94;_0x5f2f6b[_0xd819('0x3e')]=_0xa483c5;_0x5f2f6b[_0xd819('0x20')]=_0x4e2043['channel'];_0x5996b3[_0xd819('0x3f')][_0x2a9214]['on']('end',function(){logger[_0xd819('0x2e')](_0xd819('0x40'),_0x2a9214);stopRouting(_0x2a9214,_0x2683bc,_0x4e2043,_0x5996b3);clearTimeout(_0x4ec7e2);_0x4ec7e2=undefined;_0x5f2f6b['close'](!![]);if(_0x5996b3[_0xd819('0x3f')][_0x2a9214]){delete _0x5996b3['rules'][_0x2a9214];}_0x15015b[_0xd819('0x41')]();});_0x5996b3[_0xd819('0x3f')][_0x2a9214]['on']('complete',function(){if(_0x5996b3[_0xd819('0x3f')][_0x2a9214]){delete _0x5996b3['rules'][_0x2a9214];}});_0x4ec7e2=setTimeout(function(){logger[_0xd819('0x2e')](_0xd819('0x42'),_0x2a9214);endRouting(_0x2a9214,_0x2683bc,_0x4e2043,_0x5996b3);clearTimeout(_0x4ec7e2);_0x5f2f6b[_0xd819('0x43')](!![]);_0x15015b[_0xd819('0x44')]();},_0xa483c5);switch(_0x2683bc['strategy']){case _0xd819('0x45'):strategy['rrmemory'](_0x5f2f6b,_0x2683bc,_0x5996b3,_0x4e2043);break;default:strategy[_0xd819('0x46')](_0x5f2f6b,_0x2683bc,_0x5996b3,_0x4e2043);}}else{logger[_0xd819('0x2c')](_0xd819('0x47'),_0x2a9214,_0x5c77f6[_0xd819('0x29')]);_0x15015b[_0xd819('0x41')]();}}}catch(_0x195cc9){console[_0xd819('0x48')](_0x195cc9);logger[_0xd819('0x2c')](_0xd819('0x39'),_0x2a9214,_0x195cc9['stack']);_0x15015b[_0xd819('0x41')]();}};};