5e105c9a7c60c3d1e7535408536c34f54f661b6a
[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 _0x4193=['%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','accepted','[%s][STOP:QUEUE][NAME:%s]','Interaction','then','error','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','length','[%s][QUEUE]\x20%s','map','join','find','Queues','qtimeout','rules','end','stop','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','lodash','seq-queue','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','emit','push','format'];(function(_0x5b6da2,_0x11b955){var _0x5550a1=function(_0x1a245c){while(--_0x1a245c){_0x5b6da2['push'](_0x5b6da2['shift']());}};_0x5550a1(++_0x11b955);}(_0x4193,0x1eb));var _0x3419=function(_0x3b48f0,_0x4f3c87){_0x3b48f0=_0x3b48f0-0x0;var _0x5dc733=_0x4193[_0x3b48f0];return _0x5dc733;};'use strict';var schema=require(_0x3419('0x0'));var _=require(_0x3419('0x1'));var util=require('util');var seqqueue=require(_0x3419('0x2'));var moment=require('moment');var Redis=require(_0x3419('0x3'));var config=require('../../../../config/environment');var logger=require(_0x3419('0x4'))(_0x3419('0x5'));var strategy=require(_0x3419('0x6'));config[_0x3419('0x7')]=_[_0x3419('0x8')](config[_0x3419('0x7')],{'host':_0x3419('0x9'),'port':0x18eb});var io=require(_0x3419('0xa'))(new Redis(config[_0x3419('0x7')]));var attributes=['id',_0x3419('0xb'),_0x3419('0xc'),_0x3419('0xd'),_0x3419('0xe'),_0x3419('0xf')];function emit(_0x5a021d,_0x56ab62,_0x2c664b){io['to'](_0x5a021d)[_0x3419('0x10')](_0x56ab62,_0x2c664b);}function emitChannelQueueInteraction(_0x15bd48,_0x23bead,_0x6bc39,_0x3f7fc2,_0x334dad,_0x4cbfc8,_0x373acc,_0x54159e){var _0x4b71b7=_['clone'](_0x6bc39);_0x4b71b7[_0x3419('0xb')]=_0x54159e;_0x4b71b7[_0x3419('0xd')]=_0x23bead;_0x4b71b7[_0x3419('0xc')]=_0x3f7fc2;_0x4b71b7['id']=_0x334dad;if(_0x4cbfc8){attributes[_0x3419('0x11')](_['capitalize'](_0x15bd48)+'InteractionId');_0x373acc[util[_0x3419('0x12')](_0x3419('0x13'),_0x15bd48)][_0x334dad]=_[_0x3419('0x14')](_0x4b71b7,attributes);}else{delete _0x373acc[util[_0x3419('0x12')]('%sQueuesWaitingInteractions',_0x15bd48)][_0x334dad];}emit(util[_0x3419('0x12')](_0x3419('0x15'),_0x15bd48,_0x23bead),util[_0x3419('0x12')](_0x3419('0x16'),_0x15bd48,_0x4cbfc8?_0x3419('0x17'):_0x3419('0x18')),_['pick'](_0x4b71b7,attributes));}var rpc={'openchannelQueueReport':require(_0x3419('0x19')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x3419('0x1a')),'smsQueueReport':require(_0x3419('0x1b')),'faxQueueReport':require(_0x3419('0x1c')),'whatsappQueueReport':require(_0x3419('0x1d')),'chatInteraction':require(_0x3419('0x1e')),'faxInteraction':require(_0x3419('0x1f')),'mailInteraction':require(_0x3419('0x20')),'openchannelInteraction':require(_0x3419('0x21')),'smsInteraction':require(_0x3419('0x22')),'whatsappInteraction':require('../../rpc/whatsappInteraction')};var queue=schema({'name':{'type':_0x3419('0x23'),'required':!![],'message':_0x3419('0x24')},'timeout':{'type':_0x3419('0x25'),'message':_0x3419('0x26')}});function startRouting(_0x540ae6,_0x2e5c03,_0x428036,_0x1ec91c){if(_0x540ae6&&_0x2e5c03&&_0x428036){_0x2e5c03[_0x3419('0x27')]+=0x1;var _0x3b046a={'uniqueid':_0x540ae6,'from':_0x428036[_0x3419('0x28')]?_0x428036['body']['from']:'','joinAt':moment()[_0x3419('0x12')](_0x3419('0x29')),'ContactId':_0x428036[_0x3419('0x2a')]?_0x428036['contact']['id']:null,'ListId':_0x428036[_0x3419('0x2b')]?_0x428036[_0x3419('0x2b')]['id']:null};_0x3b046a[_[_0x3419('0x2c')](_0x428036[_0x3419('0x2d')])+_0x3419('0x2e')]=_0x2e5c03['id']||null;_0x3b046a[_[_0x3419('0x2c')](_0x428036[_0x3419('0x2d')])+_0x3419('0x2f')]=_0x428036[_0x3419('0x30')]?_0x428036[_0x3419('0x30')]['id']:null;_0x3b046a[_[_0x3419('0x2c')](_0x428036['channel'])+_0x3419('0x31')]=_0x428036[_0x3419('0x32')]?_0x428036[_0x3419('0x32')]['id']:null;_0x3b046a[_[_0x3419('0x2c')](_0x428036[_0x3419('0x2d')])+(_0x428036['channel']!==_0x3419('0x33')?_0x3419('0x34'):'WebsiteId')]=_0x428036['account']?_0x428036[_0x3419('0xc')]['id']:null;logger[_0x3419('0x35')](util[_0x3419('0x12')](_0x3419('0x36'),_0x540ae6,_0x2e5c03['name']));emitChannelQueueInteraction(_0x428036['channel'],_0x2e5c03[_0x3419('0x37')],_0x3b046a,_0x428036[_0x3419('0xc')]['name'],_0x428036[_0x3419('0x32')]['id'],!![],_0x1ec91c,_0x2e5c03['id']);if(rpc[_0x428036[_0x3419('0x2d')]+_0x3419('0x38')]){return rpc[_0x428036[_0x3419('0x2d')]+'QueueReport'][_0x3419('0x39')](_0x3b046a)[_0x3419('0x3a')](function(_0x12e4c3){logger['error']('create\x20queue\x20report',_0x12e4c3);});}}}function stopRouting(_0x4b11d8,_0x5ea4a2,_0x2a9ddf,_0x143b46){if(_0x4b11d8&&_0x5ea4a2){_0x5ea4a2[_0x3419('0x27')]-=0x1;var _0x3c6676={'leaveAt':moment()[_0x3419('0x12')](_0x3419('0x29')),'acceptAt':moment()['format'](_0x3419('0x29')),'reason':_0x3419('0x3b')};logger['info'](util[_0x3419('0x12')](_0x3419('0x3c'),_0x4b11d8,_0x5ea4a2[_0x3419('0x37')]));emitChannelQueueInteraction(_0x2a9ddf[_0x3419('0x2d')],_0x5ea4a2['name'],_0x2a9ddf[_0x3419('0x28')],_0x2a9ddf['account'][_0x3419('0x37')],_0x2a9ddf[_0x3419('0x32')]['id'],![],_0x143b46,_0x5ea4a2['id']);return rpc[_0x2a9ddf[_0x3419('0x2d')]+_0x3419('0x3d')]['update'](_0x2a9ddf[_0x3419('0x30')]['id'],{'queueId':_0x5ea4a2['id']})[_0x3419('0x3e')](function(){if(rpc[_0x2a9ddf['channel']+_0x3419('0x38')]){return rpc[_0x2a9ddf[_0x3419('0x2d')]+_0x3419('0x38')]['update'](_0x4b11d8,_0x3c6676)[_0x3419('0x3a')](function(_0x20f227){logger[_0x3419('0x3f')](_0x3419('0x40'),_0x20f227);});}});}}function endRouting(_0x5b4303,_0x65e7b6,_0x5cce8e,_0x2e77fc){if(_0x5b4303&&_0x65e7b6){_0x65e7b6['waiting']-=0x1;var _0x4cca04={'leaveAt':moment()[_0x3419('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x3419('0x12')](_0x3419('0x29')),'reason':_0x3419('0x41')};logger[_0x3419('0x35')](util['format'](_0x3419('0x42'),_0x5b4303,_0x65e7b6[_0x3419('0x37')]));emitChannelQueueInteraction(_0x5cce8e[_0x3419('0x2d')],_0x65e7b6[_0x3419('0x37')],_0x5cce8e[_0x3419('0x28')],_0x5cce8e[_0x3419('0xc')][_0x3419('0x37')],_0x5cce8e['message']['id'],![],_0x2e77fc);if(rpc[_0x5cce8e[_0x3419('0x2d')]+_0x3419('0x38')]){return rpc[_0x5cce8e['channel']+_0x3419('0x38')][_0x3419('0x43')](_0x5b4303,_0x4cca04)['catch'](function(_0x3b01e5){logger['error']('update\x20queue\x20report',_0x3b01e5);});}}}function handleFindQueue(_0x540929){return function(_0x38c5ac){return _0x38c5ac[_0x3419('0x37')][_0x3419('0x44')]()===_0x540929[_0x3419('0x44')]();};}exports['consequence']=function(_0x29d0f4,_0x3ceff6,_0x58941f,_0x1c8035){return function(_0x21d2d8){try{var _0x147615={'name':_0x3ceff6[0x0],'timeout':_0x3ceff6[0x1]};var _0x3c04a0=queue[_0x3419('0x0')](_0x147615,{'typecast':!![]});if(_0x3c04a0[_0x3419('0x45')]){logger[_0x3419('0x3f')](_0x3419('0x46'),_0x29d0f4,_[_0x3419('0x47')](_0x3c04a0,_0x3419('0x32'))[_0x3419('0x48')](',\x20'));_0x21d2d8['stop']();}else{var _0x2251f9=_[_0x3419('0x49')](_0x58941f[_0x1c8035[_0x3419('0x2d')]+_0x3419('0x4a')],handleFindQueue(_0x147615['name']));if(_0x2251f9){startRouting(_0x29d0f4,_0x2251f9,_0x1c8035,_0x58941f);var _0x4e9c0e=(_0x2251f9[_0x3419('0x41')]||0xa)*0x3e8;var _0x3c9eeb=(_0x147615['timeout']||0x14)*0x3e8;var _0x3db3c9;if(_0x4e9c0e>_0x3c9eeb){_0x3c9eeb=_0x4e9c0e;}var _0x298044=seqqueue['createQueue'](_0x4e9c0e);_0x298044['id']=_0x29d0f4;_0x298044['atimeout']=_0x4e9c0e;_0x298044[_0x3419('0x4b')]=_0x3c9eeb;_0x298044[_0x3419('0x2d')]=_0x1c8035[_0x3419('0x2d')];_0x58941f[_0x3419('0x4c')][_0x29d0f4]['on'](_0x3419('0x4d'),function(){logger[_0x3419('0x35')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x29d0f4);stopRouting(_0x29d0f4,_0x2251f9,_0x1c8035,_0x58941f);clearTimeout(_0x3db3c9);_0x3db3c9=undefined;_0x298044['close'](!![]);if(_0x58941f[_0x3419('0x4c')][_0x29d0f4]){delete _0x58941f['rules'][_0x29d0f4];}_0x21d2d8[_0x3419('0x4e')]();});_0x58941f[_0x3419('0x4c')][_0x29d0f4]['on']('complete',function(){if(_0x58941f[_0x3419('0x4c')][_0x29d0f4]){delete _0x58941f[_0x3419('0x4c')][_0x29d0f4];}});_0x3db3c9=setTimeout(function(){logger[_0x3419('0x35')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x29d0f4);endRouting(_0x29d0f4,_0x2251f9,_0x1c8035,_0x58941f);clearTimeout(_0x3db3c9);_0x298044['close'](!![]);_0x21d2d8[_0x3419('0x4f')]();},_0x3c9eeb);switch(_0x2251f9[_0x3419('0x50')]){case _0x3419('0x51'):strategy[_0x3419('0x51')](_0x298044,_0x2251f9,_0x58941f,_0x1c8035);break;default:strategy[_0x3419('0x52')](_0x298044,_0x2251f9,_0x58941f,_0x1c8035);}}else{logger['error'](_0x3419('0x53'),_0x29d0f4,_0x147615[_0x3419('0x37')]);_0x21d2d8[_0x3419('0x4e')]();}}}catch(_0x4a8a89){logger[_0x3419('0x3f')](_0x3419('0x46'),_0x29d0f4,_0x4a8a89[_0x3419('0x54')]);_0x21d2d8['stop']();}};};