0dfb5d4dc299977b943241d61d5ceb50ad4c6466
[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 _0x0e0f=['stack','validate','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','./strategy','redis','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','emit','clone','pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','info','format','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','consequence','[%s][QUEUE]\x20%s','join','stop','find','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','strategy','rrmemory','log'];(function(_0x3f3f18,_0x52da8e){var _0xf9916=function(_0x1b2686){while(--_0x1b2686){_0x3f3f18['push'](_0x3f3f18['shift']());}};_0xf9916(++_0x52da8e);}(_0x0e0f,0xe5));var _0xf0e0=function(_0x16654c,_0x159dc5){_0x16654c=_0x16654c-0x0;var _0x157cd5=_0x0e0f[_0x16654c];return _0x157cd5;};'use strict';var schema=require(_0xf0e0('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require(_0xf0e0('0x1'));var moment=require(_0xf0e0('0x2'));var Redis=require(_0xf0e0('0x3'));var config=require(_0xf0e0('0x4'));var logger=require(_0xf0e0('0x5'))('routing');var strategy=require(_0xf0e0('0x6'));config[_0xf0e0('0x7')]=_['defaults'](config[_0xf0e0('0x7')],{'host':_0xf0e0('0x8'),'port':0x18eb});var io=require(_0xf0e0('0x9'))(new Redis(config[_0xf0e0('0x7')]));var attributes=['id',_0xf0e0('0xa'),_0xf0e0('0xb'),_0xf0e0('0xc'),_0xf0e0('0xd'),_0xf0e0('0xe')];function emit(_0x4d2f73,_0xed8cc3,_0x47fb29){io['to'](_0x4d2f73)[_0xf0e0('0xf')](_0xed8cc3,_0x47fb29);}function emitChannelQueueInteraction(_0x3e890d,_0x28397d,_0x55d54c,_0x59b7b7,_0x533eeb,_0x4a01b3,_0x10e087,_0x4931a8){var _0x501c86=_[_0xf0e0('0x10')](_0x55d54c);_0x501c86['queue_id']=_0x4931a8;_0x501c86[_0xf0e0('0xc')]=_0x28397d;_0x501c86[_0xf0e0('0xb')]=_0x59b7b7;_0x501c86['id']=_0x533eeb;if(_0x4a01b3){_0x10e087[util['format']('%sQueuesWaitingInteractions',_0x3e890d)][_0x533eeb]=_[_0xf0e0('0x11')](_0x501c86,attributes);}else{delete _0x10e087[util['format'](_0xf0e0('0x12'),_0x3e890d)][_0x533eeb];}emit(util['format'](_0xf0e0('0x13'),_0x3e890d,_0x28397d),util['format'](_0xf0e0('0x14'),_0x3e890d,_0x4a01b3?_0xf0e0('0x15'):'remove'),_[_0xf0e0('0x11')](_0x501c86,attributes));}var rpc={'openchannelQueueReport':require(_0xf0e0('0x16')),'mailQueueReport':require(_0xf0e0('0x17')),'chatQueueReport':require(_0xf0e0('0x18')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0xf0e0('0x19')),'whatsappQueueReport':require(_0xf0e0('0x1a'))};var queue=schema({'name':{'type':'string','required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xf0e0('0x1b'),'message':_0xf0e0('0x1c')}});function startRouting(_0x51c8c8,_0x207c23,_0x5e84f3,_0x5bdf6c){if(_0x51c8c8&&_0x207c23&&_0x5e84f3){_0x207c23['waiting']+=0x1;var _0x350649={'uniqueid':_0x51c8c8,'from':_0x5e84f3[_0xf0e0('0x1d')]?_0x5e84f3['body']['from']:'','joinAt':moment()['format'](_0xf0e0('0x1e')),'ContactId':_0x5e84f3['contact']?_0x5e84f3['contact']['id']:null,'ListId':_0x5e84f3['list']?_0x5e84f3['list']['id']:null};_0x350649[_[_0xf0e0('0x1f')](_0x5e84f3[_0xf0e0('0x20')])+_0xf0e0('0x21')]=_0x207c23['id']||null;_0x350649[_[_0xf0e0('0x1f')](_0x5e84f3['channel'])+_0xf0e0('0x22')]=_0x5e84f3[_0xf0e0('0x23')]?_0x5e84f3['interaction']['id']:null;_0x350649[_[_0xf0e0('0x1f')](_0x5e84f3['channel'])+_0xf0e0('0x24')]=_0x5e84f3[_0xf0e0('0x25')]?_0x5e84f3['message']['id']:null;_0x350649[_[_0xf0e0('0x1f')](_0x5e84f3[_0xf0e0('0x20')])+(_0x5e84f3['channel']!==_0xf0e0('0x26')?_0xf0e0('0x27'):_0xf0e0('0x28'))]=_0x5e84f3[_0xf0e0('0xb')]?_0x5e84f3[_0xf0e0('0xb')]['id']:null;logger[_0xf0e0('0x29')](util[_0xf0e0('0x2a')](_0xf0e0('0x2b'),_0x51c8c8,_0x207c23[_0xf0e0('0x2c')]));emitChannelQueueInteraction(_0x5e84f3[_0xf0e0('0x20')],_0x207c23[_0xf0e0('0x2c')],_0x350649,_0x5e84f3['account'][_0xf0e0('0x2c')],_0x5e84f3['message']['id'],!![],_0x5bdf6c,_0x207c23['id']);if(rpc[_0x5e84f3[_0xf0e0('0x20')]+'QueueReport']){return rpc[_0x5e84f3[_0xf0e0('0x20')]+_0xf0e0('0x2d')][_0xf0e0('0x2e')](_0x350649)[_0xf0e0('0x2f')](function(_0x5b21f2){logger[_0xf0e0('0x30')](_0xf0e0('0x31'));});}}}function stopRouting(_0x45d005,_0x2ca25b,_0x51f10b,_0x1c2c16){if(_0x45d005&&_0x2ca25b){_0x2ca25b[_0xf0e0('0x32')]-=0x1;var _0x1929ac={'leaveAt':moment()[_0xf0e0('0x2a')](_0xf0e0('0x1e')),'acceptAt':moment()['format'](_0xf0e0('0x1e')),'reason':_0xf0e0('0x33')};logger[_0xf0e0('0x29')](util[_0xf0e0('0x2a')](_0xf0e0('0x34'),_0x45d005,_0x2ca25b['name']));emitChannelQueueInteraction(_0x51f10b[_0xf0e0('0x20')],_0x2ca25b[_0xf0e0('0x2c')],_0x51f10b['body'],_0x51f10b[_0xf0e0('0xb')][_0xf0e0('0x2c')],_0x51f10b[_0xf0e0('0x25')]['id'],![],_0x1c2c16,_0x2ca25b['id']);if(rpc[_0x51f10b[_0xf0e0('0x20')]+_0xf0e0('0x2d')]){return rpc[_0x51f10b[_0xf0e0('0x20')]+_0xf0e0('0x2d')]['update'](_0x45d005,_0x1929ac)[_0xf0e0('0x2f')](function(_0x414432){logger[_0xf0e0('0x30')](_0xf0e0('0x35'));});}}}function endRouting(_0x35f06f,_0x184dfc,_0x55de65,_0x56b47f){if(_0x35f06f&&_0x184dfc){_0x184dfc[_0xf0e0('0x32')]-=0x1;var _0x5addaf={'leaveAt':moment()[_0xf0e0('0x2a')](_0xf0e0('0x1e')),'exitAt':moment()[_0xf0e0('0x2a')](_0xf0e0('0x1e')),'reason':'timeout'};logger['info'](util[_0xf0e0('0x2a')](_0xf0e0('0x36'),_0x35f06f,_0x184dfc[_0xf0e0('0x2c')]));emitChannelQueueInteraction(_0x55de65[_0xf0e0('0x20')],_0x184dfc[_0xf0e0('0x2c')],_0x55de65[_0xf0e0('0x1d')],_0x55de65[_0xf0e0('0xb')][_0xf0e0('0x2c')],_0x55de65[_0xf0e0('0x25')]['id'],![],_0x56b47f);if(rpc[_0x55de65[_0xf0e0('0x20')]+'QueueReport']){return rpc[_0x55de65['channel']+_0xf0e0('0x2d')][_0xf0e0('0x37')](_0x35f06f,_0x5addaf)[_0xf0e0('0x2f')](function(_0x3a3b63){logger[_0xf0e0('0x30')](_0xf0e0('0x35'));});}}}function handleFindQueue(_0x131e45){return function(_0x395b02){return _0x395b02[_0xf0e0('0x2c')]['toLowerCase']()===_0x131e45[_0xf0e0('0x38')]();};}exports[_0xf0e0('0x39')]=function(_0x58a046,_0x15e924,_0x20ab51,_0x335012){return function(_0x51e2fe){try{var _0x45fea9={'name':_0x15e924[0x0],'timeout':_0x15e924[0x1]};var _0x5b099a=queue['validate'](_0x45fea9,{'typecast':!![]});if(_0x5b099a['length']){logger['error'](_0xf0e0('0x3a'),_0x58a046,_['map'](_0x5b099a,_0xf0e0('0x25'))[_0xf0e0('0x3b')](',\x20'));_0x51e2fe[_0xf0e0('0x3c')]();}else{var _0x5c654e=_[_0xf0e0('0x3d')](_0x20ab51[_0x335012['channel']+'Queues'],handleFindQueue(_0x45fea9[_0xf0e0('0x2c')]));if(_0x5c654e){startRouting(_0x58a046,_0x5c654e,_0x335012,_0x20ab51);var _0x5a458d=(_0x5c654e['timeout']||0xa)*0x3e8;var _0x14b7d1=(_0x45fea9[_0xf0e0('0x3e')]||0x14)*0x3e8;var _0x4e8cb9,_0x5af675;if(_0x5a458d>_0x14b7d1){_0x14b7d1=_0x5a458d;}var _0x4fbed0=seqqueue[_0xf0e0('0x3f')](_0x5a458d);_0x4fbed0['id']=_0x58a046;_0x4fbed0[_0xf0e0('0x40')]=_0x5a458d;_0x4fbed0[_0xf0e0('0x41')]=_0x14b7d1;_0x4fbed0[_0xf0e0('0x20')]=_0x335012[_0xf0e0('0x20')];_0x20ab51[_0xf0e0('0x42')][_0x58a046]['on'](_0xf0e0('0x43'),function(){logger['info'](_0xf0e0('0x44'),_0x58a046);stopRouting(_0x58a046,_0x5c654e,_0x335012,_0x20ab51);clearTimeout(_0x4e8cb9);_0x4e8cb9=undefined;_0x4fbed0[_0xf0e0('0x45')](!![]);if(_0x20ab51[_0xf0e0('0x42')][_0x58a046]){delete _0x20ab51[_0xf0e0('0x42')][_0x58a046];}_0x51e2fe[_0xf0e0('0x3c')]();});_0x20ab51['rules'][_0x58a046]['on'](_0xf0e0('0x46'),function(){if(_0x20ab51[_0xf0e0('0x42')][_0x58a046]){delete _0x20ab51['rules'][_0x58a046];}});_0x4e8cb9=setTimeout(function(){logger['info'](_0xf0e0('0x47'),_0x58a046);endRouting(_0x58a046,_0x5c654e,_0x335012,_0x20ab51);clearTimeout(_0x4e8cb9);_0x4fbed0['close'](!![]);_0x51e2fe['next']();},_0x14b7d1);switch(_0x5c654e[_0xf0e0('0x48')]){case _0xf0e0('0x49'):strategy[_0xf0e0('0x49')](_0x4fbed0,_0x5c654e,_0x20ab51,_0x335012);break;default:strategy['beepall'](_0x4fbed0,_0x5c654e,_0x20ab51,_0x335012);}}else{logger[_0xf0e0('0x30')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x58a046,_0x45fea9[_0xf0e0('0x2c')]);_0x51e2fe['stop']();}}}catch(_0x35100a){console[_0xf0e0('0x4a')](_0x35100a);logger['error']('[%s][QUEUE]\x20%s',_0x58a046,_0x35100a[_0xf0e0('0x4b')]);_0x51e2fe[_0xf0e0('0x3c')]();}};};