Built motion from commit 6f14c8ba.|2.6.29
[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 _0x76de=['%sQueuesWaitingInteractions','save','remove','pick','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','list','channel','QueueId','upperFirst','interaction','MessageId','chat','AccountId','WebsiteId','account','info','[%s][START:QUEUE][NAME:%s]','name','message','QueueReport','create','catch','error','create\x20queue\x20report','accepted','Interaction','update','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','[%s][QUEUE]\x20%s','map','join','stop','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','lodash','util','seq-queue','ioredis','../../../../config/environment','../../../../config/logger','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','emit','clone','queue','push','capitalize','InteractionId','format'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x76de,0x19a));var _0xe76d=function(_0x2ed7d9,_0x3e0125){_0x2ed7d9=_0x2ed7d9-0x0;var _0x473fa5=_0x76de[_0x2ed7d9];return _0x473fa5;};'use strict';var schema=require(_0xe76d('0x0'));var _=require(_0xe76d('0x1'));var util=require(_0xe76d('0x2'));var seqqueue=require(_0xe76d('0x3'));var moment=require('moment');var Redis=require(_0xe76d('0x4'));var config=require(_0xe76d('0x5'));var logger=require(_0xe76d('0x6'))('routing');var strategy=require(_0xe76d('0x7'));config[_0xe76d('0x8')]=_[_0xe76d('0x9')](config[_0xe76d('0x8')],{'host':_0xe76d('0xa'),'port':0x18eb});var io=require(_0xe76d('0xb'))(new Redis(config[_0xe76d('0x8')]));var attributes=['id',_0xe76d('0xc'),'account','queue','from','joinAt'];function emit(_0x5178cd,_0x351fc3,_0x1e2419){io['to'](_0x5178cd)[_0xe76d('0xd')](_0x351fc3,_0x1e2419);}function emitChannelQueueInteraction(_0x4e4970,_0x3d4b25,_0x4d3a8b,_0x19c29a,_0x517d51,_0x1b10ca,_0x348c5a,_0x33f20c){var _0x35254f=_[_0xe76d('0xe')](_0x4d3a8b);_0x35254f['queue_id']=_0x33f20c;_0x35254f[_0xe76d('0xf')]=_0x3d4b25;_0x35254f['account']=_0x19c29a;_0x35254f['id']=_0x517d51;if(_0x1b10ca){attributes[_0xe76d('0x10')](_[_0xe76d('0x11')](_0x4e4970)+_0xe76d('0x12'));_0x348c5a[util[_0xe76d('0x13')](_0xe76d('0x14'),_0x4e4970)][_0x517d51]=_['pick'](_0x35254f,attributes);}else{delete _0x348c5a[util[_0xe76d('0x13')](_0xe76d('0x14'),_0x4e4970)][_0x517d51];}emit(util[_0xe76d('0x13')]('%s:queue:%s',_0x4e4970,_0x3d4b25),util[_0xe76d('0x13')]('%s_queue_waiting_interaction:%s',_0x4e4970,_0x1b10ca?_0xe76d('0x15'):_0xe76d('0x16')),_[_0xe76d('0x17')](_0x35254f,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xe76d('0x18')),'chatQueueReport':require(_0xe76d('0x19')),'smsQueueReport':require(_0xe76d('0x1a')),'faxQueueReport':require(_0xe76d('0x1b')),'whatsappQueueReport':require(_0xe76d('0x1c')),'chatInteraction':require(_0xe76d('0x1d')),'faxInteraction':require(_0xe76d('0x1e')),'mailInteraction':require(_0xe76d('0x1f')),'openchannelInteraction':require(_0xe76d('0x20')),'smsInteraction':require(_0xe76d('0x21')),'whatsappInteraction':require(_0xe76d('0x22'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0xe76d('0x23')},'timeout':{'type':'number','message':_0xe76d('0x24')}});function startRouting(_0x4e8f84,_0x12fb68,_0x58c122,_0x2cfba4){if(_0x4e8f84&&_0x12fb68&&_0x58c122){_0x12fb68[_0xe76d('0x25')]+=0x1;var _0x4ba1f6={'uniqueid':_0x4e8f84,'from':_0x58c122[_0xe76d('0x26')]?_0x58c122['body'][_0xe76d('0x27')]:'','joinAt':moment()['format'](_0xe76d('0x28')),'ContactId':_0x58c122[_0xe76d('0x29')]?_0x58c122[_0xe76d('0x29')]['id']:null,'ListId':_0x58c122['list']?_0x58c122[_0xe76d('0x2a')]['id']:null};_0x4ba1f6[_['upperFirst'](_0x58c122[_0xe76d('0x2b')])+_0xe76d('0x2c')]=_0x12fb68['id']||null;_0x4ba1f6[_[_0xe76d('0x2d')](_0x58c122[_0xe76d('0x2b')])+_0xe76d('0x12')]=_0x58c122['interaction']?_0x58c122[_0xe76d('0x2e')]['id']:null;_0x4ba1f6[_[_0xe76d('0x2d')](_0x58c122[_0xe76d('0x2b')])+_0xe76d('0x2f')]=_0x58c122['message']?_0x58c122['message']['id']:null;_0x4ba1f6[_[_0xe76d('0x2d')](_0x58c122[_0xe76d('0x2b')])+(_0x58c122[_0xe76d('0x2b')]!==_0xe76d('0x30')?_0xe76d('0x31'):_0xe76d('0x32'))]=_0x58c122[_0xe76d('0x33')]?_0x58c122[_0xe76d('0x33')]['id']:null;logger[_0xe76d('0x34')](util[_0xe76d('0x13')](_0xe76d('0x35'),_0x4e8f84,_0x12fb68['name']));emitChannelQueueInteraction(_0x58c122[_0xe76d('0x2b')],_0x12fb68[_0xe76d('0x36')],_0x4ba1f6,_0x58c122[_0xe76d('0x33')][_0xe76d('0x36')],_0x58c122[_0xe76d('0x37')]['id'],!![],_0x2cfba4,_0x12fb68['id']);if(rpc[_0x58c122['channel']+_0xe76d('0x38')]){return rpc[_0x58c122['channel']+'QueueReport'][_0xe76d('0x39')](_0x4ba1f6)[_0xe76d('0x3a')](function(_0x2f2852){logger[_0xe76d('0x3b')](_0xe76d('0x3c'),_0x2f2852);});}}}function stopRouting(_0xdc4a78,_0xf5d95d,_0x59a580,_0x1dc753){if(_0xdc4a78&&_0xf5d95d){_0xf5d95d[_0xe76d('0x25')]-=0x1;var _0xda46a2={'leaveAt':moment()[_0xe76d('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0xe76d('0x13')](_0xe76d('0x28')),'reason':_0xe76d('0x3d')};logger['info'](util['format']('[%s][STOP:QUEUE][NAME:%s]',_0xdc4a78,_0xf5d95d[_0xe76d('0x36')]));emitChannelQueueInteraction(_0x59a580[_0xe76d('0x2b')],_0xf5d95d[_0xe76d('0x36')],_0x59a580[_0xe76d('0x26')],_0x59a580[_0xe76d('0x33')]['name'],_0x59a580[_0xe76d('0x37')]['id'],![],_0x1dc753,_0xf5d95d['id']);return rpc[_0x59a580['channel']+_0xe76d('0x3e')][_0xe76d('0x3f')](_0x59a580['interaction']['id'],{'queueId':_0xf5d95d['id']})['then'](function(){if(rpc[_0x59a580[_0xe76d('0x2b')]+_0xe76d('0x38')]){return rpc[_0x59a580[_0xe76d('0x2b')]+_0xe76d('0x38')][_0xe76d('0x3f')](_0xdc4a78,_0xda46a2)[_0xe76d('0x3a')](function(_0xbbf684){logger[_0xe76d('0x3b')](_0xe76d('0x40'),_0xbbf684);});}});}}function endRouting(_0x1e5cff,_0x32077e,_0x5c2287,_0xd518d2){if(_0x1e5cff&&_0x32077e){_0x32077e[_0xe76d('0x25')]-=0x1;var _0x527f9f={'leaveAt':moment()[_0xe76d('0x13')](_0xe76d('0x28')),'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0xe76d('0x34')](util[_0xe76d('0x13')](_0xe76d('0x41'),_0x1e5cff,_0x32077e[_0xe76d('0x36')]));emitChannelQueueInteraction(_0x5c2287[_0xe76d('0x2b')],_0x32077e[_0xe76d('0x36')],_0x5c2287[_0xe76d('0x26')],_0x5c2287['account'][_0xe76d('0x36')],_0x5c2287[_0xe76d('0x37')]['id'],![],_0xd518d2);if(rpc[_0x5c2287[_0xe76d('0x2b')]+_0xe76d('0x38')]){return rpc[_0x5c2287[_0xe76d('0x2b')]+_0xe76d('0x38')][_0xe76d('0x3f')](_0x1e5cff,_0x527f9f)[_0xe76d('0x3a')](function(_0x4b529a){logger[_0xe76d('0x3b')]('update\x20queue\x20report',_0x4b529a);});}}}function handleFindQueue(_0x3c30bb){return function(_0x81b041){return _0x81b041[_0xe76d('0x36')][_0xe76d('0x42')]()===_0x3c30bb[_0xe76d('0x42')]();};}exports[_0xe76d('0x43')]=function(_0x451a80,_0x3efd83,_0x1e32d0,_0x2cab86){return function(_0x4a2c99){try{var _0x17c3f9={'name':_0x3efd83[0x0],'timeout':_0x3efd83[0x1]};var _0x13d222=queue[_0xe76d('0x0')](_0x17c3f9,{'typecast':!![]});if(_0x13d222['length']){logger['error'](_0xe76d('0x44'),_0x451a80,_[_0xe76d('0x45')](_0x13d222,_0xe76d('0x37'))[_0xe76d('0x46')](',\x20'));_0x4a2c99[_0xe76d('0x47')]();}else{var _0x4f08c3=_['find'](_0x1e32d0[_0x2cab86['channel']+'Queues'],handleFindQueue(_0x17c3f9['name']));if(_0x4f08c3){startRouting(_0x451a80,_0x4f08c3,_0x2cab86,_0x1e32d0);var _0x4664aa=(_0x4f08c3[_0xe76d('0x48')]||0xa)*0x3e8;var _0x3c791b=(_0x17c3f9[_0xe76d('0x48')]||0x14)*0x3e8;var _0x1d3eb7;if(_0x4664aa>_0x3c791b){_0x3c791b=_0x4664aa;}var _0x1572b7=seqqueue[_0xe76d('0x49')](_0x4664aa);_0x1572b7['id']=_0x451a80;_0x1572b7[_0xe76d('0x4a')]=_0x4664aa;_0x1572b7[_0xe76d('0x4b')]=_0x3c791b;_0x1572b7['channel']=_0x2cab86[_0xe76d('0x2b')];_0x1e32d0[_0xe76d('0x4c')][_0x451a80]['on'](_0xe76d('0x4d'),function(){logger[_0xe76d('0x34')](_0xe76d('0x4e'),_0x451a80);stopRouting(_0x451a80,_0x4f08c3,_0x2cab86,_0x1e32d0);clearTimeout(_0x1d3eb7);_0x1d3eb7=undefined;_0x1572b7[_0xe76d('0x4f')](!![]);if(_0x1e32d0[_0xe76d('0x4c')][_0x451a80]){delete _0x1e32d0['rules'][_0x451a80];}_0x4a2c99['stop']();});_0x1e32d0[_0xe76d('0x4c')][_0x451a80]['on'](_0xe76d('0x50'),function(){if(_0x1e32d0[_0xe76d('0x4c')][_0x451a80]){delete _0x1e32d0[_0xe76d('0x4c')][_0x451a80];}});_0x1d3eb7=setTimeout(function(){logger[_0xe76d('0x34')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x451a80);endRouting(_0x451a80,_0x4f08c3,_0x2cab86,_0x1e32d0);clearTimeout(_0x1d3eb7);_0x1572b7[_0xe76d('0x4f')](!![]);_0x4a2c99[_0xe76d('0x51')]();},_0x3c791b);switch(_0x4f08c3['strategy']){case _0xe76d('0x52'):strategy[_0xe76d('0x52')](_0x1572b7,_0x4f08c3,_0x1e32d0,_0x2cab86);break;default:strategy[_0xe76d('0x53')](_0x1572b7,_0x4f08c3,_0x1e32d0,_0x2cab86);}}else{logger[_0xe76d('0x3b')](_0xe76d('0x54'),_0x451a80,_0x17c3f9['name']);_0x4a2c99[_0xe76d('0x47')]();}}}catch(_0x3d2896){logger['error'](_0xe76d('0x44'),_0x451a80,_0x3d2896[_0xe76d('0x55')]);_0x4a2c99[_0xe76d('0x47')]();}};};