4e1a4b0645c60ec2a582d8b5f91d0a3352204483
[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 _0x22c4=['[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','redis','localhost','queue_id','account','queue','joinAt','emit','clone','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','waiting','body','from','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','message','chat','AccountId','WebsiteId','info','name','QueueReport','create','error','YYYY-MM-DD\x20HH:mm:ss','[%s][STOP:QUEUE][NAME:%s]','catch','timeout','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','validate','length','[%s][QUEUE]\x20%s','join','find','createQueue','atimeout','qtimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','stop','complete'];(function(_0x58b4d8,_0x1f549d){var _0x1cd640=function(_0x107b61){while(--_0x107b61){_0x58b4d8['push'](_0x58b4d8['shift']());}};_0x1cd640(++_0x1f549d);}(_0x22c4,0x169));var _0x422c=function(_0x3d78d7,_0x44acea){_0x3d78d7=_0x3d78d7-0x0;var _0x4b6784=_0x22c4[_0x3d78d7];return _0x4b6784;};'use strict';var schema=require('validate');var _=require('lodash');var util=require('util');var seqqueue=require('seq-queue');var moment=require(_0x422c('0x0'));var Redis=require(_0x422c('0x1'));var config=require(_0x422c('0x2'));var logger=require(_0x422c('0x3'))(_0x422c('0x4'));var strategy=require('./strategy');config[_0x422c('0x5')]=_['defaults'](config[_0x422c('0x5')],{'host':_0x422c('0x6'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var attributes=['id',_0x422c('0x7'),_0x422c('0x8'),_0x422c('0x9'),'from',_0x422c('0xa')];function emit(_0x56db66,_0x1d7f3d,_0x16150e){io['to'](_0x56db66)[_0x422c('0xb')](_0x1d7f3d,_0x16150e);}function emitChannelQueueInteraction(_0x56574c,_0x3b069e,_0x37218f,_0x3a4329,_0x2f3d6d,_0x45b954,_0x5395f3,_0x3e5e1b){var _0x162222=_[_0x422c('0xc')](_0x37218f);_0x162222[_0x422c('0x7')]=_0x3e5e1b;_0x162222[_0x422c('0x9')]=_0x3b069e;_0x162222[_0x422c('0x8')]=_0x3a4329;_0x162222['id']=_0x2f3d6d;if(_0x45b954){_0x5395f3[util[_0x422c('0xd')](_0x422c('0xe'),_0x56574c)][_0x2f3d6d]=_[_0x422c('0xf')](_0x162222,attributes);}else{delete _0x5395f3[util[_0x422c('0xd')](_0x422c('0xe'),_0x56574c)][_0x2f3d6d];}emit(util[_0x422c('0xd')](_0x422c('0x10'),_0x56574c,_0x3b069e),util[_0x422c('0xd')]('%s_queue_waiting_interaction:%s',_0x56574c,_0x45b954?_0x422c('0x11'):_0x422c('0x12')),_[_0x422c('0xf')](_0x162222,attributes));}var rpc={'openchannelQueueReport':require(_0x422c('0x13')),'mailQueueReport':require(_0x422c('0x14')),'chatQueueReport':require(_0x422c('0x15')),'smsQueueReport':require(_0x422c('0x16')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':'string','required':!![],'message':_0x422c('0x17')},'timeout':{'type':_0x422c('0x18'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0xfaa383,_0x39042a,_0x44b6d7,_0x3ae2a2){if(_0xfaa383&&_0x39042a&&_0x44b6d7){_0x39042a[_0x422c('0x19')]+=0x1;var _0x541462={'uniqueid':_0xfaa383,'from':_0x44b6d7['body']?_0x44b6d7[_0x422c('0x1a')][_0x422c('0x1b')]:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x44b6d7[_0x422c('0x1c')]?_0x44b6d7['contact']['id']:null,'ListId':_0x44b6d7[_0x422c('0x1d')]?_0x44b6d7[_0x422c('0x1d')]['id']:null};_0x541462[_[_0x422c('0x1e')](_0x44b6d7[_0x422c('0x1f')])+_0x422c('0x20')]=_0x39042a['id']||null;_0x541462[_[_0x422c('0x1e')](_0x44b6d7[_0x422c('0x1f')])+_0x422c('0x21')]=_0x44b6d7['interaction']?_0x44b6d7[_0x422c('0x22')]['id']:null;_0x541462[_[_0x422c('0x1e')](_0x44b6d7['channel'])+'MessageId']=_0x44b6d7['message']?_0x44b6d7[_0x422c('0x23')]['id']:null;_0x541462[_['upperFirst'](_0x44b6d7[_0x422c('0x1f')])+(_0x44b6d7[_0x422c('0x1f')]!==_0x422c('0x24')?_0x422c('0x25'):_0x422c('0x26'))]=_0x44b6d7['account']?_0x44b6d7[_0x422c('0x8')]['id']:null;logger[_0x422c('0x27')](util[_0x422c('0xd')]('[%s][START:QUEUE][NAME:%s]',_0xfaa383,_0x39042a[_0x422c('0x28')]));emitChannelQueueInteraction(_0x44b6d7[_0x422c('0x1f')],_0x39042a['name'],_0x541462,_0x44b6d7['account']['name'],_0x44b6d7[_0x422c('0x23')]['id'],!![],_0x3ae2a2,_0x39042a['id']);if(rpc[_0x44b6d7['channel']+_0x422c('0x29')]){return rpc[_0x44b6d7[_0x422c('0x1f')]+_0x422c('0x29')][_0x422c('0x2a')](_0x541462)['catch'](function(_0x2b76ae){logger[_0x422c('0x2b')]('create\x20queue\x20report');});}}}function stopRouting(_0x3544a9,_0x30d5c8,_0x5b12a6,_0x5a45c5){if(_0x3544a9&&_0x30d5c8){_0x30d5c8[_0x422c('0x19')]-=0x1;var _0x1878ec={'leaveAt':moment()['format'](_0x422c('0x2c')),'acceptAt':moment()[_0x422c('0xd')](_0x422c('0x2c')),'reason':'accepted'};logger[_0x422c('0x27')](util[_0x422c('0xd')](_0x422c('0x2d'),_0x3544a9,_0x30d5c8[_0x422c('0x28')]));emitChannelQueueInteraction(_0x5b12a6[_0x422c('0x1f')],_0x30d5c8[_0x422c('0x28')],_0x5b12a6[_0x422c('0x1a')],_0x5b12a6[_0x422c('0x8')]['name'],_0x5b12a6['message']['id'],![],_0x5a45c5,_0x30d5c8['id']);if(rpc[_0x5b12a6[_0x422c('0x1f')]+_0x422c('0x29')]){return rpc[_0x5b12a6['channel']+'QueueReport']['update'](_0x3544a9,_0x1878ec)[_0x422c('0x2e')](function(_0x5be140){logger[_0x422c('0x2b')]('update\x20queue\x20report');});}}}function endRouting(_0x105ef3,_0x4178cc,_0x408ec1,_0x5adf53){if(_0x105ef3&&_0x4178cc){_0x4178cc['waiting']-=0x1;var _0x207e22={'leaveAt':moment()[_0x422c('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x422c('0xd')](_0x422c('0x2c')),'reason':_0x422c('0x2f')};logger['info'](util['format'](_0x422c('0x30'),_0x105ef3,_0x4178cc[_0x422c('0x28')]));emitChannelQueueInteraction(_0x408ec1['channel'],_0x4178cc[_0x422c('0x28')],_0x408ec1[_0x422c('0x1a')],_0x408ec1[_0x422c('0x8')][_0x422c('0x28')],_0x408ec1['message']['id'],![],_0x5adf53);if(rpc[_0x408ec1[_0x422c('0x1f')]+_0x422c('0x29')]){return rpc[_0x408ec1[_0x422c('0x1f')]+_0x422c('0x29')][_0x422c('0x31')](_0x105ef3,_0x207e22)['catch'](function(_0x5c55a2){logger[_0x422c('0x2b')]('update\x20queue\x20report');});}}}function handleFindQueue(_0x50a13b){return function(_0x2343a6){return _0x2343a6[_0x422c('0x28')][_0x422c('0x32')]()===_0x50a13b[_0x422c('0x32')]();};}exports['consequence']=function(_0x3392cb,_0x23999b,_0x8b9f13,_0x45a69c){return function(_0x3ea947){try{var _0x38e10b={'name':_0x23999b[0x0],'timeout':_0x23999b[0x1]};var _0xbde738=queue[_0x422c('0x33')](_0x38e10b,{'typecast':!![]});if(_0xbde738[_0x422c('0x34')]){logger[_0x422c('0x2b')](_0x422c('0x35'),_0x3392cb,_['map'](_0xbde738,_0x422c('0x23'))[_0x422c('0x36')](',\x20'));_0x3ea947['stop']();}else{var _0x4317c7=_[_0x422c('0x37')](_0x8b9f13[_0x45a69c[_0x422c('0x1f')]+'Queues'],handleFindQueue(_0x38e10b['name']));if(_0x4317c7){startRouting(_0x3392cb,_0x4317c7,_0x45a69c,_0x8b9f13);var _0x214f10=(_0x4317c7['timeout']||0xa)*0x3e8;var _0x17f014=(_0x38e10b[_0x422c('0x2f')]||0x14)*0x3e8;var _0x44a374,_0x46353c;if(_0x214f10>_0x17f014){_0x17f014=_0x214f10;}var _0x54a8fb=seqqueue[_0x422c('0x38')](_0x214f10);_0x54a8fb['id']=_0x3392cb;_0x54a8fb[_0x422c('0x39')]=_0x214f10;_0x54a8fb[_0x422c('0x3a')]=_0x17f014;_0x54a8fb[_0x422c('0x1f')]=_0x45a69c['channel'];_0x8b9f13['rules'][_0x3392cb]['on'](_0x422c('0x3b'),function(){logger[_0x422c('0x27')](_0x422c('0x3c'),_0x3392cb);stopRouting(_0x3392cb,_0x4317c7,_0x45a69c,_0x8b9f13);clearTimeout(_0x44a374);_0x44a374=undefined;_0x54a8fb[_0x422c('0x3d')](!![]);if(_0x8b9f13['rules'][_0x3392cb]){delete _0x8b9f13[_0x422c('0x3e')][_0x3392cb];}_0x3ea947[_0x422c('0x3f')]();});_0x8b9f13[_0x422c('0x3e')][_0x3392cb]['on'](_0x422c('0x40'),function(){if(_0x8b9f13['rules'][_0x3392cb]){delete _0x8b9f13['rules'][_0x3392cb];}});_0x44a374=setTimeout(function(){logger[_0x422c('0x27')](_0x422c('0x41'),_0x3392cb);endRouting(_0x3392cb,_0x4317c7,_0x45a69c,_0x8b9f13);clearTimeout(_0x44a374);_0x54a8fb[_0x422c('0x3d')](!![]);_0x3ea947[_0x422c('0x42')]();},_0x17f014);switch(_0x4317c7[_0x422c('0x43')]){case'rrmemory':strategy['rrmemory'](_0x54a8fb,_0x4317c7,_0x8b9f13,_0x45a69c);break;default:strategy['beepall'](_0x54a8fb,_0x4317c7,_0x8b9f13,_0x45a69c);}}else{logger[_0x422c('0x2b')](_0x422c('0x44'),_0x3392cb,_0x38e10b['name']);_0x3ea947[_0x422c('0x3f')]();}}}catch(_0x297753){console[_0x422c('0x45')](_0x297753);logger['error'](_0x422c('0x35'),_0x3392cb,_0x297753[_0x422c('0x46')]);_0x3ea947[_0x422c('0x3f')]();}};};