Built motion from commit 9e1ec266.|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 _0xf519=['WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','update','then','timeout','[%s][END:QUEUE][NAME:%s]','error','update\x20queue\x20report','toLowerCase','validate','length','[%s][QUEUE]\x20%s','map','join','find','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','stop','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','lodash','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','account','queue','joinAt','emit','clone','push','capitalize','InteractionId','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','interaction','MessageId','message','chat','AccountId'];(function(_0xb2eb8,_0xeebbdf){var _0xd94a48=function(_0x34344b){while(--_0x34344b){_0xb2eb8['push'](_0xb2eb8['shift']());}};_0xd94a48(++_0xeebbdf);}(_0xf519,0xcd));var _0x9f51=function(_0x5751e6,_0x125e5e){_0x5751e6=_0x5751e6-0x0;var _0x4199e4=_0xf519[_0x5751e6];return _0x4199e4;};'use strict';var schema=require('validate');var _=require(_0x9f51('0x0'));var util=require(_0x9f51('0x1'));var seqqueue=require(_0x9f51('0x2'));var moment=require(_0x9f51('0x3'));var Redis=require(_0x9f51('0x4'));var config=require(_0x9f51('0x5'));var logger=require(_0x9f51('0x6'))(_0x9f51('0x7'));var strategy=require(_0x9f51('0x8'));config[_0x9f51('0x9')]=_[_0x9f51('0xa')](config[_0x9f51('0x9')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var attributes=['id','queue_id',_0x9f51('0xb'),_0x9f51('0xc'),'from',_0x9f51('0xd')];function emit(_0x3dbffe,_0xf8ca8a,_0x43913e){io['to'](_0x3dbffe)[_0x9f51('0xe')](_0xf8ca8a,_0x43913e);}function emitChannelQueueInteraction(_0x51cc02,_0x5dd9aa,_0x534b59,_0x225242,_0x510cf1,_0xe18219,_0x2e096a,_0x13ac98){var _0x36c1e3=_[_0x9f51('0xf')](_0x534b59);_0x36c1e3['queue_id']=_0x13ac98;_0x36c1e3['queue']=_0x5dd9aa;_0x36c1e3['account']=_0x225242;_0x36c1e3['id']=_0x510cf1;if(_0xe18219){attributes[_0x9f51('0x10')](_[_0x9f51('0x11')](_0x51cc02)+_0x9f51('0x12'));_0x2e096a[util['format'](_0x9f51('0x13'),_0x51cc02)][_0x510cf1]=_[_0x9f51('0x14')](_0x36c1e3,attributes);}else{delete _0x2e096a[util[_0x9f51('0x15')]('%sQueuesWaitingInteractions',_0x51cc02)][_0x510cf1];}emit(util[_0x9f51('0x15')](_0x9f51('0x16'),_0x51cc02,_0x5dd9aa),util[_0x9f51('0x15')](_0x9f51('0x17'),_0x51cc02,_0xe18219?_0x9f51('0x18'):_0x9f51('0x19')),_[_0x9f51('0x14')](_0x36c1e3,attributes));}var rpc={'openchannelQueueReport':require(_0x9f51('0x1a')),'mailQueueReport':require(_0x9f51('0x1b')),'chatQueueReport':require(_0x9f51('0x1c')),'smsQueueReport':require(_0x9f51('0x1d')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x9f51('0x1e')),'chatInteraction':require(_0x9f51('0x1f')),'faxInteraction':require(_0x9f51('0x20')),'mailInteraction':require('../../rpc/mailInteraction'),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require(_0x9f51('0x21')),'whatsappInteraction':require(_0x9f51('0x22'))};var queue=schema({'name':{'type':_0x9f51('0x23'),'required':!![],'message':_0x9f51('0x24')},'timeout':{'type':'number','message':_0x9f51('0x25')}});function startRouting(_0x4bb0fe,_0xe6ba87,_0x5aa363,_0x509516){if(_0x4bb0fe&&_0xe6ba87&&_0x5aa363){_0xe6ba87[_0x9f51('0x26')]+=0x1;var _0x1b64ab={'uniqueid':_0x4bb0fe,'from':_0x5aa363['body']?_0x5aa363[_0x9f51('0x27')]['from']:'','joinAt':moment()[_0x9f51('0x15')](_0x9f51('0x28')),'ContactId':_0x5aa363[_0x9f51('0x29')]?_0x5aa363[_0x9f51('0x29')]['id']:null,'ListId':_0x5aa363[_0x9f51('0x2a')]?_0x5aa363['list']['id']:null};_0x1b64ab[_[_0x9f51('0x2b')](_0x5aa363[_0x9f51('0x2c')])+'QueueId']=_0xe6ba87['id']||null;_0x1b64ab[_['upperFirst'](_0x5aa363['channel'])+_0x9f51('0x12')]=_0x5aa363[_0x9f51('0x2d')]?_0x5aa363[_0x9f51('0x2d')]['id']:null;_0x1b64ab[_[_0x9f51('0x2b')](_0x5aa363['channel'])+_0x9f51('0x2e')]=_0x5aa363[_0x9f51('0x2f')]?_0x5aa363[_0x9f51('0x2f')]['id']:null;_0x1b64ab[_[_0x9f51('0x2b')](_0x5aa363[_0x9f51('0x2c')])+(_0x5aa363[_0x9f51('0x2c')]!==_0x9f51('0x30')?_0x9f51('0x31'):_0x9f51('0x32'))]=_0x5aa363[_0x9f51('0xb')]?_0x5aa363['account']['id']:null;logger[_0x9f51('0x33')](util[_0x9f51('0x15')](_0x9f51('0x34'),_0x4bb0fe,_0xe6ba87[_0x9f51('0x35')]));emitChannelQueueInteraction(_0x5aa363[_0x9f51('0x2c')],_0xe6ba87['name'],_0x1b64ab,_0x5aa363[_0x9f51('0xb')]['name'],_0x5aa363[_0x9f51('0x2f')]['id'],!![],_0x509516,_0xe6ba87['id']);if(rpc[_0x5aa363['channel']+_0x9f51('0x36')]){return rpc[_0x5aa363['channel']+_0x9f51('0x36')][_0x9f51('0x37')](_0x1b64ab)[_0x9f51('0x38')](function(_0x4f3501){logger['error'](_0x9f51('0x39'),_0x4f3501);});}}}function stopRouting(_0x53f15f,_0x4bf600,_0x1b7e76,_0x3f3546){if(_0x53f15f&&_0x4bf600){_0x4bf600[_0x9f51('0x26')]-=0x1;var _0x1fa8d7={'leaveAt':moment()[_0x9f51('0x15')](_0x9f51('0x28')),'acceptAt':moment()[_0x9f51('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'accepted'};logger[_0x9f51('0x33')](util['format'](_0x9f51('0x3a'),_0x53f15f,_0x4bf600['name']));emitChannelQueueInteraction(_0x1b7e76[_0x9f51('0x2c')],_0x4bf600[_0x9f51('0x35')],_0x1b7e76[_0x9f51('0x27')],_0x1b7e76[_0x9f51('0xb')][_0x9f51('0x35')],_0x1b7e76[_0x9f51('0x2f')]['id'],![],_0x3f3546,_0x4bf600['id']);return rpc[_0x1b7e76['channel']+'Interaction'][_0x9f51('0x3b')](_0x1b7e76[_0x9f51('0x2d')]['id'],{'queueId':_0x4bf600['id']})[_0x9f51('0x3c')](function(){if(rpc[_0x1b7e76[_0x9f51('0x2c')]+'QueueReport']){return rpc[_0x1b7e76[_0x9f51('0x2c')]+_0x9f51('0x36')][_0x9f51('0x3b')](_0x53f15f,_0x1fa8d7)[_0x9f51('0x38')](function(_0x113bc6){logger['error']('update\x20queue\x20report',_0x113bc6);});}});}}function endRouting(_0x3cfcc1,_0x32e958,_0x4a0606,_0x149de5){if(_0x3cfcc1&&_0x32e958){_0x32e958[_0x9f51('0x26')]-=0x1;var _0x65f35e={'leaveAt':moment()[_0x9f51('0x15')](_0x9f51('0x28')),'exitAt':moment()[_0x9f51('0x15')](_0x9f51('0x28')),'reason':_0x9f51('0x3d')};logger['info'](util[_0x9f51('0x15')](_0x9f51('0x3e'),_0x3cfcc1,_0x32e958[_0x9f51('0x35')]));emitChannelQueueInteraction(_0x4a0606[_0x9f51('0x2c')],_0x32e958[_0x9f51('0x35')],_0x4a0606[_0x9f51('0x27')],_0x4a0606[_0x9f51('0xb')]['name'],_0x4a0606[_0x9f51('0x2f')]['id'],![],_0x149de5);if(rpc[_0x4a0606[_0x9f51('0x2c')]+'QueueReport']){return rpc[_0x4a0606[_0x9f51('0x2c')]+_0x9f51('0x36')]['update'](_0x3cfcc1,_0x65f35e)[_0x9f51('0x38')](function(_0x2d691d){logger[_0x9f51('0x3f')](_0x9f51('0x40'),_0x2d691d);});}}}function handleFindQueue(_0x720792){return function(_0x3bc85d){return _0x3bc85d[_0x9f51('0x35')]['toLowerCase']()===_0x720792[_0x9f51('0x41')]();};}exports['consequence']=function(_0x16e8c7,_0x5408d4,_0x31c6cb,_0x2dbd61){return function(_0x445087){try{var _0x3f862f={'name':_0x5408d4[0x0],'timeout':_0x5408d4[0x1]};var _0x1c6d8e=queue[_0x9f51('0x42')](_0x3f862f,{'typecast':!![]});if(_0x1c6d8e[_0x9f51('0x43')]){logger['error'](_0x9f51('0x44'),_0x16e8c7,_[_0x9f51('0x45')](_0x1c6d8e,'message')[_0x9f51('0x46')](',\x20'));_0x445087['stop']();}else{var _0x19044a=_[_0x9f51('0x47')](_0x31c6cb[_0x2dbd61[_0x9f51('0x2c')]+'Queues'],handleFindQueue(_0x3f862f[_0x9f51('0x35')]));if(_0x19044a){startRouting(_0x16e8c7,_0x19044a,_0x2dbd61,_0x31c6cb);var _0x2710f8=(_0x19044a[_0x9f51('0x3d')]||0xa)*0x3e8;var _0x472887=(_0x3f862f[_0x9f51('0x3d')]||0x14)*0x3e8;var _0x3d70a3;if(_0x2710f8>_0x472887){_0x472887=_0x2710f8;}var _0x5b5334=seqqueue['createQueue'](_0x2710f8);_0x5b5334['id']=_0x16e8c7;_0x5b5334[_0x9f51('0x48')]=_0x2710f8;_0x5b5334[_0x9f51('0x49')]=_0x472887;_0x5b5334[_0x9f51('0x2c')]=_0x2dbd61[_0x9f51('0x2c')];_0x31c6cb[_0x9f51('0x4a')][_0x16e8c7]['on'](_0x9f51('0x4b'),function(){logger[_0x9f51('0x33')](_0x9f51('0x4c'),_0x16e8c7);stopRouting(_0x16e8c7,_0x19044a,_0x2dbd61,_0x31c6cb);clearTimeout(_0x3d70a3);_0x3d70a3=undefined;_0x5b5334[_0x9f51('0x4d')](!![]);if(_0x31c6cb['rules'][_0x16e8c7]){delete _0x31c6cb['rules'][_0x16e8c7];}_0x445087[_0x9f51('0x4e')]();});_0x31c6cb[_0x9f51('0x4a')][_0x16e8c7]['on'](_0x9f51('0x4f'),function(){if(_0x31c6cb[_0x9f51('0x4a')][_0x16e8c7]){delete _0x31c6cb[_0x9f51('0x4a')][_0x16e8c7];}});_0x3d70a3=setTimeout(function(){logger['info'](_0x9f51('0x50'),_0x16e8c7);endRouting(_0x16e8c7,_0x19044a,_0x2dbd61,_0x31c6cb);clearTimeout(_0x3d70a3);_0x5b5334[_0x9f51('0x4d')](!![]);_0x445087[_0x9f51('0x51')]();},_0x472887);switch(_0x19044a['strategy']){case'rrmemory':strategy[_0x9f51('0x52')](_0x5b5334,_0x19044a,_0x31c6cb,_0x2dbd61);break;default:strategy[_0x9f51('0x53')](_0x5b5334,_0x19044a,_0x31c6cb,_0x2dbd61);}}else{logger[_0x9f51('0x3f')](_0x9f51('0x54'),_0x16e8c7,_0x3f862f[_0x9f51('0x35')]);_0x445087[_0x9f51('0x4e')]();}}}catch(_0x5a35bd){logger[_0x9f51('0x3f')](_0x9f51('0x44'),_0x16e8c7,_0x5a35bd['stack']);_0x445087['stop']();}};};