98a12331ff97d9b542a5127eda70441b1ed27222
[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 _0xf131=['strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','seq-queue','../../../../config/logger','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','joinAt','account','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','save','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','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','channel','InteractionId','interaction','MessageId','message','chat','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','stop','find','timeout','createQueue','atimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next'];(function(_0x1712cd,_0x2dcca7){var _0x262485=function(_0x3c2fb9){while(--_0x3c2fb9){_0x1712cd['push'](_0x1712cd['shift']());}};_0x262485(++_0x2dcca7);}(_0xf131,0x19d));var _0x1f13=function(_0x17d85e,_0x2e96b9){_0x17d85e=_0x17d85e-0x0;var _0x1e13a9=_0xf131[_0x17d85e];return _0x1e13a9;};'use strict';var schema=require(_0x1f13('0x0'));var _=require(_0x1f13('0x1'));var util=require('util');var seqqueue=require(_0x1f13('0x2'));var moment=require('moment');var Redis=require('ioredis');var config=require('../../../../config/environment');var logger=require(_0x1f13('0x3'))('routing');var strategy=require(_0x1f13('0x4'));config[_0x1f13('0x5')]=_[_0x1f13('0x6')](config['redis'],{'host':_0x1f13('0x7'),'port':0x18eb});var io=require(_0x1f13('0x8'))(new Redis(config['redis']));var attributes=['id',_0x1f13('0x9'),'account','queue','from',_0x1f13('0xa')];function emit(_0x5517d7,_0x46b3d0,_0x21eab7){io['to'](_0x5517d7)['emit'](_0x46b3d0,_0x21eab7);}function emitChannelQueueInteraction(_0x4911e2,_0x1f9783,_0xe8ddc3,_0x261e36,_0x371540,_0x119a90,_0x57822a,_0xdd88d9){var _0x5183c0=_['clone'](_0xe8ddc3);_0x5183c0[_0x1f13('0x9')]=_0xdd88d9;_0x5183c0['queue']=_0x1f9783;_0x5183c0[_0x1f13('0xb')]=_0x261e36;_0x5183c0['id']=_0x371540;if(_0x119a90){_0x57822a[util['format'](_0x1f13('0xc'),_0x4911e2)][_0x371540]=_[_0x1f13('0xd')](_0x5183c0,attributes);}else{delete _0x57822a[util[_0x1f13('0xe')](_0x1f13('0xc'),_0x4911e2)][_0x371540];}emit(util[_0x1f13('0xe')](_0x1f13('0xf'),_0x4911e2,_0x1f9783),util['format']('%s_queue_waiting_interaction:%s',_0x4911e2,_0x119a90?_0x1f13('0x10'):'remove'),_[_0x1f13('0xd')](_0x5183c0,attributes));}var rpc={'openchannelQueueReport':require(_0x1f13('0x11')),'mailQueueReport':require(_0x1f13('0x12')),'chatQueueReport':require(_0x1f13('0x13')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x1f13('0x14')),'whatsappQueueReport':require(_0x1f13('0x15'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x1f13('0x16')},'timeout':{'type':_0x1f13('0x17'),'message':_0x1f13('0x18')}});function startRouting(_0x33b6cf,_0x4f737b,_0x1cf1dc,_0x48a148){if(_0x33b6cf&&_0x4f737b&&_0x1cf1dc){_0x4f737b[_0x1f13('0x19')]+=0x1;var _0x1b795a={'uniqueid':_0x33b6cf,'from':_0x1cf1dc[_0x1f13('0x1a')]?_0x1cf1dc[_0x1f13('0x1a')][_0x1f13('0x1b')]:'','joinAt':moment()[_0x1f13('0xe')](_0x1f13('0x1c')),'ContactId':_0x1cf1dc[_0x1f13('0x1d')]?_0x1cf1dc[_0x1f13('0x1d')]['id']:null,'ListId':_0x1cf1dc[_0x1f13('0x1e')]?_0x1cf1dc[_0x1f13('0x1e')]['id']:null};_0x1b795a[_[_0x1f13('0x1f')](_0x1cf1dc[_0x1f13('0x20')])+'QueueId']=_0x4f737b['id']||null;_0x1b795a[_['upperFirst'](_0x1cf1dc['channel'])+_0x1f13('0x21')]=_0x1cf1dc[_0x1f13('0x22')]?_0x1cf1dc['interaction']['id']:null;_0x1b795a[_[_0x1f13('0x1f')](_0x1cf1dc[_0x1f13('0x20')])+_0x1f13('0x23')]=_0x1cf1dc[_0x1f13('0x24')]?_0x1cf1dc['message']['id']:null;_0x1b795a[_[_0x1f13('0x1f')](_0x1cf1dc[_0x1f13('0x20')])+(_0x1cf1dc[_0x1f13('0x20')]!==_0x1f13('0x25')?'AccountId':'WebsiteId')]=_0x1cf1dc['account']?_0x1cf1dc[_0x1f13('0xb')]['id']:null;logger[_0x1f13('0x26')](util[_0x1f13('0xe')](_0x1f13('0x27'),_0x33b6cf,_0x4f737b['name']));emitChannelQueueInteraction(_0x1cf1dc['channel'],_0x4f737b[_0x1f13('0x28')],_0x1b795a,_0x1cf1dc[_0x1f13('0xb')][_0x1f13('0x28')],_0x1cf1dc[_0x1f13('0x24')]['id'],!![],_0x48a148,_0x4f737b['id']);if(rpc[_0x1cf1dc[_0x1f13('0x20')]+'QueueReport']){return rpc[_0x1cf1dc[_0x1f13('0x20')]+_0x1f13('0x29')][_0x1f13('0x2a')](_0x1b795a)[_0x1f13('0x2b')](function(_0x999dc2){logger[_0x1f13('0x2c')]('create\x20queue\x20report');});}}}function stopRouting(_0x2eb22e,_0x1ebb4d,_0x1e3849,_0x4dd25f){if(_0x2eb22e&&_0x1ebb4d){_0x1ebb4d[_0x1f13('0x19')]-=0x1;var _0x165521={'leaveAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x1f13('0xe')](_0x1f13('0x1c')),'reason':'accepted'};logger[_0x1f13('0x26')](util['format'](_0x1f13('0x2d'),_0x2eb22e,_0x1ebb4d[_0x1f13('0x28')]));emitChannelQueueInteraction(_0x1e3849[_0x1f13('0x20')],_0x1ebb4d['name'],_0x1e3849[_0x1f13('0x1a')],_0x1e3849[_0x1f13('0xb')][_0x1f13('0x28')],_0x1e3849[_0x1f13('0x24')]['id'],![],_0x4dd25f,_0x1ebb4d['id']);if(rpc[_0x1e3849[_0x1f13('0x20')]+_0x1f13('0x29')]){return rpc[_0x1e3849['channel']+_0x1f13('0x29')]['update'](_0x2eb22e,_0x165521)[_0x1f13('0x2b')](function(_0xae015f){logger[_0x1f13('0x2c')](_0x1f13('0x2e'));});}}}function endRouting(_0x2a826e,_0xdfe333,_0x39e7f6,_0x352911){if(_0x2a826e&&_0xdfe333){_0xdfe333[_0x1f13('0x19')]-=0x1;var _0x48e817={'leaveAt':moment()['format'](_0x1f13('0x1c')),'exitAt':moment()[_0x1f13('0xe')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0x1f13('0x26')](util[_0x1f13('0xe')]('[%s][END:QUEUE][NAME:%s]',_0x2a826e,_0xdfe333[_0x1f13('0x28')]));emitChannelQueueInteraction(_0x39e7f6['channel'],_0xdfe333[_0x1f13('0x28')],_0x39e7f6[_0x1f13('0x1a')],_0x39e7f6['account']['name'],_0x39e7f6[_0x1f13('0x24')]['id'],![],_0x352911);if(rpc[_0x39e7f6[_0x1f13('0x20')]+_0x1f13('0x29')]){return rpc[_0x39e7f6[_0x1f13('0x20')]+_0x1f13('0x29')]['update'](_0x2a826e,_0x48e817)[_0x1f13('0x2b')](function(_0xb1cd1f){logger['error'](_0x1f13('0x2e'));});}}}function handleFindQueue(_0x50713b){return function(_0x12b957){return _0x12b957[_0x1f13('0x28')][_0x1f13('0x2f')]()===_0x50713b['toLowerCase']();};}exports[_0x1f13('0x30')]=function(_0x549b06,_0x2e7e4f,_0x5d01b6,_0x4caaf8){return function(_0x340bc5){try{var _0x1049af={'name':_0x2e7e4f[0x0],'timeout':_0x2e7e4f[0x1]};var _0x581d16=queue[_0x1f13('0x0')](_0x1049af,{'typecast':!![]});if(_0x581d16[_0x1f13('0x31')]){logger[_0x1f13('0x2c')](_0x1f13('0x32'),_0x549b06,_['map'](_0x581d16,_0x1f13('0x24'))['join'](',\x20'));_0x340bc5[_0x1f13('0x33')]();}else{var _0x38991e=_[_0x1f13('0x34')](_0x5d01b6[_0x4caaf8[_0x1f13('0x20')]+'Queues'],handleFindQueue(_0x1049af[_0x1f13('0x28')]));if(_0x38991e){startRouting(_0x549b06,_0x38991e,_0x4caaf8,_0x5d01b6);var _0x1acd7a=(_0x38991e[_0x1f13('0x35')]||0xa)*0x3e8;var _0x2e368e=(_0x1049af['timeout']||0x14)*0x3e8;var _0x501e4c,_0xad0b97;if(_0x1acd7a>_0x2e368e){_0x2e368e=_0x1acd7a;}var _0x31019e=seqqueue[_0x1f13('0x36')](_0x1acd7a);_0x31019e['id']=_0x549b06;_0x31019e[_0x1f13('0x37')]=_0x1acd7a;_0x31019e['qtimeout']=_0x2e368e;_0x31019e[_0x1f13('0x20')]=_0x4caaf8[_0x1f13('0x20')];_0x5d01b6['rules'][_0x549b06]['on'](_0x1f13('0x38'),function(){logger[_0x1f13('0x26')](_0x1f13('0x39'),_0x549b06);stopRouting(_0x549b06,_0x38991e,_0x4caaf8,_0x5d01b6);clearTimeout(_0x501e4c);_0x501e4c=undefined;_0x31019e[_0x1f13('0x3a')](!![]);if(_0x5d01b6['rules'][_0x549b06]){delete _0x5d01b6[_0x1f13('0x3b')][_0x549b06];}_0x340bc5[_0x1f13('0x33')]();});_0x5d01b6[_0x1f13('0x3b')][_0x549b06]['on'](_0x1f13('0x3c'),function(){if(_0x5d01b6[_0x1f13('0x3b')][_0x549b06]){delete _0x5d01b6[_0x1f13('0x3b')][_0x549b06];}});_0x501e4c=setTimeout(function(){logger[_0x1f13('0x26')](_0x1f13('0x3d'),_0x549b06);endRouting(_0x549b06,_0x38991e,_0x4caaf8,_0x5d01b6);clearTimeout(_0x501e4c);_0x31019e['close'](!![]);_0x340bc5[_0x1f13('0x3e')]();},_0x2e368e);switch(_0x38991e[_0x1f13('0x3f')]){case _0x1f13('0x40'):strategy[_0x1f13('0x40')](_0x31019e,_0x38991e,_0x5d01b6,_0x4caaf8);break;default:strategy['beepall'](_0x31019e,_0x38991e,_0x5d01b6,_0x4caaf8);}}else{logger['error'](_0x1f13('0x41'),_0x549b06,_0x1049af[_0x1f13('0x28')]);_0x340bc5[_0x1f13('0x33')]();}}}catch(_0x2fcc3f){console[_0x1f13('0x42')](_0x2fcc3f);logger[_0x1f13('0x2c')](_0x1f13('0x32'),_0x549b06,_0x2fcc3f[_0x1f13('0x43')]);_0x340bc5['stop']();}};};