Built motion from commit da617fac.|2.6.6
[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 _0xb369=['close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','util','moment','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','localhost','socket.io-emitter','account','from','joinAt','emit','queue_id','queue','format','%s:queue:%s','%s_queue_waiting_interaction:%s','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','MessageId','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','create\x20queue\x20report','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','update','error','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','stop','find','Queues','timeout','createQueue','qtimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED'];(function(_0x5df637,_0x3c15d3){var _0x1702d6=function(_0x567fce){while(--_0x567fce){_0x5df637['push'](_0x5df637['shift']());}};_0x1702d6(++_0x3c15d3);}(_0xb369,0x146));var _0x9b36=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xb369[_0x122ef9];return _0x42fba0;};'use strict';var schema=require(_0x9b36('0x0'));var _=require(_0x9b36('0x1'));var util=require(_0x9b36('0x2'));var seqqueue=require('seq-queue');var moment=require(_0x9b36('0x3'));var Redis=require('ioredis');var config=require(_0x9b36('0x4'));var logger=require(_0x9b36('0x5'))(_0x9b36('0x6'));var strategy=require(_0x9b36('0x7'));config[_0x9b36('0x8')]=_['defaults'](config[_0x9b36('0x8')],{'host':_0x9b36('0x9'),'port':0x18eb});var io=require(_0x9b36('0xa'))(new Redis(config[_0x9b36('0x8')]));var attributes=['id','queue_id',_0x9b36('0xb'),'queue',_0x9b36('0xc'),_0x9b36('0xd')];function emit(_0x20a57b,_0x4692b8,_0x3cf0b4){io['to'](_0x20a57b)[_0x9b36('0xe')](_0x4692b8,_0x3cf0b4);}function emitChannelQueueInteraction(_0x210339,_0x52bb12,_0x504c80,_0x2b53d4,_0x45e417,_0x42581b,_0x23390a,_0x1c18e6){var _0x463f05=_['clone'](_0x504c80);_0x463f05[_0x9b36('0xf')]=_0x1c18e6;_0x463f05[_0x9b36('0x10')]=_0x52bb12;_0x463f05['account']=_0x2b53d4;_0x463f05['id']=_0x45e417;if(_0x42581b){_0x23390a[util[_0x9b36('0x11')]('%sQueuesWaitingInteractions',_0x210339)][_0x45e417]=_['pick'](_0x463f05,attributes);}else{delete _0x23390a[util[_0x9b36('0x11')]('%sQueuesWaitingInteractions',_0x210339)][_0x45e417];}emit(util[_0x9b36('0x11')](_0x9b36('0x12'),_0x210339,_0x52bb12),util['format'](_0x9b36('0x13'),_0x210339,_0x42581b?'save':'remove'),_[_0x9b36('0x14')](_0x463f05,attributes));}var rpc={'openchannelQueueReport':require(_0x9b36('0x15')),'mailQueueReport':require(_0x9b36('0x16')),'chatQueueReport':require(_0x9b36('0x17')),'smsQueueReport':require(_0x9b36('0x18')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':_0x9b36('0x19'),'required':!![],'message':_0x9b36('0x1a')},'timeout':{'type':_0x9b36('0x1b'),'message':_0x9b36('0x1c')}});function startRouting(_0x4d6db9,_0x57fb7d,_0x140f08,_0x50bbd8){if(_0x4d6db9&&_0x57fb7d&&_0x140f08){_0x57fb7d['waiting']+=0x1;var _0x4f2db1={'uniqueid':_0x4d6db9,'from':_0x140f08[_0x9b36('0x1d')]?_0x140f08[_0x9b36('0x1d')][_0x9b36('0xc')]:'','joinAt':moment()['format'](_0x9b36('0x1e')),'ContactId':_0x140f08[_0x9b36('0x1f')]?_0x140f08[_0x9b36('0x1f')]['id']:null,'ListId':_0x140f08[_0x9b36('0x20')]?_0x140f08[_0x9b36('0x20')]['id']:null};_0x4f2db1[_[_0x9b36('0x21')](_0x140f08[_0x9b36('0x22')])+_0x9b36('0x23')]=_0x57fb7d['id']||null;_0x4f2db1[_[_0x9b36('0x21')](_0x140f08[_0x9b36('0x22')])+_0x9b36('0x24')]=_0x140f08['interaction']?_0x140f08['interaction']['id']:null;_0x4f2db1[_[_0x9b36('0x21')](_0x140f08[_0x9b36('0x22')])+_0x9b36('0x25')]=_0x140f08[_0x9b36('0x26')]?_0x140f08[_0x9b36('0x26')]['id']:null;_0x4f2db1[_[_0x9b36('0x21')](_0x140f08[_0x9b36('0x22')])+(_0x140f08['channel']!=='chat'?_0x9b36('0x27'):_0x9b36('0x28'))]=_0x140f08['account']?_0x140f08[_0x9b36('0xb')]['id']:null;logger[_0x9b36('0x29')](util[_0x9b36('0x11')](_0x9b36('0x2a'),_0x4d6db9,_0x57fb7d['name']));emitChannelQueueInteraction(_0x140f08[_0x9b36('0x22')],_0x57fb7d[_0x9b36('0x2b')],_0x4f2db1,_0x140f08[_0x9b36('0xb')]['name'],_0x140f08[_0x9b36('0x26')]['id'],!![],_0x50bbd8,_0x57fb7d['id']);if(rpc[_0x140f08['channel']+_0x9b36('0x2c')]){return rpc[_0x140f08[_0x9b36('0x22')]+_0x9b36('0x2c')][_0x9b36('0x2d')](_0x4f2db1)[_0x9b36('0x2e')](function(_0x3024c9){logger['error'](_0x9b36('0x2f'));});}}}function stopRouting(_0x5c5d30,_0x2b47a1,_0x3ffa98,_0x44e0b1){if(_0x5c5d30&&_0x2b47a1){_0x2b47a1[_0x9b36('0x30')]-=0x1;var _0x4cf22c={'leaveAt':moment()[_0x9b36('0x11')](_0x9b36('0x1e')),'acceptAt':moment()[_0x9b36('0x11')](_0x9b36('0x1e')),'reason':_0x9b36('0x31')};logger[_0x9b36('0x29')](util[_0x9b36('0x11')](_0x9b36('0x32'),_0x5c5d30,_0x2b47a1[_0x9b36('0x2b')]));emitChannelQueueInteraction(_0x3ffa98[_0x9b36('0x22')],_0x2b47a1[_0x9b36('0x2b')],_0x3ffa98['body'],_0x3ffa98[_0x9b36('0xb')][_0x9b36('0x2b')],_0x3ffa98['message']['id'],![],_0x44e0b1,_0x2b47a1['id']);if(rpc[_0x3ffa98[_0x9b36('0x22')]+_0x9b36('0x2c')]){return rpc[_0x3ffa98[_0x9b36('0x22')]+_0x9b36('0x2c')][_0x9b36('0x33')](_0x5c5d30,_0x4cf22c)[_0x9b36('0x2e')](function(_0x5d6a74){logger[_0x9b36('0x34')](_0x9b36('0x35'));});}}}function endRouting(_0x49380b,_0x5ab641,_0x505c6d,_0x21d2bc){if(_0x49380b&&_0x5ab641){_0x5ab641[_0x9b36('0x30')]-=0x1;var _0x417f15={'leaveAt':moment()[_0x9b36('0x11')](_0x9b36('0x1e')),'exitAt':moment()[_0x9b36('0x11')](_0x9b36('0x1e')),'reason':'timeout'};logger['info'](util[_0x9b36('0x11')](_0x9b36('0x36'),_0x49380b,_0x5ab641[_0x9b36('0x2b')]));emitChannelQueueInteraction(_0x505c6d[_0x9b36('0x22')],_0x5ab641[_0x9b36('0x2b')],_0x505c6d[_0x9b36('0x1d')],_0x505c6d[_0x9b36('0xb')]['name'],_0x505c6d[_0x9b36('0x26')]['id'],![],_0x21d2bc);if(rpc[_0x505c6d[_0x9b36('0x22')]+_0x9b36('0x2c')]){return rpc[_0x505c6d['channel']+_0x9b36('0x2c')]['update'](_0x49380b,_0x417f15)['catch'](function(_0x20db76){logger['error'](_0x9b36('0x35'));});}}}function handleFindQueue(_0x451d3a){return function(_0x397ae7){return _0x397ae7[_0x9b36('0x2b')][_0x9b36('0x37')]()===_0x451d3a[_0x9b36('0x37')]();};}exports[_0x9b36('0x38')]=function(_0x6ca764,_0x13bb77,_0x87923e,_0x4faa4e){return function(_0x3c0c57){try{var _0x1bfbf2={'name':_0x13bb77[0x0],'timeout':_0x13bb77[0x1]};var _0x5ab9e3=queue['validate'](_0x1bfbf2,{'typecast':!![]});if(_0x5ab9e3[_0x9b36('0x39')]){logger[_0x9b36('0x34')](_0x9b36('0x3a'),_0x6ca764,_[_0x9b36('0x3b')](_0x5ab9e3,_0x9b36('0x26'))[_0x9b36('0x3c')](',\x20'));_0x3c0c57[_0x9b36('0x3d')]();}else{var _0x468095=_[_0x9b36('0x3e')](_0x87923e[_0x4faa4e['channel']+_0x9b36('0x3f')],handleFindQueue(_0x1bfbf2['name']));if(_0x468095){startRouting(_0x6ca764,_0x468095,_0x4faa4e,_0x87923e);var _0x2ce187=(_0x468095['timeout']||0xa)*0x3e8;var _0x3e6d8d=(_0x1bfbf2[_0x9b36('0x40')]||0x14)*0x3e8;var _0x256198,_0x442a74;if(_0x2ce187>_0x3e6d8d){_0x3e6d8d=_0x2ce187;}var _0x35ad5e=seqqueue[_0x9b36('0x41')](_0x2ce187);_0x35ad5e['id']=_0x6ca764;_0x35ad5e['atimeout']=_0x2ce187;_0x35ad5e[_0x9b36('0x42')]=_0x3e6d8d;_0x35ad5e[_0x9b36('0x22')]=_0x4faa4e[_0x9b36('0x22')];_0x87923e['rules'][_0x6ca764]['on'](_0x9b36('0x43'),function(){logger['info'](_0x9b36('0x44'),_0x6ca764);stopRouting(_0x6ca764,_0x468095,_0x4faa4e,_0x87923e);clearTimeout(_0x256198);_0x256198=undefined;_0x35ad5e[_0x9b36('0x45')](!![]);if(_0x87923e[_0x9b36('0x46')][_0x6ca764]){delete _0x87923e[_0x9b36('0x46')][_0x6ca764];}_0x3c0c57[_0x9b36('0x3d')]();});_0x87923e[_0x9b36('0x46')][_0x6ca764]['on'](_0x9b36('0x47'),function(){if(_0x87923e[_0x9b36('0x46')][_0x6ca764]){delete _0x87923e['rules'][_0x6ca764];}});_0x256198=setTimeout(function(){logger[_0x9b36('0x29')](_0x9b36('0x48'),_0x6ca764);endRouting(_0x6ca764,_0x468095,_0x4faa4e,_0x87923e);clearTimeout(_0x256198);_0x35ad5e[_0x9b36('0x45')](!![]);_0x3c0c57[_0x9b36('0x49')]();},_0x3e6d8d);switch(_0x468095[_0x9b36('0x4a')]){case _0x9b36('0x4b'):strategy[_0x9b36('0x4b')](_0x35ad5e,_0x468095,_0x87923e,_0x4faa4e);break;default:strategy['beepall'](_0x35ad5e,_0x468095,_0x87923e,_0x4faa4e);}}else{logger[_0x9b36('0x34')](_0x9b36('0x4c'),_0x6ca764,_0x1bfbf2[_0x9b36('0x2b')]);_0x3c0c57['stop']();}}}catch(_0x6061f2){console[_0x9b36('0x4d')](_0x6061f2);logger[_0x9b36('0x34')](_0x9b36('0x3a'),_0x6ca764,_0x6061f2[_0x9b36('0x4e')]);_0x3c0c57['stop']();}};};