0fb62b0c1682e658f083b796d6246cadd6e8a35d
[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 _0x1cf2=['[%s][END:QUEUE][NAME:%s]','update','toLowerCase','length','map','join','stop','createQueue','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','[%s][QUEUE]\x20%s','validate','moment','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','socket.io-emitter','queue_id','account','from','joinAt','emit','clone','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','channel','QueueId','upperFirst','interaction','message','AccountId','info','name','QueueReport','catch','error','create\x20queue\x20report','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','timeout'];(function(_0x59d89e,_0x55edf5){var _0x554e93=function(_0x3d40bc){while(--_0x3d40bc){_0x59d89e['push'](_0x59d89e['shift']());}};_0x554e93(++_0x55edf5);}(_0x1cf2,0xe9));var _0x21cf=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x1cf2[_0x321bb2];return _0x9c12ed;};'use strict';var schema=require(_0x21cf('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require('seq-queue');var moment=require(_0x21cf('0x1'));var Redis=require(_0x21cf('0x2'));var config=require('../../../../config/environment');var logger=require(_0x21cf('0x3'))(_0x21cf('0x4'));var strategy=require(_0x21cf('0x5'));config[_0x21cf('0x6')]=_[_0x21cf('0x7')](config[_0x21cf('0x6')],{'host':'localhost','port':0x18eb});var io=require(_0x21cf('0x8'))(new Redis(config[_0x21cf('0x6')]));var attributes=['id',_0x21cf('0x9'),_0x21cf('0xa'),'queue',_0x21cf('0xb'),_0x21cf('0xc')];function emit(_0xb4c523,_0x5ed003,_0x1a5704){io['to'](_0xb4c523)[_0x21cf('0xd')](_0x5ed003,_0x1a5704);}function emitChannelQueueInteraction(_0x2691af,_0x54ef0b,_0x5cd773,_0x48d007,_0x8ae64e,_0x33c382,_0x4b2f06,_0x4a56d0){var _0x4c1923=_[_0x21cf('0xe')](_0x5cd773);_0x4c1923[_0x21cf('0x9')]=_0x4a56d0;_0x4c1923['queue']=_0x54ef0b;_0x4c1923[_0x21cf('0xa')]=_0x48d007;_0x4c1923['id']=_0x8ae64e;if(_0x33c382){attributes[_0x21cf('0xf')](_[_0x21cf('0x10')](_0x2691af)+_0x21cf('0x11'));_0x4b2f06[util[_0x21cf('0x12')](_0x21cf('0x13'),_0x2691af)][_0x8ae64e]=_[_0x21cf('0x14')](_0x4c1923,attributes);}else{delete _0x4b2f06[util['format'](_0x21cf('0x13'),_0x2691af)][_0x8ae64e];}emit(util['format'](_0x21cf('0x15'),_0x2691af,_0x54ef0b),util['format']('%s_queue_waiting_interaction:%s',_0x2691af,_0x33c382?_0x21cf('0x16'):_0x21cf('0x17')),_['pick'](_0x4c1923,attributes));}var rpc={'openchannelQueueReport':require(_0x21cf('0x18')),'mailQueueReport':require(_0x21cf('0x19')),'chatQueueReport':require(_0x21cf('0x1a')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':_0x21cf('0x1b'),'required':!![],'message':_0x21cf('0x1c')},'timeout':{'type':'number','message':_0x21cf('0x1d')}});function startRouting(_0x48556e,_0xfe196e,_0x57ca47,_0x5ed3b2){if(_0x48556e&&_0xfe196e&&_0x57ca47){_0xfe196e['waiting']+=0x1;var _0x5ced4a={'uniqueid':_0x48556e,'from':_0x57ca47[_0x21cf('0x1e')]?_0x57ca47[_0x21cf('0x1e')][_0x21cf('0xb')]:'','joinAt':moment()[_0x21cf('0x12')](_0x21cf('0x1f')),'ContactId':_0x57ca47[_0x21cf('0x20')]?_0x57ca47[_0x21cf('0x20')]['id']:null,'ListId':_0x57ca47[_0x21cf('0x21')]?_0x57ca47[_0x21cf('0x21')]['id']:null};_0x5ced4a[_['upperFirst'](_0x57ca47[_0x21cf('0x22')])+_0x21cf('0x23')]=_0xfe196e['id']||null;_0x5ced4a[_[_0x21cf('0x24')](_0x57ca47[_0x21cf('0x22')])+_0x21cf('0x11')]=_0x57ca47[_0x21cf('0x25')]?_0x57ca47[_0x21cf('0x25')]['id']:null;_0x5ced4a[_['upperFirst'](_0x57ca47[_0x21cf('0x22')])+'MessageId']=_0x57ca47['message']?_0x57ca47[_0x21cf('0x26')]['id']:null;_0x5ced4a[_[_0x21cf('0x24')](_0x57ca47[_0x21cf('0x22')])+(_0x57ca47[_0x21cf('0x22')]!=='chat'?_0x21cf('0x27'):'WebsiteId')]=_0x57ca47[_0x21cf('0xa')]?_0x57ca47['account']['id']:null;logger[_0x21cf('0x28')](util[_0x21cf('0x12')]('[%s][START:QUEUE][NAME:%s]',_0x48556e,_0xfe196e[_0x21cf('0x29')]));emitChannelQueueInteraction(_0x57ca47['channel'],_0xfe196e[_0x21cf('0x29')],_0x5ced4a,_0x57ca47[_0x21cf('0xa')][_0x21cf('0x29')],_0x57ca47['message']['id'],!![],_0x5ed3b2,_0xfe196e['id']);if(rpc[_0x57ca47[_0x21cf('0x22')]+_0x21cf('0x2a')]){return rpc[_0x57ca47[_0x21cf('0x22')]+_0x21cf('0x2a')]['create'](_0x5ced4a)[_0x21cf('0x2b')](function(_0x2cdefe){logger[_0x21cf('0x2c')](_0x21cf('0x2d'));});}}}function stopRouting(_0x807a30,_0x133f14,_0x7ab4c9,_0x44ceaf){if(_0x807a30&&_0x133f14){_0x133f14[_0x21cf('0x2e')]-=0x1;var _0x1d4314={'leaveAt':moment()[_0x21cf('0x12')](_0x21cf('0x1f')),'acceptAt':moment()[_0x21cf('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x21cf('0x2f')};logger[_0x21cf('0x28')](util[_0x21cf('0x12')](_0x21cf('0x30'),_0x807a30,_0x133f14[_0x21cf('0x29')]));emitChannelQueueInteraction(_0x7ab4c9[_0x21cf('0x22')],_0x133f14[_0x21cf('0x29')],_0x7ab4c9[_0x21cf('0x1e')],_0x7ab4c9[_0x21cf('0xa')]['name'],_0x7ab4c9['message']['id'],![],_0x44ceaf,_0x133f14['id']);if(rpc[_0x7ab4c9[_0x21cf('0x22')]+_0x21cf('0x2a')]){return rpc[_0x7ab4c9['channel']+_0x21cf('0x2a')]['update'](_0x807a30,_0x1d4314)[_0x21cf('0x2b')](function(_0xb4a737){logger[_0x21cf('0x2c')](_0x21cf('0x31'));});}}}function endRouting(_0x10a5cc,_0x241c76,_0x3ccc12,_0x3c717d){if(_0x10a5cc&&_0x241c76){_0x241c76[_0x21cf('0x2e')]-=0x1;var _0x2afdb4={'leaveAt':moment()[_0x21cf('0x12')](_0x21cf('0x1f')),'exitAt':moment()[_0x21cf('0x12')](_0x21cf('0x1f')),'reason':_0x21cf('0x32')};logger[_0x21cf('0x28')](util[_0x21cf('0x12')](_0x21cf('0x33'),_0x10a5cc,_0x241c76['name']));emitChannelQueueInteraction(_0x3ccc12[_0x21cf('0x22')],_0x241c76[_0x21cf('0x29')],_0x3ccc12[_0x21cf('0x1e')],_0x3ccc12['account'][_0x21cf('0x29')],_0x3ccc12['message']['id'],![],_0x3c717d);if(rpc[_0x3ccc12[_0x21cf('0x22')]+_0x21cf('0x2a')]){return rpc[_0x3ccc12['channel']+_0x21cf('0x2a')][_0x21cf('0x34')](_0x10a5cc,_0x2afdb4)[_0x21cf('0x2b')](function(_0xbee384){logger[_0x21cf('0x2c')](_0x21cf('0x31'));});}}}function handleFindQueue(_0x8b5477){return function(_0xfc27c){return _0xfc27c['name'][_0x21cf('0x35')]()===_0x8b5477[_0x21cf('0x35')]();};}exports['consequence']=function(_0x1e98e1,_0x166dd0,_0x49a032,_0x1e8ef5){return function(_0x67a4ab){try{var _0x13e23e={'name':_0x166dd0[0x0],'timeout':_0x166dd0[0x1]};var _0x4e46dd=queue[_0x21cf('0x0')](_0x13e23e,{'typecast':!![]});if(_0x4e46dd[_0x21cf('0x36')]){logger[_0x21cf('0x2c')]('[%s][QUEUE]\x20%s',_0x1e98e1,_[_0x21cf('0x37')](_0x4e46dd,'message')[_0x21cf('0x38')](',\x20'));_0x67a4ab[_0x21cf('0x39')]();}else{var _0x3f3d29=_['find'](_0x49a032[_0x1e8ef5[_0x21cf('0x22')]+'Queues'],handleFindQueue(_0x13e23e['name']));if(_0x3f3d29){startRouting(_0x1e98e1,_0x3f3d29,_0x1e8ef5,_0x49a032);var _0x4f58a6=(_0x3f3d29[_0x21cf('0x32')]||0xa)*0x3e8;var _0x287844=(_0x13e23e[_0x21cf('0x32')]||0x14)*0x3e8;var _0x5494af;if(_0x4f58a6>_0x287844){_0x287844=_0x4f58a6;}var _0x1c1e91=seqqueue[_0x21cf('0x3a')](_0x4f58a6);_0x1c1e91['id']=_0x1e98e1;_0x1c1e91['atimeout']=_0x4f58a6;_0x1c1e91['qtimeout']=_0x287844;_0x1c1e91[_0x21cf('0x22')]=_0x1e8ef5[_0x21cf('0x22')];_0x49a032[_0x21cf('0x3b')][_0x1e98e1]['on'](_0x21cf('0x3c'),function(){logger[_0x21cf('0x28')](_0x21cf('0x3d'),_0x1e98e1);stopRouting(_0x1e98e1,_0x3f3d29,_0x1e8ef5,_0x49a032);clearTimeout(_0x5494af);_0x5494af=undefined;_0x1c1e91[_0x21cf('0x3e')](!![]);if(_0x49a032['rules'][_0x1e98e1]){delete _0x49a032[_0x21cf('0x3b')][_0x1e98e1];}_0x67a4ab['stop']();});_0x49a032['rules'][_0x1e98e1]['on'](_0x21cf('0x3f'),function(){if(_0x49a032[_0x21cf('0x3b')][_0x1e98e1]){delete _0x49a032['rules'][_0x1e98e1];}});_0x5494af=setTimeout(function(){logger[_0x21cf('0x28')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x1e98e1);endRouting(_0x1e98e1,_0x3f3d29,_0x1e8ef5,_0x49a032);clearTimeout(_0x5494af);_0x1c1e91[_0x21cf('0x3e')](!![]);_0x67a4ab[_0x21cf('0x40')]();},_0x287844);switch(_0x3f3d29[_0x21cf('0x41')]){case'rrmemory':strategy[_0x21cf('0x42')](_0x1c1e91,_0x3f3d29,_0x49a032,_0x1e8ef5);break;default:strategy[_0x21cf('0x43')](_0x1c1e91,_0x3f3d29,_0x49a032,_0x1e8ef5);}}else{logger[_0x21cf('0x2c')](_0x21cf('0x44'),_0x1e98e1,_0x13e23e[_0x21cf('0x29')]);_0x67a4ab['stop']();}}}catch(_0x4eb107){console[_0x21cf('0x45')](_0x4eb107);logger[_0x21cf('0x2c')](_0x21cf('0x46'),_0x1e98e1,_0x4eb107['stack']);_0x67a4ab[_0x21cf('0x39')]();}};};