2f17fdc7f0211137b50084acbbbd2270fcca04fc
[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 _0x8381=['name','QueueReport','create','catch','error','create\x20queue\x20report','accepted','Interaction','update','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','length','map','join','stop','find','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','[%s][QUEUE]\x20%s','stack','validate','lodash','util','seq-queue','moment','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','localhost','queue_id','queue','clone','account','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/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../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','WebsiteId','info','[%s][START:QUEUE][NAME:%s]'];(function(_0xcd4277,_0x3cfdb2){var _0x282c4a=function(_0xd5b9bd){while(--_0xd5b9bd){_0xcd4277['push'](_0xcd4277['shift']());}};_0x282c4a(++_0x3cfdb2);}(_0x8381,0x17d));var _0x1838=function(_0x3453d4,_0x3a812e){_0x3453d4=_0x3453d4-0x0;var _0x5259c0=_0x8381[_0x3453d4];return _0x5259c0;};'use strict';var schema=require(_0x1838('0x0'));var _=require(_0x1838('0x1'));var util=require(_0x1838('0x2'));var seqqueue=require(_0x1838('0x3'));var moment=require(_0x1838('0x4'));var Redis=require(_0x1838('0x5'));var config=require('../../../../config/environment');var logger=require(_0x1838('0x6'))(_0x1838('0x7'));var strategy=require(_0x1838('0x8'));config[_0x1838('0x9')]=_[_0x1838('0xa')](config[_0x1838('0x9')],{'host':_0x1838('0xb'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x1838('0x9')]));var attributes=['id',_0x1838('0xc'),'account',_0x1838('0xd'),'from','joinAt'];function emit(_0x1205a1,_0x2b565d,_0x1a66b4){io['to'](_0x1205a1)['emit'](_0x2b565d,_0x1a66b4);}function emitChannelQueueInteraction(_0x3dd62e,_0x35b135,_0x1b9eec,_0x1e884a,_0x25b556,_0x199bb3,_0x1b2beb,_0x1b67c4){var _0x489fff=_[_0x1838('0xe')](_0x1b9eec);_0x489fff[_0x1838('0xc')]=_0x1b67c4;_0x489fff[_0x1838('0xd')]=_0x35b135;_0x489fff[_0x1838('0xf')]=_0x1e884a;_0x489fff['id']=_0x25b556;if(_0x199bb3){attributes[_0x1838('0x10')](_[_0x1838('0x11')](_0x3dd62e)+_0x1838('0x12'));_0x1b2beb[util['format'](_0x1838('0x13'),_0x3dd62e)][_0x25b556]=_[_0x1838('0x14')](_0x489fff,attributes);}else{delete _0x1b2beb[util[_0x1838('0x15')](_0x1838('0x13'),_0x3dd62e)][_0x25b556];}emit(util[_0x1838('0x15')](_0x1838('0x16'),_0x3dd62e,_0x35b135),util[_0x1838('0x15')](_0x1838('0x17'),_0x3dd62e,_0x199bb3?_0x1838('0x18'):_0x1838('0x19')),_[_0x1838('0x14')](_0x489fff,attributes));}var rpc={'openchannelQueueReport':require(_0x1838('0x1a')),'mailQueueReport':require(_0x1838('0x1b')),'chatQueueReport':require(_0x1838('0x1c')),'smsQueueReport':require(_0x1838('0x1d')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require('../../rpc/whatsappQueueReport'),'chatInteraction':require(_0x1838('0x1e')),'faxInteraction':require(_0x1838('0x1f')),'mailInteraction':require(_0x1838('0x20')),'openchannelInteraction':require(_0x1838('0x21')),'smsInteraction':require(_0x1838('0x22')),'whatsappInteraction':require(_0x1838('0x23'))};var queue=schema({'name':{'type':_0x1838('0x24'),'required':!![],'message':_0x1838('0x25')},'timeout':{'type':'number','message':_0x1838('0x26')}});function startRouting(_0x301dd7,_0x41ea01,_0x4587a3,_0x487c8d){if(_0x301dd7&&_0x41ea01&&_0x4587a3){_0x41ea01[_0x1838('0x27')]+=0x1;var _0xaeea7d={'uniqueid':_0x301dd7,'from':_0x4587a3[_0x1838('0x28')]?_0x4587a3[_0x1838('0x28')]['from']:'','joinAt':moment()[_0x1838('0x15')](_0x1838('0x29')),'ContactId':_0x4587a3[_0x1838('0x2a')]?_0x4587a3['contact']['id']:null,'ListId':_0x4587a3[_0x1838('0x2b')]?_0x4587a3['list']['id']:null};_0xaeea7d[_[_0x1838('0x2c')](_0x4587a3['channel'])+'QueueId']=_0x41ea01['id']||null;_0xaeea7d[_['upperFirst'](_0x4587a3[_0x1838('0x2d')])+_0x1838('0x12')]=_0x4587a3[_0x1838('0x2e')]?_0x4587a3['interaction']['id']:null;_0xaeea7d[_[_0x1838('0x2c')](_0x4587a3[_0x1838('0x2d')])+_0x1838('0x2f')]=_0x4587a3[_0x1838('0x30')]?_0x4587a3[_0x1838('0x30')]['id']:null;_0xaeea7d[_[_0x1838('0x2c')](_0x4587a3[_0x1838('0x2d')])+(_0x4587a3['channel']!==_0x1838('0x31')?_0x1838('0x32'):_0x1838('0x33'))]=_0x4587a3['account']?_0x4587a3[_0x1838('0xf')]['id']:null;logger[_0x1838('0x34')](util[_0x1838('0x15')](_0x1838('0x35'),_0x301dd7,_0x41ea01[_0x1838('0x36')]));emitChannelQueueInteraction(_0x4587a3[_0x1838('0x2d')],_0x41ea01[_0x1838('0x36')],_0xaeea7d,_0x4587a3[_0x1838('0xf')][_0x1838('0x36')],_0x4587a3[_0x1838('0x30')]['id'],!![],_0x487c8d,_0x41ea01['id']);if(rpc[_0x4587a3[_0x1838('0x2d')]+_0x1838('0x37')]){return rpc[_0x4587a3[_0x1838('0x2d')]+'QueueReport'][_0x1838('0x38')](_0xaeea7d)[_0x1838('0x39')](function(_0x4e8189){logger[_0x1838('0x3a')](_0x1838('0x3b'),_0x4e8189);});}}}function stopRouting(_0x414cde,_0x41710b,_0x469f8d,_0x28ad4d){if(_0x414cde&&_0x41710b){_0x41710b[_0x1838('0x27')]-=0x1;var _0x384931={'leaveAt':moment()[_0x1838('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x1838('0x15')](_0x1838('0x29')),'reason':_0x1838('0x3c')};logger[_0x1838('0x34')](util[_0x1838('0x15')]('[%s][STOP:QUEUE][NAME:%s]',_0x414cde,_0x41710b[_0x1838('0x36')]));emitChannelQueueInteraction(_0x469f8d[_0x1838('0x2d')],_0x41710b['name'],_0x469f8d[_0x1838('0x28')],_0x469f8d[_0x1838('0xf')]['name'],_0x469f8d[_0x1838('0x30')]['id'],![],_0x28ad4d,_0x41710b['id']);return rpc[_0x469f8d['channel']+_0x1838('0x3d')][_0x1838('0x3e')](_0x469f8d['interaction']['id'],{'queueId':_0x41710b['id']})['then'](function(){if(rpc[_0x469f8d[_0x1838('0x2d')]+_0x1838('0x37')]){return rpc[_0x469f8d['channel']+_0x1838('0x37')][_0x1838('0x3e')](_0x414cde,_0x384931)[_0x1838('0x39')](function(_0xa9328f){logger[_0x1838('0x3a')]('update\x20queue\x20report',_0xa9328f);});}});}}function endRouting(_0x2a6ad5,_0x844920,_0x1aaadd,_0x2b6829){if(_0x2a6ad5&&_0x844920){_0x844920[_0x1838('0x27')]-=0x1;var _0x29fb12={'leaveAt':moment()[_0x1838('0x15')](_0x1838('0x29')),'exitAt':moment()[_0x1838('0x15')](_0x1838('0x29')),'reason':'timeout'};logger[_0x1838('0x34')](util['format'](_0x1838('0x3f'),_0x2a6ad5,_0x844920[_0x1838('0x36')]));emitChannelQueueInteraction(_0x1aaadd[_0x1838('0x2d')],_0x844920[_0x1838('0x36')],_0x1aaadd['body'],_0x1aaadd[_0x1838('0xf')][_0x1838('0x36')],_0x1aaadd['message']['id'],![],_0x2b6829);if(rpc[_0x1aaadd[_0x1838('0x2d')]+_0x1838('0x37')]){return rpc[_0x1aaadd['channel']+_0x1838('0x37')][_0x1838('0x3e')](_0x2a6ad5,_0x29fb12)[_0x1838('0x39')](function(_0x4ef0f){logger[_0x1838('0x3a')](_0x1838('0x40'),_0x4ef0f);});}}}function handleFindQueue(_0x4e48a6){return function(_0x3b9355){return _0x3b9355['name'][_0x1838('0x41')]()===_0x4e48a6[_0x1838('0x41')]();};}exports['consequence']=function(_0x6f35ef,_0x89e1e6,_0x15eaa6,_0x3470fb){return function(_0x5c0936){try{var _0x400951={'name':_0x89e1e6[0x0],'timeout':_0x89e1e6[0x1]};var _0x3f6f3c=queue['validate'](_0x400951,{'typecast':!![]});if(_0x3f6f3c[_0x1838('0x42')]){logger[_0x1838('0x3a')]('[%s][QUEUE]\x20%s',_0x6f35ef,_[_0x1838('0x43')](_0x3f6f3c,_0x1838('0x30'))[_0x1838('0x44')](',\x20'));_0x5c0936[_0x1838('0x45')]();}else{var _0xb6ce60=_[_0x1838('0x46')](_0x15eaa6[_0x3470fb[_0x1838('0x2d')]+_0x1838('0x47')],handleFindQueue(_0x400951[_0x1838('0x36')]));if(_0xb6ce60){startRouting(_0x6f35ef,_0xb6ce60,_0x3470fb,_0x15eaa6);var _0xf1ccca=(_0xb6ce60['timeout']||0xa)*0x3e8;var _0x1384c0=(_0x400951[_0x1838('0x48')]||0x14)*0x3e8;var _0x4ab7a2;if(_0xf1ccca>_0x1384c0){_0x1384c0=_0xf1ccca;}var _0x3fa077=seqqueue[_0x1838('0x49')](_0xf1ccca);_0x3fa077['id']=_0x6f35ef;_0x3fa077[_0x1838('0x4a')]=_0xf1ccca;_0x3fa077[_0x1838('0x4b')]=_0x1384c0;_0x3fa077[_0x1838('0x2d')]=_0x3470fb[_0x1838('0x2d')];_0x15eaa6[_0x1838('0x4c')][_0x6f35ef]['on'](_0x1838('0x4d'),function(){logger['info'](_0x1838('0x4e'),_0x6f35ef);stopRouting(_0x6f35ef,_0xb6ce60,_0x3470fb,_0x15eaa6);clearTimeout(_0x4ab7a2);_0x4ab7a2=undefined;_0x3fa077[_0x1838('0x4f')](!![]);if(_0x15eaa6[_0x1838('0x4c')][_0x6f35ef]){delete _0x15eaa6[_0x1838('0x4c')][_0x6f35ef];}_0x5c0936[_0x1838('0x45')]();});_0x15eaa6[_0x1838('0x4c')][_0x6f35ef]['on'](_0x1838('0x50'),function(){if(_0x15eaa6[_0x1838('0x4c')][_0x6f35ef]){delete _0x15eaa6['rules'][_0x6f35ef];}});_0x4ab7a2=setTimeout(function(){logger[_0x1838('0x34')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x6f35ef);endRouting(_0x6f35ef,_0xb6ce60,_0x3470fb,_0x15eaa6);clearTimeout(_0x4ab7a2);_0x3fa077[_0x1838('0x4f')](!![]);_0x5c0936[_0x1838('0x51')]();},_0x1384c0);switch(_0xb6ce60['strategy']){case _0x1838('0x52'):strategy[_0x1838('0x52')](_0x3fa077,_0xb6ce60,_0x15eaa6,_0x3470fb);break;default:strategy[_0x1838('0x53')](_0x3fa077,_0xb6ce60,_0x15eaa6,_0x3470fb);}}else{logger[_0x1838('0x3a')](_0x1838('0x54'),_0x6f35ef,_0x400951[_0x1838('0x36')]);_0x5c0936[_0x1838('0x45')]();}}}catch(_0x5aa2bd){logger['error'](_0x1838('0x55'),_0x6f35ef,_0x5aa2bd[_0x1838('0x56')]);_0x5c0936[_0x1838('0x45')]();}};};