Built motion from commit c116dc8b.|2.6.30
[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 _0x3789=['QueueId','interaction','MessageId','message','chat','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','waiting','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','timeout','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','[%s][QUEUE]\x20%s','map','join','stop','find','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','stack','validate','lodash','util','routing','./strategy','redis','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','emit','clone','push','InteractionId','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel'];(function(_0x967b6d,_0x34e7dc){var _0x542d20=function(_0x3aa5c9){while(--_0x3aa5c9){_0x967b6d['push'](_0x967b6d['shift']());}};_0x542d20(++_0x34e7dc);}(_0x3789,0x7a));var _0x9378=function(_0x27c474,_0x54b397){_0x27c474=_0x27c474-0x0;var _0x1bae3d=_0x3789[_0x27c474];return _0x1bae3d;};'use strict';var schema=require(_0x9378('0x0'));var _=require(_0x9378('0x1'));var util=require(_0x9378('0x2'));var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require('ioredis');var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0x9378('0x3'));var strategy=require(_0x9378('0x4'));config[_0x9378('0x5')]=_['defaults'](config[_0x9378('0x5')],{'host':_0x9378('0x6'),'port':0x18eb});var io=require(_0x9378('0x7'))(new Redis(config[_0x9378('0x5')]));var attributes=['id',_0x9378('0x8'),_0x9378('0x9'),_0x9378('0xa'),_0x9378('0xb'),_0x9378('0xc')];function emit(_0x1909de,_0x526d27,_0x5cf139){io['to'](_0x1909de)[_0x9378('0xd')](_0x526d27,_0x5cf139);}function emitChannelQueueInteraction(_0x119302,_0x3c3228,_0x1ed476,_0x3429af,_0x3674e2,_0x3aea47,_0x1f4f24,_0x530122){var _0x2bb724=_[_0x9378('0xe')](_0x1ed476);_0x2bb724[_0x9378('0x8')]=_0x530122;_0x2bb724['queue']=_0x3c3228;_0x2bb724[_0x9378('0x9')]=_0x3429af;_0x2bb724['id']=_0x3674e2;if(_0x3aea47){attributes[_0x9378('0xf')](_['capitalize'](_0x119302)+_0x9378('0x10'));_0x1f4f24[util[_0x9378('0x11')](_0x9378('0x12'),_0x119302)][_0x3674e2]=_[_0x9378('0x13')](_0x2bb724,attributes);}else{delete _0x1f4f24[util['format'](_0x9378('0x12'),_0x119302)][_0x3674e2];}emit(util[_0x9378('0x11')](_0x9378('0x14'),_0x119302,_0x3c3228),util['format'](_0x9378('0x15'),_0x119302,_0x3aea47?_0x9378('0x16'):'remove'),_[_0x9378('0x13')](_0x2bb724,attributes));}var rpc={'openchannelQueueReport':require(_0x9378('0x17')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x9378('0x18')),'smsQueueReport':require(_0x9378('0x19')),'faxQueueReport':require(_0x9378('0x1a')),'whatsappQueueReport':require('../../rpc/whatsappQueueReport'),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require('../../rpc/faxInteraction'),'mailInteraction':require(_0x9378('0x1b')),'openchannelInteraction':require(_0x9378('0x1c')),'smsInteraction':require(_0x9378('0x1d')),'whatsappInteraction':require(_0x9378('0x1e'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x9378('0x1f')},'timeout':{'type':_0x9378('0x20'),'message':_0x9378('0x21')}});function startRouting(_0x1ce866,_0x5beab6,_0x4011e8,_0x3c9bc0){if(_0x1ce866&&_0x5beab6&&_0x4011e8){_0x5beab6['waiting']+=0x1;var _0x42bb6e={'uniqueid':_0x1ce866,'from':_0x4011e8['body']?_0x4011e8[_0x9378('0x22')][_0x9378('0xb')]:'','joinAt':moment()['format'](_0x9378('0x23')),'ContactId':_0x4011e8['contact']?_0x4011e8[_0x9378('0x24')]['id']:null,'ListId':_0x4011e8['list']?_0x4011e8[_0x9378('0x25')]['id']:null};_0x42bb6e[_[_0x9378('0x26')](_0x4011e8[_0x9378('0x27')])+_0x9378('0x28')]=_0x5beab6['id']||null;_0x42bb6e[_[_0x9378('0x26')](_0x4011e8[_0x9378('0x27')])+_0x9378('0x10')]=_0x4011e8[_0x9378('0x29')]?_0x4011e8['interaction']['id']:null;_0x42bb6e[_[_0x9378('0x26')](_0x4011e8[_0x9378('0x27')])+_0x9378('0x2a')]=_0x4011e8[_0x9378('0x2b')]?_0x4011e8[_0x9378('0x2b')]['id']:null;_0x42bb6e[_[_0x9378('0x26')](_0x4011e8[_0x9378('0x27')])+(_0x4011e8[_0x9378('0x27')]!==_0x9378('0x2c')?'AccountId':_0x9378('0x2d'))]=_0x4011e8['account']?_0x4011e8[_0x9378('0x9')]['id']:null;logger[_0x9378('0x2e')](util[_0x9378('0x11')](_0x9378('0x2f'),_0x1ce866,_0x5beab6[_0x9378('0x30')]));emitChannelQueueInteraction(_0x4011e8[_0x9378('0x27')],_0x5beab6[_0x9378('0x30')],_0x42bb6e,_0x4011e8[_0x9378('0x9')][_0x9378('0x30')],_0x4011e8[_0x9378('0x2b')]['id'],!![],_0x3c9bc0,_0x5beab6['id']);if(rpc[_0x4011e8['channel']+_0x9378('0x31')]){return rpc[_0x4011e8['channel']+_0x9378('0x31')][_0x9378('0x32')](_0x42bb6e)[_0x9378('0x33')](function(_0x28f6cc){logger[_0x9378('0x34')](_0x9378('0x35'),_0x28f6cc);});}}}function stopRouting(_0x1f1f49,_0x24736c,_0x4181cd,_0x152848){if(_0x1f1f49&&_0x24736c){_0x24736c[_0x9378('0x36')]-=0x1;var _0x1f7423={'leaveAt':moment()[_0x9378('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()['format'](_0x9378('0x23')),'reason':'accepted'};logger[_0x9378('0x2e')](util[_0x9378('0x11')](_0x9378('0x37'),_0x1f1f49,_0x24736c[_0x9378('0x30')]));emitChannelQueueInteraction(_0x4181cd[_0x9378('0x27')],_0x24736c['name'],_0x4181cd['body'],_0x4181cd[_0x9378('0x9')][_0x9378('0x30')],_0x4181cd[_0x9378('0x2b')]['id'],![],_0x152848,_0x24736c['id']);return rpc[_0x4181cd[_0x9378('0x27')]+_0x9378('0x38')][_0x9378('0x39')](_0x4181cd[_0x9378('0x29')]['id'],{'queueId':_0x24736c['id']})['then'](function(){if(rpc[_0x4181cd['channel']+'QueueReport']){return rpc[_0x4181cd[_0x9378('0x27')]+_0x9378('0x31')][_0x9378('0x39')](_0x1f1f49,_0x1f7423)[_0x9378('0x33')](function(_0xcb4d2f){logger['error']('update\x20queue\x20report',_0xcb4d2f);});}});}}function endRouting(_0x5f5b75,_0x162a0a,_0x7ca0f9,_0x3e17d3){if(_0x5f5b75&&_0x162a0a){_0x162a0a['waiting']-=0x1;var _0x4aef09={'leaveAt':moment()[_0x9378('0x11')](_0x9378('0x23')),'exitAt':moment()[_0x9378('0x11')](_0x9378('0x23')),'reason':_0x9378('0x3a')};logger[_0x9378('0x2e')](util[_0x9378('0x11')](_0x9378('0x3b'),_0x5f5b75,_0x162a0a[_0x9378('0x30')]));emitChannelQueueInteraction(_0x7ca0f9['channel'],_0x162a0a[_0x9378('0x30')],_0x7ca0f9[_0x9378('0x22')],_0x7ca0f9[_0x9378('0x9')][_0x9378('0x30')],_0x7ca0f9[_0x9378('0x2b')]['id'],![],_0x3e17d3);if(rpc[_0x7ca0f9['channel']+_0x9378('0x31')]){return rpc[_0x7ca0f9['channel']+_0x9378('0x31')][_0x9378('0x39')](_0x5f5b75,_0x4aef09)[_0x9378('0x33')](function(_0x55ab5f){logger[_0x9378('0x34')](_0x9378('0x3c'),_0x55ab5f);});}}}function handleFindQueue(_0xbf615b){return function(_0x425c61){return _0x425c61[_0x9378('0x30')][_0x9378('0x3d')]()===_0xbf615b[_0x9378('0x3d')]();};}exports[_0x9378('0x3e')]=function(_0x1a2e37,_0x21a7b7,_0x1772d1,_0x38ab87){return function(_0x1480f3){try{var _0x41c4b8={'name':_0x21a7b7[0x0],'timeout':_0x21a7b7[0x1]};var _0x2e41ac=queue[_0x9378('0x0')](_0x41c4b8,{'typecast':!![]});if(_0x2e41ac['length']){logger[_0x9378('0x34')](_0x9378('0x3f'),_0x1a2e37,_[_0x9378('0x40')](_0x2e41ac,_0x9378('0x2b'))[_0x9378('0x41')](',\x20'));_0x1480f3[_0x9378('0x42')]();}else{var _0x1e4e5f=_[_0x9378('0x43')](_0x1772d1[_0x38ab87[_0x9378('0x27')]+'Queues'],handleFindQueue(_0x41c4b8[_0x9378('0x30')]));if(_0x1e4e5f){startRouting(_0x1a2e37,_0x1e4e5f,_0x38ab87,_0x1772d1);var _0x2eafc1=(_0x1e4e5f[_0x9378('0x3a')]||0xa)*0x3e8;var _0x55f72c=(_0x41c4b8[_0x9378('0x3a')]||0x14)*0x3e8;var _0x424bc9;if(_0x2eafc1>_0x55f72c){_0x55f72c=_0x2eafc1;}var _0x3a1850=seqqueue[_0x9378('0x44')](_0x2eafc1);_0x3a1850['id']=_0x1a2e37;_0x3a1850[_0x9378('0x45')]=_0x2eafc1;_0x3a1850[_0x9378('0x46')]=_0x55f72c;_0x3a1850[_0x9378('0x27')]=_0x38ab87[_0x9378('0x27')];_0x1772d1[_0x9378('0x47')][_0x1a2e37]['on'](_0x9378('0x48'),function(){logger[_0x9378('0x2e')](_0x9378('0x49'),_0x1a2e37);stopRouting(_0x1a2e37,_0x1e4e5f,_0x38ab87,_0x1772d1);clearTimeout(_0x424bc9);_0x424bc9=undefined;_0x3a1850[_0x9378('0x4a')](!![]);if(_0x1772d1[_0x9378('0x47')][_0x1a2e37]){delete _0x1772d1[_0x9378('0x47')][_0x1a2e37];}_0x1480f3[_0x9378('0x42')]();});_0x1772d1[_0x9378('0x47')][_0x1a2e37]['on'](_0x9378('0x4b'),function(){if(_0x1772d1[_0x9378('0x47')][_0x1a2e37]){delete _0x1772d1[_0x9378('0x47')][_0x1a2e37];}});_0x424bc9=setTimeout(function(){logger['info'](_0x9378('0x4c'),_0x1a2e37);endRouting(_0x1a2e37,_0x1e4e5f,_0x38ab87,_0x1772d1);clearTimeout(_0x424bc9);_0x3a1850[_0x9378('0x4a')](!![]);_0x1480f3[_0x9378('0x4d')]();},_0x55f72c);switch(_0x1e4e5f[_0x9378('0x4e')]){case _0x9378('0x4f'):strategy[_0x9378('0x4f')](_0x3a1850,_0x1e4e5f,_0x1772d1,_0x38ab87);break;default:strategy['beepall'](_0x3a1850,_0x1e4e5f,_0x1772d1,_0x38ab87);}}else{logger[_0x9378('0x34')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x1a2e37,_0x41c4b8[_0x9378('0x30')]);_0x1480f3['stop']();}}}catch(_0xf46721){logger[_0x9378('0x34')](_0x9378('0x3f'),_0x1a2e37,_0xf46721[_0x9378('0x50')]);_0x1480f3['stop']();}};};