Built motion from commit 9d0783e6.|2.6.13
[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 _0x522e=['account','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','save','remove','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','MessageId','message','chat','WebsiteId','info','name','QueueReport','catch','error','create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','stop','find','Queues','atimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','lodash','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','./strategy','redis','defaults','socket.io-emitter','queue','joinAt','emit','queue_id'];(function(_0x1302a8,_0x42874f){var _0x23f5d5=function(_0x3cb340){while(--_0x3cb340){_0x1302a8['push'](_0x1302a8['shift']());}};_0x23f5d5(++_0x42874f);}(_0x522e,0x173));var _0xe522=function(_0x4a64e8,_0x329c29){_0x4a64e8=_0x4a64e8-0x0;var _0x458e66=_0x522e[_0x4a64e8];return _0x458e66;};'use strict';var schema=require('validate');var _=require(_0xe522('0x0'));var util=require('util');var seqqueue=require(_0xe522('0x1'));var moment=require(_0xe522('0x2'));var Redis=require(_0xe522('0x3'));var config=require(_0xe522('0x4'));var logger=require(_0xe522('0x5'))('routing');var strategy=require(_0xe522('0x6'));config[_0xe522('0x7')]=_[_0xe522('0x8')](config[_0xe522('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0xe522('0x9'))(new Redis(config['redis']));var attributes=['id','queue_id','account',_0xe522('0xa'),'from',_0xe522('0xb')];function emit(_0x17d377,_0x5de4fe,_0x2dc4f7){io['to'](_0x17d377)[_0xe522('0xc')](_0x5de4fe,_0x2dc4f7);}function emitChannelQueueInteraction(_0x2aa3aa,_0x6a75aa,_0x4c9109,_0x5ad3cb,_0x316f0c,_0x21b237,_0x41b33c,_0x9b3163){var _0x2e4eef=_['clone'](_0x4c9109);_0x2e4eef[_0xe522('0xd')]=_0x9b3163;_0x2e4eef['queue']=_0x6a75aa;_0x2e4eef[_0xe522('0xe')]=_0x5ad3cb;_0x2e4eef['id']=_0x316f0c;if(_0x21b237){attributes[_0xe522('0xf')](_[_0xe522('0x10')](_0x2aa3aa)+_0xe522('0x11'));_0x41b33c[util[_0xe522('0x12')](_0xe522('0x13'),_0x2aa3aa)][_0x316f0c]=_['pick'](_0x2e4eef,attributes);}else{delete _0x41b33c[util['format'](_0xe522('0x13'),_0x2aa3aa)][_0x316f0c];}emit(util['format']('%s:queue:%s',_0x2aa3aa,_0x6a75aa),util[_0xe522('0x12')]('%s_queue_waiting_interaction:%s',_0x2aa3aa,_0x21b237?_0xe522('0x14'):_0xe522('0x15')),_[_0xe522('0x16')](_0x2e4eef,attributes));}var rpc={'openchannelQueueReport':require(_0xe522('0x17')),'mailQueueReport':require(_0xe522('0x18')),'chatQueueReport':require(_0xe522('0x19')),'smsQueueReport':require(_0xe522('0x1a')),'faxQueueReport':require(_0xe522('0x1b')),'whatsappQueueReport':require(_0xe522('0x1c'))};var queue=schema({'name':{'type':_0xe522('0x1d'),'required':!![],'message':_0xe522('0x1e')},'timeout':{'type':'number','message':'timeout\x20is\x20a\x20number'}});function startRouting(_0xea3ca6,_0x4738ec,_0x4219c0,_0x31a4b7){if(_0xea3ca6&&_0x4738ec&&_0x4219c0){_0x4738ec[_0xe522('0x1f')]+=0x1;var _0x296cdf={'uniqueid':_0xea3ca6,'from':_0x4219c0[_0xe522('0x20')]?_0x4219c0[_0xe522('0x20')][_0xe522('0x21')]:'','joinAt':moment()[_0xe522('0x12')](_0xe522('0x22')),'ContactId':_0x4219c0[_0xe522('0x23')]?_0x4219c0[_0xe522('0x23')]['id']:null,'ListId':_0x4219c0[_0xe522('0x24')]?_0x4219c0[_0xe522('0x24')]['id']:null};_0x296cdf[_[_0xe522('0x25')](_0x4219c0[_0xe522('0x26')])+_0xe522('0x27')]=_0x4738ec['id']||null;_0x296cdf[_['upperFirst'](_0x4219c0['channel'])+'InteractionId']=_0x4219c0[_0xe522('0x28')]?_0x4219c0['interaction']['id']:null;_0x296cdf[_[_0xe522('0x25')](_0x4219c0[_0xe522('0x26')])+_0xe522('0x29')]=_0x4219c0[_0xe522('0x2a')]?_0x4219c0[_0xe522('0x2a')]['id']:null;_0x296cdf[_['upperFirst'](_0x4219c0[_0xe522('0x26')])+(_0x4219c0[_0xe522('0x26')]!==_0xe522('0x2b')?'AccountId':_0xe522('0x2c'))]=_0x4219c0[_0xe522('0xe')]?_0x4219c0[_0xe522('0xe')]['id']:null;logger[_0xe522('0x2d')](util[_0xe522('0x12')]('[%s][START:QUEUE][NAME:%s]',_0xea3ca6,_0x4738ec['name']));emitChannelQueueInteraction(_0x4219c0[_0xe522('0x26')],_0x4738ec[_0xe522('0x2e')],_0x296cdf,_0x4219c0[_0xe522('0xe')][_0xe522('0x2e')],_0x4219c0[_0xe522('0x2a')]['id'],!![],_0x31a4b7,_0x4738ec['id']);if(rpc[_0x4219c0[_0xe522('0x26')]+_0xe522('0x2f')]){return rpc[_0x4219c0['channel']+_0xe522('0x2f')]['create'](_0x296cdf)[_0xe522('0x30')](function(_0x555446){logger[_0xe522('0x31')](_0xe522('0x32'));});}}}function stopRouting(_0x19f294,_0x3bb3b6,_0x358ee4,_0x365cb0){if(_0x19f294&&_0x3bb3b6){_0x3bb3b6['waiting']-=0x1;var _0x218a2d={'leaveAt':moment()['format'](_0xe522('0x22')),'acceptAt':moment()[_0xe522('0x12')](_0xe522('0x22')),'reason':'accepted'};logger['info'](util[_0xe522('0x12')](_0xe522('0x33'),_0x19f294,_0x3bb3b6[_0xe522('0x2e')]));emitChannelQueueInteraction(_0x358ee4['channel'],_0x3bb3b6[_0xe522('0x2e')],_0x358ee4[_0xe522('0x20')],_0x358ee4[_0xe522('0xe')][_0xe522('0x2e')],_0x358ee4[_0xe522('0x2a')]['id'],![],_0x365cb0,_0x3bb3b6['id']);if(rpc[_0x358ee4[_0xe522('0x26')]+_0xe522('0x2f')]){return rpc[_0x358ee4[_0xe522('0x26')]+_0xe522('0x2f')][_0xe522('0x34')](_0x19f294,_0x218a2d)[_0xe522('0x30')](function(_0x4243c0){logger[_0xe522('0x31')](_0xe522('0x35'));});}}}function endRouting(_0x2da5a5,_0x1d75e0,_0x154d96,_0x692aef){if(_0x2da5a5&&_0x1d75e0){_0x1d75e0[_0xe522('0x1f')]-=0x1;var _0x573889={'leaveAt':moment()[_0xe522('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xe522('0x36')};logger['info'](util[_0xe522('0x12')](_0xe522('0x37'),_0x2da5a5,_0x1d75e0[_0xe522('0x2e')]));emitChannelQueueInteraction(_0x154d96[_0xe522('0x26')],_0x1d75e0['name'],_0x154d96['body'],_0x154d96[_0xe522('0xe')][_0xe522('0x2e')],_0x154d96[_0xe522('0x2a')]['id'],![],_0x692aef);if(rpc[_0x154d96[_0xe522('0x26')]+'QueueReport']){return rpc[_0x154d96['channel']+_0xe522('0x2f')]['update'](_0x2da5a5,_0x573889)[_0xe522('0x30')](function(_0x8a4b88){logger[_0xe522('0x31')](_0xe522('0x35'));});}}}function handleFindQueue(_0x41e6aa){return function(_0x202b67){return _0x202b67['name'][_0xe522('0x38')]()===_0x41e6aa[_0xe522('0x38')]();};}exports[_0xe522('0x39')]=function(_0x49b6ad,_0x7f2669,_0x3ce224,_0x295f50){return function(_0x4da463){try{var _0xa855f3={'name':_0x7f2669[0x0],'timeout':_0x7f2669[0x1]};var _0x449667=queue['validate'](_0xa855f3,{'typecast':!![]});if(_0x449667[_0xe522('0x3a')]){logger['error'](_0xe522('0x3b'),_0x49b6ad,_[_0xe522('0x3c')](_0x449667,_0xe522('0x2a'))['join'](',\x20'));_0x4da463[_0xe522('0x3d')]();}else{var _0x36f0e6=_[_0xe522('0x3e')](_0x3ce224[_0x295f50[_0xe522('0x26')]+_0xe522('0x3f')],handleFindQueue(_0xa855f3[_0xe522('0x2e')]));if(_0x36f0e6){startRouting(_0x49b6ad,_0x36f0e6,_0x295f50,_0x3ce224);var _0x50e258=(_0x36f0e6[_0xe522('0x36')]||0xa)*0x3e8;var _0x17babd=(_0xa855f3[_0xe522('0x36')]||0x14)*0x3e8;var _0x5ed787;if(_0x50e258>_0x17babd){_0x17babd=_0x50e258;}var _0x227cbc=seqqueue['createQueue'](_0x50e258);_0x227cbc['id']=_0x49b6ad;_0x227cbc[_0xe522('0x40')]=_0x50e258;_0x227cbc['qtimeout']=_0x17babd;_0x227cbc[_0xe522('0x26')]=_0x295f50[_0xe522('0x26')];_0x3ce224[_0xe522('0x41')][_0x49b6ad]['on'](_0xe522('0x42'),function(){logger[_0xe522('0x2d')](_0xe522('0x43'),_0x49b6ad);stopRouting(_0x49b6ad,_0x36f0e6,_0x295f50,_0x3ce224);clearTimeout(_0x5ed787);_0x5ed787=undefined;_0x227cbc[_0xe522('0x44')](!![]);if(_0x3ce224[_0xe522('0x41')][_0x49b6ad]){delete _0x3ce224[_0xe522('0x41')][_0x49b6ad];}_0x4da463[_0xe522('0x3d')]();});_0x3ce224[_0xe522('0x41')][_0x49b6ad]['on'](_0xe522('0x45'),function(){if(_0x3ce224['rules'][_0x49b6ad]){delete _0x3ce224['rules'][_0x49b6ad];}});_0x5ed787=setTimeout(function(){logger[_0xe522('0x2d')](_0xe522('0x46'),_0x49b6ad);endRouting(_0x49b6ad,_0x36f0e6,_0x295f50,_0x3ce224);clearTimeout(_0x5ed787);_0x227cbc['close'](!![]);_0x4da463['next']();},_0x17babd);switch(_0x36f0e6[_0xe522('0x47')]){case'rrmemory':strategy[_0xe522('0x48')](_0x227cbc,_0x36f0e6,_0x3ce224,_0x295f50);break;default:strategy[_0xe522('0x49')](_0x227cbc,_0x36f0e6,_0x3ce224,_0x295f50);}}else{logger[_0xe522('0x31')](_0xe522('0x4a'),_0x49b6ad,_0xa855f3[_0xe522('0x2e')]);_0x4da463['stop']();}}}catch(_0xcdec2f){console[_0xe522('0x4b')](_0xcdec2f);logger[_0xe522('0x31')](_0xe522('0x3b'),_0x49b6ad,_0xcdec2f[_0xe522('0x4c')]);_0x4da463[_0xe522('0x3d')]();}};};