Built motion from commit bab6f49e.|2.6.17
[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 _0x5d2a=['lodash','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','clone','push','capitalize','%sQueuesWaitingInteractions','format','save','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','info','name','QueueReport','create','catch','error','create\x20queue\x20report','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','update','timeout','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','stop','find','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack'];(function(_0x288903,_0xfef0fd){var _0xe6c7e4=function(_0x534daf){while(--_0x534daf){_0x288903['push'](_0x288903['shift']());}};_0xe6c7e4(++_0xfef0fd);}(_0x5d2a,0x9e));var _0xa5d2=function(_0x941970,_0x555c12){_0x941970=_0x941970-0x0;var _0x2d53f9=_0x5d2a[_0x941970];return _0x2d53f9;};'use strict';var schema=require('validate');var _=require(_0xa5d2('0x0'));var util=require('util');var seqqueue=require('seq-queue');var moment=require(_0xa5d2('0x1'));var Redis=require(_0xa5d2('0x2'));var config=require(_0xa5d2('0x3'));var logger=require(_0xa5d2('0x4'))(_0xa5d2('0x5'));var strategy=require(_0xa5d2('0x6'));config[_0xa5d2('0x7')]=_[_0xa5d2('0x8')](config[_0xa5d2('0x7')],{'host':_0xa5d2('0x9'),'port':0x18eb});var io=require(_0xa5d2('0xa'))(new Redis(config[_0xa5d2('0x7')]));var attributes=['id',_0xa5d2('0xb'),_0xa5d2('0xc'),_0xa5d2('0xd'),_0xa5d2('0xe'),_0xa5d2('0xf')];function emit(_0x17e3b6,_0x10f697,_0x526b1b){io['to'](_0x17e3b6)['emit'](_0x10f697,_0x526b1b);}function emitChannelQueueInteraction(_0x697ef5,_0x190c48,_0x4348df,_0x28b5f4,_0x341425,_0x5b49ee,_0x2364d5,_0x234df5){var _0x46baad=_[_0xa5d2('0x10')](_0x4348df);_0x46baad[_0xa5d2('0xb')]=_0x234df5;_0x46baad['queue']=_0x190c48;_0x46baad['account']=_0x28b5f4;_0x46baad['id']=_0x341425;if(_0x5b49ee){attributes[_0xa5d2('0x11')](_[_0xa5d2('0x12')](_0x697ef5)+'InteractionId');_0x2364d5[util['format'](_0xa5d2('0x13'),_0x697ef5)][_0x341425]=_['pick'](_0x46baad,attributes);}else{delete _0x2364d5[util[_0xa5d2('0x14')](_0xa5d2('0x13'),_0x697ef5)][_0x341425];}emit(util[_0xa5d2('0x14')]('%s:queue:%s',_0x697ef5,_0x190c48),util[_0xa5d2('0x14')]('%s_queue_waiting_interaction:%s',_0x697ef5,_0x5b49ee?_0xa5d2('0x15'):'remove'),_[_0xa5d2('0x16')](_0x46baad,attributes));}var rpc={'openchannelQueueReport':require(_0xa5d2('0x17')),'mailQueueReport':require(_0xa5d2('0x18')),'chatQueueReport':require(_0xa5d2('0x19')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0xa5d2('0x1a')),'whatsappQueueReport':require(_0xa5d2('0x1b'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0xa5d2('0x1c')},'timeout':{'type':'number','message':_0xa5d2('0x1d')}});function startRouting(_0x565c2d,_0x125176,_0x1b20ab,_0x5332b8){if(_0x565c2d&&_0x125176&&_0x1b20ab){_0x125176['waiting']+=0x1;var _0x469f7f={'uniqueid':_0x565c2d,'from':_0x1b20ab[_0xa5d2('0x1e')]?_0x1b20ab['body'][_0xa5d2('0xe')]:'','joinAt':moment()['format'](_0xa5d2('0x1f')),'ContactId':_0x1b20ab[_0xa5d2('0x20')]?_0x1b20ab[_0xa5d2('0x20')]['id']:null,'ListId':_0x1b20ab['list']?_0x1b20ab[_0xa5d2('0x21')]['id']:null};_0x469f7f[_[_0xa5d2('0x22')](_0x1b20ab[_0xa5d2('0x23')])+_0xa5d2('0x24')]=_0x125176['id']||null;_0x469f7f[_[_0xa5d2('0x22')](_0x1b20ab[_0xa5d2('0x23')])+_0xa5d2('0x25')]=_0x1b20ab[_0xa5d2('0x26')]?_0x1b20ab[_0xa5d2('0x26')]['id']:null;_0x469f7f[_[_0xa5d2('0x22')](_0x1b20ab[_0xa5d2('0x23')])+_0xa5d2('0x27')]=_0x1b20ab[_0xa5d2('0x28')]?_0x1b20ab[_0xa5d2('0x28')]['id']:null;_0x469f7f[_[_0xa5d2('0x22')](_0x1b20ab[_0xa5d2('0x23')])+(_0x1b20ab[_0xa5d2('0x23')]!==_0xa5d2('0x29')?_0xa5d2('0x2a'):_0xa5d2('0x2b'))]=_0x1b20ab[_0xa5d2('0xc')]?_0x1b20ab[_0xa5d2('0xc')]['id']:null;logger[_0xa5d2('0x2c')](util[_0xa5d2('0x14')]('[%s][START:QUEUE][NAME:%s]',_0x565c2d,_0x125176[_0xa5d2('0x2d')]));emitChannelQueueInteraction(_0x1b20ab[_0xa5d2('0x23')],_0x125176[_0xa5d2('0x2d')],_0x469f7f,_0x1b20ab[_0xa5d2('0xc')][_0xa5d2('0x2d')],_0x1b20ab['message']['id'],!![],_0x5332b8,_0x125176['id']);if(rpc[_0x1b20ab[_0xa5d2('0x23')]+_0xa5d2('0x2e')]){return rpc[_0x1b20ab[_0xa5d2('0x23')]+_0xa5d2('0x2e')][_0xa5d2('0x2f')](_0x469f7f)[_0xa5d2('0x30')](function(_0x5b2a45){logger[_0xa5d2('0x31')](_0xa5d2('0x32'));});}}}function stopRouting(_0x56d74a,_0x4aa913,_0xfff3d4,_0x5173cc){if(_0x56d74a&&_0x4aa913){_0x4aa913[_0xa5d2('0x33')]-=0x1;var _0x527408={'leaveAt':moment()[_0xa5d2('0x14')](_0xa5d2('0x1f')),'acceptAt':moment()['format'](_0xa5d2('0x1f')),'reason':_0xa5d2('0x34')};logger[_0xa5d2('0x2c')](util[_0xa5d2('0x14')](_0xa5d2('0x35'),_0x56d74a,_0x4aa913[_0xa5d2('0x2d')]));emitChannelQueueInteraction(_0xfff3d4[_0xa5d2('0x23')],_0x4aa913[_0xa5d2('0x2d')],_0xfff3d4['body'],_0xfff3d4[_0xa5d2('0xc')][_0xa5d2('0x2d')],_0xfff3d4[_0xa5d2('0x28')]['id'],![],_0x5173cc,_0x4aa913['id']);if(rpc[_0xfff3d4[_0xa5d2('0x23')]+_0xa5d2('0x2e')]){return rpc[_0xfff3d4[_0xa5d2('0x23')]+_0xa5d2('0x2e')][_0xa5d2('0x36')](_0x56d74a,_0x527408)['catch'](function(_0x264ce3){logger[_0xa5d2('0x31')]('update\x20queue\x20report');});}}}function endRouting(_0x3d4376,_0x25185b,_0x2cf995,_0x76b40f){if(_0x3d4376&&_0x25185b){_0x25185b[_0xa5d2('0x33')]-=0x1;var _0x90dbf6={'leaveAt':moment()[_0xa5d2('0x14')](_0xa5d2('0x1f')),'exitAt':moment()[_0xa5d2('0x14')](_0xa5d2('0x1f')),'reason':_0xa5d2('0x37')};logger['info'](util[_0xa5d2('0x14')](_0xa5d2('0x38'),_0x3d4376,_0x25185b[_0xa5d2('0x2d')]));emitChannelQueueInteraction(_0x2cf995[_0xa5d2('0x23')],_0x25185b[_0xa5d2('0x2d')],_0x2cf995['body'],_0x2cf995[_0xa5d2('0xc')][_0xa5d2('0x2d')],_0x2cf995[_0xa5d2('0x28')]['id'],![],_0x76b40f);if(rpc[_0x2cf995[_0xa5d2('0x23')]+_0xa5d2('0x2e')]){return rpc[_0x2cf995['channel']+'QueueReport']['update'](_0x3d4376,_0x90dbf6)[_0xa5d2('0x30')](function(_0xea3fd2){logger[_0xa5d2('0x31')](_0xa5d2('0x39'));});}}}function handleFindQueue(_0xf3c93e){return function(_0x27ff39){return _0x27ff39[_0xa5d2('0x2d')][_0xa5d2('0x3a')]()===_0xf3c93e[_0xa5d2('0x3a')]();};}exports[_0xa5d2('0x3b')]=function(_0x29ffab,_0x5bd814,_0x42dbf7,_0x172660){return function(_0x188fa7){try{var _0xb31056={'name':_0x5bd814[0x0],'timeout':_0x5bd814[0x1]};var _0x116f05=queue['validate'](_0xb31056,{'typecast':!![]});if(_0x116f05[_0xa5d2('0x3c')]){logger[_0xa5d2('0x31')](_0xa5d2('0x3d'),_0x29ffab,_[_0xa5d2('0x3e')](_0x116f05,_0xa5d2('0x28'))[_0xa5d2('0x3f')](',\x20'));_0x188fa7[_0xa5d2('0x40')]();}else{var _0x332877=_[_0xa5d2('0x41')](_0x42dbf7[_0x172660[_0xa5d2('0x23')]+'Queues'],handleFindQueue(_0xb31056[_0xa5d2('0x2d')]));if(_0x332877){startRouting(_0x29ffab,_0x332877,_0x172660,_0x42dbf7);var _0x2e72ea=(_0x332877[_0xa5d2('0x37')]||0xa)*0x3e8;var _0x451216=(_0xb31056[_0xa5d2('0x37')]||0x14)*0x3e8;var _0x128534;if(_0x2e72ea>_0x451216){_0x451216=_0x2e72ea;}var _0x9f0d90=seqqueue['createQueue'](_0x2e72ea);_0x9f0d90['id']=_0x29ffab;_0x9f0d90[_0xa5d2('0x42')]=_0x2e72ea;_0x9f0d90[_0xa5d2('0x43')]=_0x451216;_0x9f0d90['channel']=_0x172660[_0xa5d2('0x23')];_0x42dbf7[_0xa5d2('0x44')][_0x29ffab]['on'](_0xa5d2('0x45'),function(){logger[_0xa5d2('0x2c')](_0xa5d2('0x46'),_0x29ffab);stopRouting(_0x29ffab,_0x332877,_0x172660,_0x42dbf7);clearTimeout(_0x128534);_0x128534=undefined;_0x9f0d90['close'](!![]);if(_0x42dbf7['rules'][_0x29ffab]){delete _0x42dbf7['rules'][_0x29ffab];}_0x188fa7[_0xa5d2('0x40')]();});_0x42dbf7[_0xa5d2('0x44')][_0x29ffab]['on'](_0xa5d2('0x47'),function(){if(_0x42dbf7[_0xa5d2('0x44')][_0x29ffab]){delete _0x42dbf7[_0xa5d2('0x44')][_0x29ffab];}});_0x128534=setTimeout(function(){logger[_0xa5d2('0x2c')](_0xa5d2('0x48'),_0x29ffab);endRouting(_0x29ffab,_0x332877,_0x172660,_0x42dbf7);clearTimeout(_0x128534);_0x9f0d90['close'](!![]);_0x188fa7[_0xa5d2('0x49')]();},_0x451216);switch(_0x332877[_0xa5d2('0x4a')]){case _0xa5d2('0x4b'):strategy[_0xa5d2('0x4b')](_0x9f0d90,_0x332877,_0x42dbf7,_0x172660);break;default:strategy['beepall'](_0x9f0d90,_0x332877,_0x42dbf7,_0x172660);}}else{logger[_0xa5d2('0x31')](_0xa5d2('0x4c'),_0x29ffab,_0xb31056[_0xa5d2('0x2d')]);_0x188fa7[_0xa5d2('0x40')]();}}}catch(_0x479fbe){console[_0xa5d2('0x4d')](_0x479fbe);logger['error'](_0xa5d2('0x3d'),_0x29ffab,_0x479fbe[_0xa5d2('0x4e')]);_0x188fa7[_0xa5d2('0x40')]();}};};