303209b2523f1f77fc4b7739c6f9f71257aa4cf3
[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 _0xe149=['log','[%s][QUEUE]\x20%s','stack','util','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','queue_id','account','queue','from','joinAt','emit','clone','%sQueuesWaitingInteractions','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','accepted','[%s][STOP:QUEUE][NAME:%s]','body','update','catch','error','update\x20queue\x20report','timeout','toLowerCase','consequence','length','map','join','stop','find','Queues','createQueue','atimeout','qtimeout','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory'];(function(_0x40ddc0,_0x41c082){var _0x1aebf1=function(_0x3ba1f6){while(--_0x3ba1f6){_0x40ddc0['push'](_0x40ddc0['shift']());}};_0x1aebf1(++_0x41c082);}(_0xe149,0xf6));var _0x9e14=function(_0x30950d,_0x2cbbee){_0x30950d=_0x30950d-0x0;var _0x13325c=_0xe149[_0x30950d];return _0x13325c;};'use strict';var schema=require('validate');var _=require('lodash');var util=require(_0x9e14('0x0'));var seqqueue=require('seq-queue');var moment=require(_0x9e14('0x1'));var Redis=require(_0x9e14('0x2'));var config=require(_0x9e14('0x3'));var logger=require(_0x9e14('0x4'))(_0x9e14('0x5'));var strategy=require(_0x9e14('0x6'));config[_0x9e14('0x7')]=_[_0x9e14('0x8')](config[_0x9e14('0x7')],{'host':_0x9e14('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x9e14('0x7')]));var attributes=['id',_0x9e14('0xa'),_0x9e14('0xb'),_0x9e14('0xc'),_0x9e14('0xd'),_0x9e14('0xe')];function emit(_0x544c58,_0x35e68b,_0x10eab7){io['to'](_0x544c58)[_0x9e14('0xf')](_0x35e68b,_0x10eab7);}function emitChannelQueueInteraction(_0x14a944,_0x5b7f95,_0x10ee71,_0x18e9b6,_0x386423,_0x3053ae,_0x5cd27c,_0x22fd4b){var _0x1c01c4=_[_0x9e14('0x10')](_0x10ee71);_0x1c01c4[_0x9e14('0xa')]=_0x22fd4b;_0x1c01c4['queue']=_0x5b7f95;_0x1c01c4[_0x9e14('0xb')]=_0x18e9b6;_0x1c01c4['id']=_0x386423;if(_0x3053ae){_0x5cd27c[util['format'](_0x9e14('0x11'),_0x14a944)][_0x386423]=_['pick'](_0x1c01c4,attributes);}else{delete _0x5cd27c[util[_0x9e14('0x12')](_0x9e14('0x11'),_0x14a944)][_0x386423];}emit(util[_0x9e14('0x12')](_0x9e14('0x13'),_0x14a944,_0x5b7f95),util[_0x9e14('0x12')](_0x9e14('0x14'),_0x14a944,_0x3053ae?_0x9e14('0x15'):'remove'),_[_0x9e14('0x16')](_0x1c01c4,attributes));}var rpc={'openchannelQueueReport':require(_0x9e14('0x17')),'mailQueueReport':require(_0x9e14('0x18')),'chatQueueReport':require(_0x9e14('0x19')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x9e14('0x1a')),'whatsappQueueReport':require(_0x9e14('0x1b'))};var queue=schema({'name':{'type':_0x9e14('0x1c'),'required':!![],'message':_0x9e14('0x1d')},'timeout':{'type':_0x9e14('0x1e'),'message':_0x9e14('0x1f')}});function startRouting(_0x2b45d8,_0x2efd09,_0x1478c6,_0x2adb53){if(_0x2b45d8&&_0x2efd09&&_0x1478c6){_0x2efd09[_0x9e14('0x20')]+=0x1;var _0x1b9397={'uniqueid':_0x2b45d8,'from':_0x1478c6['body']?_0x1478c6['body'][_0x9e14('0xd')]:'','joinAt':moment()[_0x9e14('0x12')](_0x9e14('0x21')),'ContactId':_0x1478c6[_0x9e14('0x22')]?_0x1478c6[_0x9e14('0x22')]['id']:null,'ListId':_0x1478c6[_0x9e14('0x23')]?_0x1478c6[_0x9e14('0x23')]['id']:null};_0x1b9397[_[_0x9e14('0x24')](_0x1478c6[_0x9e14('0x25')])+_0x9e14('0x26')]=_0x2efd09['id']||null;_0x1b9397[_[_0x9e14('0x24')](_0x1478c6[_0x9e14('0x25')])+_0x9e14('0x27')]=_0x1478c6[_0x9e14('0x28')]?_0x1478c6[_0x9e14('0x28')]['id']:null;_0x1b9397[_[_0x9e14('0x24')](_0x1478c6[_0x9e14('0x25')])+_0x9e14('0x29')]=_0x1478c6[_0x9e14('0x2a')]?_0x1478c6[_0x9e14('0x2a')]['id']:null;_0x1b9397[_[_0x9e14('0x24')](_0x1478c6[_0x9e14('0x25')])+(_0x1478c6[_0x9e14('0x25')]!==_0x9e14('0x2b')?_0x9e14('0x2c'):_0x9e14('0x2d'))]=_0x1478c6['account']?_0x1478c6[_0x9e14('0xb')]['id']:null;logger[_0x9e14('0x2e')](util[_0x9e14('0x12')](_0x9e14('0x2f'),_0x2b45d8,_0x2efd09[_0x9e14('0x30')]));emitChannelQueueInteraction(_0x1478c6[_0x9e14('0x25')],_0x2efd09['name'],_0x1b9397,_0x1478c6[_0x9e14('0xb')][_0x9e14('0x30')],_0x1478c6[_0x9e14('0x2a')]['id'],!![],_0x2adb53,_0x2efd09['id']);if(rpc[_0x1478c6[_0x9e14('0x25')]+'QueueReport']){return rpc[_0x1478c6[_0x9e14('0x25')]+_0x9e14('0x31')][_0x9e14('0x32')](_0x1b9397)['catch'](function(_0x3d8e7b){logger['error']('create\x20queue\x20report');});}}}function stopRouting(_0x430266,_0xb266a2,_0x38aed6,_0x1c3056){if(_0x430266&&_0xb266a2){_0xb266a2[_0x9e14('0x20')]-=0x1;var _0x537c94={'leaveAt':moment()['format'](_0x9e14('0x21')),'acceptAt':moment()['format'](_0x9e14('0x21')),'reason':_0x9e14('0x33')};logger[_0x9e14('0x2e')](util['format'](_0x9e14('0x34'),_0x430266,_0xb266a2[_0x9e14('0x30')]));emitChannelQueueInteraction(_0x38aed6[_0x9e14('0x25')],_0xb266a2['name'],_0x38aed6[_0x9e14('0x35')],_0x38aed6[_0x9e14('0xb')][_0x9e14('0x30')],_0x38aed6[_0x9e14('0x2a')]['id'],![],_0x1c3056,_0xb266a2['id']);if(rpc[_0x38aed6[_0x9e14('0x25')]+_0x9e14('0x31')]){return rpc[_0x38aed6[_0x9e14('0x25')]+'QueueReport'][_0x9e14('0x36')](_0x430266,_0x537c94)[_0x9e14('0x37')](function(_0x2c6b42){logger[_0x9e14('0x38')](_0x9e14('0x39'));});}}}function endRouting(_0x13e07c,_0x50aa8c,_0x591c5a,_0x5280de){if(_0x13e07c&&_0x50aa8c){_0x50aa8c[_0x9e14('0x20')]-=0x1;var _0x5a0db8={'leaveAt':moment()[_0x9e14('0x12')](_0x9e14('0x21')),'exitAt':moment()[_0x9e14('0x12')](_0x9e14('0x21')),'reason':_0x9e14('0x3a')};logger['info'](util[_0x9e14('0x12')]('[%s][END:QUEUE][NAME:%s]',_0x13e07c,_0x50aa8c[_0x9e14('0x30')]));emitChannelQueueInteraction(_0x591c5a[_0x9e14('0x25')],_0x50aa8c['name'],_0x591c5a[_0x9e14('0x35')],_0x591c5a['account'][_0x9e14('0x30')],_0x591c5a[_0x9e14('0x2a')]['id'],![],_0x5280de);if(rpc[_0x591c5a[_0x9e14('0x25')]+'QueueReport']){return rpc[_0x591c5a[_0x9e14('0x25')]+_0x9e14('0x31')][_0x9e14('0x36')](_0x13e07c,_0x5a0db8)[_0x9e14('0x37')](function(_0x2e83d8){logger[_0x9e14('0x38')](_0x9e14('0x39'));});}}}function handleFindQueue(_0x1c23f8){return function(_0xafc47a){return _0xafc47a[_0x9e14('0x30')][_0x9e14('0x3b')]()===_0x1c23f8[_0x9e14('0x3b')]();};}exports[_0x9e14('0x3c')]=function(_0x8770a1,_0x308017,_0x648ed8,_0x3ce978){return function(_0x2a05e4){try{var _0x19e31e={'name':_0x308017[0x0],'timeout':_0x308017[0x1]};var _0x4900eb=queue['validate'](_0x19e31e,{'typecast':!![]});if(_0x4900eb[_0x9e14('0x3d')]){logger[_0x9e14('0x38')]('[%s][QUEUE]\x20%s',_0x8770a1,_[_0x9e14('0x3e')](_0x4900eb,'message')[_0x9e14('0x3f')](',\x20'));_0x2a05e4[_0x9e14('0x40')]();}else{var _0x440049=_[_0x9e14('0x41')](_0x648ed8[_0x3ce978['channel']+_0x9e14('0x42')],handleFindQueue(_0x19e31e[_0x9e14('0x30')]));if(_0x440049){startRouting(_0x8770a1,_0x440049,_0x3ce978,_0x648ed8);var _0x4d32eb=(_0x440049[_0x9e14('0x3a')]||0xa)*0x3e8;var _0x38a1c5=(_0x19e31e[_0x9e14('0x3a')]||0x14)*0x3e8;var _0x5b90a4,_0x247eea;if(_0x4d32eb>_0x38a1c5){_0x38a1c5=_0x4d32eb;}var _0x2aeeb8=seqqueue[_0x9e14('0x43')](_0x4d32eb);_0x2aeeb8['id']=_0x8770a1;_0x2aeeb8[_0x9e14('0x44')]=_0x4d32eb;_0x2aeeb8[_0x9e14('0x45')]=_0x38a1c5;_0x2aeeb8[_0x9e14('0x25')]=_0x3ce978[_0x9e14('0x25')];_0x648ed8['rules'][_0x8770a1]['on']('end',function(){logger[_0x9e14('0x2e')](_0x9e14('0x46'),_0x8770a1);stopRouting(_0x8770a1,_0x440049,_0x3ce978,_0x648ed8);clearTimeout(_0x5b90a4);_0x5b90a4=undefined;_0x2aeeb8[_0x9e14('0x47')](!![]);if(_0x648ed8[_0x9e14('0x48')][_0x8770a1]){delete _0x648ed8['rules'][_0x8770a1];}_0x2a05e4[_0x9e14('0x40')]();});_0x648ed8[_0x9e14('0x48')][_0x8770a1]['on'](_0x9e14('0x49'),function(){if(_0x648ed8[_0x9e14('0x48')][_0x8770a1]){delete _0x648ed8['rules'][_0x8770a1];}});_0x5b90a4=setTimeout(function(){logger[_0x9e14('0x2e')](_0x9e14('0x4a'),_0x8770a1);endRouting(_0x8770a1,_0x440049,_0x3ce978,_0x648ed8);clearTimeout(_0x5b90a4);_0x2aeeb8[_0x9e14('0x47')](!![]);_0x2a05e4[_0x9e14('0x4b')]();},_0x38a1c5);switch(_0x440049[_0x9e14('0x4c')]){case _0x9e14('0x4d'):strategy['rrmemory'](_0x2aeeb8,_0x440049,_0x648ed8,_0x3ce978);break;default:strategy['beepall'](_0x2aeeb8,_0x440049,_0x648ed8,_0x3ce978);}}else{logger[_0x9e14('0x38')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x8770a1,_0x19e31e['name']);_0x2a05e4[_0x9e14('0x40')]();}}}catch(_0x1eadfa){console[_0x9e14('0x4e')](_0x1eadfa);logger['error'](_0x9e14('0x4f'),_0x8770a1,_0x1eadfa[_0x9e14('0x50')]);_0x2a05e4[_0x9e14('0x40')]();}};};