Built motion from commit cf5ff673.|2.5.41
[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 _0xca79=['queue_id','account','from','joinAt','emit','clone','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','name','QueueReport','create','catch','error','create\x20queue\x20report','waiting','accepted','update','update\x20queue\x20report','timeout','info','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','stop','find','Queues','createQueue','atimeout','qtimeout','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','util','moment','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','localhost'];(function(_0x16c373,_0x831bc8){var _0x57d90e=function(_0x245a06){while(--_0x245a06){_0x16c373['push'](_0x16c373['shift']());}};_0x57d90e(++_0x831bc8);}(_0xca79,0xe4));var _0x9ca7=function(_0x364bfd,_0x3c28d2){_0x364bfd=_0x364bfd-0x0;var _0x2e763a=_0xca79[_0x364bfd];return _0x2e763a;};'use strict';var schema=require(_0x9ca7('0x0'));var _=require('lodash');var util=require(_0x9ca7('0x1'));var seqqueue=require('seq-queue');var moment=require(_0x9ca7('0x2'));var Redis=require('ioredis');var config=require(_0x9ca7('0x3'));var logger=require(_0x9ca7('0x4'))(_0x9ca7('0x5'));var strategy=require(_0x9ca7('0x6'));config['redis']=_['defaults'](config[_0x9ca7('0x7')],{'host':_0x9ca7('0x8'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var attributes=['id',_0x9ca7('0x9'),_0x9ca7('0xa'),'queue',_0x9ca7('0xb'),_0x9ca7('0xc')];function emit(_0x4d2818,_0x3c2eef,_0xef20ae){io['to'](_0x4d2818)[_0x9ca7('0xd')](_0x3c2eef,_0xef20ae);}function emitChannelQueueInteraction(_0x410c7b,_0x2235ef,_0x2ae259,_0x11aab1,_0x3d280c,_0x89a81d,_0x9afdbc,_0x5980a0){var _0x31acb6=_[_0x9ca7('0xe')](_0x2ae259);_0x31acb6[_0x9ca7('0x9')]=_0x5980a0;_0x31acb6['queue']=_0x2235ef;_0x31acb6[_0x9ca7('0xa')]=_0x11aab1;_0x31acb6['id']=_0x3d280c;if(_0x89a81d){_0x9afdbc[util[_0x9ca7('0xf')](_0x9ca7('0x10'),_0x410c7b)][_0x3d280c]=_['pick'](_0x31acb6,attributes);}else{delete _0x9afdbc[util[_0x9ca7('0xf')](_0x9ca7('0x10'),_0x410c7b)][_0x3d280c];}emit(util[_0x9ca7('0xf')](_0x9ca7('0x11'),_0x410c7b,_0x2235ef),util[_0x9ca7('0xf')](_0x9ca7('0x12'),_0x410c7b,_0x89a81d?_0x9ca7('0x13'):_0x9ca7('0x14')),_['pick'](_0x31acb6,attributes));}var rpc={'openchannelQueueReport':require(_0x9ca7('0x15')),'mailQueueReport':require(_0x9ca7('0x16')),'chatQueueReport':require(_0x9ca7('0x17')),'smsQueueReport':require(_0x9ca7('0x18')),'faxQueueReport':require(_0x9ca7('0x19')),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':'string','required':!![],'message':_0x9ca7('0x1a')},'timeout':{'type':_0x9ca7('0x1b'),'message':_0x9ca7('0x1c')}});function startRouting(_0x522e17,_0x2c9919,_0xee2a05,_0x57d874){if(_0x522e17&&_0x2c9919&&_0xee2a05){_0x2c9919['waiting']+=0x1;var _0x3038c3={'uniqueid':_0x522e17,'from':_0xee2a05[_0x9ca7('0x1d')]?_0xee2a05[_0x9ca7('0x1d')][_0x9ca7('0xb')]:'','joinAt':moment()[_0x9ca7('0xf')](_0x9ca7('0x1e')),'ContactId':_0xee2a05['contact']?_0xee2a05[_0x9ca7('0x1f')]['id']:null,'ListId':_0xee2a05['list']?_0xee2a05[_0x9ca7('0x20')]['id']:null};_0x3038c3[_[_0x9ca7('0x21')](_0xee2a05[_0x9ca7('0x22')])+'QueueId']=_0x2c9919['id']||null;_0x3038c3[_[_0x9ca7('0x21')](_0xee2a05[_0x9ca7('0x22')])+_0x9ca7('0x23')]=_0xee2a05[_0x9ca7('0x24')]?_0xee2a05[_0x9ca7('0x24')]['id']:null;_0x3038c3[_[_0x9ca7('0x21')](_0xee2a05[_0x9ca7('0x22')])+_0x9ca7('0x25')]=_0xee2a05[_0x9ca7('0x26')]?_0xee2a05[_0x9ca7('0x26')]['id']:null;_0x3038c3[_[_0x9ca7('0x21')](_0xee2a05[_0x9ca7('0x22')])+(_0xee2a05[_0x9ca7('0x22')]!==_0x9ca7('0x27')?_0x9ca7('0x28'):_0x9ca7('0x29'))]=_0xee2a05[_0x9ca7('0xa')]?_0xee2a05[_0x9ca7('0xa')]['id']:null;logger['info'](util[_0x9ca7('0xf')]('[%s][START:QUEUE][NAME:%s]',_0x522e17,_0x2c9919[_0x9ca7('0x2a')]));emitChannelQueueInteraction(_0xee2a05[_0x9ca7('0x22')],_0x2c9919[_0x9ca7('0x2a')],_0x3038c3,_0xee2a05[_0x9ca7('0xa')][_0x9ca7('0x2a')],_0xee2a05['message']['id'],!![],_0x57d874,_0x2c9919['id']);if(rpc[_0xee2a05[_0x9ca7('0x22')]+_0x9ca7('0x2b')]){return rpc[_0xee2a05[_0x9ca7('0x22')]+_0x9ca7('0x2b')][_0x9ca7('0x2c')](_0x3038c3)[_0x9ca7('0x2d')](function(_0x4039cb){logger[_0x9ca7('0x2e')](_0x9ca7('0x2f'));});}}}function stopRouting(_0x4e0c46,_0x1fdcc4,_0x54b5f9,_0x527a1f){if(_0x4e0c46&&_0x1fdcc4){_0x1fdcc4[_0x9ca7('0x30')]-=0x1;var _0x20e1d7={'leaveAt':moment()[_0x9ca7('0xf')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()['format'](_0x9ca7('0x1e')),'reason':_0x9ca7('0x31')};logger['info'](util[_0x9ca7('0xf')]('[%s][STOP:QUEUE][NAME:%s]',_0x4e0c46,_0x1fdcc4['name']));emitChannelQueueInteraction(_0x54b5f9[_0x9ca7('0x22')],_0x1fdcc4[_0x9ca7('0x2a')],_0x54b5f9[_0x9ca7('0x1d')],_0x54b5f9[_0x9ca7('0xa')][_0x9ca7('0x2a')],_0x54b5f9[_0x9ca7('0x26')]['id'],![],_0x527a1f,_0x1fdcc4['id']);if(rpc[_0x54b5f9[_0x9ca7('0x22')]+_0x9ca7('0x2b')]){return rpc[_0x54b5f9[_0x9ca7('0x22')]+_0x9ca7('0x2b')][_0x9ca7('0x32')](_0x4e0c46,_0x20e1d7)[_0x9ca7('0x2d')](function(_0x3c5c37){logger[_0x9ca7('0x2e')](_0x9ca7('0x33'));});}}}function endRouting(_0x2e26df,_0x3a323c,_0x43eaa4,_0x556795){if(_0x2e26df&&_0x3a323c){_0x3a323c[_0x9ca7('0x30')]-=0x1;var _0x134ba2={'leaveAt':moment()[_0x9ca7('0xf')](_0x9ca7('0x1e')),'exitAt':moment()[_0x9ca7('0xf')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x9ca7('0x34')};logger[_0x9ca7('0x35')](util[_0x9ca7('0xf')](_0x9ca7('0x36'),_0x2e26df,_0x3a323c[_0x9ca7('0x2a')]));emitChannelQueueInteraction(_0x43eaa4[_0x9ca7('0x22')],_0x3a323c[_0x9ca7('0x2a')],_0x43eaa4['body'],_0x43eaa4[_0x9ca7('0xa')][_0x9ca7('0x2a')],_0x43eaa4['message']['id'],![],_0x556795);if(rpc[_0x43eaa4['channel']+_0x9ca7('0x2b')]){return rpc[_0x43eaa4['channel']+_0x9ca7('0x2b')][_0x9ca7('0x32')](_0x2e26df,_0x134ba2)[_0x9ca7('0x2d')](function(_0xb0f3d){logger[_0x9ca7('0x2e')](_0x9ca7('0x33'));});}}}function handleFindQueue(_0x3a2823){return function(_0x882d66){return _0x882d66[_0x9ca7('0x2a')][_0x9ca7('0x37')]()===_0x3a2823[_0x9ca7('0x37')]();};}exports[_0x9ca7('0x38')]=function(_0x46f0eb,_0x1d4ed3,_0x476dbc,_0x53f720){return function(_0x31119b){try{var _0x4d2ec8={'name':_0x1d4ed3[0x0],'timeout':_0x1d4ed3[0x1]};var _0x1dd943=queue[_0x9ca7('0x0')](_0x4d2ec8,{'typecast':!![]});if(_0x1dd943[_0x9ca7('0x39')]){logger[_0x9ca7('0x2e')](_0x9ca7('0x3a'),_0x46f0eb,_[_0x9ca7('0x3b')](_0x1dd943,'message')[_0x9ca7('0x3c')](',\x20'));_0x31119b[_0x9ca7('0x3d')]();}else{var _0x38972a=_[_0x9ca7('0x3e')](_0x476dbc[_0x53f720[_0x9ca7('0x22')]+_0x9ca7('0x3f')],handleFindQueue(_0x4d2ec8[_0x9ca7('0x2a')]));if(_0x38972a){startRouting(_0x46f0eb,_0x38972a,_0x53f720,_0x476dbc);var _0x421686=(_0x38972a[_0x9ca7('0x34')]||0xa)*0x3e8;var _0x204ecf=(_0x4d2ec8[_0x9ca7('0x34')]||0x14)*0x3e8;var _0x380970,_0xc437e6;if(_0x421686>_0x204ecf){_0x204ecf=_0x421686;}var _0x40f414=seqqueue[_0x9ca7('0x40')](_0x421686);_0x40f414['id']=_0x46f0eb;_0x40f414[_0x9ca7('0x41')]=_0x421686;_0x40f414[_0x9ca7('0x42')]=_0x204ecf;_0x40f414['channel']=_0x53f720['channel'];_0x476dbc[_0x9ca7('0x43')][_0x46f0eb]['on']('end',function(){logger[_0x9ca7('0x35')](_0x9ca7('0x44'),_0x46f0eb);stopRouting(_0x46f0eb,_0x38972a,_0x53f720,_0x476dbc);clearTimeout(_0x380970);_0x380970=undefined;_0x40f414[_0x9ca7('0x45')](!![]);if(_0x476dbc[_0x9ca7('0x43')][_0x46f0eb]){delete _0x476dbc[_0x9ca7('0x43')][_0x46f0eb];}_0x31119b[_0x9ca7('0x3d')]();});_0x476dbc['rules'][_0x46f0eb]['on'](_0x9ca7('0x46'),function(){if(_0x476dbc['rules'][_0x46f0eb]){delete _0x476dbc[_0x9ca7('0x43')][_0x46f0eb];}});_0x380970=setTimeout(function(){logger[_0x9ca7('0x35')](_0x9ca7('0x47'),_0x46f0eb);endRouting(_0x46f0eb,_0x38972a,_0x53f720,_0x476dbc);clearTimeout(_0x380970);_0x40f414[_0x9ca7('0x45')](!![]);_0x31119b[_0x9ca7('0x48')]();},_0x204ecf);switch(_0x38972a[_0x9ca7('0x49')]){case _0x9ca7('0x4a'):strategy['rrmemory'](_0x40f414,_0x38972a,_0x476dbc,_0x53f720);break;default:strategy[_0x9ca7('0x4b')](_0x40f414,_0x38972a,_0x476dbc,_0x53f720);}}else{logger['error'](_0x9ca7('0x4c'),_0x46f0eb,_0x4d2ec8[_0x9ca7('0x2a')]);_0x31119b[_0x9ca7('0x3d')]();}}}catch(_0x227ab6){console[_0x9ca7('0x4d')](_0x227ab6);logger[_0x9ca7('0x2e')](_0x9ca7('0x3a'),_0x46f0eb,_0x227ab6[_0x9ca7('0x4e')]);_0x31119b[_0x9ca7('0x3d')]();}};};