Built motion from commit 7a4eb044.|2.5.36
[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 _0x969c=['beepall','log','util','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','defaults','localhost','redis','account','queue','joinAt','clone','queue_id','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','upperFirst','channel','QueueId','interaction','MessageId','message','chat','AccountId','WebsiteId','info','name','QueueReport','catch','error','[%s][STOP:QUEUE][NAME:%s]','update','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','validate','[%s][QUEUE]\x20%s','map','join','find','Queues','createQueue','atimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','rules','stop','[%s][QUEUE]\x20APPLICATION\x20END','close','rrmemory'];(function(_0x2872ff,_0x3376fd){var _0x29dc55=function(_0xbc7ef8){while(--_0xbc7ef8){_0x2872ff['push'](_0x2872ff['shift']());}};_0x29dc55(++_0x3376fd);}(_0x969c,0x19a));var _0xc969=function(_0x5e22f6,_0x19ec4c){_0x5e22f6=_0x5e22f6-0x0;var _0x1948b4=_0x969c[_0x5e22f6];return _0x1948b4;};'use strict';var schema=require('validate');var _=require('lodash');var util=require(_0xc969('0x0'));var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0xc969('0x1'));var config=require(_0xc969('0x2'));var logger=require(_0xc969('0x3'))(_0xc969('0x4'));var strategy=require(_0xc969('0x5'));config['redis']=_[_0xc969('0x6')](config['redis'],{'host':_0xc969('0x7'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xc969('0x8')]));var attributes=['id','queue_id',_0xc969('0x9'),_0xc969('0xa'),'from',_0xc969('0xb')];function emit(_0x58aeb4,_0x26a127,_0x34b8f2){io['to'](_0x58aeb4)['emit'](_0x26a127,_0x34b8f2);}function emitChannelQueueInteraction(_0xd2946,_0x30e944,_0x537465,_0x1b1048,_0x1b884f,_0x420229,_0x14b285,_0x454a5e){var _0x2c2ec6=_[_0xc969('0xc')](_0x537465);_0x2c2ec6[_0xc969('0xd')]=_0x454a5e;_0x2c2ec6[_0xc969('0xa')]=_0x30e944;_0x2c2ec6[_0xc969('0x9')]=_0x1b1048;_0x2c2ec6['id']=_0x1b884f;if(_0x420229){_0x14b285[util[_0xc969('0xe')](_0xc969('0xf'),_0xd2946)][_0x1b884f]=_[_0xc969('0x10')](_0x2c2ec6,attributes);}else{delete _0x14b285[util[_0xc969('0xe')](_0xc969('0xf'),_0xd2946)][_0x1b884f];}emit(util['format'](_0xc969('0x11'),_0xd2946,_0x30e944),util[_0xc969('0xe')]('%s_queue_waiting_interaction:%s',_0xd2946,_0x420229?'save':_0xc969('0x12')),_['pick'](_0x2c2ec6,attributes));}var rpc={'openchannelQueueReport':require(_0xc969('0x13')),'mailQueueReport':require(_0xc969('0x14')),'chatQueueReport':require(_0xc969('0x15')),'smsQueueReport':require(_0xc969('0x16')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0xc969('0x17'))};var queue=schema({'name':{'type':_0xc969('0x18'),'required':!![],'message':_0xc969('0x19')},'timeout':{'type':_0xc969('0x1a'),'message':_0xc969('0x1b')}});function startRouting(_0x5ee632,_0x28ffa2,_0x464c5d,_0x31ce46){if(_0x5ee632&&_0x28ffa2&&_0x464c5d){_0x28ffa2[_0xc969('0x1c')]+=0x1;var _0x4960c1={'uniqueid':_0x5ee632,'from':_0x464c5d[_0xc969('0x1d')]?_0x464c5d[_0xc969('0x1d')][_0xc969('0x1e')]:'','joinAt':moment()[_0xc969('0xe')](_0xc969('0x1f')),'ContactId':_0x464c5d['contact']?_0x464c5d['contact']['id']:null,'ListId':_0x464c5d['list']?_0x464c5d['list']['id']:null};_0x4960c1[_[_0xc969('0x20')](_0x464c5d[_0xc969('0x21')])+_0xc969('0x22')]=_0x28ffa2['id']||null;_0x4960c1[_[_0xc969('0x20')](_0x464c5d['channel'])+'InteractionId']=_0x464c5d[_0xc969('0x23')]?_0x464c5d['interaction']['id']:null;_0x4960c1[_['upperFirst'](_0x464c5d[_0xc969('0x21')])+_0xc969('0x24')]=_0x464c5d['message']?_0x464c5d[_0xc969('0x25')]['id']:null;_0x4960c1[_[_0xc969('0x20')](_0x464c5d[_0xc969('0x21')])+(_0x464c5d[_0xc969('0x21')]!==_0xc969('0x26')?_0xc969('0x27'):_0xc969('0x28'))]=_0x464c5d[_0xc969('0x9')]?_0x464c5d[_0xc969('0x9')]['id']:null;logger[_0xc969('0x29')](util['format']('[%s][START:QUEUE][NAME:%s]',_0x5ee632,_0x28ffa2['name']));emitChannelQueueInteraction(_0x464c5d[_0xc969('0x21')],_0x28ffa2[_0xc969('0x2a')],_0x4960c1,_0x464c5d['account'][_0xc969('0x2a')],_0x464c5d['message']['id'],!![],_0x31ce46,_0x28ffa2['id']);if(rpc[_0x464c5d['channel']+_0xc969('0x2b')]){return rpc[_0x464c5d[_0xc969('0x21')]+_0xc969('0x2b')]['create'](_0x4960c1)[_0xc969('0x2c')](function(_0x2c35ee){logger[_0xc969('0x2d')]('create\x20queue\x20report');});}}}function stopRouting(_0x5ed421,_0x269a06,_0x5b909a,_0x3cd788){if(_0x5ed421&&_0x269a06){_0x269a06[_0xc969('0x1c')]-=0x1;var _0x2ef83a={'leaveAt':moment()['format'](_0xc969('0x1f')),'acceptAt':moment()[_0xc969('0xe')](_0xc969('0x1f')),'reason':'accepted'};logger['info'](util[_0xc969('0xe')](_0xc969('0x2e'),_0x5ed421,_0x269a06[_0xc969('0x2a')]));emitChannelQueueInteraction(_0x5b909a[_0xc969('0x21')],_0x269a06[_0xc969('0x2a')],_0x5b909a['body'],_0x5b909a[_0xc969('0x9')][_0xc969('0x2a')],_0x5b909a['message']['id'],![],_0x3cd788,_0x269a06['id']);if(rpc[_0x5b909a['channel']+_0xc969('0x2b')]){return rpc[_0x5b909a['channel']+_0xc969('0x2b')][_0xc969('0x2f')](_0x5ed421,_0x2ef83a)[_0xc969('0x2c')](function(_0x440260){logger['error']('update\x20queue\x20report');});}}}function endRouting(_0x1ff5ee,_0x12f15a,_0x5f207e,_0x5ab549){if(_0x1ff5ee&&_0x12f15a){_0x12f15a[_0xc969('0x1c')]-=0x1;var _0x16b0b3={'leaveAt':moment()[_0xc969('0xe')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0xc969('0xe')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xc969('0x30')};logger[_0xc969('0x29')](util[_0xc969('0xe')](_0xc969('0x31'),_0x1ff5ee,_0x12f15a[_0xc969('0x2a')]));emitChannelQueueInteraction(_0x5f207e[_0xc969('0x21')],_0x12f15a[_0xc969('0x2a')],_0x5f207e['body'],_0x5f207e[_0xc969('0x9')][_0xc969('0x2a')],_0x5f207e['message']['id'],![],_0x5ab549);if(rpc[_0x5f207e[_0xc969('0x21')]+_0xc969('0x2b')]){return rpc[_0x5f207e['channel']+'QueueReport'][_0xc969('0x2f')](_0x1ff5ee,_0x16b0b3)[_0xc969('0x2c')](function(_0x18c9ef){logger[_0xc969('0x2d')]('update\x20queue\x20report');});}}}function handleFindQueue(_0x4d1957){return function(_0x2c31d9){return _0x2c31d9[_0xc969('0x2a')][_0xc969('0x32')]()===_0x4d1957[_0xc969('0x32')]();};}exports['consequence']=function(_0x2e2dfc,_0x13a28f,_0x4bda22,_0x46a3f5){return function(_0x16bfaa){try{var _0x45f1fe={'name':_0x13a28f[0x0],'timeout':_0x13a28f[0x1]};var _0xdb34d7=queue[_0xc969('0x33')](_0x45f1fe,{'typecast':!![]});if(_0xdb34d7['length']){logger['error'](_0xc969('0x34'),_0x2e2dfc,_[_0xc969('0x35')](_0xdb34d7,_0xc969('0x25'))[_0xc969('0x36')](',\x20'));_0x16bfaa['stop']();}else{var _0x5a1281=_[_0xc969('0x37')](_0x4bda22[_0x46a3f5['channel']+_0xc969('0x38')],handleFindQueue(_0x45f1fe[_0xc969('0x2a')]));if(_0x5a1281){startRouting(_0x2e2dfc,_0x5a1281,_0x46a3f5,_0x4bda22);var _0x3ebce0=(_0x5a1281[_0xc969('0x30')]||0xa)*0x3e8;var _0x3a8eed=(_0x45f1fe[_0xc969('0x30')]||0x14)*0x3e8;var _0x5261b5,_0x2bf6e5;if(_0x3ebce0>_0x3a8eed){_0x3a8eed=_0x3ebce0;}var _0x2b337a=seqqueue[_0xc969('0x39')](_0x3ebce0);_0x2b337a['id']=_0x2e2dfc;_0x2b337a[_0xc969('0x3a')]=_0x3ebce0;_0x2b337a['qtimeout']=_0x3a8eed;_0x2b337a[_0xc969('0x21')]=_0x46a3f5['channel'];_0x4bda22['rules'][_0x2e2dfc]['on'](_0xc969('0x3b'),function(){logger[_0xc969('0x29')](_0xc969('0x3c'),_0x2e2dfc);stopRouting(_0x2e2dfc,_0x5a1281,_0x46a3f5,_0x4bda22);clearTimeout(_0x5261b5);_0x5261b5=undefined;_0x2b337a['close'](!![]);if(_0x4bda22['rules'][_0x2e2dfc]){delete _0x4bda22[_0xc969('0x3d')][_0x2e2dfc];}_0x16bfaa[_0xc969('0x3e')]();});_0x4bda22[_0xc969('0x3d')][_0x2e2dfc]['on']('complete',function(){if(_0x4bda22[_0xc969('0x3d')][_0x2e2dfc]){delete _0x4bda22['rules'][_0x2e2dfc];}});_0x5261b5=setTimeout(function(){logger['info'](_0xc969('0x3f'),_0x2e2dfc);endRouting(_0x2e2dfc,_0x5a1281,_0x46a3f5,_0x4bda22);clearTimeout(_0x5261b5);_0x2b337a[_0xc969('0x40')](!![]);_0x16bfaa['next']();},_0x3a8eed);switch(_0x5a1281['strategy']){case _0xc969('0x41'):strategy['rrmemory'](_0x2b337a,_0x5a1281,_0x4bda22,_0x46a3f5);break;default:strategy[_0xc969('0x42')](_0x2b337a,_0x5a1281,_0x4bda22,_0x46a3f5);}}else{logger['error']('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x2e2dfc,_0x45f1fe['name']);_0x16bfaa[_0xc969('0x3e')]();}}}catch(_0x1b41bd){console[_0xc969('0x43')](_0x1b41bd);logger[_0xc969('0x2d')](_0xc969('0x34'),_0x2e2dfc,_0x1b41bd['stack']);_0x16bfaa[_0xc969('0x3e')]();}};};