Built motion from commit d1eab355.|2.6.28
[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 _0xfdcd=['stop','find','Queues','createQueue','atimeout','qtimeout','rules','complete','next','strategy','beepall','stack','validate','lodash','util','ioredis','../../../../config/environment','routing','./strategy','redis','defaults','socket.io-emitter','queue_id','account','from','joinAt','emit','clone','queue','capitalize','InteractionId','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','number','timeout\x20is\x20a\x20number','waiting','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','body','update','update\x20queue\x20report','timeout','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join'];(function(_0x138de9,_0x261e67){var _0x58d014=function(_0x31897c){while(--_0x31897c){_0x138de9['push'](_0x138de9['shift']());}};_0x58d014(++_0x261e67);}(_0xfdcd,0xf0));var _0xdfdc=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0xfdcd[_0x2dafbe];return _0x58a45a;};'use strict';var schema=require(_0xdfdc('0x0'));var _=require(_0xdfdc('0x1'));var util=require(_0xdfdc('0x2'));var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0xdfdc('0x3'));var config=require(_0xdfdc('0x4'));var logger=require('../../../../config/logger')(_0xdfdc('0x5'));var strategy=require(_0xdfdc('0x6'));config[_0xdfdc('0x7')]=_[_0xdfdc('0x8')](config[_0xdfdc('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0xdfdc('0x9'))(new Redis(config[_0xdfdc('0x7')]));var attributes=['id',_0xdfdc('0xa'),_0xdfdc('0xb'),'queue',_0xdfdc('0xc'),_0xdfdc('0xd')];function emit(_0x550745,_0x580acf,_0x2e4288){io['to'](_0x550745)[_0xdfdc('0xe')](_0x580acf,_0x2e4288);}function emitChannelQueueInteraction(_0x34ecac,_0x47da29,_0x4430f6,_0x4d9a22,_0x2f58a7,_0x2fbb6a,_0x15e3be,_0x3c3451){var _0x39962a=_[_0xdfdc('0xf')](_0x4430f6);_0x39962a[_0xdfdc('0xa')]=_0x3c3451;_0x39962a[_0xdfdc('0x10')]=_0x47da29;_0x39962a[_0xdfdc('0xb')]=_0x4d9a22;_0x39962a['id']=_0x2f58a7;if(_0x2fbb6a){attributes['push'](_[_0xdfdc('0x11')](_0x34ecac)+_0xdfdc('0x12'));_0x15e3be[util[_0xdfdc('0x13')](_0xdfdc('0x14'),_0x34ecac)][_0x2f58a7]=_['pick'](_0x39962a,attributes);}else{delete _0x15e3be[util['format'](_0xdfdc('0x14'),_0x34ecac)][_0x2f58a7];}emit(util[_0xdfdc('0x13')](_0xdfdc('0x15'),_0x34ecac,_0x47da29),util[_0xdfdc('0x13')](_0xdfdc('0x16'),_0x34ecac,_0x2fbb6a?_0xdfdc('0x17'):'remove'),_['pick'](_0x39962a,attributes));}var rpc={'openchannelQueueReport':require(_0xdfdc('0x18')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0xdfdc('0x19')),'smsQueueReport':require(_0xdfdc('0x1a')),'faxQueueReport':require(_0xdfdc('0x1b')),'whatsappQueueReport':require(_0xdfdc('0x1c')),'chatInteraction':require(_0xdfdc('0x1d')),'faxInteraction':require('../../rpc/faxInteraction'),'mailInteraction':require(_0xdfdc('0x1e')),'openchannelInteraction':require(_0xdfdc('0x1f')),'smsInteraction':require(_0xdfdc('0x20')),'whatsappInteraction':require('../../rpc/whatsappInteraction')};var queue=schema({'name':{'type':'string','required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xdfdc('0x21'),'message':_0xdfdc('0x22')}});function startRouting(_0x4c4dfd,_0x1ebb51,_0x1baa9e,_0x5d047c){if(_0x4c4dfd&&_0x1ebb51&&_0x1baa9e){_0x1ebb51[_0xdfdc('0x23')]+=0x1;var _0x512a5e={'uniqueid':_0x4c4dfd,'from':_0x1baa9e['body']?_0x1baa9e['body'][_0xdfdc('0xc')]:'','joinAt':moment()[_0xdfdc('0x13')](_0xdfdc('0x24')),'ContactId':_0x1baa9e[_0xdfdc('0x25')]?_0x1baa9e[_0xdfdc('0x25')]['id']:null,'ListId':_0x1baa9e[_0xdfdc('0x26')]?_0x1baa9e[_0xdfdc('0x26')]['id']:null};_0x512a5e[_[_0xdfdc('0x27')](_0x1baa9e[_0xdfdc('0x28')])+_0xdfdc('0x29')]=_0x1ebb51['id']||null;_0x512a5e[_['upperFirst'](_0x1baa9e[_0xdfdc('0x28')])+'InteractionId']=_0x1baa9e[_0xdfdc('0x2a')]?_0x1baa9e[_0xdfdc('0x2a')]['id']:null;_0x512a5e[_[_0xdfdc('0x27')](_0x1baa9e[_0xdfdc('0x28')])+'MessageId']=_0x1baa9e['message']?_0x1baa9e[_0xdfdc('0x2b')]['id']:null;_0x512a5e[_[_0xdfdc('0x27')](_0x1baa9e[_0xdfdc('0x28')])+(_0x1baa9e[_0xdfdc('0x28')]!==_0xdfdc('0x2c')?_0xdfdc('0x2d'):_0xdfdc('0x2e'))]=_0x1baa9e[_0xdfdc('0xb')]?_0x1baa9e[_0xdfdc('0xb')]['id']:null;logger[_0xdfdc('0x2f')](util[_0xdfdc('0x13')](_0xdfdc('0x30'),_0x4c4dfd,_0x1ebb51['name']));emitChannelQueueInteraction(_0x1baa9e['channel'],_0x1ebb51[_0xdfdc('0x31')],_0x512a5e,_0x1baa9e['account'][_0xdfdc('0x31')],_0x1baa9e['message']['id'],!![],_0x5d047c,_0x1ebb51['id']);if(rpc[_0x1baa9e[_0xdfdc('0x28')]+'QueueReport']){return rpc[_0x1baa9e['channel']+_0xdfdc('0x32')][_0xdfdc('0x33')](_0x512a5e)[_0xdfdc('0x34')](function(_0x66b072){logger[_0xdfdc('0x35')]('create\x20queue\x20report',_0x66b072);});}}}function stopRouting(_0x4b7760,_0x59d081,_0x3c195d,_0x546fc3){if(_0x4b7760&&_0x59d081){_0x59d081[_0xdfdc('0x23')]-=0x1;var _0x481dd5={'leaveAt':moment()[_0xdfdc('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0xdfdc('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'accepted'};logger['info'](util[_0xdfdc('0x13')]('[%s][STOP:QUEUE][NAME:%s]',_0x4b7760,_0x59d081[_0xdfdc('0x31')]));emitChannelQueueInteraction(_0x3c195d[_0xdfdc('0x28')],_0x59d081[_0xdfdc('0x31')],_0x3c195d[_0xdfdc('0x36')],_0x3c195d[_0xdfdc('0xb')][_0xdfdc('0x31')],_0x3c195d[_0xdfdc('0x2b')]['id'],![],_0x546fc3,_0x59d081['id']);return rpc[_0x3c195d[_0xdfdc('0x28')]+'Interaction'][_0xdfdc('0x37')](_0x3c195d[_0xdfdc('0x2a')]['id'],{'queueId':_0x59d081['id']})['then'](function(){if(rpc[_0x3c195d[_0xdfdc('0x28')]+_0xdfdc('0x32')]){return rpc[_0x3c195d[_0xdfdc('0x28')]+'QueueReport'][_0xdfdc('0x37')](_0x4b7760,_0x481dd5)[_0xdfdc('0x34')](function(_0x58f1e0){logger[_0xdfdc('0x35')](_0xdfdc('0x38'),_0x58f1e0);});}});}}function endRouting(_0x2e9c84,_0x20f47b,_0x3047d5,_0x4e7ed7){if(_0x2e9c84&&_0x20f47b){_0x20f47b[_0xdfdc('0x23')]-=0x1;var _0x31f257={'leaveAt':moment()[_0xdfdc('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0xdfdc('0x13')](_0xdfdc('0x24')),'reason':_0xdfdc('0x39')};logger[_0xdfdc('0x2f')](util[_0xdfdc('0x13')]('[%s][END:QUEUE][NAME:%s]',_0x2e9c84,_0x20f47b['name']));emitChannelQueueInteraction(_0x3047d5[_0xdfdc('0x28')],_0x20f47b[_0xdfdc('0x31')],_0x3047d5[_0xdfdc('0x36')],_0x3047d5[_0xdfdc('0xb')][_0xdfdc('0x31')],_0x3047d5[_0xdfdc('0x2b')]['id'],![],_0x4e7ed7);if(rpc[_0x3047d5['channel']+_0xdfdc('0x32')]){return rpc[_0x3047d5[_0xdfdc('0x28')]+_0xdfdc('0x32')][_0xdfdc('0x37')](_0x2e9c84,_0x31f257)[_0xdfdc('0x34')](function(_0x3c6b60){logger[_0xdfdc('0x35')](_0xdfdc('0x38'),_0x3c6b60);});}}}function handleFindQueue(_0x403cb9){return function(_0xcba5d0){return _0xcba5d0[_0xdfdc('0x31')][_0xdfdc('0x3a')]()===_0x403cb9['toLowerCase']();};}exports[_0xdfdc('0x3b')]=function(_0x38a14d,_0x18e1db,_0x80b3c2,_0x4d6daf){return function(_0x3cd965){try{var _0x5d66c8={'name':_0x18e1db[0x0],'timeout':_0x18e1db[0x1]};var _0x557526=queue[_0xdfdc('0x0')](_0x5d66c8,{'typecast':!![]});if(_0x557526[_0xdfdc('0x3c')]){logger[_0xdfdc('0x35')](_0xdfdc('0x3d'),_0x38a14d,_[_0xdfdc('0x3e')](_0x557526,_0xdfdc('0x2b'))[_0xdfdc('0x3f')](',\x20'));_0x3cd965[_0xdfdc('0x40')]();}else{var _0x2d4144=_[_0xdfdc('0x41')](_0x80b3c2[_0x4d6daf['channel']+_0xdfdc('0x42')],handleFindQueue(_0x5d66c8[_0xdfdc('0x31')]));if(_0x2d4144){startRouting(_0x38a14d,_0x2d4144,_0x4d6daf,_0x80b3c2);var _0x46bea3=(_0x2d4144['timeout']||0xa)*0x3e8;var _0x46e80e=(_0x5d66c8['timeout']||0x14)*0x3e8;var _0x56a627;if(_0x46bea3>_0x46e80e){_0x46e80e=_0x46bea3;}var _0x4cb714=seqqueue[_0xdfdc('0x43')](_0x46bea3);_0x4cb714['id']=_0x38a14d;_0x4cb714[_0xdfdc('0x44')]=_0x46bea3;_0x4cb714[_0xdfdc('0x45')]=_0x46e80e;_0x4cb714[_0xdfdc('0x28')]=_0x4d6daf[_0xdfdc('0x28')];_0x80b3c2[_0xdfdc('0x46')][_0x38a14d]['on']('end',function(){logger[_0xdfdc('0x2f')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x38a14d);stopRouting(_0x38a14d,_0x2d4144,_0x4d6daf,_0x80b3c2);clearTimeout(_0x56a627);_0x56a627=undefined;_0x4cb714['close'](!![]);if(_0x80b3c2[_0xdfdc('0x46')][_0x38a14d]){delete _0x80b3c2[_0xdfdc('0x46')][_0x38a14d];}_0x3cd965['stop']();});_0x80b3c2[_0xdfdc('0x46')][_0x38a14d]['on'](_0xdfdc('0x47'),function(){if(_0x80b3c2[_0xdfdc('0x46')][_0x38a14d]){delete _0x80b3c2[_0xdfdc('0x46')][_0x38a14d];}});_0x56a627=setTimeout(function(){logger[_0xdfdc('0x2f')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x38a14d);endRouting(_0x38a14d,_0x2d4144,_0x4d6daf,_0x80b3c2);clearTimeout(_0x56a627);_0x4cb714['close'](!![]);_0x3cd965[_0xdfdc('0x48')]();},_0x46e80e);switch(_0x2d4144[_0xdfdc('0x49')]){case'rrmemory':strategy['rrmemory'](_0x4cb714,_0x2d4144,_0x80b3c2,_0x4d6daf);break;default:strategy[_0xdfdc('0x4a')](_0x4cb714,_0x2d4144,_0x80b3c2,_0x4d6daf);}}else{logger[_0xdfdc('0x35')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x38a14d,_0x5d66c8[_0xdfdc('0x31')]);_0x3cd965[_0xdfdc('0x40')]();}}}catch(_0x3237bf){logger['error']('[%s][QUEUE]\x20%s',_0x38a14d,_0x3237bf[_0xdfdc('0x4b')]);_0x3cd965[_0xdfdc('0x40')]();}};};