59a42c1a6e7a099a5c64fd7896111d2fb8138745
[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 _0x6368=['body','contact','list','upperFirst','QueueId','channel','interaction','MessageId','message','AccountId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','then','error','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','validate','[%s][QUEUE]\x20%s','join','stop','Queues','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','queue_id','account','queue','from','clone','push','capitalize','InteractionId','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','waiting'];(function(_0x585221,_0xb7e318){var _0x17111b=function(_0x5c9de0){while(--_0x5c9de0){_0x585221['push'](_0x585221['shift']());}};_0x17111b(++_0xb7e318);}(_0x6368,0x187));var _0x8636=function(_0x44b43f,_0x45c0c2){_0x44b43f=_0x44b43f-0x0;var _0xb95bf1=_0x6368[_0x44b43f];return _0xb95bf1;};'use strict';var schema=require('validate');var _=require('lodash');var util=require(_0x8636('0x0'));var seqqueue=require(_0x8636('0x1'));var moment=require(_0x8636('0x2'));var Redis=require(_0x8636('0x3'));var config=require(_0x8636('0x4'));var logger=require(_0x8636('0x5'))(_0x8636('0x6'));var strategy=require(_0x8636('0x7'));config[_0x8636('0x8')]=_[_0x8636('0x9')](config['redis'],{'host':_0x8636('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x8636('0x8')]));var attributes=['id',_0x8636('0xb'),_0x8636('0xc'),_0x8636('0xd'),_0x8636('0xe'),'joinAt'];function emit(_0x3c0cf4,_0x3902a3,_0x59c89c){io['to'](_0x3c0cf4)['emit'](_0x3902a3,_0x59c89c);}function emitChannelQueueInteraction(_0x14ee0e,_0x34fdd4,_0xf19e76,_0x52f21d,_0x513b61,_0x8a5c08,_0x50d991,_0x414c6c){var _0x538b5b=_[_0x8636('0xf')](_0xf19e76);_0x538b5b[_0x8636('0xb')]=_0x414c6c;_0x538b5b[_0x8636('0xd')]=_0x34fdd4;_0x538b5b[_0x8636('0xc')]=_0x52f21d;_0x538b5b['id']=_0x513b61;if(_0x8a5c08){attributes[_0x8636('0x10')](_[_0x8636('0x11')](_0x14ee0e)+_0x8636('0x12'));_0x50d991[util['format'](_0x8636('0x13'),_0x14ee0e)][_0x513b61]=_[_0x8636('0x14')](_0x538b5b,attributes);}else{delete _0x50d991[util[_0x8636('0x15')](_0x8636('0x13'),_0x14ee0e)][_0x513b61];}emit(util[_0x8636('0x15')](_0x8636('0x16'),_0x14ee0e,_0x34fdd4),util['format'](_0x8636('0x17'),_0x14ee0e,_0x8a5c08?_0x8636('0x18'):_0x8636('0x19')),_['pick'](_0x538b5b,attributes));}var rpc={'openchannelQueueReport':require(_0x8636('0x1a')),'mailQueueReport':require(_0x8636('0x1b')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x8636('0x1c')),'faxQueueReport':require(_0x8636('0x1d')),'whatsappQueueReport':require(_0x8636('0x1e')),'chatInteraction':require(_0x8636('0x1f')),'faxInteraction':require(_0x8636('0x20')),'mailInteraction':require(_0x8636('0x21')),'openchannelInteraction':require(_0x8636('0x22')),'smsInteraction':require('../../rpc/smsInteraction'),'whatsappInteraction':require('../../rpc/whatsappInteraction')};var queue=schema({'name':{'type':_0x8636('0x23'),'required':!![],'message':_0x8636('0x24')},'timeout':{'type':_0x8636('0x25'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x454c58,_0x8ba13,_0x1d7d40,_0x256d79){if(_0x454c58&&_0x8ba13&&_0x1d7d40){_0x8ba13[_0x8636('0x26')]+=0x1;var _0x4e48e5={'uniqueid':_0x454c58,'from':_0x1d7d40[_0x8636('0x27')]?_0x1d7d40[_0x8636('0x27')]['from']:'','joinAt':moment()[_0x8636('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x1d7d40['contact']?_0x1d7d40[_0x8636('0x28')]['id']:null,'ListId':_0x1d7d40[_0x8636('0x29')]?_0x1d7d40[_0x8636('0x29')]['id']:null};_0x4e48e5[_[_0x8636('0x2a')](_0x1d7d40['channel'])+_0x8636('0x2b')]=_0x8ba13['id']||null;_0x4e48e5[_[_0x8636('0x2a')](_0x1d7d40[_0x8636('0x2c')])+_0x8636('0x12')]=_0x1d7d40[_0x8636('0x2d')]?_0x1d7d40[_0x8636('0x2d')]['id']:null;_0x4e48e5[_[_0x8636('0x2a')](_0x1d7d40[_0x8636('0x2c')])+_0x8636('0x2e')]=_0x1d7d40[_0x8636('0x2f')]?_0x1d7d40['message']['id']:null;_0x4e48e5[_[_0x8636('0x2a')](_0x1d7d40[_0x8636('0x2c')])+(_0x1d7d40[_0x8636('0x2c')]!=='chat'?_0x8636('0x30'):'WebsiteId')]=_0x1d7d40[_0x8636('0xc')]?_0x1d7d40[_0x8636('0xc')]['id']:null;logger[_0x8636('0x31')](util[_0x8636('0x15')](_0x8636('0x32'),_0x454c58,_0x8ba13[_0x8636('0x33')]));emitChannelQueueInteraction(_0x1d7d40[_0x8636('0x2c')],_0x8ba13[_0x8636('0x33')],_0x4e48e5,_0x1d7d40[_0x8636('0xc')][_0x8636('0x33')],_0x1d7d40['message']['id'],!![],_0x256d79,_0x8ba13['id']);if(rpc[_0x1d7d40[_0x8636('0x2c')]+_0x8636('0x34')]){return rpc[_0x1d7d40[_0x8636('0x2c')]+'QueueReport'][_0x8636('0x35')](_0x4e48e5)[_0x8636('0x36')](function(_0x22b202){logger['error'](_0x8636('0x37'),_0x22b202);});}}}function stopRouting(_0x1c2f3d,_0x4c2103,_0x5a1f4a,_0x11f35e){if(_0x1c2f3d&&_0x4c2103){_0x4c2103[_0x8636('0x26')]-=0x1;var _0x277270={'leaveAt':moment()[_0x8636('0x15')](_0x8636('0x38')),'acceptAt':moment()[_0x8636('0x15')](_0x8636('0x38')),'reason':_0x8636('0x39')};logger[_0x8636('0x31')](util[_0x8636('0x15')](_0x8636('0x3a'),_0x1c2f3d,_0x4c2103[_0x8636('0x33')]));emitChannelQueueInteraction(_0x5a1f4a['channel'],_0x4c2103['name'],_0x5a1f4a['body'],_0x5a1f4a[_0x8636('0xc')][_0x8636('0x33')],_0x5a1f4a['message']['id'],![],_0x11f35e,_0x4c2103['id']);return rpc[_0x5a1f4a[_0x8636('0x2c')]+_0x8636('0x3b')][_0x8636('0x3c')](_0x5a1f4a['interaction']['id'],{'queueId':_0x4c2103['id']})[_0x8636('0x3d')](function(){if(rpc[_0x5a1f4a[_0x8636('0x2c')]+_0x8636('0x34')]){return rpc[_0x5a1f4a['channel']+_0x8636('0x34')][_0x8636('0x3c')](_0x1c2f3d,_0x277270)[_0x8636('0x36')](function(_0x5a04fd){logger[_0x8636('0x3e')](_0x8636('0x3f'),_0x5a04fd);});}});}}function endRouting(_0x7d7e57,_0x808c03,_0x539053,_0x2ee3b3){if(_0x7d7e57&&_0x808c03){_0x808c03[_0x8636('0x26')]-=0x1;var _0x52551f={'leaveAt':moment()[_0x8636('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x8636('0x15')](_0x8636('0x38')),'reason':_0x8636('0x40')};logger['info'](util[_0x8636('0x15')](_0x8636('0x41'),_0x7d7e57,_0x808c03[_0x8636('0x33')]));emitChannelQueueInteraction(_0x539053[_0x8636('0x2c')],_0x808c03[_0x8636('0x33')],_0x539053[_0x8636('0x27')],_0x539053['account'][_0x8636('0x33')],_0x539053[_0x8636('0x2f')]['id'],![],_0x2ee3b3);if(rpc[_0x539053['channel']+_0x8636('0x34')]){return rpc[_0x539053[_0x8636('0x2c')]+_0x8636('0x34')][_0x8636('0x3c')](_0x7d7e57,_0x52551f)[_0x8636('0x36')](function(_0x520c91){logger[_0x8636('0x3e')](_0x8636('0x3f'),_0x520c91);});}}}function handleFindQueue(_0x53bdd4){return function(_0x2ba24e){return _0x2ba24e[_0x8636('0x33')][_0x8636('0x42')]()===_0x53bdd4[_0x8636('0x42')]();};}exports[_0x8636('0x43')]=function(_0x268559,_0x3b2c3d,_0x41d378,_0xbbb9ad){return function(_0x58f917){try{var _0x13d42b={'name':_0x3b2c3d[0x0],'timeout':_0x3b2c3d[0x1]};var _0x49bc6b=queue[_0x8636('0x44')](_0x13d42b,{'typecast':!![]});if(_0x49bc6b['length']){logger['error'](_0x8636('0x45'),_0x268559,_['map'](_0x49bc6b,_0x8636('0x2f'))[_0x8636('0x46')](',\x20'));_0x58f917[_0x8636('0x47')]();}else{var _0x3a7ce5=_['find'](_0x41d378[_0xbbb9ad[_0x8636('0x2c')]+_0x8636('0x48')],handleFindQueue(_0x13d42b[_0x8636('0x33')]));if(_0x3a7ce5){startRouting(_0x268559,_0x3a7ce5,_0xbbb9ad,_0x41d378);var _0x347841=(_0x3a7ce5[_0x8636('0x40')]||0xa)*0x3e8;var _0x34cec2=(_0x13d42b[_0x8636('0x40')]||0x14)*0x3e8;var _0x10d992;if(_0x347841>_0x34cec2){_0x34cec2=_0x347841;}var _0x367830=seqqueue[_0x8636('0x49')](_0x347841);_0x367830['id']=_0x268559;_0x367830[_0x8636('0x4a')]=_0x347841;_0x367830[_0x8636('0x4b')]=_0x34cec2;_0x367830[_0x8636('0x2c')]=_0xbbb9ad[_0x8636('0x2c')];_0x41d378[_0x8636('0x4c')][_0x268559]['on'](_0x8636('0x4d'),function(){logger[_0x8636('0x31')](_0x8636('0x4e'),_0x268559);stopRouting(_0x268559,_0x3a7ce5,_0xbbb9ad,_0x41d378);clearTimeout(_0x10d992);_0x10d992=undefined;_0x367830[_0x8636('0x4f')](!![]);if(_0x41d378[_0x8636('0x4c')][_0x268559]){delete _0x41d378[_0x8636('0x4c')][_0x268559];}_0x58f917['stop']();});_0x41d378['rules'][_0x268559]['on'](_0x8636('0x50'),function(){if(_0x41d378[_0x8636('0x4c')][_0x268559]){delete _0x41d378['rules'][_0x268559];}});_0x10d992=setTimeout(function(){logger[_0x8636('0x31')](_0x8636('0x51'),_0x268559);endRouting(_0x268559,_0x3a7ce5,_0xbbb9ad,_0x41d378);clearTimeout(_0x10d992);_0x367830[_0x8636('0x4f')](!![]);_0x58f917[_0x8636('0x52')]();},_0x34cec2);switch(_0x3a7ce5[_0x8636('0x53')]){case _0x8636('0x54'):strategy[_0x8636('0x54')](_0x367830,_0x3a7ce5,_0x41d378,_0xbbb9ad);break;default:strategy[_0x8636('0x55')](_0x367830,_0x3a7ce5,_0x41d378,_0xbbb9ad);}}else{logger['error']('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x268559,_0x13d42b[_0x8636('0x33')]);_0x58f917[_0x8636('0x47')]();}}}catch(_0x4ba745){logger[_0x8636('0x3e')](_0x8636('0x45'),_0x268559,_0x4ba745['stack']);_0x58f917[_0x8636('0x47')]();}};};