Built motion from commit 19a84241.|2.5.34
[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 _0xc732=['rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','[%s][QUEUE]\x20%s','stack','validate','lodash','util','seq-queue','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','queue','joinAt','emit','clone','account','format','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','accepted','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','map','join','stop','Queues','timeout','createQueue','atimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','next'];(function(_0x146628,_0x2f250a){var _0x24ca23=function(_0x1fdf39){while(--_0x1fdf39){_0x146628['push'](_0x146628['shift']());}};_0x24ca23(++_0x2f250a);}(_0xc732,0x19b));var _0x2c73=function(_0x113290,_0xd4bcd8){_0x113290=_0x113290-0x0;var _0x45ed2b=_0xc732[_0x113290];return _0x45ed2b;};'use strict';var schema=require(_0x2c73('0x0'));var _=require(_0x2c73('0x1'));var util=require(_0x2c73('0x2'));var seqqueue=require(_0x2c73('0x3'));var moment=require('moment');var Redis=require(_0x2c73('0x4'));var config=require('../../../../config/environment');var logger=require(_0x2c73('0x5'))(_0x2c73('0x6'));var strategy=require(_0x2c73('0x7'));config[_0x2c73('0x8')]=_[_0x2c73('0x9')](config['redis'],{'host':_0x2c73('0xa'),'port':0x18eb});var io=require(_0x2c73('0xb'))(new Redis(config['redis']));var attributes=['id',_0x2c73('0xc'),'account',_0x2c73('0xd'),'from',_0x2c73('0xe')];function emit(_0xa81a9d,_0x370715,_0x4e8921){io['to'](_0xa81a9d)[_0x2c73('0xf')](_0x370715,_0x4e8921);}function emitChannelQueueInteraction(_0x29d3f1,_0x12f543,_0x143104,_0x80f1f7,_0xba0e56,_0x140618,_0x4ec10e,_0x4715f1){var _0x2a5467=_[_0x2c73('0x10')](_0x143104);_0x2a5467[_0x2c73('0xc')]=_0x4715f1;_0x2a5467[_0x2c73('0xd')]=_0x12f543;_0x2a5467[_0x2c73('0x11')]=_0x80f1f7;_0x2a5467['id']=_0xba0e56;if(_0x140618){_0x4ec10e[util[_0x2c73('0x12')](_0x2c73('0x13'),_0x29d3f1)][_0xba0e56]=_[_0x2c73('0x14')](_0x2a5467,attributes);}else{delete _0x4ec10e[util['format']('%sQueuesWaitingInteractions',_0x29d3f1)][_0xba0e56];}emit(util['format']('%s:queue:%s',_0x29d3f1,_0x12f543),util[_0x2c73('0x12')](_0x2c73('0x15'),_0x29d3f1,_0x140618?'save':_0x2c73('0x16')),_['pick'](_0x2a5467,attributes));}var rpc={'openchannelQueueReport':require(_0x2c73('0x17')),'mailQueueReport':require(_0x2c73('0x18')),'chatQueueReport':require(_0x2c73('0x19')),'smsQueueReport':require(_0x2c73('0x1a')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x2c73('0x1b'))};var queue=schema({'name':{'type':_0x2c73('0x1c'),'required':!![],'message':_0x2c73('0x1d')},'timeout':{'type':_0x2c73('0x1e'),'message':_0x2c73('0x1f')}});function startRouting(_0x1f6de1,_0x251a06,_0xb7084f,_0x4474d0){if(_0x1f6de1&&_0x251a06&&_0xb7084f){_0x251a06[_0x2c73('0x20')]+=0x1;var _0x1df78c={'uniqueid':_0x1f6de1,'from':_0xb7084f[_0x2c73('0x21')]?_0xb7084f[_0x2c73('0x21')][_0x2c73('0x22')]:'','joinAt':moment()['format'](_0x2c73('0x23')),'ContactId':_0xb7084f[_0x2c73('0x24')]?_0xb7084f[_0x2c73('0x24')]['id']:null,'ListId':_0xb7084f['list']?_0xb7084f[_0x2c73('0x25')]['id']:null};_0x1df78c[_[_0x2c73('0x26')](_0xb7084f[_0x2c73('0x27')])+_0x2c73('0x28')]=_0x251a06['id']||null;_0x1df78c[_[_0x2c73('0x26')](_0xb7084f[_0x2c73('0x27')])+_0x2c73('0x29')]=_0xb7084f['interaction']?_0xb7084f[_0x2c73('0x2a')]['id']:null;_0x1df78c[_[_0x2c73('0x26')](_0xb7084f[_0x2c73('0x27')])+'MessageId']=_0xb7084f[_0x2c73('0x2b')]?_0xb7084f[_0x2c73('0x2b')]['id']:null;_0x1df78c[_['upperFirst'](_0xb7084f[_0x2c73('0x27')])+(_0xb7084f['channel']!==_0x2c73('0x2c')?_0x2c73('0x2d'):_0x2c73('0x2e'))]=_0xb7084f[_0x2c73('0x11')]?_0xb7084f['account']['id']:null;logger[_0x2c73('0x2f')](util[_0x2c73('0x12')](_0x2c73('0x30'),_0x1f6de1,_0x251a06[_0x2c73('0x31')]));emitChannelQueueInteraction(_0xb7084f[_0x2c73('0x27')],_0x251a06[_0x2c73('0x31')],_0x1df78c,_0xb7084f[_0x2c73('0x11')][_0x2c73('0x31')],_0xb7084f['message']['id'],!![],_0x4474d0,_0x251a06['id']);if(rpc[_0xb7084f['channel']+'QueueReport']){return rpc[_0xb7084f[_0x2c73('0x27')]+_0x2c73('0x32')][_0x2c73('0x33')](_0x1df78c)[_0x2c73('0x34')](function(_0xa56ff3){logger[_0x2c73('0x35')]('create\x20queue\x20report');});}}}function stopRouting(_0x31084e,_0xf7a7be,_0x510092,_0x1cd800){if(_0x31084e&&_0xf7a7be){_0xf7a7be[_0x2c73('0x20')]-=0x1;var _0x370a61={'leaveAt':moment()[_0x2c73('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x2c73('0x12')](_0x2c73('0x23')),'reason':_0x2c73('0x36')};logger[_0x2c73('0x2f')](util[_0x2c73('0x12')](_0x2c73('0x37'),_0x31084e,_0xf7a7be[_0x2c73('0x31')]));emitChannelQueueInteraction(_0x510092[_0x2c73('0x27')],_0xf7a7be[_0x2c73('0x31')],_0x510092[_0x2c73('0x21')],_0x510092['account'][_0x2c73('0x31')],_0x510092['message']['id'],![],_0x1cd800,_0xf7a7be['id']);if(rpc[_0x510092[_0x2c73('0x27')]+_0x2c73('0x32')]){return rpc[_0x510092[_0x2c73('0x27')]+_0x2c73('0x32')][_0x2c73('0x38')](_0x31084e,_0x370a61)['catch'](function(_0x3ec277){logger[_0x2c73('0x35')](_0x2c73('0x39'));});}}}function endRouting(_0x15a1cc,_0x1ede65,_0x42c70d,_0x1f64a6){if(_0x15a1cc&&_0x1ede65){_0x1ede65[_0x2c73('0x20')]-=0x1;var _0x20baf1={'leaveAt':moment()[_0x2c73('0x12')](_0x2c73('0x23')),'exitAt':moment()['format'](_0x2c73('0x23')),'reason':'timeout'};logger[_0x2c73('0x2f')](util[_0x2c73('0x12')](_0x2c73('0x3a'),_0x15a1cc,_0x1ede65[_0x2c73('0x31')]));emitChannelQueueInteraction(_0x42c70d[_0x2c73('0x27')],_0x1ede65[_0x2c73('0x31')],_0x42c70d[_0x2c73('0x21')],_0x42c70d[_0x2c73('0x11')][_0x2c73('0x31')],_0x42c70d[_0x2c73('0x2b')]['id'],![],_0x1f64a6);if(rpc[_0x42c70d[_0x2c73('0x27')]+_0x2c73('0x32')]){return rpc[_0x42c70d['channel']+'QueueReport'][_0x2c73('0x38')](_0x15a1cc,_0x20baf1)['catch'](function(_0x15f966){logger[_0x2c73('0x35')](_0x2c73('0x39'));});}}}function handleFindQueue(_0x3e534a){return function(_0x3997ce){return _0x3997ce[_0x2c73('0x31')][_0x2c73('0x3b')]()===_0x3e534a[_0x2c73('0x3b')]();};}exports[_0x2c73('0x3c')]=function(_0x52b83c,_0x215632,_0x6a859a,_0x1bf02a){return function(_0x4f67fe){try{var _0x219005={'name':_0x215632[0x0],'timeout':_0x215632[0x1]};var _0x104a80=queue[_0x2c73('0x0')](_0x219005,{'typecast':!![]});if(_0x104a80[_0x2c73('0x3d')]){logger[_0x2c73('0x35')]('[%s][QUEUE]\x20%s',_0x52b83c,_[_0x2c73('0x3e')](_0x104a80,'message')[_0x2c73('0x3f')](',\x20'));_0x4f67fe[_0x2c73('0x40')]();}else{var _0xdf4421=_['find'](_0x6a859a[_0x1bf02a['channel']+_0x2c73('0x41')],handleFindQueue(_0x219005[_0x2c73('0x31')]));if(_0xdf4421){startRouting(_0x52b83c,_0xdf4421,_0x1bf02a,_0x6a859a);var _0x2b2189=(_0xdf4421[_0x2c73('0x42')]||0xa)*0x3e8;var _0x5ae0d3=(_0x219005[_0x2c73('0x42')]||0x14)*0x3e8;var _0x3ebe27,_0x3356d6;if(_0x2b2189>_0x5ae0d3){_0x5ae0d3=_0x2b2189;}var _0x62e770=seqqueue[_0x2c73('0x43')](_0x2b2189);_0x62e770['id']=_0x52b83c;_0x62e770[_0x2c73('0x44')]=_0x2b2189;_0x62e770['qtimeout']=_0x5ae0d3;_0x62e770[_0x2c73('0x27')]=_0x1bf02a[_0x2c73('0x27')];_0x6a859a[_0x2c73('0x45')][_0x52b83c]['on'](_0x2c73('0x46'),function(){logger[_0x2c73('0x2f')](_0x2c73('0x47'),_0x52b83c);stopRouting(_0x52b83c,_0xdf4421,_0x1bf02a,_0x6a859a);clearTimeout(_0x3ebe27);_0x3ebe27=undefined;_0x62e770[_0x2c73('0x48')](!![]);if(_0x6a859a[_0x2c73('0x45')][_0x52b83c]){delete _0x6a859a[_0x2c73('0x45')][_0x52b83c];}_0x4f67fe[_0x2c73('0x40')]();});_0x6a859a['rules'][_0x52b83c]['on'](_0x2c73('0x49'),function(){if(_0x6a859a[_0x2c73('0x45')][_0x52b83c]){delete _0x6a859a[_0x2c73('0x45')][_0x52b83c];}});_0x3ebe27=setTimeout(function(){logger[_0x2c73('0x2f')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x52b83c);endRouting(_0x52b83c,_0xdf4421,_0x1bf02a,_0x6a859a);clearTimeout(_0x3ebe27);_0x62e770[_0x2c73('0x48')](!![]);_0x4f67fe[_0x2c73('0x4a')]();},_0x5ae0d3);switch(_0xdf4421['strategy']){case'rrmemory':strategy[_0x2c73('0x4b')](_0x62e770,_0xdf4421,_0x6a859a,_0x1bf02a);break;default:strategy[_0x2c73('0x4c')](_0x62e770,_0xdf4421,_0x6a859a,_0x1bf02a);}}else{logger[_0x2c73('0x35')](_0x2c73('0x4d'),_0x52b83c,_0x219005[_0x2c73('0x31')]);_0x4f67fe[_0x2c73('0x40')]();}}}catch(_0x43e2d1){console[_0x2c73('0x4e')](_0x43e2d1);logger[_0x2c73('0x35')](_0x2c73('0x4f'),_0x52b83c,_0x43e2d1[_0x2c73('0x50')]);_0x4f67fe[_0x2c73('0x40')]();}};};