26e519f4bfa36663eb99e312f389e3c6cb64ce6a
[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 _0xd217=['stack','validate','lodash','util','moment','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','queue','from','joinAt','emit','clone','account','push','capitalize','InteractionId','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/openchannelInteraction','../../rpc/whatsappInteraction','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','MessageId','chat','AccountId','WebsiteId','info','name','message','QueueReport','create','error','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','catch','timeout','update\x20queue\x20report','toLowerCase','consequence','length','map','join','stop','find','Queues','createQueue','qtimeout','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s'];(function(_0x4d50a1,_0x188247){var _0x2d733f=function(_0x4d104c){while(--_0x4d104c){_0x4d50a1['push'](_0x4d50a1['shift']());}};_0x2d733f(++_0x188247);}(_0xd217,0x155));var _0x7d21=function(_0x1297b1,_0x310eff){_0x1297b1=_0x1297b1-0x0;var _0x57a7e3=_0xd217[_0x1297b1];return _0x57a7e3;};'use strict';var schema=require(_0x7d21('0x0'));var _=require(_0x7d21('0x1'));var util=require(_0x7d21('0x2'));var seqqueue=require('seq-queue');var moment=require(_0x7d21('0x3'));var Redis=require(_0x7d21('0x4'));var config=require('../../../../config/environment');var logger=require(_0x7d21('0x5'))(_0x7d21('0x6'));var strategy=require(_0x7d21('0x7'));config[_0x7d21('0x8')]=_[_0x7d21('0x9')](config[_0x7d21('0x8')],{'host':_0x7d21('0xa'),'port':0x18eb});var io=require(_0x7d21('0xb'))(new Redis(config[_0x7d21('0x8')]));var attributes=['id',_0x7d21('0xc'),'account',_0x7d21('0xd'),_0x7d21('0xe'),_0x7d21('0xf')];function emit(_0x294727,_0x38c40f,_0xa34c29){io['to'](_0x294727)[_0x7d21('0x10')](_0x38c40f,_0xa34c29);}function emitChannelQueueInteraction(_0x4770d7,_0x4e6a45,_0xd99b8f,_0x3e6db3,_0x34e64b,_0x4c0f9e,_0x23cce7,_0x2cda48){var _0x3849c3=_[_0x7d21('0x11')](_0xd99b8f);_0x3849c3[_0x7d21('0xc')]=_0x2cda48;_0x3849c3[_0x7d21('0xd')]=_0x4e6a45;_0x3849c3[_0x7d21('0x12')]=_0x3e6db3;_0x3849c3['id']=_0x34e64b;if(_0x4c0f9e){attributes[_0x7d21('0x13')](_[_0x7d21('0x14')](_0x4770d7)+_0x7d21('0x15'));_0x23cce7[util['format'](_0x7d21('0x16'),_0x4770d7)][_0x34e64b]=_[_0x7d21('0x17')](_0x3849c3,attributes);}else{delete _0x23cce7[util[_0x7d21('0x18')](_0x7d21('0x16'),_0x4770d7)][_0x34e64b];}emit(util['format'](_0x7d21('0x19'),_0x4770d7,_0x4e6a45),util[_0x7d21('0x18')](_0x7d21('0x1a'),_0x4770d7,_0x4c0f9e?_0x7d21('0x1b'):'remove'),_[_0x7d21('0x17')](_0x3849c3,attributes));}var rpc={'openchannelQueueReport':require(_0x7d21('0x1c')),'mailQueueReport':require(_0x7d21('0x1d')),'chatQueueReport':require(_0x7d21('0x1e')),'smsQueueReport':require(_0x7d21('0x1f')),'faxQueueReport':require(_0x7d21('0x20')),'whatsappQueueReport':require(_0x7d21('0x21')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0x7d21('0x22')),'mailInteraction':require('../../rpc/mailInteraction'),'openchannelInteraction':require(_0x7d21('0x23')),'smsInteraction':require('../../rpc/smsInteraction'),'whatsappInteraction':require(_0x7d21('0x24'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x7d21('0x25')},'timeout':{'type':_0x7d21('0x26'),'message':_0x7d21('0x27')}});function startRouting(_0x2b2d06,_0x250195,_0x596211,_0x2c1a97){if(_0x2b2d06&&_0x250195&&_0x596211){_0x250195['waiting']+=0x1;var _0x113714={'uniqueid':_0x2b2d06,'from':_0x596211[_0x7d21('0x28')]?_0x596211['body'][_0x7d21('0xe')]:'','joinAt':moment()[_0x7d21('0x18')](_0x7d21('0x29')),'ContactId':_0x596211[_0x7d21('0x2a')]?_0x596211[_0x7d21('0x2a')]['id']:null,'ListId':_0x596211['list']?_0x596211[_0x7d21('0x2b')]['id']:null};_0x113714[_[_0x7d21('0x2c')](_0x596211[_0x7d21('0x2d')])+_0x7d21('0x2e')]=_0x250195['id']||null;_0x113714[_['upperFirst'](_0x596211[_0x7d21('0x2d')])+_0x7d21('0x15')]=_0x596211[_0x7d21('0x2f')]?_0x596211[_0x7d21('0x2f')]['id']:null;_0x113714[_[_0x7d21('0x2c')](_0x596211[_0x7d21('0x2d')])+_0x7d21('0x30')]=_0x596211['message']?_0x596211['message']['id']:null;_0x113714[_[_0x7d21('0x2c')](_0x596211[_0x7d21('0x2d')])+(_0x596211[_0x7d21('0x2d')]!==_0x7d21('0x31')?_0x7d21('0x32'):_0x7d21('0x33'))]=_0x596211[_0x7d21('0x12')]?_0x596211[_0x7d21('0x12')]['id']:null;logger[_0x7d21('0x34')](util['format']('[%s][START:QUEUE][NAME:%s]',_0x2b2d06,_0x250195['name']));emitChannelQueueInteraction(_0x596211[_0x7d21('0x2d')],_0x250195['name'],_0x113714,_0x596211[_0x7d21('0x12')][_0x7d21('0x35')],_0x596211[_0x7d21('0x36')]['id'],!![],_0x2c1a97,_0x250195['id']);if(rpc[_0x596211['channel']+_0x7d21('0x37')]){return rpc[_0x596211['channel']+_0x7d21('0x37')][_0x7d21('0x38')](_0x113714)['catch'](function(_0x3b1605){logger[_0x7d21('0x39')]('create\x20queue\x20report',_0x3b1605);});}}}function stopRouting(_0x1db59f,_0x3df69a,_0x34b84c,_0x1fadec){if(_0x1db59f&&_0x3df69a){_0x3df69a[_0x7d21('0x3a')]-=0x1;var _0x57fca1={'leaveAt':moment()[_0x7d21('0x18')](_0x7d21('0x29')),'acceptAt':moment()[_0x7d21('0x18')](_0x7d21('0x29')),'reason':_0x7d21('0x3b')};logger['info'](util[_0x7d21('0x18')](_0x7d21('0x3c'),_0x1db59f,_0x3df69a[_0x7d21('0x35')]));emitChannelQueueInteraction(_0x34b84c[_0x7d21('0x2d')],_0x3df69a[_0x7d21('0x35')],_0x34b84c[_0x7d21('0x28')],_0x34b84c[_0x7d21('0x12')]['name'],_0x34b84c['message']['id'],![],_0x1fadec,_0x3df69a['id']);return rpc[_0x34b84c[_0x7d21('0x2d')]+_0x7d21('0x3d')][_0x7d21('0x3e')](_0x34b84c[_0x7d21('0x2f')]['id'],{'queueId':_0x3df69a['id']})['then'](function(){if(rpc[_0x34b84c[_0x7d21('0x2d')]+_0x7d21('0x37')]){return rpc[_0x34b84c[_0x7d21('0x2d')]+_0x7d21('0x37')][_0x7d21('0x3e')](_0x1db59f,_0x57fca1)[_0x7d21('0x3f')](function(_0x5a2e98){logger['error']('update\x20queue\x20report',_0x5a2e98);});}});}}function endRouting(_0x2da824,_0x1baa6a,_0x3abd2a,_0x4b85e6){if(_0x2da824&&_0x1baa6a){_0x1baa6a[_0x7d21('0x3a')]-=0x1;var _0x3fb4b4={'leaveAt':moment()[_0x7d21('0x18')](_0x7d21('0x29')),'exitAt':moment()[_0x7d21('0x18')](_0x7d21('0x29')),'reason':_0x7d21('0x40')};logger[_0x7d21('0x34')](util[_0x7d21('0x18')]('[%s][END:QUEUE][NAME:%s]',_0x2da824,_0x1baa6a['name']));emitChannelQueueInteraction(_0x3abd2a[_0x7d21('0x2d')],_0x1baa6a['name'],_0x3abd2a[_0x7d21('0x28')],_0x3abd2a[_0x7d21('0x12')][_0x7d21('0x35')],_0x3abd2a['message']['id'],![],_0x4b85e6);if(rpc[_0x3abd2a[_0x7d21('0x2d')]+_0x7d21('0x37')]){return rpc[_0x3abd2a['channel']+_0x7d21('0x37')]['update'](_0x2da824,_0x3fb4b4)[_0x7d21('0x3f')](function(_0x265718){logger[_0x7d21('0x39')](_0x7d21('0x41'),_0x265718);});}}}function handleFindQueue(_0xde190b){return function(_0x552ebe){return _0x552ebe[_0x7d21('0x35')][_0x7d21('0x42')]()===_0xde190b[_0x7d21('0x42')]();};}exports[_0x7d21('0x43')]=function(_0x191def,_0x274261,_0x3acd1b,_0x2997ce){return function(_0x2ac964){try{var _0x459580={'name':_0x274261[0x0],'timeout':_0x274261[0x1]};var _0x409010=queue[_0x7d21('0x0')](_0x459580,{'typecast':!![]});if(_0x409010[_0x7d21('0x44')]){logger[_0x7d21('0x39')]('[%s][QUEUE]\x20%s',_0x191def,_[_0x7d21('0x45')](_0x409010,_0x7d21('0x36'))[_0x7d21('0x46')](',\x20'));_0x2ac964[_0x7d21('0x47')]();}else{var _0x43b945=_[_0x7d21('0x48')](_0x3acd1b[_0x2997ce['channel']+_0x7d21('0x49')],handleFindQueue(_0x459580['name']));if(_0x43b945){startRouting(_0x191def,_0x43b945,_0x2997ce,_0x3acd1b);var _0x207ffb=(_0x43b945[_0x7d21('0x40')]||0xa)*0x3e8;var _0x5e9890=(_0x459580['timeout']||0x14)*0x3e8;var _0x10e328;if(_0x207ffb>_0x5e9890){_0x5e9890=_0x207ffb;}var _0x1391cf=seqqueue[_0x7d21('0x4a')](_0x207ffb);_0x1391cf['id']=_0x191def;_0x1391cf['atimeout']=_0x207ffb;_0x1391cf[_0x7d21('0x4b')]=_0x5e9890;_0x1391cf[_0x7d21('0x2d')]=_0x2997ce['channel'];_0x3acd1b['rules'][_0x191def]['on']('end',function(){logger['info'](_0x7d21('0x4c'),_0x191def);stopRouting(_0x191def,_0x43b945,_0x2997ce,_0x3acd1b);clearTimeout(_0x10e328);_0x10e328=undefined;_0x1391cf[_0x7d21('0x4d')](!![]);if(_0x3acd1b['rules'][_0x191def]){delete _0x3acd1b[_0x7d21('0x4e')][_0x191def];}_0x2ac964[_0x7d21('0x47')]();});_0x3acd1b['rules'][_0x191def]['on']('complete',function(){if(_0x3acd1b[_0x7d21('0x4e')][_0x191def]){delete _0x3acd1b[_0x7d21('0x4e')][_0x191def];}});_0x10e328=setTimeout(function(){logger['info'](_0x7d21('0x4f'),_0x191def);endRouting(_0x191def,_0x43b945,_0x2997ce,_0x3acd1b);clearTimeout(_0x10e328);_0x1391cf[_0x7d21('0x4d')](!![]);_0x2ac964[_0x7d21('0x50')]();},_0x5e9890);switch(_0x43b945[_0x7d21('0x51')]){case _0x7d21('0x52'):strategy[_0x7d21('0x52')](_0x1391cf,_0x43b945,_0x3acd1b,_0x2997ce);break;default:strategy['beepall'](_0x1391cf,_0x43b945,_0x3acd1b,_0x2997ce);}}else{logger[_0x7d21('0x39')](_0x7d21('0x53'),_0x191def,_0x459580[_0x7d21('0x35')]);_0x2ac964[_0x7d21('0x47')]();}}}catch(_0x261779){logger['error']('[%s][QUEUE]\x20%s',_0x191def,_0x261779[_0x7d21('0x54')]);_0x2ac964[_0x7d21('0x47')]();}};};