0c04e67ce098f64b09cc8a5b9164681cdbbda7f5
[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 _0x79ac=['create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','update','then','timeout','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','stop','find','Queues','createQueue','atimeout','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','./strategy','redis','localhost','queue_id','account','queue','joinAt','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','pick','save','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/mailInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','channel','QueueId','interaction','upperFirst','message','chat','AccountId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error'];(function(_0xa80f24,_0x70f484){var _0x5f4f74=function(_0x58ac1f){while(--_0x58ac1f){_0xa80f24['push'](_0xa80f24['shift']());}};_0x5f4f74(++_0x70f484);}(_0x79ac,0xb2));var _0xc79a=function(_0x1ba6c3,_0x511c80){_0x1ba6c3=_0x1ba6c3-0x0;var _0x2789dd=_0x79ac[_0x1ba6c3];return _0x2789dd;};'use strict';var schema=require(_0xc79a('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require(_0xc79a('0x1'));var moment=require(_0xc79a('0x2'));var Redis=require(_0xc79a('0x3'));var config=require(_0xc79a('0x4'));var logger=require(_0xc79a('0x5'))('routing');var strategy=require(_0xc79a('0x6'));config[_0xc79a('0x7')]=_['defaults'](config[_0xc79a('0x7')],{'host':_0xc79a('0x8'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xc79a('0x7')]));var attributes=['id',_0xc79a('0x9'),_0xc79a('0xa'),_0xc79a('0xb'),'from',_0xc79a('0xc')];function emit(_0x1e672c,_0x13da34,_0x2c9479){io['to'](_0x1e672c)['emit'](_0x13da34,_0x2c9479);}function emitChannelQueueInteraction(_0x43d007,_0x4ece4c,_0xc9aae8,_0xed5589,_0x394b4a,_0x578fed,_0x412a6e,_0x311bb0){var _0x2d6f18=_['clone'](_0xc9aae8);_0x2d6f18['queue_id']=_0x311bb0;_0x2d6f18[_0xc79a('0xb')]=_0x4ece4c;_0x2d6f18['account']=_0xed5589;_0x2d6f18['id']=_0x394b4a;if(_0x578fed){attributes[_0xc79a('0xd')](_[_0xc79a('0xe')](_0x43d007)+_0xc79a('0xf'));_0x412a6e[util[_0xc79a('0x10')](_0xc79a('0x11'),_0x43d007)][_0x394b4a]=_[_0xc79a('0x12')](_0x2d6f18,attributes);}else{delete _0x412a6e[util[_0xc79a('0x10')]('%sQueuesWaitingInteractions',_0x43d007)][_0x394b4a];}emit(util[_0xc79a('0x10')]('%s:queue:%s',_0x43d007,_0x4ece4c),util[_0xc79a('0x10')]('%s_queue_waiting_interaction:%s',_0x43d007,_0x578fed?_0xc79a('0x13'):'remove'),_[_0xc79a('0x12')](_0x2d6f18,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xc79a('0x14')),'chatQueueReport':require(_0xc79a('0x15')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0xc79a('0x16')),'whatsappQueueReport':require(_0xc79a('0x17')),'chatInteraction':require(_0xc79a('0x18')),'faxInteraction':require('../../rpc/faxInteraction'),'mailInteraction':require(_0xc79a('0x19')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require(_0xc79a('0x1a')),'whatsappInteraction':require(_0xc79a('0x1b'))};var queue=schema({'name':{'type':_0xc79a('0x1c'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xc79a('0x1d'),'message':_0xc79a('0x1e')}});function startRouting(_0x2fdd89,_0x105c0e,_0x520ae6,_0x3972ab){if(_0x2fdd89&&_0x105c0e&&_0x520ae6){_0x105c0e[_0xc79a('0x1f')]+=0x1;var _0x1da740={'uniqueid':_0x2fdd89,'from':_0x520ae6[_0xc79a('0x20')]?_0x520ae6[_0xc79a('0x20')]['from']:'','joinAt':moment()[_0xc79a('0x10')](_0xc79a('0x21')),'ContactId':_0x520ae6[_0xc79a('0x22')]?_0x520ae6['contact']['id']:null,'ListId':_0x520ae6[_0xc79a('0x23')]?_0x520ae6[_0xc79a('0x23')]['id']:null};_0x1da740[_['upperFirst'](_0x520ae6[_0xc79a('0x24')])+_0xc79a('0x25')]=_0x105c0e['id']||null;_0x1da740[_['upperFirst'](_0x520ae6[_0xc79a('0x24')])+_0xc79a('0xf')]=_0x520ae6[_0xc79a('0x26')]?_0x520ae6['interaction']['id']:null;_0x1da740[_[_0xc79a('0x27')](_0x520ae6[_0xc79a('0x24')])+'MessageId']=_0x520ae6[_0xc79a('0x28')]?_0x520ae6[_0xc79a('0x28')]['id']:null;_0x1da740[_[_0xc79a('0x27')](_0x520ae6['channel'])+(_0x520ae6['channel']!==_0xc79a('0x29')?_0xc79a('0x2a'):'WebsiteId')]=_0x520ae6[_0xc79a('0xa')]?_0x520ae6['account']['id']:null;logger[_0xc79a('0x2b')](util[_0xc79a('0x10')](_0xc79a('0x2c'),_0x2fdd89,_0x105c0e['name']));emitChannelQueueInteraction(_0x520ae6[_0xc79a('0x24')],_0x105c0e['name'],_0x1da740,_0x520ae6['account'][_0xc79a('0x2d')],_0x520ae6[_0xc79a('0x28')]['id'],!![],_0x3972ab,_0x105c0e['id']);if(rpc[_0x520ae6[_0xc79a('0x24')]+_0xc79a('0x2e')]){return rpc[_0x520ae6[_0xc79a('0x24')]+_0xc79a('0x2e')][_0xc79a('0x2f')](_0x1da740)[_0xc79a('0x30')](function(_0x582d76){logger[_0xc79a('0x31')](_0xc79a('0x32'),_0x582d76);});}}}function stopRouting(_0x4d4984,_0x4257ac,_0x1e3ef3,_0x5795ba){if(_0x4d4984&&_0x4257ac){_0x4257ac[_0xc79a('0x1f')]-=0x1;var _0x97847f={'leaveAt':moment()[_0xc79a('0x10')](_0xc79a('0x21')),'acceptAt':moment()[_0xc79a('0x10')](_0xc79a('0x21')),'reason':'accepted'};logger[_0xc79a('0x2b')](util[_0xc79a('0x10')](_0xc79a('0x33'),_0x4d4984,_0x4257ac[_0xc79a('0x2d')]));emitChannelQueueInteraction(_0x1e3ef3[_0xc79a('0x24')],_0x4257ac[_0xc79a('0x2d')],_0x1e3ef3['body'],_0x1e3ef3[_0xc79a('0xa')][_0xc79a('0x2d')],_0x1e3ef3[_0xc79a('0x28')]['id'],![],_0x5795ba,_0x4257ac['id']);return rpc[_0x1e3ef3[_0xc79a('0x24')]+'Interaction'][_0xc79a('0x34')](_0x1e3ef3[_0xc79a('0x26')]['id'],{'queueId':_0x4257ac['id']})[_0xc79a('0x35')](function(){if(rpc[_0x1e3ef3[_0xc79a('0x24')]+_0xc79a('0x2e')]){return rpc[_0x1e3ef3[_0xc79a('0x24')]+'QueueReport'][_0xc79a('0x34')](_0x4d4984,_0x97847f)[_0xc79a('0x30')](function(_0x18a183){logger['error']('update\x20queue\x20report',_0x18a183);});}});}}function endRouting(_0x1d80ef,_0x598a68,_0x75da7f,_0xdbc084){if(_0x1d80ef&&_0x598a68){_0x598a68['waiting']-=0x1;var _0x2ea454={'leaveAt':moment()[_0xc79a('0x10')](_0xc79a('0x21')),'exitAt':moment()[_0xc79a('0x10')](_0xc79a('0x21')),'reason':_0xc79a('0x36')};logger[_0xc79a('0x2b')](util[_0xc79a('0x10')](_0xc79a('0x37'),_0x1d80ef,_0x598a68[_0xc79a('0x2d')]));emitChannelQueueInteraction(_0x75da7f[_0xc79a('0x24')],_0x598a68[_0xc79a('0x2d')],_0x75da7f[_0xc79a('0x20')],_0x75da7f[_0xc79a('0xa')][_0xc79a('0x2d')],_0x75da7f[_0xc79a('0x28')]['id'],![],_0xdbc084);if(rpc[_0x75da7f[_0xc79a('0x24')]+_0xc79a('0x2e')]){return rpc[_0x75da7f[_0xc79a('0x24')]+'QueueReport'][_0xc79a('0x34')](_0x1d80ef,_0x2ea454)[_0xc79a('0x30')](function(_0x540b89){logger[_0xc79a('0x31')](_0xc79a('0x38'),_0x540b89);});}}}function handleFindQueue(_0x2a20e9){return function(_0x4db0da){return _0x4db0da[_0xc79a('0x2d')][_0xc79a('0x39')]()===_0x2a20e9[_0xc79a('0x39')]();};}exports[_0xc79a('0x3a')]=function(_0x578409,_0x22d123,_0x1cf41f,_0x6301ce){return function(_0xc0c561){try{var _0xca1c01={'name':_0x22d123[0x0],'timeout':_0x22d123[0x1]};var _0x44a8a7=queue['validate'](_0xca1c01,{'typecast':!![]});if(_0x44a8a7[_0xc79a('0x3b')]){logger['error'](_0xc79a('0x3c'),_0x578409,_[_0xc79a('0x3d')](_0x44a8a7,_0xc79a('0x28'))['join'](',\x20'));_0xc0c561[_0xc79a('0x3e')]();}else{var _0xcb3d55=_[_0xc79a('0x3f')](_0x1cf41f[_0x6301ce[_0xc79a('0x24')]+_0xc79a('0x40')],handleFindQueue(_0xca1c01['name']));if(_0xcb3d55){startRouting(_0x578409,_0xcb3d55,_0x6301ce,_0x1cf41f);var _0x181eec=(_0xcb3d55[_0xc79a('0x36')]||0xa)*0x3e8;var _0x26ddf8=(_0xca1c01['timeout']||0x14)*0x3e8;var _0x2c0ac2;if(_0x181eec>_0x26ddf8){_0x26ddf8=_0x181eec;}var _0x2fbea8=seqqueue[_0xc79a('0x41')](_0x181eec);_0x2fbea8['id']=_0x578409;_0x2fbea8[_0xc79a('0x42')]=_0x181eec;_0x2fbea8['qtimeout']=_0x26ddf8;_0x2fbea8[_0xc79a('0x24')]=_0x6301ce['channel'];_0x1cf41f[_0xc79a('0x43')][_0x578409]['on']('end',function(){logger[_0xc79a('0x2b')](_0xc79a('0x44'),_0x578409);stopRouting(_0x578409,_0xcb3d55,_0x6301ce,_0x1cf41f);clearTimeout(_0x2c0ac2);_0x2c0ac2=undefined;_0x2fbea8[_0xc79a('0x45')](!![]);if(_0x1cf41f['rules'][_0x578409]){delete _0x1cf41f['rules'][_0x578409];}_0xc0c561[_0xc79a('0x3e')]();});_0x1cf41f['rules'][_0x578409]['on'](_0xc79a('0x46'),function(){if(_0x1cf41f['rules'][_0x578409]){delete _0x1cf41f[_0xc79a('0x43')][_0x578409];}});_0x2c0ac2=setTimeout(function(){logger['info']('[%s][QUEUE]\x20APPLICATION\x20END',_0x578409);endRouting(_0x578409,_0xcb3d55,_0x6301ce,_0x1cf41f);clearTimeout(_0x2c0ac2);_0x2fbea8['close'](!![]);_0xc0c561['next']();},_0x26ddf8);switch(_0xcb3d55[_0xc79a('0x47')]){case _0xc79a('0x48'):strategy[_0xc79a('0x48')](_0x2fbea8,_0xcb3d55,_0x1cf41f,_0x6301ce);break;default:strategy[_0xc79a('0x49')](_0x2fbea8,_0xcb3d55,_0x1cf41f,_0x6301ce);}}else{logger[_0xc79a('0x31')](_0xc79a('0x4a'),_0x578409,_0xca1c01[_0xc79a('0x2d')]);_0xc0c561[_0xc79a('0x3e')]();}}}catch(_0x4b3a49){logger[_0xc79a('0x31')]('[%s][QUEUE]\x20%s',_0x578409,_0x4b3a49[_0xc79a('0x4b')]);_0xc0c561[_0xc79a('0x3e')]();}};};