f0b348f14e3b74f748bb35b9ab7645ba80c910db
[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 _0x57fc=['map','join','stop','find','Queues','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','complete','[%s][QUEUE]\x20APPLICATION\x20END','close','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','redis','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','emit','clone','capitalize','InteractionId','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','channel','QueueId','interaction','MessageId','message','upperFirst','chat','AccountId','WebsiteId','info','name','error','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','then','QueueReport','update\x20queue\x20report','timeout','catch','toLowerCase','consequence','length','[%s][QUEUE]\x20%s'];(function(_0x20dbd2,_0x36b81e){var _0x263284=function(_0x223332){while(--_0x223332){_0x20dbd2['push'](_0x20dbd2['shift']());}};_0x263284(++_0x36b81e);}(_0x57fc,0x1c9));var _0xc57f=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x57fc[_0x20a584];return _0x4b41a8;};'use strict';var schema=require(_0xc57f('0x0'));var _=require('lodash');var util=require(_0xc57f('0x1'));var seqqueue=require(_0xc57f('0x2'));var moment=require(_0xc57f('0x3'));var Redis=require(_0xc57f('0x4'));var config=require(_0xc57f('0x5'));var logger=require(_0xc57f('0x6'))(_0xc57f('0x7'));var strategy=require('./strategy');config[_0xc57f('0x8')]=_['defaults'](config['redis'],{'host':_0xc57f('0x9'),'port':0x18eb});var io=require(_0xc57f('0xa'))(new Redis(config[_0xc57f('0x8')]));var attributes=['id',_0xc57f('0xb'),_0xc57f('0xc'),_0xc57f('0xd'),_0xc57f('0xe'),_0xc57f('0xf')];function emit(_0x3ce12d,_0x379b45,_0x285c21){io['to'](_0x3ce12d)[_0xc57f('0x10')](_0x379b45,_0x285c21);}function emitChannelQueueInteraction(_0x533d06,_0x47b852,_0x153a17,_0x18a3bd,_0x5a73a3,_0x2446c5,_0xcf0b45,_0x4cf64a){var _0x4e40ad=_[_0xc57f('0x11')](_0x153a17);_0x4e40ad[_0xc57f('0xb')]=_0x4cf64a;_0x4e40ad[_0xc57f('0xd')]=_0x47b852;_0x4e40ad[_0xc57f('0xc')]=_0x18a3bd;_0x4e40ad['id']=_0x5a73a3;if(_0x2446c5){attributes['push'](_[_0xc57f('0x12')](_0x533d06)+_0xc57f('0x13'));_0xcf0b45[util[_0xc57f('0x14')](_0xc57f('0x15'),_0x533d06)][_0x5a73a3]=_[_0xc57f('0x16')](_0x4e40ad,attributes);}else{delete _0xcf0b45[util[_0xc57f('0x14')](_0xc57f('0x15'),_0x533d06)][_0x5a73a3];}emit(util['format'](_0xc57f('0x17'),_0x533d06,_0x47b852),util[_0xc57f('0x14')]('%s_queue_waiting_interaction:%s',_0x533d06,_0x2446c5?_0xc57f('0x18'):_0xc57f('0x19')),_['pick'](_0x4e40ad,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xc57f('0x1a')),'chatQueueReport':require(_0xc57f('0x1b')),'smsQueueReport':require(_0xc57f('0x1c')),'faxQueueReport':require(_0xc57f('0x1d')),'whatsappQueueReport':require(_0xc57f('0x1e')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0xc57f('0x1f')),'mailInteraction':require(_0xc57f('0x20')),'openchannelInteraction':require(_0xc57f('0x21')),'smsInteraction':require(_0xc57f('0x22')),'whatsappInteraction':require(_0xc57f('0x23'))};var queue=schema({'name':{'type':_0xc57f('0x24'),'required':!![],'message':_0xc57f('0x25')},'timeout':{'type':_0xc57f('0x26'),'message':_0xc57f('0x27')}});function startRouting(_0x20d3b3,_0x435b5d,_0x17c2df,_0x318c67){if(_0x20d3b3&&_0x435b5d&&_0x17c2df){_0x435b5d[_0xc57f('0x28')]+=0x1;var _0x7221fc={'uniqueid':_0x20d3b3,'from':_0x17c2df[_0xc57f('0x29')]?_0x17c2df[_0xc57f('0x29')]['from']:'','joinAt':moment()[_0xc57f('0x14')](_0xc57f('0x2a')),'ContactId':_0x17c2df[_0xc57f('0x2b')]?_0x17c2df[_0xc57f('0x2b')]['id']:null,'ListId':_0x17c2df[_0xc57f('0x2c')]?_0x17c2df[_0xc57f('0x2c')]['id']:null};_0x7221fc[_['upperFirst'](_0x17c2df[_0xc57f('0x2d')])+_0xc57f('0x2e')]=_0x435b5d['id']||null;_0x7221fc[_['upperFirst'](_0x17c2df['channel'])+_0xc57f('0x13')]=_0x17c2df[_0xc57f('0x2f')]?_0x17c2df[_0xc57f('0x2f')]['id']:null;_0x7221fc[_['upperFirst'](_0x17c2df[_0xc57f('0x2d')])+_0xc57f('0x30')]=_0x17c2df['message']?_0x17c2df[_0xc57f('0x31')]['id']:null;_0x7221fc[_[_0xc57f('0x32')](_0x17c2df[_0xc57f('0x2d')])+(_0x17c2df[_0xc57f('0x2d')]!==_0xc57f('0x33')?_0xc57f('0x34'):_0xc57f('0x35'))]=_0x17c2df[_0xc57f('0xc')]?_0x17c2df[_0xc57f('0xc')]['id']:null;logger[_0xc57f('0x36')](util[_0xc57f('0x14')]('[%s][START:QUEUE][NAME:%s]',_0x20d3b3,_0x435b5d[_0xc57f('0x37')]));emitChannelQueueInteraction(_0x17c2df['channel'],_0x435b5d[_0xc57f('0x37')],_0x7221fc,_0x17c2df[_0xc57f('0xc')][_0xc57f('0x37')],_0x17c2df[_0xc57f('0x31')]['id'],!![],_0x318c67,_0x435b5d['id']);if(rpc[_0x17c2df['channel']+'QueueReport']){return rpc[_0x17c2df[_0xc57f('0x2d')]+'QueueReport']['create'](_0x7221fc)['catch'](function(_0x21c370){logger[_0xc57f('0x38')](_0xc57f('0x39'),_0x21c370);});}}}function stopRouting(_0xc23156,_0x37a0f4,_0x110a57,_0x4ccc5e){if(_0xc23156&&_0x37a0f4){_0x37a0f4['waiting']-=0x1;var _0x49546e={'leaveAt':moment()[_0xc57f('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0xc57f('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xc57f('0x3a')};logger[_0xc57f('0x36')](util[_0xc57f('0x14')](_0xc57f('0x3b'),_0xc23156,_0x37a0f4[_0xc57f('0x37')]));emitChannelQueueInteraction(_0x110a57[_0xc57f('0x2d')],_0x37a0f4[_0xc57f('0x37')],_0x110a57[_0xc57f('0x29')],_0x110a57[_0xc57f('0xc')]['name'],_0x110a57[_0xc57f('0x31')]['id'],![],_0x4ccc5e,_0x37a0f4['id']);return rpc[_0x110a57[_0xc57f('0x2d')]+_0xc57f('0x3c')][_0xc57f('0x3d')](_0x110a57['interaction']['id'],{'queueId':_0x37a0f4['id']})[_0xc57f('0x3e')](function(){if(rpc[_0x110a57[_0xc57f('0x2d')]+_0xc57f('0x3f')]){return rpc[_0x110a57['channel']+_0xc57f('0x3f')][_0xc57f('0x3d')](_0xc23156,_0x49546e)['catch'](function(_0x262084){logger[_0xc57f('0x38')](_0xc57f('0x40'),_0x262084);});}});}}function endRouting(_0x5b0634,_0x322d91,_0x166ca9,_0x453672){if(_0x5b0634&&_0x322d91){_0x322d91[_0xc57f('0x28')]-=0x1;var _0x3916ec={'leaveAt':moment()[_0xc57f('0x14')](_0xc57f('0x2a')),'exitAt':moment()[_0xc57f('0x14')](_0xc57f('0x2a')),'reason':_0xc57f('0x41')};logger[_0xc57f('0x36')](util[_0xc57f('0x14')]('[%s][END:QUEUE][NAME:%s]',_0x5b0634,_0x322d91[_0xc57f('0x37')]));emitChannelQueueInteraction(_0x166ca9[_0xc57f('0x2d')],_0x322d91[_0xc57f('0x37')],_0x166ca9[_0xc57f('0x29')],_0x166ca9[_0xc57f('0xc')][_0xc57f('0x37')],_0x166ca9[_0xc57f('0x31')]['id'],![],_0x453672);if(rpc[_0x166ca9[_0xc57f('0x2d')]+_0xc57f('0x3f')]){return rpc[_0x166ca9[_0xc57f('0x2d')]+_0xc57f('0x3f')]['update'](_0x5b0634,_0x3916ec)[_0xc57f('0x42')](function(_0xd46e6c){logger[_0xc57f('0x38')](_0xc57f('0x40'),_0xd46e6c);});}}}function handleFindQueue(_0x207692){return function(_0x23ef7e){return _0x23ef7e[_0xc57f('0x37')]['toLowerCase']()===_0x207692[_0xc57f('0x43')]();};}exports[_0xc57f('0x44')]=function(_0x15b754,_0x4e6280,_0x5decae,_0x3e9a2e){return function(_0x182bdb){try{var _0x3f668b={'name':_0x4e6280[0x0],'timeout':_0x4e6280[0x1]};var _0x313377=queue[_0xc57f('0x0')](_0x3f668b,{'typecast':!![]});if(_0x313377[_0xc57f('0x45')]){logger['error'](_0xc57f('0x46'),_0x15b754,_[_0xc57f('0x47')](_0x313377,'message')[_0xc57f('0x48')](',\x20'));_0x182bdb[_0xc57f('0x49')]();}else{var _0x1c218f=_[_0xc57f('0x4a')](_0x5decae[_0x3e9a2e[_0xc57f('0x2d')]+_0xc57f('0x4b')],handleFindQueue(_0x3f668b[_0xc57f('0x37')]));if(_0x1c218f){startRouting(_0x15b754,_0x1c218f,_0x3e9a2e,_0x5decae);var _0x42dff9=(_0x1c218f['timeout']||0xa)*0x3e8;var _0x49da68=(_0x3f668b[_0xc57f('0x41')]||0x14)*0x3e8;var _0x3ad233;if(_0x42dff9>_0x49da68){_0x49da68=_0x42dff9;}var _0x274e75=seqqueue['createQueue'](_0x42dff9);_0x274e75['id']=_0x15b754;_0x274e75['atimeout']=_0x42dff9;_0x274e75[_0xc57f('0x4c')]=_0x49da68;_0x274e75[_0xc57f('0x2d')]=_0x3e9a2e[_0xc57f('0x2d')];_0x5decae[_0xc57f('0x4d')][_0x15b754]['on'](_0xc57f('0x4e'),function(){logger[_0xc57f('0x36')](_0xc57f('0x4f'),_0x15b754);stopRouting(_0x15b754,_0x1c218f,_0x3e9a2e,_0x5decae);clearTimeout(_0x3ad233);_0x3ad233=undefined;_0x274e75['close'](!![]);if(_0x5decae[_0xc57f('0x4d')][_0x15b754]){delete _0x5decae[_0xc57f('0x4d')][_0x15b754];}_0x182bdb[_0xc57f('0x49')]();});_0x5decae[_0xc57f('0x4d')][_0x15b754]['on'](_0xc57f('0x50'),function(){if(_0x5decae[_0xc57f('0x4d')][_0x15b754]){delete _0x5decae[_0xc57f('0x4d')][_0x15b754];}});_0x3ad233=setTimeout(function(){logger[_0xc57f('0x36')](_0xc57f('0x51'),_0x15b754);endRouting(_0x15b754,_0x1c218f,_0x3e9a2e,_0x5decae);clearTimeout(_0x3ad233);_0x274e75[_0xc57f('0x52')](!![]);_0x182bdb[_0xc57f('0x53')]();},_0x49da68);switch(_0x1c218f['strategy']){case'rrmemory':strategy[_0xc57f('0x54')](_0x274e75,_0x1c218f,_0x5decae,_0x3e9a2e);break;default:strategy[_0xc57f('0x55')](_0x274e75,_0x1c218f,_0x5decae,_0x3e9a2e);}}else{logger['error'](_0xc57f('0x56'),_0x15b754,_0x3f668b[_0xc57f('0x37')]);_0x182bdb[_0xc57f('0x49')]();}}}catch(_0x2b8ec2){logger[_0xc57f('0x38')](_0xc57f('0x46'),_0x15b754,_0x2b8ec2[_0xc57f('0x57')]);_0x182bdb[_0xc57f('0x49')]();}};};