2f99491a245856952c01583a7a6da106e1113c5f
[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 _0x21bb=['pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','contact','list','channel','upperFirst','InteractionId','interaction','MessageId','message','chat','AccountId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','waiting','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','stop','find','createQueue','atimeout','qtimeout','rules','end','close','complete','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','lodash','util','seq-queue','ioredis','../../../../config/environment','routing','./strategy','redis','defaults','localhost','queue_id','account','from','joinAt','emit','clone','format'];(function(_0x3203a1,_0x46c498){var _0x24215e=function(_0x4ffab0){while(--_0x4ffab0){_0x3203a1['push'](_0x3203a1['shift']());}};_0x24215e(++_0x46c498);}(_0x21bb,0x16b));var _0xb21b=function(_0x5143ba,_0x256eb6){_0x5143ba=_0x5143ba-0x0;var _0x441e77=_0x21bb[_0x5143ba];return _0x441e77;};'use strict';var schema=require('validate');var _=require(_0xb21b('0x0'));var util=require(_0xb21b('0x1'));var seqqueue=require(_0xb21b('0x2'));var moment=require('moment');var Redis=require(_0xb21b('0x3'));var config=require(_0xb21b('0x4'));var logger=require('../../../../config/logger')(_0xb21b('0x5'));var strategy=require(_0xb21b('0x6'));config[_0xb21b('0x7')]=_[_0xb21b('0x8')](config[_0xb21b('0x7')],{'host':_0xb21b('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var attributes=['id',_0xb21b('0xa'),_0xb21b('0xb'),'queue',_0xb21b('0xc'),_0xb21b('0xd')];function emit(_0xbebf51,_0x287293,_0x40c58b){io['to'](_0xbebf51)[_0xb21b('0xe')](_0x287293,_0x40c58b);}function emitChannelQueueInteraction(_0x557cab,_0xa6037c,_0x408a5,_0x52f1ff,_0x3a77cc,_0x95a184,_0x4b7474,_0x43f51b){var _0x4d5e87=_[_0xb21b('0xf')](_0x408a5);_0x4d5e87[_0xb21b('0xa')]=_0x43f51b;_0x4d5e87['queue']=_0xa6037c;_0x4d5e87[_0xb21b('0xb')]=_0x52f1ff;_0x4d5e87['id']=_0x3a77cc;if(_0x95a184){_0x4b7474[util[_0xb21b('0x10')]('%sQueuesWaitingInteractions',_0x557cab)][_0x3a77cc]=_[_0xb21b('0x11')](_0x4d5e87,attributes);}else{delete _0x4b7474[util[_0xb21b('0x10')](_0xb21b('0x12'),_0x557cab)][_0x3a77cc];}emit(util[_0xb21b('0x10')](_0xb21b('0x13'),_0x557cab,_0xa6037c),util[_0xb21b('0x10')](_0xb21b('0x14'),_0x557cab,_0x95a184?'save':_0xb21b('0x15')),_[_0xb21b('0x11')](_0x4d5e87,attributes));}var rpc={'openchannelQueueReport':require(_0xb21b('0x16')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0xb21b('0x17')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0xb21b('0x18'))};var queue=schema({'name':{'type':_0xb21b('0x19'),'required':!![],'message':_0xb21b('0x1a')},'timeout':{'type':_0xb21b('0x1b'),'message':_0xb21b('0x1c')}});function startRouting(_0x253303,_0x553cb7,_0x55337a,_0x187aa4){if(_0x253303&&_0x553cb7&&_0x55337a){_0x553cb7['waiting']+=0x1;var _0x265d89={'uniqueid':_0x253303,'from':_0x55337a[_0xb21b('0x1d')]?_0x55337a['body'][_0xb21b('0xc')]:'','joinAt':moment()[_0xb21b('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x55337a[_0xb21b('0x1e')]?_0x55337a[_0xb21b('0x1e')]['id']:null,'ListId':_0x55337a[_0xb21b('0x1f')]?_0x55337a[_0xb21b('0x1f')]['id']:null};_0x265d89[_['upperFirst'](_0x55337a[_0xb21b('0x20')])+'QueueId']=_0x553cb7['id']||null;_0x265d89[_[_0xb21b('0x21')](_0x55337a[_0xb21b('0x20')])+_0xb21b('0x22')]=_0x55337a[_0xb21b('0x23')]?_0x55337a['interaction']['id']:null;_0x265d89[_[_0xb21b('0x21')](_0x55337a[_0xb21b('0x20')])+_0xb21b('0x24')]=_0x55337a['message']?_0x55337a[_0xb21b('0x25')]['id']:null;_0x265d89[_['upperFirst'](_0x55337a[_0xb21b('0x20')])+(_0x55337a[_0xb21b('0x20')]!==_0xb21b('0x26')?_0xb21b('0x27'):'WebsiteId')]=_0x55337a['account']?_0x55337a[_0xb21b('0xb')]['id']:null;logger[_0xb21b('0x28')](util[_0xb21b('0x10')](_0xb21b('0x29'),_0x253303,_0x553cb7[_0xb21b('0x2a')]));emitChannelQueueInteraction(_0x55337a[_0xb21b('0x20')],_0x553cb7[_0xb21b('0x2a')],_0x265d89,_0x55337a[_0xb21b('0xb')][_0xb21b('0x2a')],_0x55337a[_0xb21b('0x25')]['id'],!![],_0x187aa4,_0x553cb7['id']);if(rpc[_0x55337a[_0xb21b('0x20')]+_0xb21b('0x2b')]){return rpc[_0x55337a['channel']+_0xb21b('0x2b')][_0xb21b('0x2c')](_0x265d89)[_0xb21b('0x2d')](function(_0x2cf4ab){logger[_0xb21b('0x2e')](_0xb21b('0x2f'));});}}}function stopRouting(_0x4b091b,_0x256913,_0x142aec,_0x466957){if(_0x4b091b&&_0x256913){_0x256913['waiting']-=0x1;var _0x1ea3c5={'leaveAt':moment()[_0xb21b('0x10')](_0xb21b('0x30')),'acceptAt':moment()[_0xb21b('0x10')](_0xb21b('0x30')),'reason':_0xb21b('0x31')};logger['info'](util[_0xb21b('0x10')](_0xb21b('0x32'),_0x4b091b,_0x256913[_0xb21b('0x2a')]));emitChannelQueueInteraction(_0x142aec[_0xb21b('0x20')],_0x256913[_0xb21b('0x2a')],_0x142aec[_0xb21b('0x1d')],_0x142aec[_0xb21b('0xb')][_0xb21b('0x2a')],_0x142aec[_0xb21b('0x25')]['id'],![],_0x466957,_0x256913['id']);if(rpc[_0x142aec['channel']+_0xb21b('0x2b')]){return rpc[_0x142aec[_0xb21b('0x20')]+'QueueReport'][_0xb21b('0x33')](_0x4b091b,_0x1ea3c5)[_0xb21b('0x2d')](function(_0x81f681){logger[_0xb21b('0x2e')](_0xb21b('0x34'));});}}}function endRouting(_0xd188aa,_0x3cc03d,_0x55fe34,_0x210911){if(_0xd188aa&&_0x3cc03d){_0x3cc03d[_0xb21b('0x35')]-=0x1;var _0x439903={'leaveAt':moment()[_0xb21b('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0xb21b('0x10')](_0xb21b('0x30')),'reason':_0xb21b('0x36')};logger[_0xb21b('0x28')](util[_0xb21b('0x10')](_0xb21b('0x37'),_0xd188aa,_0x3cc03d[_0xb21b('0x2a')]));emitChannelQueueInteraction(_0x55fe34['channel'],_0x3cc03d[_0xb21b('0x2a')],_0x55fe34[_0xb21b('0x1d')],_0x55fe34[_0xb21b('0xb')][_0xb21b('0x2a')],_0x55fe34[_0xb21b('0x25')]['id'],![],_0x210911);if(rpc[_0x55fe34[_0xb21b('0x20')]+_0xb21b('0x2b')]){return rpc[_0x55fe34['channel']+'QueueReport'][_0xb21b('0x33')](_0xd188aa,_0x439903)[_0xb21b('0x2d')](function(_0x664693){logger[_0xb21b('0x2e')](_0xb21b('0x34'));});}}}function handleFindQueue(_0x178d85){return function(_0x5b2ec7){return _0x5b2ec7[_0xb21b('0x2a')][_0xb21b('0x38')]()===_0x178d85[_0xb21b('0x38')]();};}exports[_0xb21b('0x39')]=function(_0x3506e5,_0x128ab7,_0x2a2830,_0x2e6c80){return function(_0x2980a5){try{var _0x5986f0={'name':_0x128ab7[0x0],'timeout':_0x128ab7[0x1]};var _0x3b9634=queue['validate'](_0x5986f0,{'typecast':!![]});if(_0x3b9634[_0xb21b('0x3a')]){logger['error'](_0xb21b('0x3b'),_0x3506e5,_[_0xb21b('0x3c')](_0x3b9634,_0xb21b('0x25'))['join'](',\x20'));_0x2980a5[_0xb21b('0x3d')]();}else{var _0x42ee0f=_[_0xb21b('0x3e')](_0x2a2830[_0x2e6c80[_0xb21b('0x20')]+'Queues'],handleFindQueue(_0x5986f0[_0xb21b('0x2a')]));if(_0x42ee0f){startRouting(_0x3506e5,_0x42ee0f,_0x2e6c80,_0x2a2830);var _0x448824=(_0x42ee0f['timeout']||0xa)*0x3e8;var _0xf3afa5=(_0x5986f0[_0xb21b('0x36')]||0x14)*0x3e8;var _0x5a4100,_0x1365b4;if(_0x448824>_0xf3afa5){_0xf3afa5=_0x448824;}var _0x5cf9c0=seqqueue[_0xb21b('0x3f')](_0x448824);_0x5cf9c0['id']=_0x3506e5;_0x5cf9c0[_0xb21b('0x40')]=_0x448824;_0x5cf9c0[_0xb21b('0x41')]=_0xf3afa5;_0x5cf9c0['channel']=_0x2e6c80['channel'];_0x2a2830[_0xb21b('0x42')][_0x3506e5]['on'](_0xb21b('0x43'),function(){logger[_0xb21b('0x28')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x3506e5);stopRouting(_0x3506e5,_0x42ee0f,_0x2e6c80,_0x2a2830);clearTimeout(_0x5a4100);_0x5a4100=undefined;_0x5cf9c0[_0xb21b('0x44')](!![]);if(_0x2a2830[_0xb21b('0x42')][_0x3506e5]){delete _0x2a2830['rules'][_0x3506e5];}_0x2980a5[_0xb21b('0x3d')]();});_0x2a2830['rules'][_0x3506e5]['on'](_0xb21b('0x45'),function(){if(_0x2a2830[_0xb21b('0x42')][_0x3506e5]){delete _0x2a2830[_0xb21b('0x42')][_0x3506e5];}});_0x5a4100=setTimeout(function(){logger['info']('[%s][QUEUE]\x20APPLICATION\x20END',_0x3506e5);endRouting(_0x3506e5,_0x42ee0f,_0x2e6c80,_0x2a2830);clearTimeout(_0x5a4100);_0x5cf9c0['close'](!![]);_0x2980a5['next']();},_0xf3afa5);switch(_0x42ee0f[_0xb21b('0x46')]){case _0xb21b('0x47'):strategy[_0xb21b('0x47')](_0x5cf9c0,_0x42ee0f,_0x2a2830,_0x2e6c80);break;default:strategy[_0xb21b('0x48')](_0x5cf9c0,_0x42ee0f,_0x2a2830,_0x2e6c80);}}else{logger[_0xb21b('0x2e')](_0xb21b('0x49'),_0x3506e5,_0x5986f0['name']);_0x2980a5[_0xb21b('0x3d')]();}}}catch(_0x360641){console[_0xb21b('0x4a')](_0x360641);logger[_0xb21b('0x2e')](_0xb21b('0x3b'),_0x3506e5,_0x360641[_0xb21b('0x4b')]);_0x2980a5['stop']();}};};