Built motion from commit 25580385.|2.6.2
[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 _0xbd11=['contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','AccountId','WebsiteId','info','name','QueueReport','create','catch','waiting','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','update','error','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','consequence','[%s][QUEUE]\x20%s','map','join','stop','find','Queues','createQueue','atimeout','qtimeout','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','complete','[%s][QUEUE]\x20APPLICATION\x20END','close','next','strategy','rrmemory','beepall','stack','validate','lodash','seq-queue','moment','ioredis','../../../../config/environment','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','joinAt','emit','clone','format','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','body','from'];(function(_0x538036,_0x55cdbd){var _0x3f757b=function(_0x3c966f){while(--_0x3c966f){_0x538036['push'](_0x538036['shift']());}};_0x3f757b(++_0x55cdbd);}(_0xbd11,0xc5));var _0x1bd1=function(_0x5d6456,_0x58ecc7){_0x5d6456=_0x5d6456-0x0;var _0x4d66c1=_0xbd11[_0x5d6456];return _0x4d66c1;};'use strict';var schema=require(_0x1bd1('0x0'));var _=require(_0x1bd1('0x1'));var util=require('util');var seqqueue=require(_0x1bd1('0x2'));var moment=require(_0x1bd1('0x3'));var Redis=require(_0x1bd1('0x4'));var config=require(_0x1bd1('0x5'));var logger=require('../../../../config/logger')('routing');var strategy=require(_0x1bd1('0x6'));config[_0x1bd1('0x7')]=_[_0x1bd1('0x8')](config[_0x1bd1('0x7')],{'host':_0x1bd1('0x9'),'port':0x18eb});var io=require(_0x1bd1('0xa'))(new Redis(config[_0x1bd1('0x7')]));var attributes=['id',_0x1bd1('0xb'),_0x1bd1('0xc'),_0x1bd1('0xd'),'from',_0x1bd1('0xe')];function emit(_0x1c55b5,_0x37a436,_0x46baa3){io['to'](_0x1c55b5)[_0x1bd1('0xf')](_0x37a436,_0x46baa3);}function emitChannelQueueInteraction(_0x190fe8,_0x1920e9,_0x590ad6,_0x107e9f,_0x12da8a,_0x53179f,_0x4e4de1,_0x5a2f54){var _0x2af93a=_[_0x1bd1('0x10')](_0x590ad6);_0x2af93a[_0x1bd1('0xb')]=_0x5a2f54;_0x2af93a[_0x1bd1('0xd')]=_0x1920e9;_0x2af93a[_0x1bd1('0xc')]=_0x107e9f;_0x2af93a['id']=_0x12da8a;if(_0x53179f){_0x4e4de1[util[_0x1bd1('0x11')](_0x1bd1('0x12'),_0x190fe8)][_0x12da8a]=_[_0x1bd1('0x13')](_0x2af93a,attributes);}else{delete _0x4e4de1[util['format'](_0x1bd1('0x12'),_0x190fe8)][_0x12da8a];}emit(util[_0x1bd1('0x11')]('%s:queue:%s',_0x190fe8,_0x1920e9),util[_0x1bd1('0x11')](_0x1bd1('0x14'),_0x190fe8,_0x53179f?_0x1bd1('0x15'):_0x1bd1('0x16')),_['pick'](_0x2af93a,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x1bd1('0x17')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x1bd1('0x18')),'faxQueueReport':require(_0x1bd1('0x19')),'whatsappQueueReport':require(_0x1bd1('0x1a'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x1bd1('0x1b')},'timeout':{'type':_0x1bd1('0x1c'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0xd4b06a,_0x1c3b87,_0xd0e88f,_0x5bfc43){if(_0xd4b06a&&_0x1c3b87&&_0xd0e88f){_0x1c3b87['waiting']+=0x1;var _0x31d8ea={'uniqueid':_0xd4b06a,'from':_0xd0e88f[_0x1bd1('0x1d')]?_0xd0e88f[_0x1bd1('0x1d')][_0x1bd1('0x1e')]:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0xd0e88f[_0x1bd1('0x1f')]?_0xd0e88f[_0x1bd1('0x1f')]['id']:null,'ListId':_0xd0e88f[_0x1bd1('0x20')]?_0xd0e88f[_0x1bd1('0x20')]['id']:null};_0x31d8ea[_[_0x1bd1('0x21')](_0xd0e88f[_0x1bd1('0x22')])+_0x1bd1('0x23')]=_0x1c3b87['id']||null;_0x31d8ea[_['upperFirst'](_0xd0e88f[_0x1bd1('0x22')])+_0x1bd1('0x24')]=_0xd0e88f['interaction']?_0xd0e88f[_0x1bd1('0x25')]['id']:null;_0x31d8ea[_[_0x1bd1('0x21')](_0xd0e88f[_0x1bd1('0x22')])+_0x1bd1('0x26')]=_0xd0e88f[_0x1bd1('0x27')]?_0xd0e88f[_0x1bd1('0x27')]['id']:null;_0x31d8ea[_[_0x1bd1('0x21')](_0xd0e88f[_0x1bd1('0x22')])+(_0xd0e88f[_0x1bd1('0x22')]!=='chat'?_0x1bd1('0x28'):_0x1bd1('0x29'))]=_0xd0e88f['account']?_0xd0e88f['account']['id']:null;logger[_0x1bd1('0x2a')](util[_0x1bd1('0x11')]('[%s][START:QUEUE][NAME:%s]',_0xd4b06a,_0x1c3b87[_0x1bd1('0x2b')]));emitChannelQueueInteraction(_0xd0e88f[_0x1bd1('0x22')],_0x1c3b87[_0x1bd1('0x2b')],_0x31d8ea,_0xd0e88f[_0x1bd1('0xc')][_0x1bd1('0x2b')],_0xd0e88f[_0x1bd1('0x27')]['id'],!![],_0x5bfc43,_0x1c3b87['id']);if(rpc[_0xd0e88f[_0x1bd1('0x22')]+'QueueReport']){return rpc[_0xd0e88f[_0x1bd1('0x22')]+_0x1bd1('0x2c')][_0x1bd1('0x2d')](_0x31d8ea)[_0x1bd1('0x2e')](function(_0x43861c){logger['error']('create\x20queue\x20report');});}}}function stopRouting(_0x27b0af,_0x3cfecb,_0x4e89b8,_0x205d34){if(_0x27b0af&&_0x3cfecb){_0x3cfecb[_0x1bd1('0x2f')]-=0x1;var _0x256e31={'leaveAt':moment()[_0x1bd1('0x11')](_0x1bd1('0x30')),'acceptAt':moment()[_0x1bd1('0x11')](_0x1bd1('0x30')),'reason':_0x1bd1('0x31')};logger[_0x1bd1('0x2a')](util[_0x1bd1('0x11')](_0x1bd1('0x32'),_0x27b0af,_0x3cfecb['name']));emitChannelQueueInteraction(_0x4e89b8['channel'],_0x3cfecb['name'],_0x4e89b8[_0x1bd1('0x1d')],_0x4e89b8['account'][_0x1bd1('0x2b')],_0x4e89b8[_0x1bd1('0x27')]['id'],![],_0x205d34,_0x3cfecb['id']);if(rpc[_0x4e89b8[_0x1bd1('0x22')]+_0x1bd1('0x2c')]){return rpc[_0x4e89b8[_0x1bd1('0x22')]+'QueueReport'][_0x1bd1('0x33')](_0x27b0af,_0x256e31)[_0x1bd1('0x2e')](function(_0x1411fd){logger[_0x1bd1('0x34')](_0x1bd1('0x35'));});}}}function endRouting(_0x54546a,_0x4edf08,_0x3869fb,_0x415c88){if(_0x54546a&&_0x4edf08){_0x4edf08['waiting']-=0x1;var _0x22dd97={'leaveAt':moment()[_0x1bd1('0x11')](_0x1bd1('0x30')),'exitAt':moment()[_0x1bd1('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x1bd1('0x36')};logger[_0x1bd1('0x2a')](util[_0x1bd1('0x11')](_0x1bd1('0x37'),_0x54546a,_0x4edf08[_0x1bd1('0x2b')]));emitChannelQueueInteraction(_0x3869fb[_0x1bd1('0x22')],_0x4edf08[_0x1bd1('0x2b')],_0x3869fb[_0x1bd1('0x1d')],_0x3869fb[_0x1bd1('0xc')][_0x1bd1('0x2b')],_0x3869fb[_0x1bd1('0x27')]['id'],![],_0x415c88);if(rpc[_0x3869fb['channel']+_0x1bd1('0x2c')]){return rpc[_0x3869fb[_0x1bd1('0x22')]+_0x1bd1('0x2c')][_0x1bd1('0x33')](_0x54546a,_0x22dd97)[_0x1bd1('0x2e')](function(_0x18c070){logger[_0x1bd1('0x34')](_0x1bd1('0x35'));});}}}function handleFindQueue(_0x107ab1){return function(_0x32dcb9){return _0x32dcb9[_0x1bd1('0x2b')]['toLowerCase']()===_0x107ab1['toLowerCase']();};}exports[_0x1bd1('0x38')]=function(_0x475f7d,_0xcdd7f1,_0x8c1ff5,_0x31680d){return function(_0x26fad7){try{var _0x55bda5={'name':_0xcdd7f1[0x0],'timeout':_0xcdd7f1[0x1]};var _0x387fb7=queue['validate'](_0x55bda5,{'typecast':!![]});if(_0x387fb7['length']){logger['error'](_0x1bd1('0x39'),_0x475f7d,_[_0x1bd1('0x3a')](_0x387fb7,_0x1bd1('0x27'))[_0x1bd1('0x3b')](',\x20'));_0x26fad7[_0x1bd1('0x3c')]();}else{var _0x20b3d9=_[_0x1bd1('0x3d')](_0x8c1ff5[_0x31680d[_0x1bd1('0x22')]+_0x1bd1('0x3e')],handleFindQueue(_0x55bda5[_0x1bd1('0x2b')]));if(_0x20b3d9){startRouting(_0x475f7d,_0x20b3d9,_0x31680d,_0x8c1ff5);var _0x47d946=(_0x20b3d9[_0x1bd1('0x36')]||0xa)*0x3e8;var _0x319726=(_0x55bda5[_0x1bd1('0x36')]||0x14)*0x3e8;var _0x30e6d1,_0xf74b4c;if(_0x47d946>_0x319726){_0x319726=_0x47d946;}var _0x5cf479=seqqueue[_0x1bd1('0x3f')](_0x47d946);_0x5cf479['id']=_0x475f7d;_0x5cf479[_0x1bd1('0x40')]=_0x47d946;_0x5cf479[_0x1bd1('0x41')]=_0x319726;_0x5cf479[_0x1bd1('0x22')]=_0x31680d[_0x1bd1('0x22')];_0x8c1ff5[_0x1bd1('0x42')][_0x475f7d]['on']('end',function(){logger[_0x1bd1('0x2a')](_0x1bd1('0x43'),_0x475f7d);stopRouting(_0x475f7d,_0x20b3d9,_0x31680d,_0x8c1ff5);clearTimeout(_0x30e6d1);_0x30e6d1=undefined;_0x5cf479['close'](!![]);if(_0x8c1ff5[_0x1bd1('0x42')][_0x475f7d]){delete _0x8c1ff5[_0x1bd1('0x42')][_0x475f7d];}_0x26fad7[_0x1bd1('0x3c')]();});_0x8c1ff5[_0x1bd1('0x42')][_0x475f7d]['on'](_0x1bd1('0x44'),function(){if(_0x8c1ff5['rules'][_0x475f7d]){delete _0x8c1ff5[_0x1bd1('0x42')][_0x475f7d];}});_0x30e6d1=setTimeout(function(){logger['info'](_0x1bd1('0x45'),_0x475f7d);endRouting(_0x475f7d,_0x20b3d9,_0x31680d,_0x8c1ff5);clearTimeout(_0x30e6d1);_0x5cf479[_0x1bd1('0x46')](!![]);_0x26fad7[_0x1bd1('0x47')]();},_0x319726);switch(_0x20b3d9[_0x1bd1('0x48')]){case _0x1bd1('0x49'):strategy[_0x1bd1('0x49')](_0x5cf479,_0x20b3d9,_0x8c1ff5,_0x31680d);break;default:strategy[_0x1bd1('0x4a')](_0x5cf479,_0x20b3d9,_0x8c1ff5,_0x31680d);}}else{logger[_0x1bd1('0x34')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x475f7d,_0x55bda5[_0x1bd1('0x2b')]);_0x26fad7[_0x1bd1('0x3c')]();}}}catch(_0x227ab6){console['log'](_0x227ab6);logger[_0x1bd1('0x34')](_0x1bd1('0x39'),_0x475f7d,_0x227ab6[_0x1bd1('0x4b')]);_0x26fad7[_0x1bd1('0x3c')]();}};};