56bb441d36a6403616fcd8d83ba76e8ee02d2b1b
[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 _0x1956=['length','[%s][QUEUE]\x20%s','map','stop','find','Queues','qtimeout','rules','end','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','lodash','util','seq-queue','moment','ioredis','../../../../config/environment','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','queue','from','joinAt','emit','clone','account','capitalize','InteractionId','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','%s_queue_waiting_interaction:%s','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','body','contact','list','QueueId','upperFirst','channel','interaction','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','create','catch','error','create\x20queue\x20report','waiting','YYYY-MM-DD\x20HH:mm:ss','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','QueueReport','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence'];(function(_0x1f4b37,_0x32026f){var _0x7cef38=function(_0x4938be){while(--_0x4938be){_0x1f4b37['push'](_0x1f4b37['shift']());}};_0x7cef38(++_0x32026f);}(_0x1956,0x15c));var _0x6195=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x1956[_0x19e35c];return _0x3e1fe8;};'use strict';var schema=require(_0x6195('0x0'));var _=require(_0x6195('0x1'));var util=require(_0x6195('0x2'));var seqqueue=require(_0x6195('0x3'));var moment=require(_0x6195('0x4'));var Redis=require(_0x6195('0x5'));var config=require(_0x6195('0x6'));var logger=require('../../../../config/logger')(_0x6195('0x7'));var strategy=require(_0x6195('0x8'));config[_0x6195('0x9')]=_[_0x6195('0xa')](config[_0x6195('0x9')],{'host':_0x6195('0xb'),'port':0x18eb});var io=require(_0x6195('0xc'))(new Redis(config[_0x6195('0x9')]));var attributes=['id',_0x6195('0xd'),'account',_0x6195('0xe'),_0x6195('0xf'),_0x6195('0x10')];function emit(_0x327217,_0x108cbc,_0x4b5834){io['to'](_0x327217)[_0x6195('0x11')](_0x108cbc,_0x4b5834);}function emitChannelQueueInteraction(_0x1870d9,_0x5ce5c1,_0x4b0cbd,_0x4df791,_0x66e0b4,_0x110b94,_0x410505,_0x19cbef){var _0x1282f5=_[_0x6195('0x12')](_0x4b0cbd);_0x1282f5['queue_id']=_0x19cbef;_0x1282f5[_0x6195('0xe')]=_0x5ce5c1;_0x1282f5[_0x6195('0x13')]=_0x4df791;_0x1282f5['id']=_0x66e0b4;if(_0x110b94){attributes['push'](_[_0x6195('0x14')](_0x1870d9)+_0x6195('0x15'));_0x410505[util['format'](_0x6195('0x16'),_0x1870d9)][_0x66e0b4]=_[_0x6195('0x17')](_0x1282f5,attributes);}else{delete _0x410505[util[_0x6195('0x18')](_0x6195('0x16'),_0x1870d9)][_0x66e0b4];}emit(util[_0x6195('0x18')](_0x6195('0x19'),_0x1870d9,_0x5ce5c1),util[_0x6195('0x18')](_0x6195('0x1a'),_0x1870d9,_0x110b94?'save':'remove'),_[_0x6195('0x17')](_0x1282f5,attributes));}var rpc={'openchannelQueueReport':require(_0x6195('0x1b')),'mailQueueReport':require(_0x6195('0x1c')),'chatQueueReport':require(_0x6195('0x1d')),'smsQueueReport':require(_0x6195('0x1e')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x6195('0x1f')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0x6195('0x20')),'mailInteraction':require(_0x6195('0x21')),'openchannelInteraction':require(_0x6195('0x22')),'smsInteraction':require(_0x6195('0x23')),'whatsappInteraction':require(_0x6195('0x24'))};var queue=schema({'name':{'type':'string','required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':'number','message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x2b8bcd,_0x395588,_0xc1e5d9,_0x4f2d43){if(_0x2b8bcd&&_0x395588&&_0xc1e5d9){_0x395588['waiting']+=0x1;var _0x2ab6d1={'uniqueid':_0x2b8bcd,'from':_0xc1e5d9['body']?_0xc1e5d9[_0x6195('0x25')][_0x6195('0xf')]:'','joinAt':moment()[_0x6195('0x18')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0xc1e5d9[_0x6195('0x26')]?_0xc1e5d9[_0x6195('0x26')]['id']:null,'ListId':_0xc1e5d9[_0x6195('0x27')]?_0xc1e5d9['list']['id']:null};_0x2ab6d1[_['upperFirst'](_0xc1e5d9['channel'])+_0x6195('0x28')]=_0x395588['id']||null;_0x2ab6d1[_[_0x6195('0x29')](_0xc1e5d9[_0x6195('0x2a')])+_0x6195('0x15')]=_0xc1e5d9[_0x6195('0x2b')]?_0xc1e5d9[_0x6195('0x2b')]['id']:null;_0x2ab6d1[_[_0x6195('0x29')](_0xc1e5d9[_0x6195('0x2a')])+_0x6195('0x2c')]=_0xc1e5d9[_0x6195('0x2d')]?_0xc1e5d9['message']['id']:null;_0x2ab6d1[_[_0x6195('0x29')](_0xc1e5d9['channel'])+(_0xc1e5d9[_0x6195('0x2a')]!==_0x6195('0x2e')?_0x6195('0x2f'):_0x6195('0x30'))]=_0xc1e5d9[_0x6195('0x13')]?_0xc1e5d9[_0x6195('0x13')]['id']:null;logger[_0x6195('0x31')](util[_0x6195('0x18')](_0x6195('0x32'),_0x2b8bcd,_0x395588[_0x6195('0x33')]));emitChannelQueueInteraction(_0xc1e5d9[_0x6195('0x2a')],_0x395588['name'],_0x2ab6d1,_0xc1e5d9[_0x6195('0x13')][_0x6195('0x33')],_0xc1e5d9[_0x6195('0x2d')]['id'],!![],_0x4f2d43,_0x395588['id']);if(rpc[_0xc1e5d9[_0x6195('0x2a')]+'QueueReport']){return rpc[_0xc1e5d9[_0x6195('0x2a')]+'QueueReport'][_0x6195('0x34')](_0x2ab6d1)[_0x6195('0x35')](function(_0x53f49b){logger[_0x6195('0x36')](_0x6195('0x37'),_0x53f49b);});}}}function stopRouting(_0x4c7f03,_0x12df71,_0x7adb4e,_0x4562b1){if(_0x4c7f03&&_0x12df71){_0x12df71[_0x6195('0x38')]-=0x1;var _0xabfb7a={'leaveAt':moment()[_0x6195('0x18')](_0x6195('0x39')),'acceptAt':moment()[_0x6195('0x18')](_0x6195('0x39')),'reason':'accepted'};logger[_0x6195('0x31')](util[_0x6195('0x18')](_0x6195('0x3a'),_0x4c7f03,_0x12df71['name']));emitChannelQueueInteraction(_0x7adb4e[_0x6195('0x2a')],_0x12df71[_0x6195('0x33')],_0x7adb4e[_0x6195('0x25')],_0x7adb4e[_0x6195('0x13')]['name'],_0x7adb4e[_0x6195('0x2d')]['id'],![],_0x4562b1,_0x12df71['id']);return rpc[_0x7adb4e[_0x6195('0x2a')]+_0x6195('0x3b')][_0x6195('0x3c')](_0x7adb4e['interaction']['id'],{'queueId':_0x12df71['id']})['then'](function(){if(rpc[_0x7adb4e[_0x6195('0x2a')]+_0x6195('0x3d')]){return rpc[_0x7adb4e['channel']+_0x6195('0x3d')][_0x6195('0x3c')](_0x4c7f03,_0xabfb7a)['catch'](function(_0x2c648b){logger[_0x6195('0x36')](_0x6195('0x3e'),_0x2c648b);});}});}}function endRouting(_0x1840e5,_0x24cba0,_0x25b233,_0x9d8efb){if(_0x1840e5&&_0x24cba0){_0x24cba0[_0x6195('0x38')]-=0x1;var _0x4a67c3={'leaveAt':moment()[_0x6195('0x18')](_0x6195('0x39')),'exitAt':moment()[_0x6195('0x18')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x6195('0x3f')};logger[_0x6195('0x31')](util[_0x6195('0x18')](_0x6195('0x40'),_0x1840e5,_0x24cba0[_0x6195('0x33')]));emitChannelQueueInteraction(_0x25b233['channel'],_0x24cba0[_0x6195('0x33')],_0x25b233[_0x6195('0x25')],_0x25b233[_0x6195('0x13')][_0x6195('0x33')],_0x25b233[_0x6195('0x2d')]['id'],![],_0x9d8efb);if(rpc[_0x25b233[_0x6195('0x2a')]+_0x6195('0x3d')]){return rpc[_0x25b233[_0x6195('0x2a')]+_0x6195('0x3d')][_0x6195('0x3c')](_0x1840e5,_0x4a67c3)[_0x6195('0x35')](function(_0x51b4f3){logger[_0x6195('0x36')](_0x6195('0x3e'),_0x51b4f3);});}}}function handleFindQueue(_0x45a188){return function(_0x9743fd){return _0x9743fd[_0x6195('0x33')]['toLowerCase']()===_0x45a188[_0x6195('0x41')]();};}exports[_0x6195('0x42')]=function(_0x45e392,_0x11b900,_0x35bd25,_0x11618d){return function(_0x29bd26){try{var _0x16fb22={'name':_0x11b900[0x0],'timeout':_0x11b900[0x1]};var _0x5d6d6c=queue[_0x6195('0x0')](_0x16fb22,{'typecast':!![]});if(_0x5d6d6c[_0x6195('0x43')]){logger[_0x6195('0x36')](_0x6195('0x44'),_0x45e392,_[_0x6195('0x45')](_0x5d6d6c,_0x6195('0x2d'))['join'](',\x20'));_0x29bd26[_0x6195('0x46')]();}else{var _0xb68c0f=_[_0x6195('0x47')](_0x35bd25[_0x11618d[_0x6195('0x2a')]+_0x6195('0x48')],handleFindQueue(_0x16fb22[_0x6195('0x33')]));if(_0xb68c0f){startRouting(_0x45e392,_0xb68c0f,_0x11618d,_0x35bd25);var _0x264e02=(_0xb68c0f['timeout']||0xa)*0x3e8;var _0x428431=(_0x16fb22[_0x6195('0x3f')]||0x14)*0x3e8;var _0x1b0e42;if(_0x264e02>_0x428431){_0x428431=_0x264e02;}var _0x1eacda=seqqueue['createQueue'](_0x264e02);_0x1eacda['id']=_0x45e392;_0x1eacda['atimeout']=_0x264e02;_0x1eacda[_0x6195('0x49')]=_0x428431;_0x1eacda['channel']=_0x11618d[_0x6195('0x2a')];_0x35bd25[_0x6195('0x4a')][_0x45e392]['on'](_0x6195('0x4b'),function(){logger[_0x6195('0x31')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x45e392);stopRouting(_0x45e392,_0xb68c0f,_0x11618d,_0x35bd25);clearTimeout(_0x1b0e42);_0x1b0e42=undefined;_0x1eacda[_0x6195('0x4c')](!![]);if(_0x35bd25[_0x6195('0x4a')][_0x45e392]){delete _0x35bd25[_0x6195('0x4a')][_0x45e392];}_0x29bd26[_0x6195('0x46')]();});_0x35bd25['rules'][_0x45e392]['on'](_0x6195('0x4d'),function(){if(_0x35bd25[_0x6195('0x4a')][_0x45e392]){delete _0x35bd25['rules'][_0x45e392];}});_0x1b0e42=setTimeout(function(){logger['info'](_0x6195('0x4e'),_0x45e392);endRouting(_0x45e392,_0xb68c0f,_0x11618d,_0x35bd25);clearTimeout(_0x1b0e42);_0x1eacda['close'](!![]);_0x29bd26[_0x6195('0x4f')]();},_0x428431);switch(_0xb68c0f[_0x6195('0x50')]){case'rrmemory':strategy['rrmemory'](_0x1eacda,_0xb68c0f,_0x35bd25,_0x11618d);break;default:strategy['beepall'](_0x1eacda,_0xb68c0f,_0x35bd25,_0x11618d);}}else{logger[_0x6195('0x36')](_0x6195('0x51'),_0x45e392,_0x16fb22[_0x6195('0x33')]);_0x29bd26['stop']();}}}catch(_0x283025){logger[_0x6195('0x36')]('[%s][QUEUE]\x20%s',_0x45e392,_0x283025[_0x6195('0x52')]);_0x29bd26[_0x6195('0x46')]();}};};