Built motion from commit 994c64e1.|2.6.1
[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 _0xafda=['interaction','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','error','accepted','[%s][STOP:QUEUE][NAME:%s]','update','catch','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','length','[%s][QUEUE]\x20%s','map','join','stop','find','Queues','createQueue','atimeout','rules','end','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','util','seq-queue','ioredis','../../../../config/environment','../../../../config/logger','routing','redis','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','emit','%sQueuesWaitingInteractions','pick','format','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','InteractionId'];(function(_0xb6614d,_0x37a56a){var _0x5318f2=function(_0x439cdf){while(--_0x439cdf){_0xb6614d['push'](_0xb6614d['shift']());}};_0x5318f2(++_0x37a56a);}(_0xafda,0x108));var _0xaafd=function(_0x18cd5b,_0x10240b){_0x18cd5b=_0x18cd5b-0x0;var _0x5eaa52=_0xafda[_0x18cd5b];return _0x5eaa52;};'use strict';var schema=require(_0xaafd('0x0'));var _=require(_0xaafd('0x1'));var util=require(_0xaafd('0x2'));var seqqueue=require(_0xaafd('0x3'));var moment=require('moment');var Redis=require(_0xaafd('0x4'));var config=require(_0xaafd('0x5'));var logger=require(_0xaafd('0x6'))(_0xaafd('0x7'));var strategy=require('./strategy');config['redis']=_['defaults'](config[_0xaafd('0x8')],{'host':_0xaafd('0x9'),'port':0x18eb});var io=require(_0xaafd('0xa'))(new Redis(config[_0xaafd('0x8')]));var attributes=['id',_0xaafd('0xb'),_0xaafd('0xc'),_0xaafd('0xd'),_0xaafd('0xe'),_0xaafd('0xf')];function emit(_0x4195ef,_0x5f32e3,_0x238e58){io['to'](_0x4195ef)[_0xaafd('0x10')](_0x5f32e3,_0x238e58);}function emitChannelQueueInteraction(_0x2a4556,_0x751a53,_0x13f3bd,_0x1a0cf2,_0x1b8198,_0x502e5d,_0x1a8ae1,_0x14a4ed){var _0x208e59=_['clone'](_0x13f3bd);_0x208e59[_0xaafd('0xb')]=_0x14a4ed;_0x208e59[_0xaafd('0xd')]=_0x751a53;_0x208e59[_0xaafd('0xc')]=_0x1a0cf2;_0x208e59['id']=_0x1b8198;if(_0x502e5d){_0x1a8ae1[util['format'](_0xaafd('0x11'),_0x2a4556)][_0x1b8198]=_[_0xaafd('0x12')](_0x208e59,attributes);}else{delete _0x1a8ae1[util[_0xaafd('0x13')](_0xaafd('0x11'),_0x2a4556)][_0x1b8198];}emit(util[_0xaafd('0x13')]('%s:queue:%s',_0x2a4556,_0x751a53),util['format'](_0xaafd('0x14'),_0x2a4556,_0x502e5d?'save':_0xaafd('0x15')),_[_0xaafd('0x12')](_0x208e59,attributes));}var rpc={'openchannelQueueReport':require(_0xaafd('0x16')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0xaafd('0x17')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0xaafd('0x18')),'whatsappQueueReport':require(_0xaafd('0x19'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0xaafd('0x1a')},'timeout':{'type':'number','message':_0xaafd('0x1b')}});function startRouting(_0x1f2868,_0x3f2da3,_0x32a6e4,_0xbaf4a2){if(_0x1f2868&&_0x3f2da3&&_0x32a6e4){_0x3f2da3[_0xaafd('0x1c')]+=0x1;var _0x3bcf26={'uniqueid':_0x1f2868,'from':_0x32a6e4[_0xaafd('0x1d')]?_0x32a6e4[_0xaafd('0x1d')]['from']:'','joinAt':moment()[_0xaafd('0x13')](_0xaafd('0x1e')),'ContactId':_0x32a6e4[_0xaafd('0x1f')]?_0x32a6e4[_0xaafd('0x1f')]['id']:null,'ListId':_0x32a6e4['list']?_0x32a6e4[_0xaafd('0x20')]['id']:null};_0x3bcf26[_[_0xaafd('0x21')](_0x32a6e4[_0xaafd('0x22')])+'QueueId']=_0x3f2da3['id']||null;_0x3bcf26[_[_0xaafd('0x21')](_0x32a6e4[_0xaafd('0x22')])+_0xaafd('0x23')]=_0x32a6e4['interaction']?_0x32a6e4[_0xaafd('0x24')]['id']:null;_0x3bcf26[_[_0xaafd('0x21')](_0x32a6e4[_0xaafd('0x22')])+_0xaafd('0x25')]=_0x32a6e4[_0xaafd('0x26')]?_0x32a6e4[_0xaafd('0x26')]['id']:null;_0x3bcf26[_[_0xaafd('0x21')](_0x32a6e4[_0xaafd('0x22')])+(_0x32a6e4['channel']!==_0xaafd('0x27')?_0xaafd('0x28'):_0xaafd('0x29'))]=_0x32a6e4[_0xaafd('0xc')]?_0x32a6e4[_0xaafd('0xc')]['id']:null;logger[_0xaafd('0x2a')](util[_0xaafd('0x13')](_0xaafd('0x2b'),_0x1f2868,_0x3f2da3[_0xaafd('0x2c')]));emitChannelQueueInteraction(_0x32a6e4[_0xaafd('0x22')],_0x3f2da3['name'],_0x3bcf26,_0x32a6e4[_0xaafd('0xc')][_0xaafd('0x2c')],_0x32a6e4['message']['id'],!![],_0xbaf4a2,_0x3f2da3['id']);if(rpc[_0x32a6e4[_0xaafd('0x22')]+_0xaafd('0x2d')]){return rpc[_0x32a6e4['channel']+'QueueReport']['create'](_0x3bcf26)['catch'](function(_0x58d40c){logger[_0xaafd('0x2e')]('create\x20queue\x20report');});}}}function stopRouting(_0x5cae7f,_0x40809c,_0x1b9e7f,_0x5847fe){if(_0x5cae7f&&_0x40809c){_0x40809c[_0xaafd('0x1c')]-=0x1;var _0x2037d6={'leaveAt':moment()[_0xaafd('0x13')](_0xaafd('0x1e')),'acceptAt':moment()[_0xaafd('0x13')](_0xaafd('0x1e')),'reason':_0xaafd('0x2f')};logger[_0xaafd('0x2a')](util[_0xaafd('0x13')](_0xaafd('0x30'),_0x5cae7f,_0x40809c[_0xaafd('0x2c')]));emitChannelQueueInteraction(_0x1b9e7f[_0xaafd('0x22')],_0x40809c[_0xaafd('0x2c')],_0x1b9e7f['body'],_0x1b9e7f[_0xaafd('0xc')][_0xaafd('0x2c')],_0x1b9e7f[_0xaafd('0x26')]['id'],![],_0x5847fe,_0x40809c['id']);if(rpc[_0x1b9e7f[_0xaafd('0x22')]+'QueueReport']){return rpc[_0x1b9e7f['channel']+'QueueReport'][_0xaafd('0x31')](_0x5cae7f,_0x2037d6)[_0xaafd('0x32')](function(_0x417c02){logger[_0xaafd('0x2e')](_0xaafd('0x33'));});}}}function endRouting(_0x547692,_0x18af25,_0x884d44,_0x398228){if(_0x547692&&_0x18af25){_0x18af25[_0xaafd('0x1c')]-=0x1;var _0x140fab={'leaveAt':moment()['format'](_0xaafd('0x1e')),'exitAt':moment()['format'](_0xaafd('0x1e')),'reason':_0xaafd('0x34')};logger[_0xaafd('0x2a')](util['format'](_0xaafd('0x35'),_0x547692,_0x18af25['name']));emitChannelQueueInteraction(_0x884d44[_0xaafd('0x22')],_0x18af25[_0xaafd('0x2c')],_0x884d44['body'],_0x884d44['account'][_0xaafd('0x2c')],_0x884d44[_0xaafd('0x26')]['id'],![],_0x398228);if(rpc[_0x884d44[_0xaafd('0x22')]+'QueueReport']){return rpc[_0x884d44[_0xaafd('0x22')]+_0xaafd('0x2d')][_0xaafd('0x31')](_0x547692,_0x140fab)[_0xaafd('0x32')](function(_0x52b670){logger[_0xaafd('0x2e')](_0xaafd('0x33'));});}}}function handleFindQueue(_0x330018){return function(_0x14e01f){return _0x14e01f['name'][_0xaafd('0x36')]()===_0x330018[_0xaafd('0x36')]();};}exports['consequence']=function(_0xb845b9,_0x1f9cb5,_0x33dfb9,_0x43cfa1){return function(_0xaf5f40){try{var _0x34ba21={'name':_0x1f9cb5[0x0],'timeout':_0x1f9cb5[0x1]};var _0x51af54=queue[_0xaafd('0x0')](_0x34ba21,{'typecast':!![]});if(_0x51af54[_0xaafd('0x37')]){logger[_0xaafd('0x2e')](_0xaafd('0x38'),_0xb845b9,_[_0xaafd('0x39')](_0x51af54,_0xaafd('0x26'))[_0xaafd('0x3a')](',\x20'));_0xaf5f40[_0xaafd('0x3b')]();}else{var _0x39355a=_[_0xaafd('0x3c')](_0x33dfb9[_0x43cfa1[_0xaafd('0x22')]+_0xaafd('0x3d')],handleFindQueue(_0x34ba21['name']));if(_0x39355a){startRouting(_0xb845b9,_0x39355a,_0x43cfa1,_0x33dfb9);var _0x30a1bb=(_0x39355a[_0xaafd('0x34')]||0xa)*0x3e8;var _0x2c4209=(_0x34ba21[_0xaafd('0x34')]||0x14)*0x3e8;var _0x20fc51,_0x20cf67;if(_0x30a1bb>_0x2c4209){_0x2c4209=_0x30a1bb;}var _0x25df1f=seqqueue[_0xaafd('0x3e')](_0x30a1bb);_0x25df1f['id']=_0xb845b9;_0x25df1f[_0xaafd('0x3f')]=_0x30a1bb;_0x25df1f['qtimeout']=_0x2c4209;_0x25df1f['channel']=_0x43cfa1['channel'];_0x33dfb9[_0xaafd('0x40')][_0xb845b9]['on'](_0xaafd('0x41'),function(){logger[_0xaafd('0x2a')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0xb845b9);stopRouting(_0xb845b9,_0x39355a,_0x43cfa1,_0x33dfb9);clearTimeout(_0x20fc51);_0x20fc51=undefined;_0x25df1f[_0xaafd('0x42')](!![]);if(_0x33dfb9['rules'][_0xb845b9]){delete _0x33dfb9['rules'][_0xb845b9];}_0xaf5f40[_0xaafd('0x3b')]();});_0x33dfb9['rules'][_0xb845b9]['on'](_0xaafd('0x43'),function(){if(_0x33dfb9[_0xaafd('0x40')][_0xb845b9]){delete _0x33dfb9[_0xaafd('0x40')][_0xb845b9];}});_0x20fc51=setTimeout(function(){logger[_0xaafd('0x2a')](_0xaafd('0x44'),_0xb845b9);endRouting(_0xb845b9,_0x39355a,_0x43cfa1,_0x33dfb9);clearTimeout(_0x20fc51);_0x25df1f[_0xaafd('0x42')](!![]);_0xaf5f40[_0xaafd('0x45')]();},_0x2c4209);switch(_0x39355a[_0xaafd('0x46')]){case _0xaafd('0x47'):strategy['rrmemory'](_0x25df1f,_0x39355a,_0x33dfb9,_0x43cfa1);break;default:strategy['beepall'](_0x25df1f,_0x39355a,_0x33dfb9,_0x43cfa1);}}else{logger['error'](_0xaafd('0x48'),_0xb845b9,_0x34ba21[_0xaafd('0x2c')]);_0xaf5f40['stop']();}}}catch(_0x2903d7){console[_0xaafd('0x49')](_0x2903d7);logger['error'](_0xaafd('0x38'),_0xb845b9,_0x2903d7[_0xaafd('0x4a')]);_0xaf5f40[_0xaafd('0x3b')]();}};};