Built motion from commit dbf3a7e2.|2.6.30
[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 _0xeca3=['push','capitalize','format','%sQueuesWaitingInteractions','%s_queue_waiting_interaction:%s','remove','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','QueueReport','create','catch','error','create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','name','Interaction','update','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','consequence','length','[%s][QUEUE]\x20%s','join','stop','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','strategy','rrmemory','beepall','stack','validate','lodash','util','seq-queue','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','from','clone'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xeca3,0x99));var _0x3eca=function(_0x51020b,_0x38c2c7){_0x51020b=_0x51020b-0x0;var _0x371e47=_0xeca3[_0x51020b];return _0x371e47;};'use strict';var schema=require(_0x3eca('0x0'));var _=require(_0x3eca('0x1'));var util=require(_0x3eca('0x2'));var seqqueue=require(_0x3eca('0x3'));var moment=require('moment');var Redis=require('ioredis');var config=require(_0x3eca('0x4'));var logger=require(_0x3eca('0x5'))(_0x3eca('0x6'));var strategy=require(_0x3eca('0x7'));config[_0x3eca('0x8')]=_[_0x3eca('0x9')](config['redis'],{'host':_0x3eca('0xa'),'port':0x18eb});var io=require(_0x3eca('0xb'))(new Redis(config[_0x3eca('0x8')]));var attributes=['id',_0x3eca('0xc'),_0x3eca('0xd'),_0x3eca('0xe'),_0x3eca('0xf'),'joinAt'];function emit(_0x25d3e2,_0x3ab227,_0x46696e){io['to'](_0x25d3e2)['emit'](_0x3ab227,_0x46696e);}function emitChannelQueueInteraction(_0x1530cc,_0x1fb388,_0x10a3e4,_0x51a9f2,_0x1e25c5,_0x9441ed,_0x4c1f3e,_0x34272d){var _0x534e40=_[_0x3eca('0x10')](_0x10a3e4);_0x534e40[_0x3eca('0xc')]=_0x34272d;_0x534e40[_0x3eca('0xe')]=_0x1fb388;_0x534e40['account']=_0x51a9f2;_0x534e40['id']=_0x1e25c5;if(_0x9441ed){attributes[_0x3eca('0x11')](_[_0x3eca('0x12')](_0x1530cc)+'InteractionId');_0x4c1f3e[util[_0x3eca('0x13')](_0x3eca('0x14'),_0x1530cc)][_0x1e25c5]=_['pick'](_0x534e40,attributes);}else{delete _0x4c1f3e[util['format'](_0x3eca('0x14'),_0x1530cc)][_0x1e25c5];}emit(util['format']('%s:queue:%s',_0x1530cc,_0x1fb388),util[_0x3eca('0x13')](_0x3eca('0x15'),_0x1530cc,_0x9441ed?'save':_0x3eca('0x16')),_[_0x3eca('0x17')](_0x534e40,attributes));}var rpc={'openchannelQueueReport':require(_0x3eca('0x18')),'mailQueueReport':require(_0x3eca('0x19')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x3eca('0x1a')),'faxQueueReport':require(_0x3eca('0x1b')),'whatsappQueueReport':require(_0x3eca('0x1c')),'chatInteraction':require(_0x3eca('0x1d')),'faxInteraction':require(_0x3eca('0x1e')),'mailInteraction':require(_0x3eca('0x1f')),'openchannelInteraction':require(_0x3eca('0x20')),'smsInteraction':require(_0x3eca('0x21')),'whatsappInteraction':require(_0x3eca('0x22'))};var queue=schema({'name':{'type':_0x3eca('0x23'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x3eca('0x24'),'message':_0x3eca('0x25')}});function startRouting(_0x30c64a,_0x74ca32,_0x4acdc5,_0x4d0192){if(_0x30c64a&&_0x74ca32&&_0x4acdc5){_0x74ca32[_0x3eca('0x26')]+=0x1;var _0x4d0730={'uniqueid':_0x30c64a,'from':_0x4acdc5[_0x3eca('0x27')]?_0x4acdc5[_0x3eca('0x27')][_0x3eca('0xf')]:'','joinAt':moment()[_0x3eca('0x13')](_0x3eca('0x28')),'ContactId':_0x4acdc5['contact']?_0x4acdc5[_0x3eca('0x29')]['id']:null,'ListId':_0x4acdc5[_0x3eca('0x2a')]?_0x4acdc5['list']['id']:null};_0x4d0730[_[_0x3eca('0x2b')](_0x4acdc5[_0x3eca('0x2c')])+_0x3eca('0x2d')]=_0x74ca32['id']||null;_0x4d0730[_[_0x3eca('0x2b')](_0x4acdc5['channel'])+_0x3eca('0x2e')]=_0x4acdc5[_0x3eca('0x2f')]?_0x4acdc5[_0x3eca('0x2f')]['id']:null;_0x4d0730[_[_0x3eca('0x2b')](_0x4acdc5['channel'])+_0x3eca('0x30')]=_0x4acdc5[_0x3eca('0x31')]?_0x4acdc5[_0x3eca('0x31')]['id']:null;_0x4d0730[_[_0x3eca('0x2b')](_0x4acdc5[_0x3eca('0x2c')])+(_0x4acdc5[_0x3eca('0x2c')]!=='chat'?_0x3eca('0x32'):_0x3eca('0x33'))]=_0x4acdc5[_0x3eca('0xd')]?_0x4acdc5['account']['id']:null;logger[_0x3eca('0x34')](util['format'](_0x3eca('0x35'),_0x30c64a,_0x74ca32['name']));emitChannelQueueInteraction(_0x4acdc5[_0x3eca('0x2c')],_0x74ca32['name'],_0x4d0730,_0x4acdc5[_0x3eca('0xd')]['name'],_0x4acdc5['message']['id'],!![],_0x4d0192,_0x74ca32['id']);if(rpc[_0x4acdc5[_0x3eca('0x2c')]+_0x3eca('0x36')]){return rpc[_0x4acdc5['channel']+_0x3eca('0x36')][_0x3eca('0x37')](_0x4d0730)[_0x3eca('0x38')](function(_0x2170ab){logger[_0x3eca('0x39')](_0x3eca('0x3a'),_0x2170ab);});}}}function stopRouting(_0x14b64e,_0xd63341,_0x50b916,_0x5568ca){if(_0x14b64e&&_0xd63341){_0xd63341[_0x3eca('0x26')]-=0x1;var _0x541560={'leaveAt':moment()[_0x3eca('0x13')](_0x3eca('0x28')),'acceptAt':moment()[_0x3eca('0x13')](_0x3eca('0x28')),'reason':'accepted'};logger[_0x3eca('0x34')](util[_0x3eca('0x13')](_0x3eca('0x3b'),_0x14b64e,_0xd63341[_0x3eca('0x3c')]));emitChannelQueueInteraction(_0x50b916['channel'],_0xd63341[_0x3eca('0x3c')],_0x50b916[_0x3eca('0x27')],_0x50b916['account']['name'],_0x50b916[_0x3eca('0x31')]['id'],![],_0x5568ca,_0xd63341['id']);return rpc[_0x50b916['channel']+_0x3eca('0x3d')][_0x3eca('0x3e')](_0x50b916[_0x3eca('0x2f')]['id'],{'queueId':_0xd63341['id']})['then'](function(){if(rpc[_0x50b916[_0x3eca('0x2c')]+_0x3eca('0x36')]){return rpc[_0x50b916[_0x3eca('0x2c')]+'QueueReport'][_0x3eca('0x3e')](_0x14b64e,_0x541560)[_0x3eca('0x38')](function(_0x7056dc){logger[_0x3eca('0x39')](_0x3eca('0x3f'),_0x7056dc);});}});}}function endRouting(_0x5d580c,_0x3d4671,_0x309726,_0x2c8ada){if(_0x5d580c&&_0x3d4671){_0x3d4671[_0x3eca('0x26')]-=0x1;var _0x181e36={'leaveAt':moment()[_0x3eca('0x13')](_0x3eca('0x28')),'exitAt':moment()[_0x3eca('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0x3eca('0x34')](util[_0x3eca('0x13')](_0x3eca('0x40'),_0x5d580c,_0x3d4671[_0x3eca('0x3c')]));emitChannelQueueInteraction(_0x309726[_0x3eca('0x2c')],_0x3d4671[_0x3eca('0x3c')],_0x309726['body'],_0x309726[_0x3eca('0xd')][_0x3eca('0x3c')],_0x309726[_0x3eca('0x31')]['id'],![],_0x2c8ada);if(rpc[_0x309726[_0x3eca('0x2c')]+'QueueReport']){return rpc[_0x309726['channel']+_0x3eca('0x36')]['update'](_0x5d580c,_0x181e36)[_0x3eca('0x38')](function(_0x4fcda7){logger[_0x3eca('0x39')](_0x3eca('0x3f'),_0x4fcda7);});}}}function handleFindQueue(_0x44c30c){return function(_0x23d2e0){return _0x23d2e0['name']['toLowerCase']()===_0x44c30c['toLowerCase']();};}exports[_0x3eca('0x41')]=function(_0x85ff1d,_0x256c30,_0x5dca58,_0x468d82){return function(_0x498641){try{var _0x258b71={'name':_0x256c30[0x0],'timeout':_0x256c30[0x1]};var _0x1c56a6=queue[_0x3eca('0x0')](_0x258b71,{'typecast':!![]});if(_0x1c56a6[_0x3eca('0x42')]){logger[_0x3eca('0x39')](_0x3eca('0x43'),_0x85ff1d,_['map'](_0x1c56a6,_0x3eca('0x31'))[_0x3eca('0x44')](',\x20'));_0x498641[_0x3eca('0x45')]();}else{var _0xc4031c=_['find'](_0x5dca58[_0x468d82[_0x3eca('0x2c')]+_0x3eca('0x46')],handleFindQueue(_0x258b71['name']));if(_0xc4031c){startRouting(_0x85ff1d,_0xc4031c,_0x468d82,_0x5dca58);var _0x50859c=(_0xc4031c[_0x3eca('0x47')]||0xa)*0x3e8;var _0x16e2e4=(_0x258b71[_0x3eca('0x47')]||0x14)*0x3e8;var _0x34d046;if(_0x50859c>_0x16e2e4){_0x16e2e4=_0x50859c;}var _0x18361e=seqqueue[_0x3eca('0x48')](_0x50859c);_0x18361e['id']=_0x85ff1d;_0x18361e[_0x3eca('0x49')]=_0x50859c;_0x18361e[_0x3eca('0x4a')]=_0x16e2e4;_0x18361e[_0x3eca('0x2c')]=_0x468d82[_0x3eca('0x2c')];_0x5dca58[_0x3eca('0x4b')][_0x85ff1d]['on'](_0x3eca('0x4c'),function(){logger[_0x3eca('0x34')](_0x3eca('0x4d'),_0x85ff1d);stopRouting(_0x85ff1d,_0xc4031c,_0x468d82,_0x5dca58);clearTimeout(_0x34d046);_0x34d046=undefined;_0x18361e[_0x3eca('0x4e')](!![]);if(_0x5dca58[_0x3eca('0x4b')][_0x85ff1d]){delete _0x5dca58[_0x3eca('0x4b')][_0x85ff1d];}_0x498641[_0x3eca('0x45')]();});_0x5dca58[_0x3eca('0x4b')][_0x85ff1d]['on'](_0x3eca('0x4f'),function(){if(_0x5dca58[_0x3eca('0x4b')][_0x85ff1d]){delete _0x5dca58['rules'][_0x85ff1d];}});_0x34d046=setTimeout(function(){logger[_0x3eca('0x34')](_0x3eca('0x50'),_0x85ff1d);endRouting(_0x85ff1d,_0xc4031c,_0x468d82,_0x5dca58);clearTimeout(_0x34d046);_0x18361e[_0x3eca('0x4e')](!![]);_0x498641['next']();},_0x16e2e4);switch(_0xc4031c[_0x3eca('0x51')]){case _0x3eca('0x52'):strategy['rrmemory'](_0x18361e,_0xc4031c,_0x5dca58,_0x468d82);break;default:strategy[_0x3eca('0x53')](_0x18361e,_0xc4031c,_0x5dca58,_0x468d82);}}else{logger[_0x3eca('0x39')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x85ff1d,_0x258b71[_0x3eca('0x3c')]);_0x498641[_0x3eca('0x45')]();}}}catch(_0x39070f){logger['error'](_0x3eca('0x43'),_0x85ff1d,_0x39070f[_0x3eca('0x54')]);_0x498641[_0x3eca('0x45')]();}};};