a328da058a8aa22644a7bbce13e4cffe6a447892
[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 _0x45b4=['./strategy','redis','defaults','localhost','socket.io-emitter','account','from','joinAt','emit','clone','queue_id','queue','capitalize','format','pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','InteractionId','interaction','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','validate','length','[%s][QUEUE]\x20%s','map','join','stop','find','timeout','createQueue','atimeout','qtimeout','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','close','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','lodash','util','ioredis','../../../../config/environment'];(function(_0x336038,_0x4947d2){var _0x13136b=function(_0x370944){while(--_0x370944){_0x336038['push'](_0x336038['shift']());}};_0x13136b(++_0x4947d2);}(_0x45b4,0x1e2));var _0x445b=function(_0x3ce2c4,_0x4544c1){_0x3ce2c4=_0x3ce2c4-0x0;var _0x4047c1=_0x45b4[_0x3ce2c4];return _0x4047c1;};'use strict';var schema=require('validate');var _=require(_0x445b('0x0'));var util=require(_0x445b('0x1'));var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0x445b('0x2'));var config=require(_0x445b('0x3'));var logger=require('../../../../config/logger')('routing');var strategy=require(_0x445b('0x4'));config[_0x445b('0x5')]=_[_0x445b('0x6')](config[_0x445b('0x5')],{'host':_0x445b('0x7'),'port':0x18eb});var io=require(_0x445b('0x8'))(new Redis(config['redis']));var attributes=['id','queue_id',_0x445b('0x9'),'queue',_0x445b('0xa'),_0x445b('0xb')];function emit(_0xb9d412,_0x54b414,_0x14016d){io['to'](_0xb9d412)[_0x445b('0xc')](_0x54b414,_0x14016d);}function emitChannelQueueInteraction(_0x3204ec,_0x4f544f,_0x39fb83,_0x5aa80b,_0x402680,_0x277d7d,_0x4de9d2,_0x1eae75){var _0x197c73=_[_0x445b('0xd')](_0x39fb83);_0x197c73[_0x445b('0xe')]=_0x1eae75;_0x197c73[_0x445b('0xf')]=_0x4f544f;_0x197c73[_0x445b('0x9')]=_0x5aa80b;_0x197c73['id']=_0x402680;if(_0x277d7d){attributes['push'](_[_0x445b('0x10')](_0x3204ec)+'InteractionId');_0x4de9d2[util[_0x445b('0x11')]('%sQueuesWaitingInteractions',_0x3204ec)][_0x402680]=_[_0x445b('0x12')](_0x197c73,attributes);}else{delete _0x4de9d2[util['format'](_0x445b('0x13'),_0x3204ec)][_0x402680];}emit(util[_0x445b('0x11')](_0x445b('0x14'),_0x3204ec,_0x4f544f),util[_0x445b('0x11')](_0x445b('0x15'),_0x3204ec,_0x277d7d?'save':_0x445b('0x16')),_[_0x445b('0x12')](_0x197c73,attributes));}var rpc={'openchannelQueueReport':require(_0x445b('0x17')),'mailQueueReport':require(_0x445b('0x18')),'chatQueueReport':require(_0x445b('0x19')),'smsQueueReport':require(_0x445b('0x1a')),'faxQueueReport':require(_0x445b('0x1b')),'whatsappQueueReport':require(_0x445b('0x1c')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0x445b('0x1d')),'mailInteraction':require(_0x445b('0x1e')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require('../../rpc/smsInteraction'),'whatsappInteraction':require(_0x445b('0x1f'))};var queue=schema({'name':{'type':_0x445b('0x20'),'required':!![],'message':_0x445b('0x21')},'timeout':{'type':_0x445b('0x22'),'message':_0x445b('0x23')}});function startRouting(_0x3c1278,_0x3101ca,_0x33d044,_0x662f6){if(_0x3c1278&&_0x3101ca&&_0x33d044){_0x3101ca[_0x445b('0x24')]+=0x1;var _0x52e6a6={'uniqueid':_0x3c1278,'from':_0x33d044[_0x445b('0x25')]?_0x33d044['body'][_0x445b('0xa')]:'','joinAt':moment()['format'](_0x445b('0x26')),'ContactId':_0x33d044[_0x445b('0x27')]?_0x33d044['contact']['id']:null,'ListId':_0x33d044[_0x445b('0x28')]?_0x33d044[_0x445b('0x28')]['id']:null};_0x52e6a6[_[_0x445b('0x29')](_0x33d044[_0x445b('0x2a')])+'QueueId']=_0x3101ca['id']||null;_0x52e6a6[_['upperFirst'](_0x33d044[_0x445b('0x2a')])+_0x445b('0x2b')]=_0x33d044['interaction']?_0x33d044[_0x445b('0x2c')]['id']:null;_0x52e6a6[_[_0x445b('0x29')](_0x33d044[_0x445b('0x2a')])+'MessageId']=_0x33d044[_0x445b('0x2d')]?_0x33d044[_0x445b('0x2d')]['id']:null;_0x52e6a6[_['upperFirst'](_0x33d044['channel'])+(_0x33d044[_0x445b('0x2a')]!==_0x445b('0x2e')?_0x445b('0x2f'):_0x445b('0x30'))]=_0x33d044[_0x445b('0x9')]?_0x33d044[_0x445b('0x9')]['id']:null;logger[_0x445b('0x31')](util['format'](_0x445b('0x32'),_0x3c1278,_0x3101ca[_0x445b('0x33')]));emitChannelQueueInteraction(_0x33d044[_0x445b('0x2a')],_0x3101ca[_0x445b('0x33')],_0x52e6a6,_0x33d044[_0x445b('0x9')][_0x445b('0x33')],_0x33d044[_0x445b('0x2d')]['id'],!![],_0x662f6,_0x3101ca['id']);if(rpc[_0x33d044['channel']+_0x445b('0x34')]){return rpc[_0x33d044[_0x445b('0x2a')]+_0x445b('0x34')][_0x445b('0x35')](_0x52e6a6)[_0x445b('0x36')](function(_0x3a1fca){logger[_0x445b('0x37')]('create\x20queue\x20report',_0x3a1fca);});}}}function stopRouting(_0x4e38ae,_0x2807bd,_0x5645da,_0x1eaeaa){if(_0x4e38ae&&_0x2807bd){_0x2807bd[_0x445b('0x24')]-=0x1;var _0x206a0d={'leaveAt':moment()[_0x445b('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()['format'](_0x445b('0x26')),'reason':'accepted'};logger[_0x445b('0x31')](util[_0x445b('0x11')](_0x445b('0x38'),_0x4e38ae,_0x2807bd[_0x445b('0x33')]));emitChannelQueueInteraction(_0x5645da[_0x445b('0x2a')],_0x2807bd[_0x445b('0x33')],_0x5645da[_0x445b('0x25')],_0x5645da[_0x445b('0x9')][_0x445b('0x33')],_0x5645da['message']['id'],![],_0x1eaeaa,_0x2807bd['id']);return rpc[_0x5645da[_0x445b('0x2a')]+'Interaction']['update'](_0x5645da[_0x445b('0x2c')]['id'],{'queueId':_0x2807bd['id']})['then'](function(){if(rpc[_0x5645da[_0x445b('0x2a')]+_0x445b('0x34')]){return rpc[_0x5645da[_0x445b('0x2a')]+_0x445b('0x34')]['update'](_0x4e38ae,_0x206a0d)[_0x445b('0x36')](function(_0x53704b){logger['error'](_0x445b('0x39'),_0x53704b);});}});}}function endRouting(_0xc511be,_0x59aa7c,_0x39e6a1,_0x40cb36){if(_0xc511be&&_0x59aa7c){_0x59aa7c['waiting']-=0x1;var _0x10f374={'leaveAt':moment()[_0x445b('0x11')](_0x445b('0x26')),'exitAt':moment()[_0x445b('0x11')](_0x445b('0x26')),'reason':'timeout'};logger[_0x445b('0x31')](util[_0x445b('0x11')]('[%s][END:QUEUE][NAME:%s]',_0xc511be,_0x59aa7c[_0x445b('0x33')]));emitChannelQueueInteraction(_0x39e6a1[_0x445b('0x2a')],_0x59aa7c[_0x445b('0x33')],_0x39e6a1[_0x445b('0x25')],_0x39e6a1[_0x445b('0x9')][_0x445b('0x33')],_0x39e6a1['message']['id'],![],_0x40cb36);if(rpc[_0x39e6a1[_0x445b('0x2a')]+'QueueReport']){return rpc[_0x39e6a1[_0x445b('0x2a')]+'QueueReport']['update'](_0xc511be,_0x10f374)[_0x445b('0x36')](function(_0x299f54){logger[_0x445b('0x37')]('update\x20queue\x20report',_0x299f54);});}}}function handleFindQueue(_0x161117){return function(_0x12326e){return _0x12326e[_0x445b('0x33')][_0x445b('0x3a')]()===_0x161117[_0x445b('0x3a')]();};}exports[_0x445b('0x3b')]=function(_0x414a2c,_0x4da377,_0x585618,_0x19c661){return function(_0x3664d9){try{var _0x36b014={'name':_0x4da377[0x0],'timeout':_0x4da377[0x1]};var _0x3ff82f=queue[_0x445b('0x3c')](_0x36b014,{'typecast':!![]});if(_0x3ff82f[_0x445b('0x3d')]){logger[_0x445b('0x37')](_0x445b('0x3e'),_0x414a2c,_[_0x445b('0x3f')](_0x3ff82f,'message')[_0x445b('0x40')](',\x20'));_0x3664d9[_0x445b('0x41')]();}else{var _0x45e860=_[_0x445b('0x42')](_0x585618[_0x19c661[_0x445b('0x2a')]+'Queues'],handleFindQueue(_0x36b014[_0x445b('0x33')]));if(_0x45e860){startRouting(_0x414a2c,_0x45e860,_0x19c661,_0x585618);var _0x3c79fe=(_0x45e860['timeout']||0xa)*0x3e8;var _0x1f318e=(_0x36b014[_0x445b('0x43')]||0x14)*0x3e8;var _0x24a4b9;if(_0x3c79fe>_0x1f318e){_0x1f318e=_0x3c79fe;}var _0x33321a=seqqueue[_0x445b('0x44')](_0x3c79fe);_0x33321a['id']=_0x414a2c;_0x33321a[_0x445b('0x45')]=_0x3c79fe;_0x33321a[_0x445b('0x46')]=_0x1f318e;_0x33321a[_0x445b('0x2a')]=_0x19c661[_0x445b('0x2a')];_0x585618[_0x445b('0x47')][_0x414a2c]['on']('end',function(){logger[_0x445b('0x31')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x414a2c);stopRouting(_0x414a2c,_0x45e860,_0x19c661,_0x585618);clearTimeout(_0x24a4b9);_0x24a4b9=undefined;_0x33321a['close'](!![]);if(_0x585618['rules'][_0x414a2c]){delete _0x585618[_0x445b('0x47')][_0x414a2c];}_0x3664d9[_0x445b('0x41')]();});_0x585618[_0x445b('0x47')][_0x414a2c]['on'](_0x445b('0x48'),function(){if(_0x585618[_0x445b('0x47')][_0x414a2c]){delete _0x585618[_0x445b('0x47')][_0x414a2c];}});_0x24a4b9=setTimeout(function(){logger['info'](_0x445b('0x49'),_0x414a2c);endRouting(_0x414a2c,_0x45e860,_0x19c661,_0x585618);clearTimeout(_0x24a4b9);_0x33321a[_0x445b('0x4a')](!![]);_0x3664d9[_0x445b('0x4b')]();},_0x1f318e);switch(_0x45e860[_0x445b('0x4c')]){case _0x445b('0x4d'):strategy[_0x445b('0x4d')](_0x33321a,_0x45e860,_0x585618,_0x19c661);break;default:strategy[_0x445b('0x4e')](_0x33321a,_0x45e860,_0x585618,_0x19c661);}}else{logger[_0x445b('0x37')](_0x445b('0x4f'),_0x414a2c,_0x36b014['name']);_0x3664d9[_0x445b('0x41')]();}}}catch(_0x4979e0){logger[_0x445b('0x37')]('[%s][QUEUE]\x20%s',_0x414a2c,_0x4979e0[_0x445b('0x50')]);_0x3664d9[_0x445b('0x41')]();}};};