Built motion from commit 06a208af.|2.6.26
[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 _0xe72e=['../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','message','chat','AccountId','info','name','catch','error','create\x20queue\x20report','waiting','accepted','Interaction','update','then','QueueReport','update\x20queue\x20report','timeout','toLowerCase','consequence','validate','length','map','join','stop','find','Queues','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','rrmemory','beepall','[%s][QUEUE]\x20%s','stack','lodash','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','emit','clone','push','capitalize','InteractionId','format','pick','%sQueuesWaitingInteractions','%s:queue:%s','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction'];(function(_0x3c04ef,_0x9d110c){var _0x6a3a69=function(_0x333514){while(--_0x333514){_0x3c04ef['push'](_0x3c04ef['shift']());}};_0x6a3a69(++_0x9d110c);}(_0xe72e,0x1e3));var _0xee72=function(_0x4dca4b,_0x19c968){_0x4dca4b=_0x4dca4b-0x0;var _0x9a30fc=_0xe72e[_0x4dca4b];return _0x9a30fc;};'use strict';var schema=require('validate');var _=require(_0xee72('0x0'));var util=require(_0xee72('0x1'));var seqqueue=require(_0xee72('0x2'));var moment=require(_0xee72('0x3'));var Redis=require(_0xee72('0x4'));var config=require(_0xee72('0x5'));var logger=require(_0xee72('0x6'))('routing');var strategy=require(_0xee72('0x7'));config[_0xee72('0x8')]=_[_0xee72('0x9')](config[_0xee72('0x8')],{'host':_0xee72('0xa'),'port':0x18eb});var io=require(_0xee72('0xb'))(new Redis(config[_0xee72('0x8')]));var attributes=['id',_0xee72('0xc'),_0xee72('0xd'),_0xee72('0xe'),_0xee72('0xf'),_0xee72('0x10')];function emit(_0x3de759,_0xfb894a,_0x321ac1){io['to'](_0x3de759)[_0xee72('0x11')](_0xfb894a,_0x321ac1);}function emitChannelQueueInteraction(_0x12449f,_0x15341d,_0x94bc47,_0x1c3927,_0x3e5fdf,_0x1c6fa5,_0x594d7b,_0x43eacd){var _0x5063ce=_[_0xee72('0x12')](_0x94bc47);_0x5063ce['queue_id']=_0x43eacd;_0x5063ce[_0xee72('0xe')]=_0x15341d;_0x5063ce[_0xee72('0xd')]=_0x1c3927;_0x5063ce['id']=_0x3e5fdf;if(_0x1c6fa5){attributes[_0xee72('0x13')](_[_0xee72('0x14')](_0x12449f)+_0xee72('0x15'));_0x594d7b[util[_0xee72('0x16')]('%sQueuesWaitingInteractions',_0x12449f)][_0x3e5fdf]=_[_0xee72('0x17')](_0x5063ce,attributes);}else{delete _0x594d7b[util[_0xee72('0x16')](_0xee72('0x18'),_0x12449f)][_0x3e5fdf];}emit(util[_0xee72('0x16')](_0xee72('0x19'),_0x12449f,_0x15341d),util[_0xee72('0x16')]('%s_queue_waiting_interaction:%s',_0x12449f,_0x1c6fa5?'save':'remove'),_[_0xee72('0x17')](_0x5063ce,attributes));}var rpc={'openchannelQueueReport':require(_0xee72('0x1a')),'mailQueueReport':require(_0xee72('0x1b')),'chatQueueReport':require(_0xee72('0x1c')),'smsQueueReport':require(_0xee72('0x1d')),'faxQueueReport':require(_0xee72('0x1e')),'whatsappQueueReport':require(_0xee72('0x1f')),'chatInteraction':require(_0xee72('0x20')),'faxInteraction':require(_0xee72('0x21')),'mailInteraction':require(_0xee72('0x22')),'openchannelInteraction':require(_0xee72('0x23')),'smsInteraction':require(_0xee72('0x24')),'whatsappInteraction':require(_0xee72('0x25'))};var queue=schema({'name':{'type':'string','required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xee72('0x26'),'message':_0xee72('0x27')}});function startRouting(_0x3849fc,_0x4e6724,_0xba0cdd,_0x18ecd2){if(_0x3849fc&&_0x4e6724&&_0xba0cdd){_0x4e6724['waiting']+=0x1;var _0x32139a={'uniqueid':_0x3849fc,'from':_0xba0cdd[_0xee72('0x28')]?_0xba0cdd[_0xee72('0x28')][_0xee72('0xf')]:'','joinAt':moment()[_0xee72('0x16')](_0xee72('0x29')),'ContactId':_0xba0cdd[_0xee72('0x2a')]?_0xba0cdd['contact']['id']:null,'ListId':_0xba0cdd[_0xee72('0x2b')]?_0xba0cdd[_0xee72('0x2b')]['id']:null};_0x32139a[_[_0xee72('0x2c')](_0xba0cdd[_0xee72('0x2d')])+_0xee72('0x2e')]=_0x4e6724['id']||null;_0x32139a[_[_0xee72('0x2c')](_0xba0cdd[_0xee72('0x2d')])+'InteractionId']=_0xba0cdd[_0xee72('0x2f')]?_0xba0cdd[_0xee72('0x2f')]['id']:null;_0x32139a[_[_0xee72('0x2c')](_0xba0cdd['channel'])+'MessageId']=_0xba0cdd[_0xee72('0x30')]?_0xba0cdd[_0xee72('0x30')]['id']:null;_0x32139a[_['upperFirst'](_0xba0cdd['channel'])+(_0xba0cdd[_0xee72('0x2d')]!==_0xee72('0x31')?_0xee72('0x32'):'WebsiteId')]=_0xba0cdd['account']?_0xba0cdd[_0xee72('0xd')]['id']:null;logger[_0xee72('0x33')](util[_0xee72('0x16')]('[%s][START:QUEUE][NAME:%s]',_0x3849fc,_0x4e6724[_0xee72('0x34')]));emitChannelQueueInteraction(_0xba0cdd['channel'],_0x4e6724[_0xee72('0x34')],_0x32139a,_0xba0cdd[_0xee72('0xd')][_0xee72('0x34')],_0xba0cdd[_0xee72('0x30')]['id'],!![],_0x18ecd2,_0x4e6724['id']);if(rpc[_0xba0cdd[_0xee72('0x2d')]+'QueueReport']){return rpc[_0xba0cdd[_0xee72('0x2d')]+'QueueReport']['create'](_0x32139a)[_0xee72('0x35')](function(_0x438221){logger[_0xee72('0x36')](_0xee72('0x37'),_0x438221);});}}}function stopRouting(_0x25c2d1,_0x52acf7,_0x2e1940,_0x257952){if(_0x25c2d1&&_0x52acf7){_0x52acf7[_0xee72('0x38')]-=0x1;var _0x80d943={'leaveAt':moment()[_0xee72('0x16')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0xee72('0x16')](_0xee72('0x29')),'reason':_0xee72('0x39')};logger['info'](util[_0xee72('0x16')]('[%s][STOP:QUEUE][NAME:%s]',_0x25c2d1,_0x52acf7[_0xee72('0x34')]));emitChannelQueueInteraction(_0x2e1940[_0xee72('0x2d')],_0x52acf7[_0xee72('0x34')],_0x2e1940['body'],_0x2e1940[_0xee72('0xd')]['name'],_0x2e1940['message']['id'],![],_0x257952,_0x52acf7['id']);return rpc[_0x2e1940[_0xee72('0x2d')]+_0xee72('0x3a')][_0xee72('0x3b')](_0x2e1940[_0xee72('0x2f')]['id'],{'queueId':_0x52acf7['id']})[_0xee72('0x3c')](function(){if(rpc[_0x2e1940[_0xee72('0x2d')]+_0xee72('0x3d')]){return rpc[_0x2e1940[_0xee72('0x2d')]+_0xee72('0x3d')][_0xee72('0x3b')](_0x25c2d1,_0x80d943)[_0xee72('0x35')](function(_0x5881a4){logger[_0xee72('0x36')](_0xee72('0x3e'),_0x5881a4);});}});}}function endRouting(_0x1a3b90,_0x1653e2,_0x4071e0,_0x2bac2e){if(_0x1a3b90&&_0x1653e2){_0x1653e2[_0xee72('0x38')]-=0x1;var _0x1ff6f4={'leaveAt':moment()[_0xee72('0x16')](_0xee72('0x29')),'exitAt':moment()[_0xee72('0x16')](_0xee72('0x29')),'reason':_0xee72('0x3f')};logger['info'](util['format']('[%s][END:QUEUE][NAME:%s]',_0x1a3b90,_0x1653e2['name']));emitChannelQueueInteraction(_0x4071e0[_0xee72('0x2d')],_0x1653e2['name'],_0x4071e0[_0xee72('0x28')],_0x4071e0[_0xee72('0xd')]['name'],_0x4071e0[_0xee72('0x30')]['id'],![],_0x2bac2e);if(rpc[_0x4071e0[_0xee72('0x2d')]+_0xee72('0x3d')]){return rpc[_0x4071e0['channel']+_0xee72('0x3d')][_0xee72('0x3b')](_0x1a3b90,_0x1ff6f4)[_0xee72('0x35')](function(_0x3ec2fa){logger[_0xee72('0x36')](_0xee72('0x3e'),_0x3ec2fa);});}}}function handleFindQueue(_0x174bca){return function(_0x11017d){return _0x11017d['name'][_0xee72('0x40')]()===_0x174bca[_0xee72('0x40')]();};}exports[_0xee72('0x41')]=function(_0x181807,_0x53bb71,_0x451dcb,_0x5d21e7){return function(_0x4bc6b2){try{var _0x702a0d={'name':_0x53bb71[0x0],'timeout':_0x53bb71[0x1]};var _0x152faf=queue[_0xee72('0x42')](_0x702a0d,{'typecast':!![]});if(_0x152faf[_0xee72('0x43')]){logger['error']('[%s][QUEUE]\x20%s',_0x181807,_[_0xee72('0x44')](_0x152faf,'message')[_0xee72('0x45')](',\x20'));_0x4bc6b2[_0xee72('0x46')]();}else{var _0xcc87c1=_[_0xee72('0x47')](_0x451dcb[_0x5d21e7[_0xee72('0x2d')]+_0xee72('0x48')],handleFindQueue(_0x702a0d['name']));if(_0xcc87c1){startRouting(_0x181807,_0xcc87c1,_0x5d21e7,_0x451dcb);var _0x388836=(_0xcc87c1['timeout']||0xa)*0x3e8;var _0x30a107=(_0x702a0d['timeout']||0x14)*0x3e8;var _0x50e6fd;if(_0x388836>_0x30a107){_0x30a107=_0x388836;}var _0x5c228e=seqqueue[_0xee72('0x49')](_0x388836);_0x5c228e['id']=_0x181807;_0x5c228e[_0xee72('0x4a')]=_0x388836;_0x5c228e[_0xee72('0x4b')]=_0x30a107;_0x5c228e[_0xee72('0x2d')]=_0x5d21e7[_0xee72('0x2d')];_0x451dcb[_0xee72('0x4c')][_0x181807]['on'](_0xee72('0x4d'),function(){logger[_0xee72('0x33')](_0xee72('0x4e'),_0x181807);stopRouting(_0x181807,_0xcc87c1,_0x5d21e7,_0x451dcb);clearTimeout(_0x50e6fd);_0x50e6fd=undefined;_0x5c228e[_0xee72('0x4f')](!![]);if(_0x451dcb[_0xee72('0x4c')][_0x181807]){delete _0x451dcb[_0xee72('0x4c')][_0x181807];}_0x4bc6b2['stop']();});_0x451dcb[_0xee72('0x4c')][_0x181807]['on'](_0xee72('0x50'),function(){if(_0x451dcb['rules'][_0x181807]){delete _0x451dcb[_0xee72('0x4c')][_0x181807];}});_0x50e6fd=setTimeout(function(){logger[_0xee72('0x33')](_0xee72('0x51'),_0x181807);endRouting(_0x181807,_0xcc87c1,_0x5d21e7,_0x451dcb);clearTimeout(_0x50e6fd);_0x5c228e[_0xee72('0x4f')](!![]);_0x4bc6b2['next']();},_0x30a107);switch(_0xcc87c1['strategy']){case _0xee72('0x52'):strategy[_0xee72('0x52')](_0x5c228e,_0xcc87c1,_0x451dcb,_0x5d21e7);break;default:strategy[_0xee72('0x53')](_0x5c228e,_0xcc87c1,_0x451dcb,_0x5d21e7);}}else{logger['error']('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x181807,_0x702a0d['name']);_0x4bc6b2[_0xee72('0x46')]();}}}catch(_0xc34373){logger[_0xee72('0x36')](_0xee72('0x54'),_0x181807,_0xc34373[_0xee72('0x55')]);_0x4bc6b2['stop']();}};};