6bd55506051b54375b39cb38989e582054beb7b1
[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 _0x3521=['name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','QueueId','InteractionId','interaction','channel','WebsiteId','name','message','QueueReport','create','catch','create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','update','error','update\x20queue\x20report','timeout','info','toLowerCase','length','[%s][QUEUE]\x20%s','join','stop','Queues','createQueue','atimeout','qtimeout','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','seq-queue','moment','../../../../config/environment','./strategy','redis','localhost','socket.io-emitter','queue_id','account','queue','clone','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/whatsappQueueReport'];(function(_0x30775d,_0x589377){var _0x1b6018=function(_0x1c80ee){while(--_0x1c80ee){_0x30775d['push'](_0x30775d['shift']());}};_0x1b6018(++_0x589377);}(_0x3521,0x183));var _0x1352=function(_0x13cafb,_0x1b91c5){_0x13cafb=_0x13cafb-0x0;var _0x47b4cb=_0x3521[_0x13cafb];return _0x47b4cb;};'use strict';var schema=require(_0x1352('0x0'));var _=require(_0x1352('0x1'));var util=require('util');var seqqueue=require(_0x1352('0x2'));var moment=require(_0x1352('0x3'));var Redis=require('ioredis');var config=require(_0x1352('0x4'));var logger=require('../../../../config/logger')('routing');var strategy=require(_0x1352('0x5'));config[_0x1352('0x6')]=_['defaults'](config[_0x1352('0x6')],{'host':_0x1352('0x7'),'port':0x18eb});var io=require(_0x1352('0x8'))(new Redis(config['redis']));var attributes=['id',_0x1352('0x9'),_0x1352('0xa'),_0x1352('0xb'),'from','joinAt'];function emit(_0x212e2c,_0x417fca,_0x1c2acb){io['to'](_0x212e2c)['emit'](_0x417fca,_0x1c2acb);}function emitChannelQueueInteraction(_0xf2edb6,_0x323ea0,_0x50058e,_0x36188c,_0x8ad131,_0x3e9c73,_0x34a1d3,_0x3d3781){var _0x174fe2=_[_0x1352('0xc')](_0x50058e);_0x174fe2[_0x1352('0x9')]=_0x3d3781;_0x174fe2[_0x1352('0xb')]=_0x323ea0;_0x174fe2[_0x1352('0xa')]=_0x36188c;_0x174fe2['id']=_0x8ad131;if(_0x3e9c73){_0x34a1d3[util[_0x1352('0xd')](_0x1352('0xe'),_0xf2edb6)][_0x8ad131]=_['pick'](_0x174fe2,attributes);}else{delete _0x34a1d3[util[_0x1352('0xd')](_0x1352('0xe'),_0xf2edb6)][_0x8ad131];}emit(util[_0x1352('0xd')](_0x1352('0xf'),_0xf2edb6,_0x323ea0),util['format'](_0x1352('0x10'),_0xf2edb6,_0x3e9c73?'save':_0x1352('0x11')),_['pick'](_0x174fe2,attributes));}var rpc={'openchannelQueueReport':require(_0x1352('0x12')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x1352('0x13')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x1352('0x14'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x1352('0x15')},'timeout':{'type':_0x1352('0x16'),'message':_0x1352('0x17')}});function startRouting(_0x357afa,_0x95fa39,_0x1d94e6,_0x5cd001){if(_0x357afa&&_0x95fa39&&_0x1d94e6){_0x95fa39[_0x1352('0x18')]+=0x1;var _0x1679ae={'uniqueid':_0x357afa,'from':_0x1d94e6[_0x1352('0x19')]?_0x1d94e6['body'][_0x1352('0x1a')]:'','joinAt':moment()[_0x1352('0xd')](_0x1352('0x1b')),'ContactId':_0x1d94e6[_0x1352('0x1c')]?_0x1d94e6[_0x1352('0x1c')]['id']:null,'ListId':_0x1d94e6['list']?_0x1d94e6[_0x1352('0x1d')]['id']:null};_0x1679ae[_[_0x1352('0x1e')](_0x1d94e6['channel'])+_0x1352('0x1f')]=_0x95fa39['id']||null;_0x1679ae[_[_0x1352('0x1e')](_0x1d94e6['channel'])+_0x1352('0x20')]=_0x1d94e6[_0x1352('0x21')]?_0x1d94e6[_0x1352('0x21')]['id']:null;_0x1679ae[_['upperFirst'](_0x1d94e6['channel'])+'MessageId']=_0x1d94e6['message']?_0x1d94e6['message']['id']:null;_0x1679ae[_[_0x1352('0x1e')](_0x1d94e6['channel'])+(_0x1d94e6[_0x1352('0x22')]!=='chat'?'AccountId':_0x1352('0x23'))]=_0x1d94e6['account']?_0x1d94e6[_0x1352('0xa')]['id']:null;logger['info'](util[_0x1352('0xd')]('[%s][START:QUEUE][NAME:%s]',_0x357afa,_0x95fa39[_0x1352('0x24')]));emitChannelQueueInteraction(_0x1d94e6[_0x1352('0x22')],_0x95fa39[_0x1352('0x24')],_0x1679ae,_0x1d94e6[_0x1352('0xa')][_0x1352('0x24')],_0x1d94e6[_0x1352('0x25')]['id'],!![],_0x5cd001,_0x95fa39['id']);if(rpc[_0x1d94e6[_0x1352('0x22')]+_0x1352('0x26')]){return rpc[_0x1d94e6[_0x1352('0x22')]+'QueueReport'][_0x1352('0x27')](_0x1679ae)[_0x1352('0x28')](function(_0x44674a){logger['error'](_0x1352('0x29'));});}}}function stopRouting(_0x66df5c,_0x40d1aa,_0x429380,_0x3b418e){if(_0x66df5c&&_0x40d1aa){_0x40d1aa['waiting']-=0x1;var _0x4246fe={'leaveAt':moment()[_0x1352('0xd')](_0x1352('0x1b')),'acceptAt':moment()['format'](_0x1352('0x1b')),'reason':'accepted'};logger['info'](util[_0x1352('0xd')](_0x1352('0x2a'),_0x66df5c,_0x40d1aa['name']));emitChannelQueueInteraction(_0x429380[_0x1352('0x22')],_0x40d1aa['name'],_0x429380['body'],_0x429380[_0x1352('0xa')][_0x1352('0x24')],_0x429380[_0x1352('0x25')]['id'],![],_0x3b418e,_0x40d1aa['id']);if(rpc[_0x429380[_0x1352('0x22')]+_0x1352('0x26')]){return rpc[_0x429380['channel']+_0x1352('0x26')][_0x1352('0x2b')](_0x66df5c,_0x4246fe)['catch'](function(_0x1e1d80){logger[_0x1352('0x2c')](_0x1352('0x2d'));});}}}function endRouting(_0x208342,_0x49e145,_0x498d39,_0x31ddd7){if(_0x208342&&_0x49e145){_0x49e145[_0x1352('0x18')]-=0x1;var _0x351b0a={'leaveAt':moment()[_0x1352('0xd')](_0x1352('0x1b')),'exitAt':moment()[_0x1352('0xd')](_0x1352('0x1b')),'reason':_0x1352('0x2e')};logger[_0x1352('0x2f')](util['format']('[%s][END:QUEUE][NAME:%s]',_0x208342,_0x49e145['name']));emitChannelQueueInteraction(_0x498d39[_0x1352('0x22')],_0x49e145['name'],_0x498d39[_0x1352('0x19')],_0x498d39[_0x1352('0xa')][_0x1352('0x24')],_0x498d39['message']['id'],![],_0x31ddd7);if(rpc[_0x498d39[_0x1352('0x22')]+'QueueReport']){return rpc[_0x498d39[_0x1352('0x22')]+_0x1352('0x26')]['update'](_0x208342,_0x351b0a)[_0x1352('0x28')](function(_0x5414b1){logger[_0x1352('0x2c')](_0x1352('0x2d'));});}}}function handleFindQueue(_0x3edc39){return function(_0x5d13c6){return _0x5d13c6[_0x1352('0x24')][_0x1352('0x30')]()===_0x3edc39['toLowerCase']();};}exports['consequence']=function(_0x2b9ae2,_0x5e50f6,_0x4ac113,_0xe7285c){return function(_0x1fbb14){try{var _0x195488={'name':_0x5e50f6[0x0],'timeout':_0x5e50f6[0x1]};var _0x2e292d=queue[_0x1352('0x0')](_0x195488,{'typecast':!![]});if(_0x2e292d[_0x1352('0x31')]){logger['error'](_0x1352('0x32'),_0x2b9ae2,_['map'](_0x2e292d,'message')[_0x1352('0x33')](',\x20'));_0x1fbb14[_0x1352('0x34')]();}else{var _0x4fa56a=_['find'](_0x4ac113[_0xe7285c[_0x1352('0x22')]+_0x1352('0x35')],handleFindQueue(_0x195488[_0x1352('0x24')]));if(_0x4fa56a){startRouting(_0x2b9ae2,_0x4fa56a,_0xe7285c,_0x4ac113);var _0x214ad5=(_0x4fa56a[_0x1352('0x2e')]||0xa)*0x3e8;var _0x56cb9c=(_0x195488[_0x1352('0x2e')]||0x14)*0x3e8;var _0x5252dd,_0x51a9bb;if(_0x214ad5>_0x56cb9c){_0x56cb9c=_0x214ad5;}var _0x4a2277=seqqueue[_0x1352('0x36')](_0x214ad5);_0x4a2277['id']=_0x2b9ae2;_0x4a2277[_0x1352('0x37')]=_0x214ad5;_0x4a2277[_0x1352('0x38')]=_0x56cb9c;_0x4a2277[_0x1352('0x22')]=_0xe7285c[_0x1352('0x22')];_0x4ac113['rules'][_0x2b9ae2]['on']('end',function(){logger[_0x1352('0x2f')](_0x1352('0x39'),_0x2b9ae2);stopRouting(_0x2b9ae2,_0x4fa56a,_0xe7285c,_0x4ac113);clearTimeout(_0x5252dd);_0x5252dd=undefined;_0x4a2277[_0x1352('0x3a')](!![]);if(_0x4ac113[_0x1352('0x3b')][_0x2b9ae2]){delete _0x4ac113[_0x1352('0x3b')][_0x2b9ae2];}_0x1fbb14[_0x1352('0x34')]();});_0x4ac113[_0x1352('0x3b')][_0x2b9ae2]['on'](_0x1352('0x3c'),function(){if(_0x4ac113[_0x1352('0x3b')][_0x2b9ae2]){delete _0x4ac113[_0x1352('0x3b')][_0x2b9ae2];}});_0x5252dd=setTimeout(function(){logger[_0x1352('0x2f')](_0x1352('0x3d'),_0x2b9ae2);endRouting(_0x2b9ae2,_0x4fa56a,_0xe7285c,_0x4ac113);clearTimeout(_0x5252dd);_0x4a2277[_0x1352('0x3a')](!![]);_0x1fbb14[_0x1352('0x3e')]();},_0x56cb9c);switch(_0x4fa56a['strategy']){case'rrmemory':strategy[_0x1352('0x3f')](_0x4a2277,_0x4fa56a,_0x4ac113,_0xe7285c);break;default:strategy[_0x1352('0x40')](_0x4a2277,_0x4fa56a,_0x4ac113,_0xe7285c);}}else{logger[_0x1352('0x2c')](_0x1352('0x41'),_0x2b9ae2,_0x195488[_0x1352('0x24')]);_0x1fbb14['stop']();}}}catch(_0x3bc2e7){console[_0x1352('0x42')](_0x3bc2e7);logger['error'](_0x1352('0x32'),_0x2b9ae2,_0x3bc2e7[_0x1352('0x43')]);_0x1fbb14[_0x1352('0x34')]();}};};