Built motion from commit 1fd437e9.|2.6.19
[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 _0x0e01=['../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','upperFirst','QueueId','interaction','channel','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','catch','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','then','error','update\x20queue\x20report','toLowerCase','length','[%s][QUEUE]\x20%s','map','join','find','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','stop','next','strategy','rrmemory','beepall','stack','validate','seq-queue','moment','ioredis','routing','defaults','localhost','socket.io-emitter','queue_id','account','queue','joinAt','emit','clone','push','InteractionId','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction'];(function(_0x63394b,_0x257d25){var _0x5a9e5b=function(_0x7cf872){while(--_0x7cf872){_0x63394b['push'](_0x63394b['shift']());}};_0x5a9e5b(++_0x257d25);}(_0x0e01,0x87));var _0x10e0=function(_0x39ef69,_0x43a3dd){_0x39ef69=_0x39ef69-0x0;var _0x48fd17=_0x0e01[_0x39ef69];return _0x48fd17;};'use strict';var schema=require(_0x10e0('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require(_0x10e0('0x1'));var moment=require(_0x10e0('0x2'));var Redis=require(_0x10e0('0x3'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0x10e0('0x4'));var strategy=require('./strategy');config['redis']=_[_0x10e0('0x5')](config['redis'],{'host':_0x10e0('0x6'),'port':0x18eb});var io=require(_0x10e0('0x7'))(new Redis(config['redis']));var attributes=['id',_0x10e0('0x8'),_0x10e0('0x9'),_0x10e0('0xa'),'from',_0x10e0('0xb')];function emit(_0x5e4ea2,_0x55c2fc,_0x328910){io['to'](_0x5e4ea2)[_0x10e0('0xc')](_0x55c2fc,_0x328910);}function emitChannelQueueInteraction(_0x23d5e8,_0x494ecc,_0x304d5d,_0x3db643,_0x72a88e,_0x2d0236,_0x301c50,_0x471cdd){var _0x3c9ff4=_[_0x10e0('0xd')](_0x304d5d);_0x3c9ff4[_0x10e0('0x8')]=_0x471cdd;_0x3c9ff4[_0x10e0('0xa')]=_0x494ecc;_0x3c9ff4[_0x10e0('0x9')]=_0x3db643;_0x3c9ff4['id']=_0x72a88e;if(_0x2d0236){attributes[_0x10e0('0xe')](_['capitalize'](_0x23d5e8)+_0x10e0('0xf'));_0x301c50[util[_0x10e0('0x10')](_0x10e0('0x11'),_0x23d5e8)][_0x72a88e]=_[_0x10e0('0x12')](_0x3c9ff4,attributes);}else{delete _0x301c50[util[_0x10e0('0x10')]('%sQueuesWaitingInteractions',_0x23d5e8)][_0x72a88e];}emit(util[_0x10e0('0x10')](_0x10e0('0x13'),_0x23d5e8,_0x494ecc),util['format'](_0x10e0('0x14'),_0x23d5e8,_0x2d0236?_0x10e0('0x15'):_0x10e0('0x16')),_[_0x10e0('0x12')](_0x3c9ff4,attributes));}var rpc={'openchannelQueueReport':require(_0x10e0('0x17')),'mailQueueReport':require(_0x10e0('0x18')),'chatQueueReport':require(_0x10e0('0x19')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x10e0('0x1a')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0x10e0('0x1b')),'mailInteraction':require(_0x10e0('0x1c')),'openchannelInteraction':require(_0x10e0('0x1d')),'smsInteraction':require(_0x10e0('0x1e')),'whatsappInteraction':require(_0x10e0('0x1f'))};var queue=schema({'name':{'type':_0x10e0('0x20'),'required':!![],'message':_0x10e0('0x21')},'timeout':{'type':_0x10e0('0x22'),'message':_0x10e0('0x23')}});function startRouting(_0x4daaf8,_0x3d87cd,_0x5b7779,_0x43396f){if(_0x4daaf8&&_0x3d87cd&&_0x5b7779){_0x3d87cd[_0x10e0('0x24')]+=0x1;var _0x422cb6={'uniqueid':_0x4daaf8,'from':_0x5b7779['body']?_0x5b7779[_0x10e0('0x25')][_0x10e0('0x26')]:'','joinAt':moment()[_0x10e0('0x10')](_0x10e0('0x27')),'ContactId':_0x5b7779[_0x10e0('0x28')]?_0x5b7779[_0x10e0('0x28')]['id']:null,'ListId':_0x5b7779['list']?_0x5b7779['list']['id']:null};_0x422cb6[_[_0x10e0('0x29')](_0x5b7779['channel'])+_0x10e0('0x2a')]=_0x3d87cd['id']||null;_0x422cb6[_[_0x10e0('0x29')](_0x5b7779['channel'])+_0x10e0('0xf')]=_0x5b7779[_0x10e0('0x2b')]?_0x5b7779[_0x10e0('0x2b')]['id']:null;_0x422cb6[_['upperFirst'](_0x5b7779[_0x10e0('0x2c')])+_0x10e0('0x2d')]=_0x5b7779[_0x10e0('0x2e')]?_0x5b7779['message']['id']:null;_0x422cb6[_[_0x10e0('0x29')](_0x5b7779[_0x10e0('0x2c')])+(_0x5b7779[_0x10e0('0x2c')]!==_0x10e0('0x2f')?_0x10e0('0x30'):_0x10e0('0x31'))]=_0x5b7779[_0x10e0('0x9')]?_0x5b7779[_0x10e0('0x9')]['id']:null;logger[_0x10e0('0x32')](util[_0x10e0('0x10')](_0x10e0('0x33'),_0x4daaf8,_0x3d87cd[_0x10e0('0x34')]));emitChannelQueueInteraction(_0x5b7779[_0x10e0('0x2c')],_0x3d87cd['name'],_0x422cb6,_0x5b7779[_0x10e0('0x9')][_0x10e0('0x34')],_0x5b7779[_0x10e0('0x2e')]['id'],!![],_0x43396f,_0x3d87cd['id']);if(rpc[_0x5b7779[_0x10e0('0x2c')]+'QueueReport']){return rpc[_0x5b7779[_0x10e0('0x2c')]+_0x10e0('0x35')]['create'](_0x422cb6)[_0x10e0('0x36')](function(_0x41f17d){logger['error'](_0x10e0('0x37'),_0x41f17d);});}}}function stopRouting(_0x525fcd,_0xb69e11,_0x279084,_0x547090){if(_0x525fcd&&_0xb69e11){_0xb69e11['waiting']-=0x1;var _0x5878a3={'leaveAt':moment()[_0x10e0('0x10')](_0x10e0('0x27')),'acceptAt':moment()[_0x10e0('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x10e0('0x38')};logger[_0x10e0('0x32')](util[_0x10e0('0x10')](_0x10e0('0x39'),_0x525fcd,_0xb69e11['name']));emitChannelQueueInteraction(_0x279084['channel'],_0xb69e11[_0x10e0('0x34')],_0x279084[_0x10e0('0x25')],_0x279084['account'][_0x10e0('0x34')],_0x279084[_0x10e0('0x2e')]['id'],![],_0x547090,_0xb69e11['id']);return rpc[_0x279084[_0x10e0('0x2c')]+_0x10e0('0x3a')][_0x10e0('0x3b')](_0x279084['interaction']['id'],{'queueId':_0xb69e11['id']})[_0x10e0('0x3c')](function(){if(rpc[_0x279084[_0x10e0('0x2c')]+_0x10e0('0x35')]){return rpc[_0x279084['channel']+_0x10e0('0x35')][_0x10e0('0x3b')](_0x525fcd,_0x5878a3)[_0x10e0('0x36')](function(_0x1d0556){logger[_0x10e0('0x3d')](_0x10e0('0x3e'),_0x1d0556);});}});}}function endRouting(_0x3ce0e4,_0x1429bc,_0x1e95ed,_0x5198b5){if(_0x3ce0e4&&_0x1429bc){_0x1429bc[_0x10e0('0x24')]-=0x1;var _0x3cb5a5={'leaveAt':moment()[_0x10e0('0x10')](_0x10e0('0x27')),'exitAt':moment()[_0x10e0('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0x10e0('0x32')](util['format']('[%s][END:QUEUE][NAME:%s]',_0x3ce0e4,_0x1429bc[_0x10e0('0x34')]));emitChannelQueueInteraction(_0x1e95ed[_0x10e0('0x2c')],_0x1429bc['name'],_0x1e95ed[_0x10e0('0x25')],_0x1e95ed['account'][_0x10e0('0x34')],_0x1e95ed[_0x10e0('0x2e')]['id'],![],_0x5198b5);if(rpc[_0x1e95ed[_0x10e0('0x2c')]+_0x10e0('0x35')]){return rpc[_0x1e95ed[_0x10e0('0x2c')]+_0x10e0('0x35')][_0x10e0('0x3b')](_0x3ce0e4,_0x3cb5a5)[_0x10e0('0x36')](function(_0xa55745){logger[_0x10e0('0x3d')](_0x10e0('0x3e'),_0xa55745);});}}}function handleFindQueue(_0x326cbe){return function(_0x5e3860){return _0x5e3860[_0x10e0('0x34')][_0x10e0('0x3f')]()===_0x326cbe[_0x10e0('0x3f')]();};}exports['consequence']=function(_0x163323,_0x3ce65b,_0x4e228a,_0x4931cc){return function(_0x464448){try{var _0x13d56d={'name':_0x3ce65b[0x0],'timeout':_0x3ce65b[0x1]};var _0x39faa0=queue[_0x10e0('0x0')](_0x13d56d,{'typecast':!![]});if(_0x39faa0[_0x10e0('0x40')]){logger[_0x10e0('0x3d')](_0x10e0('0x41'),_0x163323,_[_0x10e0('0x42')](_0x39faa0,_0x10e0('0x2e'))[_0x10e0('0x43')](',\x20'));_0x464448['stop']();}else{var _0x3cde37=_[_0x10e0('0x44')](_0x4e228a[_0x4931cc[_0x10e0('0x2c')]+'Queues'],handleFindQueue(_0x13d56d[_0x10e0('0x34')]));if(_0x3cde37){startRouting(_0x163323,_0x3cde37,_0x4931cc,_0x4e228a);var _0x6305a2=(_0x3cde37[_0x10e0('0x45')]||0xa)*0x3e8;var _0x2eb0ed=(_0x13d56d[_0x10e0('0x45')]||0x14)*0x3e8;var _0x1052f3;if(_0x6305a2>_0x2eb0ed){_0x2eb0ed=_0x6305a2;}var _0xf81cd6=seqqueue[_0x10e0('0x46')](_0x6305a2);_0xf81cd6['id']=_0x163323;_0xf81cd6[_0x10e0('0x47')]=_0x6305a2;_0xf81cd6[_0x10e0('0x48')]=_0x2eb0ed;_0xf81cd6[_0x10e0('0x2c')]=_0x4931cc[_0x10e0('0x2c')];_0x4e228a[_0x10e0('0x49')][_0x163323]['on'](_0x10e0('0x4a'),function(){logger[_0x10e0('0x32')](_0x10e0('0x4b'),_0x163323);stopRouting(_0x163323,_0x3cde37,_0x4931cc,_0x4e228a);clearTimeout(_0x1052f3);_0x1052f3=undefined;_0xf81cd6[_0x10e0('0x4c')](!![]);if(_0x4e228a[_0x10e0('0x49')][_0x163323]){delete _0x4e228a['rules'][_0x163323];}_0x464448[_0x10e0('0x4d')]();});_0x4e228a[_0x10e0('0x49')][_0x163323]['on']('complete',function(){if(_0x4e228a[_0x10e0('0x49')][_0x163323]){delete _0x4e228a[_0x10e0('0x49')][_0x163323];}});_0x1052f3=setTimeout(function(){logger[_0x10e0('0x32')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x163323);endRouting(_0x163323,_0x3cde37,_0x4931cc,_0x4e228a);clearTimeout(_0x1052f3);_0xf81cd6[_0x10e0('0x4c')](!![]);_0x464448[_0x10e0('0x4e')]();},_0x2eb0ed);switch(_0x3cde37[_0x10e0('0x4f')]){case _0x10e0('0x50'):strategy[_0x10e0('0x50')](_0xf81cd6,_0x3cde37,_0x4e228a,_0x4931cc);break;default:strategy[_0x10e0('0x51')](_0xf81cd6,_0x3cde37,_0x4e228a,_0x4931cc);}}else{logger[_0x10e0('0x3d')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x163323,_0x13d56d[_0x10e0('0x34')]);_0x464448[_0x10e0('0x4d')]();}}}catch(_0x293d5a){logger[_0x10e0('0x3d')](_0x10e0('0x41'),_0x163323,_0x293d5a[_0x10e0('0x52')]);_0x464448[_0x10e0('0x4d')]();}};};