Built motion from commit d5e4af8c.|2.6.23
[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 _0xbb6b=['format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/whatsappInteraction','string','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','list','channel','QueueId','upperFirst','interaction','MessageId','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','update','then','update\x20queue\x20report','toLowerCase','consequence','validate','[%s][QUEUE]\x20%s','map','find','Queues','timeout','atimeout','qtimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stop','stack','lodash','ioredis','../../../../config/environment','routing','defaults','redis','localhost','socket.io-emitter','queue_id','queue','from','joinAt','emit','clone','account','push','capitalize','InteractionId'];(function(_0x212741,_0x3ea0f0){var _0x25ff42=function(_0x42d40c){while(--_0x42d40c){_0x212741['push'](_0x212741['shift']());}};_0x25ff42(++_0x3ea0f0);}(_0xbb6b,0x17e));var _0xbbb6=function(_0x1bfce8,_0x2abf68){_0x1bfce8=_0x1bfce8-0x0;var _0x1f6574=_0xbb6b[_0x1bfce8];return _0x1f6574;};'use strict';var schema=require('validate');var _=require(_0xbbb6('0x0'));var util=require('util');var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0xbbb6('0x1'));var config=require(_0xbbb6('0x2'));var logger=require('../../../../config/logger')(_0xbbb6('0x3'));var strategy=require('./strategy');config['redis']=_[_0xbbb6('0x4')](config[_0xbbb6('0x5')],{'host':_0xbbb6('0x6'),'port':0x18eb});var io=require(_0xbbb6('0x7'))(new Redis(config['redis']));var attributes=['id',_0xbbb6('0x8'),'account',_0xbbb6('0x9'),_0xbbb6('0xa'),_0xbbb6('0xb')];function emit(_0x3db836,_0x1ac2a1,_0x3e5339){io['to'](_0x3db836)[_0xbbb6('0xc')](_0x1ac2a1,_0x3e5339);}function emitChannelQueueInteraction(_0x274c7f,_0x4705cb,_0x31ec7e,_0x366d1e,_0x45d868,_0x2fc7a4,_0x30d0af,_0x3e4bf4){var _0x31c47b=_[_0xbbb6('0xd')](_0x31ec7e);_0x31c47b['queue_id']=_0x3e4bf4;_0x31c47b[_0xbbb6('0x9')]=_0x4705cb;_0x31c47b[_0xbbb6('0xe')]=_0x366d1e;_0x31c47b['id']=_0x45d868;if(_0x2fc7a4){attributes[_0xbbb6('0xf')](_[_0xbbb6('0x10')](_0x274c7f)+_0xbbb6('0x11'));_0x30d0af[util[_0xbbb6('0x12')](_0xbbb6('0x13'),_0x274c7f)][_0x45d868]=_[_0xbbb6('0x14')](_0x31c47b,attributes);}else{delete _0x30d0af[util[_0xbbb6('0x12')](_0xbbb6('0x13'),_0x274c7f)][_0x45d868];}emit(util['format'](_0xbbb6('0x15'),_0x274c7f,_0x4705cb),util[_0xbbb6('0x12')](_0xbbb6('0x16'),_0x274c7f,_0x2fc7a4?'save':_0xbbb6('0x17')),_['pick'](_0x31c47b,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xbbb6('0x18')),'chatQueueReport':require(_0xbbb6('0x19')),'smsQueueReport':require(_0xbbb6('0x1a')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0xbbb6('0x1b')),'chatInteraction':require(_0xbbb6('0x1c')),'faxInteraction':require(_0xbbb6('0x1d')),'mailInteraction':require(_0xbbb6('0x1e')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require('../../rpc/smsInteraction'),'whatsappInteraction':require(_0xbbb6('0x1f'))};var queue=schema({'name':{'type':_0xbbb6('0x20'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':'number','message':_0xbbb6('0x21')}});function startRouting(_0xa9aac8,_0x110471,_0x49c79a,_0xfee67){if(_0xa9aac8&&_0x110471&&_0x49c79a){_0x110471[_0xbbb6('0x22')]+=0x1;var _0x5b05da={'uniqueid':_0xa9aac8,'from':_0x49c79a[_0xbbb6('0x23')]?_0x49c79a[_0xbbb6('0x23')][_0xbbb6('0xa')]:'','joinAt':moment()['format'](_0xbbb6('0x24')),'ContactId':_0x49c79a['contact']?_0x49c79a['contact']['id']:null,'ListId':_0x49c79a['list']?_0x49c79a[_0xbbb6('0x25')]['id']:null};_0x5b05da[_['upperFirst'](_0x49c79a[_0xbbb6('0x26')])+_0xbbb6('0x27')]=_0x110471['id']||null;_0x5b05da[_[_0xbbb6('0x28')](_0x49c79a[_0xbbb6('0x26')])+_0xbbb6('0x11')]=_0x49c79a[_0xbbb6('0x29')]?_0x49c79a['interaction']['id']:null;_0x5b05da[_[_0xbbb6('0x28')](_0x49c79a['channel'])+_0xbbb6('0x2a')]=_0x49c79a[_0xbbb6('0x2b')]?_0x49c79a[_0xbbb6('0x2b')]['id']:null;_0x5b05da[_[_0xbbb6('0x28')](_0x49c79a[_0xbbb6('0x26')])+(_0x49c79a[_0xbbb6('0x26')]!=='chat'?_0xbbb6('0x2c'):_0xbbb6('0x2d'))]=_0x49c79a[_0xbbb6('0xe')]?_0x49c79a[_0xbbb6('0xe')]['id']:null;logger[_0xbbb6('0x2e')](util['format'](_0xbbb6('0x2f'),_0xa9aac8,_0x110471[_0xbbb6('0x30')]));emitChannelQueueInteraction(_0x49c79a[_0xbbb6('0x26')],_0x110471[_0xbbb6('0x30')],_0x5b05da,_0x49c79a[_0xbbb6('0xe')][_0xbbb6('0x30')],_0x49c79a[_0xbbb6('0x2b')]['id'],!![],_0xfee67,_0x110471['id']);if(rpc[_0x49c79a[_0xbbb6('0x26')]+_0xbbb6('0x31')]){return rpc[_0x49c79a[_0xbbb6('0x26')]+'QueueReport'][_0xbbb6('0x32')](_0x5b05da)[_0xbbb6('0x33')](function(_0x108bcb){logger[_0xbbb6('0x34')](_0xbbb6('0x35'),_0x108bcb);});}}}function stopRouting(_0x4c92cb,_0x32f3fb,_0x2e6489,_0x4bbe05){if(_0x4c92cb&&_0x32f3fb){_0x32f3fb[_0xbbb6('0x22')]-=0x1;var _0x3d0c33={'leaveAt':moment()[_0xbbb6('0x12')](_0xbbb6('0x24')),'acceptAt':moment()['format'](_0xbbb6('0x24')),'reason':'accepted'};logger['info'](util['format'](_0xbbb6('0x36'),_0x4c92cb,_0x32f3fb[_0xbbb6('0x30')]));emitChannelQueueInteraction(_0x2e6489[_0xbbb6('0x26')],_0x32f3fb[_0xbbb6('0x30')],_0x2e6489[_0xbbb6('0x23')],_0x2e6489['account'][_0xbbb6('0x30')],_0x2e6489[_0xbbb6('0x2b')]['id'],![],_0x4bbe05,_0x32f3fb['id']);return rpc[_0x2e6489[_0xbbb6('0x26')]+'Interaction'][_0xbbb6('0x37')](_0x2e6489[_0xbbb6('0x29')]['id'],{'queueId':_0x32f3fb['id']})[_0xbbb6('0x38')](function(){if(rpc[_0x2e6489['channel']+_0xbbb6('0x31')]){return rpc[_0x2e6489[_0xbbb6('0x26')]+_0xbbb6('0x31')][_0xbbb6('0x37')](_0x4c92cb,_0x3d0c33)[_0xbbb6('0x33')](function(_0x24208e){logger[_0xbbb6('0x34')](_0xbbb6('0x39'),_0x24208e);});}});}}function endRouting(_0x307d4f,_0x33ab8a,_0x4dcc8d,_0x53eea5){if(_0x307d4f&&_0x33ab8a){_0x33ab8a[_0xbbb6('0x22')]-=0x1;var _0x5c6bf1={'leaveAt':moment()[_0xbbb6('0x12')](_0xbbb6('0x24')),'exitAt':moment()[_0xbbb6('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger['info'](util['format']('[%s][END:QUEUE][NAME:%s]',_0x307d4f,_0x33ab8a[_0xbbb6('0x30')]));emitChannelQueueInteraction(_0x4dcc8d['channel'],_0x33ab8a['name'],_0x4dcc8d[_0xbbb6('0x23')],_0x4dcc8d[_0xbbb6('0xe')][_0xbbb6('0x30')],_0x4dcc8d['message']['id'],![],_0x53eea5);if(rpc[_0x4dcc8d[_0xbbb6('0x26')]+'QueueReport']){return rpc[_0x4dcc8d['channel']+_0xbbb6('0x31')]['update'](_0x307d4f,_0x5c6bf1)['catch'](function(_0x386b4f){logger['error'](_0xbbb6('0x39'),_0x386b4f);});}}}function handleFindQueue(_0x39c779){return function(_0x186bbc){return _0x186bbc[_0xbbb6('0x30')][_0xbbb6('0x3a')]()===_0x39c779[_0xbbb6('0x3a')]();};}exports[_0xbbb6('0x3b')]=function(_0xf19853,_0x489a7f,_0x450b64,_0x5e4628){return function(_0x18c949){try{var _0x43edcc={'name':_0x489a7f[0x0],'timeout':_0x489a7f[0x1]};var _0x35bb66=queue[_0xbbb6('0x3c')](_0x43edcc,{'typecast':!![]});if(_0x35bb66['length']){logger[_0xbbb6('0x34')](_0xbbb6('0x3d'),_0xf19853,_[_0xbbb6('0x3e')](_0x35bb66,_0xbbb6('0x2b'))['join'](',\x20'));_0x18c949['stop']();}else{var _0x1cd3a1=_[_0xbbb6('0x3f')](_0x450b64[_0x5e4628[_0xbbb6('0x26')]+_0xbbb6('0x40')],handleFindQueue(_0x43edcc[_0xbbb6('0x30')]));if(_0x1cd3a1){startRouting(_0xf19853,_0x1cd3a1,_0x5e4628,_0x450b64);var _0x3e7c9c=(_0x1cd3a1['timeout']||0xa)*0x3e8;var _0x72c78=(_0x43edcc[_0xbbb6('0x41')]||0x14)*0x3e8;var _0x5c34f8;if(_0x3e7c9c>_0x72c78){_0x72c78=_0x3e7c9c;}var _0x50a6c9=seqqueue['createQueue'](_0x3e7c9c);_0x50a6c9['id']=_0xf19853;_0x50a6c9[_0xbbb6('0x42')]=_0x3e7c9c;_0x50a6c9[_0xbbb6('0x43')]=_0x72c78;_0x50a6c9[_0xbbb6('0x26')]=_0x5e4628[_0xbbb6('0x26')];_0x450b64['rules'][_0xf19853]['on'](_0xbbb6('0x44'),function(){logger['info'](_0xbbb6('0x45'),_0xf19853);stopRouting(_0xf19853,_0x1cd3a1,_0x5e4628,_0x450b64);clearTimeout(_0x5c34f8);_0x5c34f8=undefined;_0x50a6c9[_0xbbb6('0x46')](!![]);if(_0x450b64[_0xbbb6('0x47')][_0xf19853]){delete _0x450b64[_0xbbb6('0x47')][_0xf19853];}_0x18c949['stop']();});_0x450b64[_0xbbb6('0x47')][_0xf19853]['on'](_0xbbb6('0x48'),function(){if(_0x450b64[_0xbbb6('0x47')][_0xf19853]){delete _0x450b64[_0xbbb6('0x47')][_0xf19853];}});_0x5c34f8=setTimeout(function(){logger[_0xbbb6('0x2e')](_0xbbb6('0x49'),_0xf19853);endRouting(_0xf19853,_0x1cd3a1,_0x5e4628,_0x450b64);clearTimeout(_0x5c34f8);_0x50a6c9[_0xbbb6('0x46')](!![]);_0x18c949['next']();},_0x72c78);switch(_0x1cd3a1[_0xbbb6('0x4a')]){case'rrmemory':strategy[_0xbbb6('0x4b')](_0x50a6c9,_0x1cd3a1,_0x450b64,_0x5e4628);break;default:strategy[_0xbbb6('0x4c')](_0x50a6c9,_0x1cd3a1,_0x450b64,_0x5e4628);}}else{logger[_0xbbb6('0x34')](_0xbbb6('0x4d'),_0xf19853,_0x43edcc['name']);_0x18c949[_0xbbb6('0x4e')]();}}}catch(_0x42677f){logger[_0xbbb6('0x34')](_0xbbb6('0x3d'),_0xf19853,_0x42677f[_0xbbb6('0x4f')]);_0x18c949['stop']();}};};