3ff3b39a925a8da9c0f4902abd70343be6b48603
[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 _0x40b6=['stack','validate','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','queue_id','account','from','joinAt','emit','clone','queue','push','capitalize','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','YYYY-MM-DD\x20HH:mm:ss','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','stop','Queues','timeout','createQueue','atimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s'];(function(_0x3af384,_0x2b2160){var _0x194aad=function(_0x39c9e4){while(--_0x39c9e4){_0x3af384['push'](_0x3af384['shift']());}};_0x194aad(++_0x2b2160);}(_0x40b6,0xf7));var _0x640b=function(_0x397cfb,_0xb8f317){_0x397cfb=_0x397cfb-0x0;var _0x15fed9=_0x40b6[_0x397cfb];return _0x15fed9;};'use strict';var schema=require(_0x640b('0x0'));var _=require('lodash');var util=require(_0x640b('0x1'));var seqqueue=require(_0x640b('0x2'));var moment=require(_0x640b('0x3'));var Redis=require(_0x640b('0x4'));var config=require(_0x640b('0x5'));var logger=require(_0x640b('0x6'))(_0x640b('0x7'));var strategy=require(_0x640b('0x8'));config[_0x640b('0x9')]=_[_0x640b('0xa')](config['redis'],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x640b('0x9')]));var attributes=['id',_0x640b('0xb'),_0x640b('0xc'),'queue',_0x640b('0xd'),_0x640b('0xe')];function emit(_0x360ebf,_0x5676fa,_0x44d587){io['to'](_0x360ebf)[_0x640b('0xf')](_0x5676fa,_0x44d587);}function emitChannelQueueInteraction(_0xe0bce5,_0x36574a,_0x58beec,_0x176fd1,_0x24d939,_0x9b2b6d,_0x18b3d2,_0x5d04a9){var _0x666b54=_[_0x640b('0x10')](_0x58beec);_0x666b54['queue_id']=_0x5d04a9;_0x666b54[_0x640b('0x11')]=_0x36574a;_0x666b54[_0x640b('0xc')]=_0x176fd1;_0x666b54['id']=_0x24d939;if(_0x9b2b6d){attributes[_0x640b('0x12')](_[_0x640b('0x13')](_0xe0bce5)+'InteractionId');_0x18b3d2[util[_0x640b('0x14')](_0x640b('0x15'),_0xe0bce5)][_0x24d939]=_[_0x640b('0x16')](_0x666b54,attributes);}else{delete _0x18b3d2[util[_0x640b('0x14')](_0x640b('0x15'),_0xe0bce5)][_0x24d939];}emit(util[_0x640b('0x14')](_0x640b('0x17'),_0xe0bce5,_0x36574a),util[_0x640b('0x14')](_0x640b('0x18'),_0xe0bce5,_0x9b2b6d?_0x640b('0x19'):'remove'),_[_0x640b('0x16')](_0x666b54,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x640b('0x1a')),'smsQueueReport':require(_0x640b('0x1b')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require('../../rpc/whatsappQueueReport'),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0x640b('0x1c')),'mailInteraction':require(_0x640b('0x1d')),'openchannelInteraction':require(_0x640b('0x1e')),'smsInteraction':require('../../rpc/smsInteraction'),'whatsappInteraction':require(_0x640b('0x1f'))};var queue=schema({'name':{'type':_0x640b('0x20'),'required':!![],'message':_0x640b('0x21')},'timeout':{'type':_0x640b('0x22'),'message':_0x640b('0x23')}});function startRouting(_0x20d150,_0x1f0663,_0x6991ed,_0x17717e){if(_0x20d150&&_0x1f0663&&_0x6991ed){_0x1f0663[_0x640b('0x24')]+=0x1;var _0x2439a7={'uniqueid':_0x20d150,'from':_0x6991ed[_0x640b('0x25')]?_0x6991ed['body'][_0x640b('0xd')]:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x6991ed[_0x640b('0x26')]?_0x6991ed[_0x640b('0x26')]['id']:null,'ListId':_0x6991ed[_0x640b('0x27')]?_0x6991ed[_0x640b('0x27')]['id']:null};_0x2439a7[_[_0x640b('0x28')](_0x6991ed[_0x640b('0x29')])+_0x640b('0x2a')]=_0x1f0663['id']||null;_0x2439a7[_['upperFirst'](_0x6991ed[_0x640b('0x29')])+_0x640b('0x2b')]=_0x6991ed[_0x640b('0x2c')]?_0x6991ed[_0x640b('0x2c')]['id']:null;_0x2439a7[_[_0x640b('0x28')](_0x6991ed[_0x640b('0x29')])+_0x640b('0x2d')]=_0x6991ed[_0x640b('0x2e')]?_0x6991ed[_0x640b('0x2e')]['id']:null;_0x2439a7[_[_0x640b('0x28')](_0x6991ed[_0x640b('0x29')])+(_0x6991ed[_0x640b('0x29')]!==_0x640b('0x2f')?'AccountId':_0x640b('0x30'))]=_0x6991ed['account']?_0x6991ed['account']['id']:null;logger[_0x640b('0x31')](util[_0x640b('0x14')](_0x640b('0x32'),_0x20d150,_0x1f0663['name']));emitChannelQueueInteraction(_0x6991ed[_0x640b('0x29')],_0x1f0663[_0x640b('0x33')],_0x2439a7,_0x6991ed[_0x640b('0xc')]['name'],_0x6991ed[_0x640b('0x2e')]['id'],!![],_0x17717e,_0x1f0663['id']);if(rpc[_0x6991ed[_0x640b('0x29')]+_0x640b('0x34')]){return rpc[_0x6991ed[_0x640b('0x29')]+_0x640b('0x34')][_0x640b('0x35')](_0x2439a7)[_0x640b('0x36')](function(_0x313c6a){logger[_0x640b('0x37')]('create\x20queue\x20report',_0x313c6a);});}}}function stopRouting(_0x22b16e,_0x24e7cf,_0x39e17d,_0x14df43){if(_0x22b16e&&_0x24e7cf){_0x24e7cf[_0x640b('0x24')]-=0x1;var _0x4cfb7c={'leaveAt':moment()[_0x640b('0x14')](_0x640b('0x38')),'acceptAt':moment()[_0x640b('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'accepted'};logger['info'](util['format'](_0x640b('0x39'),_0x22b16e,_0x24e7cf[_0x640b('0x33')]));emitChannelQueueInteraction(_0x39e17d['channel'],_0x24e7cf[_0x640b('0x33')],_0x39e17d[_0x640b('0x25')],_0x39e17d['account'][_0x640b('0x33')],_0x39e17d[_0x640b('0x2e')]['id'],![],_0x14df43,_0x24e7cf['id']);return rpc[_0x39e17d[_0x640b('0x29')]+_0x640b('0x3a')]['update'](_0x39e17d['interaction']['id'],{'queueId':_0x24e7cf['id']})['then'](function(){if(rpc[_0x39e17d['channel']+_0x640b('0x34')]){return rpc[_0x39e17d[_0x640b('0x29')]+_0x640b('0x34')][_0x640b('0x3b')](_0x22b16e,_0x4cfb7c)[_0x640b('0x36')](function(_0x233885){logger['error']('update\x20queue\x20report',_0x233885);});}});}}function endRouting(_0x20d3c7,_0x147de9,_0x130936,_0x3a166e){if(_0x20d3c7&&_0x147de9){_0x147de9[_0x640b('0x24')]-=0x1;var _0x41f4e7={'leaveAt':moment()[_0x640b('0x14')](_0x640b('0x38')),'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0x640b('0x31')](util[_0x640b('0x14')]('[%s][END:QUEUE][NAME:%s]',_0x20d3c7,_0x147de9[_0x640b('0x33')]));emitChannelQueueInteraction(_0x130936[_0x640b('0x29')],_0x147de9['name'],_0x130936[_0x640b('0x25')],_0x130936[_0x640b('0xc')][_0x640b('0x33')],_0x130936['message']['id'],![],_0x3a166e);if(rpc[_0x130936['channel']+'QueueReport']){return rpc[_0x130936['channel']+_0x640b('0x34')][_0x640b('0x3b')](_0x20d3c7,_0x41f4e7)[_0x640b('0x36')](function(_0x5dfe23){logger[_0x640b('0x37')]('update\x20queue\x20report',_0x5dfe23);});}}}function handleFindQueue(_0x36d840){return function(_0x677eab){return _0x677eab['name'][_0x640b('0x3c')]()===_0x36d840[_0x640b('0x3c')]();};}exports[_0x640b('0x3d')]=function(_0x1981fd,_0x54c354,_0x16a866,_0x5337d0){return function(_0x26e6f1){try{var _0x5a0ca0={'name':_0x54c354[0x0],'timeout':_0x54c354[0x1]};var _0x4d7232=queue['validate'](_0x5a0ca0,{'typecast':!![]});if(_0x4d7232[_0x640b('0x3e')]){logger[_0x640b('0x37')](_0x640b('0x3f'),_0x1981fd,_[_0x640b('0x40')](_0x4d7232,_0x640b('0x2e'))[_0x640b('0x41')](',\x20'));_0x26e6f1[_0x640b('0x42')]();}else{var _0x4a178d=_['find'](_0x16a866[_0x5337d0['channel']+_0x640b('0x43')],handleFindQueue(_0x5a0ca0['name']));if(_0x4a178d){startRouting(_0x1981fd,_0x4a178d,_0x5337d0,_0x16a866);var _0x4124f9=(_0x4a178d[_0x640b('0x44')]||0xa)*0x3e8;var _0x36c02e=(_0x5a0ca0['timeout']||0x14)*0x3e8;var _0x574fed;if(_0x4124f9>_0x36c02e){_0x36c02e=_0x4124f9;}var _0x201007=seqqueue[_0x640b('0x45')](_0x4124f9);_0x201007['id']=_0x1981fd;_0x201007[_0x640b('0x46')]=_0x4124f9;_0x201007['qtimeout']=_0x36c02e;_0x201007[_0x640b('0x29')]=_0x5337d0[_0x640b('0x29')];_0x16a866['rules'][_0x1981fd]['on'](_0x640b('0x47'),function(){logger[_0x640b('0x31')](_0x640b('0x48'),_0x1981fd);stopRouting(_0x1981fd,_0x4a178d,_0x5337d0,_0x16a866);clearTimeout(_0x574fed);_0x574fed=undefined;_0x201007[_0x640b('0x49')](!![]);if(_0x16a866[_0x640b('0x4a')][_0x1981fd]){delete _0x16a866[_0x640b('0x4a')][_0x1981fd];}_0x26e6f1['stop']();});_0x16a866['rules'][_0x1981fd]['on'](_0x640b('0x4b'),function(){if(_0x16a866[_0x640b('0x4a')][_0x1981fd]){delete _0x16a866[_0x640b('0x4a')][_0x1981fd];}});_0x574fed=setTimeout(function(){logger[_0x640b('0x31')](_0x640b('0x4c'),_0x1981fd);endRouting(_0x1981fd,_0x4a178d,_0x5337d0,_0x16a866);clearTimeout(_0x574fed);_0x201007['close'](!![]);_0x26e6f1[_0x640b('0x4d')]();},_0x36c02e);switch(_0x4a178d['strategy']){case _0x640b('0x4e'):strategy[_0x640b('0x4e')](_0x201007,_0x4a178d,_0x16a866,_0x5337d0);break;default:strategy[_0x640b('0x4f')](_0x201007,_0x4a178d,_0x16a866,_0x5337d0);}}else{logger[_0x640b('0x37')](_0x640b('0x50'),_0x1981fd,_0x5a0ca0[_0x640b('0x33')]);_0x26e6f1['stop']();}}}catch(_0x2fe464){logger['error'](_0x640b('0x3f'),_0x1981fd,_0x2fe464[_0x640b('0x51')]);_0x26e6f1[_0x640b('0x42')]();}};};