Built motion from commit 10af8726.|2.6.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 _0x2240=['[%s][QUEUE]\x20%s','join','find','Queues','timeout','createQueue','atimeout','qtimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stop','stack','validate','lodash','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','redis','defaults','localhost','socket.io-emitter','account','from','joinAt','emit','clone','queue_id','queue','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','save','remove','pick','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','QueueId','channel','interaction','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','catch','error','accepted','[%s][STOP:QUEUE][NAME:%s]','update','then','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length'];(function(_0x2c4435,_0x506243){var _0x58fd66=function(_0x4f658b){while(--_0x4f658b){_0x2c4435['push'](_0x2c4435['shift']());}};_0x58fd66(++_0x506243);}(_0x2240,0x1c8));var _0x0224=function(_0x5f1391,_0x19c132){_0x5f1391=_0x5f1391-0x0;var _0x50ebe3=_0x2240[_0x5f1391];return _0x50ebe3;};'use strict';var schema=require(_0x0224('0x0'));var _=require(_0x0224('0x1'));var util=require(_0x0224('0x2'));var seqqueue=require(_0x0224('0x3'));var moment=require(_0x0224('0x4'));var Redis=require(_0x0224('0x5'));var config=require(_0x0224('0x6'));var logger=require(_0x0224('0x7'))(_0x0224('0x8'));var strategy=require('./strategy');config[_0x0224('0x9')]=_[_0x0224('0xa')](config['redis'],{'host':_0x0224('0xb'),'port':0x18eb});var io=require(_0x0224('0xc'))(new Redis(config[_0x0224('0x9')]));var attributes=['id','queue_id',_0x0224('0xd'),'queue',_0x0224('0xe'),_0x0224('0xf')];function emit(_0x18c60d,_0x414431,_0x56e605){io['to'](_0x18c60d)[_0x0224('0x10')](_0x414431,_0x56e605);}function emitChannelQueueInteraction(_0x2fa0f2,_0x381c85,_0x923411,_0xe26171,_0x4d1ec0,_0x409b57,_0x14f908,_0x498d15){var _0x745712=_[_0x0224('0x11')](_0x923411);_0x745712[_0x0224('0x12')]=_0x498d15;_0x745712[_0x0224('0x13')]=_0x381c85;_0x745712[_0x0224('0xd')]=_0xe26171;_0x745712['id']=_0x4d1ec0;if(_0x409b57){attributes[_0x0224('0x14')](_[_0x0224('0x15')](_0x2fa0f2)+_0x0224('0x16'));_0x14f908[util[_0x0224('0x17')](_0x0224('0x18'),_0x2fa0f2)][_0x4d1ec0]=_['pick'](_0x745712,attributes);}else{delete _0x14f908[util['format'](_0x0224('0x18'),_0x2fa0f2)][_0x4d1ec0];}emit(util['format']('%s:queue:%s',_0x2fa0f2,_0x381c85),util[_0x0224('0x17')]('%s_queue_waiting_interaction:%s',_0x2fa0f2,_0x409b57?_0x0224('0x19'):_0x0224('0x1a')),_[_0x0224('0x1b')](_0x745712,attributes));}var rpc={'openchannelQueueReport':require(_0x0224('0x1c')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x0224('0x1d')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x0224('0x1e')),'chatInteraction':require(_0x0224('0x1f')),'faxInteraction':require(_0x0224('0x20')),'mailInteraction':require('../../rpc/mailInteraction'),'openchannelInteraction':require(_0x0224('0x21')),'smsInteraction':require(_0x0224('0x22')),'whatsappInteraction':require(_0x0224('0x23'))};var queue=schema({'name':{'type':'string','required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':'number','message':_0x0224('0x24')}});function startRouting(_0x1ce5c8,_0x39a7b6,_0x5c6f81,_0x28cc74){if(_0x1ce5c8&&_0x39a7b6&&_0x5c6f81){_0x39a7b6[_0x0224('0x25')]+=0x1;var _0x18c66e={'uniqueid':_0x1ce5c8,'from':_0x5c6f81[_0x0224('0x26')]?_0x5c6f81[_0x0224('0x26')][_0x0224('0xe')]:'','joinAt':moment()[_0x0224('0x17')](_0x0224('0x27')),'ContactId':_0x5c6f81[_0x0224('0x28')]?_0x5c6f81['contact']['id']:null,'ListId':_0x5c6f81['list']?_0x5c6f81[_0x0224('0x29')]['id']:null};_0x18c66e[_[_0x0224('0x2a')](_0x5c6f81['channel'])+_0x0224('0x2b')]=_0x39a7b6['id']||null;_0x18c66e[_[_0x0224('0x2a')](_0x5c6f81[_0x0224('0x2c')])+_0x0224('0x16')]=_0x5c6f81[_0x0224('0x2d')]?_0x5c6f81[_0x0224('0x2d')]['id']:null;_0x18c66e[_[_0x0224('0x2a')](_0x5c6f81['channel'])+_0x0224('0x2e')]=_0x5c6f81[_0x0224('0x2f')]?_0x5c6f81[_0x0224('0x2f')]['id']:null;_0x18c66e[_[_0x0224('0x2a')](_0x5c6f81[_0x0224('0x2c')])+(_0x5c6f81[_0x0224('0x2c')]!==_0x0224('0x30')?_0x0224('0x31'):_0x0224('0x32'))]=_0x5c6f81[_0x0224('0xd')]?_0x5c6f81[_0x0224('0xd')]['id']:null;logger[_0x0224('0x33')](util['format'](_0x0224('0x34'),_0x1ce5c8,_0x39a7b6[_0x0224('0x35')]));emitChannelQueueInteraction(_0x5c6f81[_0x0224('0x2c')],_0x39a7b6[_0x0224('0x35')],_0x18c66e,_0x5c6f81[_0x0224('0xd')][_0x0224('0x35')],_0x5c6f81[_0x0224('0x2f')]['id'],!![],_0x28cc74,_0x39a7b6['id']);if(rpc[_0x5c6f81[_0x0224('0x2c')]+_0x0224('0x36')]){return rpc[_0x5c6f81['channel']+_0x0224('0x36')]['create'](_0x18c66e)[_0x0224('0x37')](function(_0x3ab83b){logger[_0x0224('0x38')]('create\x20queue\x20report',_0x3ab83b);});}}}function stopRouting(_0x4a40fb,_0x3d0443,_0xe3cc78,_0x125fc2){if(_0x4a40fb&&_0x3d0443){_0x3d0443[_0x0224('0x25')]-=0x1;var _0x1616cb={'leaveAt':moment()[_0x0224('0x17')](_0x0224('0x27')),'acceptAt':moment()['format'](_0x0224('0x27')),'reason':_0x0224('0x39')};logger[_0x0224('0x33')](util['format'](_0x0224('0x3a'),_0x4a40fb,_0x3d0443['name']));emitChannelQueueInteraction(_0xe3cc78[_0x0224('0x2c')],_0x3d0443[_0x0224('0x35')],_0xe3cc78['body'],_0xe3cc78['account'][_0x0224('0x35')],_0xe3cc78[_0x0224('0x2f')]['id'],![],_0x125fc2,_0x3d0443['id']);return rpc[_0xe3cc78[_0x0224('0x2c')]+'Interaction'][_0x0224('0x3b')](_0xe3cc78[_0x0224('0x2d')]['id'],{'queueId':_0x3d0443['id']})[_0x0224('0x3c')](function(){if(rpc[_0xe3cc78[_0x0224('0x2c')]+_0x0224('0x36')]){return rpc[_0xe3cc78['channel']+'QueueReport'][_0x0224('0x3b')](_0x4a40fb,_0x1616cb)[_0x0224('0x37')](function(_0x597f3b){logger[_0x0224('0x38')](_0x0224('0x3d'),_0x597f3b);});}});}}function endRouting(_0x2f4cf6,_0x419ad1,_0x2f133c,_0x1ac1d6){if(_0x2f4cf6&&_0x419ad1){_0x419ad1['waiting']-=0x1;var _0x399b26={'leaveAt':moment()[_0x0224('0x17')](_0x0224('0x27')),'exitAt':moment()['format'](_0x0224('0x27')),'reason':'timeout'};logger[_0x0224('0x33')](util[_0x0224('0x17')](_0x0224('0x3e'),_0x2f4cf6,_0x419ad1[_0x0224('0x35')]));emitChannelQueueInteraction(_0x2f133c[_0x0224('0x2c')],_0x419ad1['name'],_0x2f133c[_0x0224('0x26')],_0x2f133c[_0x0224('0xd')][_0x0224('0x35')],_0x2f133c[_0x0224('0x2f')]['id'],![],_0x1ac1d6);if(rpc[_0x2f133c[_0x0224('0x2c')]+_0x0224('0x36')]){return rpc[_0x2f133c[_0x0224('0x2c')]+_0x0224('0x36')][_0x0224('0x3b')](_0x2f4cf6,_0x399b26)['catch'](function(_0x238bbb){logger['error'](_0x0224('0x3d'),_0x238bbb);});}}}function handleFindQueue(_0x38bd3f){return function(_0x5a60f7){return _0x5a60f7[_0x0224('0x35')]['toLowerCase']()===_0x38bd3f[_0x0224('0x3f')]();};}exports[_0x0224('0x40')]=function(_0x451e5b,_0x3da2bf,_0x36075e,_0x4e913d){return function(_0x50cf4f){try{var _0x7f0097={'name':_0x3da2bf[0x0],'timeout':_0x3da2bf[0x1]};var _0x45eec9=queue['validate'](_0x7f0097,{'typecast':!![]});if(_0x45eec9[_0x0224('0x41')]){logger['error'](_0x0224('0x42'),_0x451e5b,_['map'](_0x45eec9,_0x0224('0x2f'))[_0x0224('0x43')](',\x20'));_0x50cf4f['stop']();}else{var _0x49fe0e=_[_0x0224('0x44')](_0x36075e[_0x4e913d[_0x0224('0x2c')]+_0x0224('0x45')],handleFindQueue(_0x7f0097['name']));if(_0x49fe0e){startRouting(_0x451e5b,_0x49fe0e,_0x4e913d,_0x36075e);var _0x2fadd4=(_0x49fe0e['timeout']||0xa)*0x3e8;var _0x4475ad=(_0x7f0097[_0x0224('0x46')]||0x14)*0x3e8;var _0x473026;if(_0x2fadd4>_0x4475ad){_0x4475ad=_0x2fadd4;}var _0x5f403e=seqqueue[_0x0224('0x47')](_0x2fadd4);_0x5f403e['id']=_0x451e5b;_0x5f403e[_0x0224('0x48')]=_0x2fadd4;_0x5f403e[_0x0224('0x49')]=_0x4475ad;_0x5f403e['channel']=_0x4e913d[_0x0224('0x2c')];_0x36075e['rules'][_0x451e5b]['on'](_0x0224('0x4a'),function(){logger['info'](_0x0224('0x4b'),_0x451e5b);stopRouting(_0x451e5b,_0x49fe0e,_0x4e913d,_0x36075e);clearTimeout(_0x473026);_0x473026=undefined;_0x5f403e[_0x0224('0x4c')](!![]);if(_0x36075e[_0x0224('0x4d')][_0x451e5b]){delete _0x36075e[_0x0224('0x4d')][_0x451e5b];}_0x50cf4f['stop']();});_0x36075e['rules'][_0x451e5b]['on'](_0x0224('0x4e'),function(){if(_0x36075e[_0x0224('0x4d')][_0x451e5b]){delete _0x36075e[_0x0224('0x4d')][_0x451e5b];}});_0x473026=setTimeout(function(){logger[_0x0224('0x33')](_0x0224('0x4f'),_0x451e5b);endRouting(_0x451e5b,_0x49fe0e,_0x4e913d,_0x36075e);clearTimeout(_0x473026);_0x5f403e[_0x0224('0x4c')](!![]);_0x50cf4f[_0x0224('0x50')]();},_0x4475ad);switch(_0x49fe0e[_0x0224('0x51')]){case _0x0224('0x52'):strategy['rrmemory'](_0x5f403e,_0x49fe0e,_0x36075e,_0x4e913d);break;default:strategy[_0x0224('0x53')](_0x5f403e,_0x49fe0e,_0x36075e,_0x4e913d);}}else{logger[_0x0224('0x38')](_0x0224('0x54'),_0x451e5b,_0x7f0097[_0x0224('0x35')]);_0x50cf4f[_0x0224('0x55')]();}}}catch(_0x1190c7){logger[_0x0224('0x38')](_0x0224('0x42'),_0x451e5b,_0x1190c7[_0x0224('0x56')]);_0x50cf4f[_0x0224('0x55')]();}};};