ff2c524282d7df36970ec1457a828ab4c022d351
[motion2.git] / server / services / ami / report / voiceDialReport.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 _0xe0c9=['variables','dialbegin','syncDialBegin','bind','dialend','syncDialEnd','varset','syncVarSet','hangup','prototype','isNotNull','isUndefined','emit','debug','[%s][voiceDialReport][dialbegin]\x20event:','uniqueid','inspect','merge','channels','format','YYYY-MM-DD\x20HH:mm:ss','called','channel','substring','lastIndexOf','event','[%s][voiceDialReport][dialbegin]\x20agent:%s\x20interface:%s\x20lastevent:called','membername','voice:outbound','voice_outbound_channel:save','custom:dialbegin','error','[%s][voiceDialReport][dialend]\x20event:','dialstatus','ANSWER','connectedlinenum','connectedlinename','lastevent','connect','info','[%s][voiceDialReport][dialend]\x20agent:%s\x20lastevent:connect','custom:dialconnect','[%s][voiceDialReport][dialend]\x20sending\x20voice_outbound_channel:save\x20event:','[%s][voiceDialReport][dialend]','variable','value','outboundrouteid','voice','[%s][voiceDialReport][varset]\x20outboundrouteid:%s\x20variable:%s\x20value:%s','keys','[%s][voiceDialReport][varset]\x20sending\x20voice_outbound_channel:save\x20event:','[%s][voiceDialReport][varset]','addVariable','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberinterface','memberlastcall','memberpenalty','memberrealtime','isNil','includes','syncHangup','[%s][voiceDialReport][hangup]\x20event:','cause-txt','duration','diff','starttime','complete','total','answertime','holdtime','seconds','billableseconds','endtime','sumDuration','custom:voiceDialReport','[%s][voiceDialReport][hangup]\x20sending\x20dialend\x20event:','custom:dialend','[%s][voiceDialReport][hangup]\x20sending\x20voice_outbound:save\x20event:','[DEBUG]\x20Emit\x20voice_outbound_channel:remove\x20event','stringify','deleteChannelAfterTimeout','linkedid','destuniqueid','[%s][voiceDialReport][hangup]','syncNewExten','application','toLowerCase','set','applicationdata','cdr(','[%s][voiceDialReport][newexten]\x20application:%s\x20appdata:%s','split','match','[%s][voiceDialReport][newexten]','exports','moment','util','ioredis','../ami','redis','localhost','socket.io-emitter','outboundChannels','outbound','applications'];(function(_0x372515,_0xdd11f){var _0xa3bf4e=function(_0x212cc8){while(--_0x212cc8){_0x372515['push'](_0x372515['shift']());}};_0xa3bf4e(++_0xdd11f);}(_0xe0c9,0x1ba));var _0x9e0c=function(_0x2efd4b,_0x30fc7f){_0x2efd4b=_0x2efd4b-0x0;var _0x7e70b7=_0xe0c9[_0x2efd4b];return _0x7e70b7;};'use strict';var _=require('lodash');var moment=require(_0x9e0c('0x0'));var util=require(_0x9e0c('0x1'));var Redis=require(_0x9e0c('0x2'));var config=require('../../../config/environment');var logger=require('../../../config/logger')('ami');var ami=require(_0x9e0c('0x3'));config[_0x9e0c('0x4')]=_['defaults'](config['redis'],{'host':_0x9e0c('0x5'),'port':0x18eb});var io=require(_0x9e0c('0x6'))(new Redis(config['redis']));function VoiceDialReport(_0x5427f2){this['channels']=_0x5427f2[_0x9e0c('0x7')];this[_0x9e0c('0x8')]=_0x5427f2[_0x9e0c('0x8')];this[_0x9e0c('0x9')]={};this[_0x9e0c('0xa')]={};ami['on'](_0x9e0c('0xb'),this[_0x9e0c('0xc')][_0x9e0c('0xd')](this));ami['on'](_0x9e0c('0xe'),this[_0x9e0c('0xf')][_0x9e0c('0xd')](this));ami['on'](_0x9e0c('0x10'),this[_0x9e0c('0x11')][_0x9e0c('0xd')](this));ami['on'](_0x9e0c('0x12'),this['syncHangup'][_0x9e0c('0xd')](this));}VoiceDialReport[_0x9e0c('0x13')][_0x9e0c('0x14')]=function(_0x52fb8f){return _0x52fb8f!==null&&!_[_0x9e0c('0x15')](_0x52fb8f);};VoiceDialReport[_0x9e0c('0x13')][_0x9e0c('0x16')]=function(_0x5cd2a1,_0x28c790,_0x5d6f8a){io['to'](_0x5cd2a1)[_0x9e0c('0x16')](_0x28c790,_0x5d6f8a);};VoiceDialReport[_0x9e0c('0x13')][_0x9e0c('0xc')]=function(_0x337403){try{if(this[_0x9e0c('0x14')](_0x337403)){logger[_0x9e0c('0x17')](_0x9e0c('0x18'),_0x337403[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](_0x337403,{'showHidden':![],'depth':null}));if(this['channels'][_0x337403[_0x9e0c('0x19')]]){_[_0x9e0c('0x1b')](this[_0x9e0c('0x1c')][_0x337403[_0x9e0c('0x19')]],{'starttime':moment()[_0x9e0c('0x1d')](_0x9e0c('0x1e')),'lastevent':_0x9e0c('0x1f'),'interface':_0x337403[_0x9e0c('0x20')][_0x9e0c('0x21')](0x0,_0x337403['channel'][_0x9e0c('0x22')]('-')),'membername':_0x337403[_0x9e0c('0x20')][_0x9e0c('0x21')](_0x337403[_0x9e0c('0x20')]['lastIndexOf']('/')+0x1,_0x337403[_0x9e0c('0x20')][_0x9e0c('0x22')]('-'))},_['omit'](_0x337403,[_0x9e0c('0x23'),'privilege']));logger['info'](_0x9e0c('0x24'),_0x337403[_0x9e0c('0x19')],this[_0x9e0c('0x1c')][_0x337403[_0x9e0c('0x19')]][_0x9e0c('0x25')],this[_0x9e0c('0x1c')][_0x337403[_0x9e0c('0x19')]]['interface']);logger['debug']('[%s][voiceDialReport][dialbegin]\x20sending\x20voice_outbound_channel:save\x20event:',_0x337403[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](this[_0x9e0c('0x1c')][_0x337403[_0x9e0c('0x19')]],{'showHidden':![],'depth':null}));if(this['applications'][_0x337403['uniqueid']])_['merge'](this[_0x9e0c('0x1c')][_0x337403[_0x9e0c('0x19')]],this['applications'][_0x337403[_0x9e0c('0x19')]]);this[_0x9e0c('0x16')](_0x9e0c('0x26'),_0x9e0c('0x27'),this['channels'][_0x337403['uniqueid']]);logger[_0x9e0c('0x17')]('[%s][voiceDialReport][dialbegin]\x20sending\x20dialbegin\x20event:',_0x337403['uniqueid'],util['inspect'](this[_0x9e0c('0x1c')][_0x337403[_0x9e0c('0x19')]],{'showHidden':![],'depth':null}));ami[_0x9e0c('0x16')](_0x9e0c('0x28'),this[_0x9e0c('0x1c')][_0x337403[_0x9e0c('0x19')]]);}}}catch(_0xdad5f7){logger[_0x9e0c('0x29')]('[%s][voiceDialReport][dialbegin]',_0x337403['uniqueid'],util['inspect'](_0xdad5f7,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x9e0c('0x13')]['syncDialEnd']=function(_0x3ea479){try{if(this[_0x9e0c('0x14')](_0x3ea479)){logger[_0x9e0c('0x17')](_0x9e0c('0x2a'),_0x3ea479[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](_0x3ea479,{'showHidden':![],'depth':null}));if(this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]]){this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]][_0x9e0c('0x2b')]=_0x3ea479['dialstatus'];if(_0x3ea479[_0x9e0c('0x2b')]===_0x9e0c('0x2c')){this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]][_0x9e0c('0x2d')]=_0x3ea479['connectedlinenum'];this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]][_0x9e0c('0x2e')]=_0x3ea479[_0x9e0c('0x2e')];this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]]['answertime']=moment()[_0x9e0c('0x1d')](_0x9e0c('0x1e'));this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]][_0x9e0c('0x2f')]=_0x9e0c('0x30');logger[_0x9e0c('0x31')](_0x9e0c('0x32'),_0x3ea479['uniqueid'],_0x3ea479[_0x9e0c('0x20')][_0x9e0c('0x21')](_0x3ea479[_0x9e0c('0x20')][_0x9e0c('0x22')]('/')+0x1,_0x3ea479[_0x9e0c('0x20')]['lastIndexOf']('-')));logger[_0x9e0c('0x17')]('[%s][voiceDialReport][dialend]\x20sending\x20dialconnect\x20event:',_0x3ea479[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]],{'showHidden':![],'depth':null}));ami[_0x9e0c('0x16')](_0x9e0c('0x33'),this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]]);}logger['debug'](_0x9e0c('0x34'),_0x3ea479[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](this['channels'][_0x3ea479['uniqueid']],{'showHidden':![],'depth':null}));this[_0x9e0c('0x16')](_0x9e0c('0x26'),_0x9e0c('0x27'),this[_0x9e0c('0x1c')][_0x3ea479[_0x9e0c('0x19')]]);}}}catch(_0x190480){logger[_0x9e0c('0x29')](_0x9e0c('0x35'),_0x3ea479[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](_0x190480,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x9e0c('0x13')][_0x9e0c('0x11')]=function(_0x5cdda6){try{if(this[_0x9e0c('0x14')](_0x5cdda6)){logger['debug']('[%s][voiceDialReport][varset]\x20event:',_0x5cdda6[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](_0x5cdda6,{'showHidden':![],'depth':null}));this['addVariable'](_0x5cdda6['uniqueid'],_['keys'](_0x5cdda6[_0x9e0c('0x36')])[0x0],_0x5cdda6[_0x9e0c('0x37')]);if(this['isNotNull'](_0x5cdda6[_0x9e0c('0x36')])&&this['isNotNull'](_0x5cdda6['variable'][_0x9e0c('0x38')])){if(_['isUndefined'](this[_0x9e0c('0x1c')][_0x5cdda6[_0x9e0c('0x19')]])){this[_0x9e0c('0x1c')][_0x5cdda6['uniqueid']]={'routeId':_0x5cdda6[_0x9e0c('0x37')],'variables':this[_0x9e0c('0xa')][_0x5cdda6[_0x9e0c('0x19')]],'motionChannel':_0x9e0c('0x39')};logger[_0x9e0c('0x31')](_0x9e0c('0x3a'),_0x5cdda6[_0x9e0c('0x19')],_0x5cdda6[_0x9e0c('0x36')][_0x9e0c('0x38')],_[_0x9e0c('0x3b')](_0x5cdda6[_0x9e0c('0x36')])[0x0],_0x5cdda6[_0x9e0c('0x37')]);logger[_0x9e0c('0x17')](_0x9e0c('0x3c'),_0x5cdda6[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](this['channels'][_0x5cdda6['uniqueid']],{'showHidden':![],'depth':null}));this['emit'](_0x9e0c('0x26'),_0x9e0c('0x27'),this[_0x9e0c('0x1c')][_0x5cdda6[_0x9e0c('0x19')]]);}}}}catch(_0x162162){logger[_0x9e0c('0x29')](_0x9e0c('0x3d'),_0x5cdda6[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](_0x162162,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x9e0c('0x13')][_0x9e0c('0x3e')]=function(_0x5dbf5a,_0x566c11,_0x3fec63){var _0x31ab34=['rtpaudioqos','rtpaudioqosbridged',_0x9e0c('0x3f'),_0x9e0c('0x40'),'rtpaudioqosloss','rtpaudioqoslossbridged',_0x9e0c('0x41'),_0x9e0c('0x42'),_0x9e0c('0x43'),_0x9e0c('0x44'),_0x9e0c('0x45'),_0x9e0c('0x46'),_0x9e0c('0x47'),'memberdynamic',_0x9e0c('0x48'),_0x9e0c('0x49'),_0x9e0c('0x25'),_0x9e0c('0x4a'),_0x9e0c('0x4b')];if(!_[_0x9e0c('0x4c')](_0x566c11)&&!_[_0x9e0c('0x4d')](_0x31ab34,_0x566c11)){if(_[_0x9e0c('0x15')](this[_0x9e0c('0xa')][_0x5dbf5a])){this[_0x9e0c('0xa')][_0x5dbf5a]={};}this[_0x9e0c('0xa')][_0x5dbf5a][_0x566c11]=_0x3fec63;}};VoiceDialReport[_0x9e0c('0x13')][_0x9e0c('0x4e')]=function(_0x166dbb){try{if(this[_0x9e0c('0x14')](_0x166dbb)){logger['debug'](_0x9e0c('0x4f'),_0x166dbb[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](_0x166dbb,{'showHidden':![],'depth':null}));if(this['channels'][_0x166dbb[_0x9e0c('0x19')]]){logger[_0x9e0c('0x31')]('[%s][voiceDialReport][hangup]\x20reason:%s\x20lasteevent:complete',_0x166dbb[_0x9e0c('0x19')],_0x166dbb[_0x9e0c('0x50')]);this[_0x9e0c('0x1c')][_0x166dbb['uniqueid']]['endtime']=moment()[_0x9e0c('0x1d')](_0x9e0c('0x1e'));this[_0x9e0c('0x1c')][_0x166dbb['uniqueid']][_0x9e0c('0x51')]=moment(this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]]['endtime'])[_0x9e0c('0x52')](this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x53')],'seconds');this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x2f')]=_0x9e0c('0x54');this[_0x9e0c('0x8')][_0x9e0c('0x55')]+=0x1;if(this['channels'][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x56')]){this[_0x9e0c('0x8')]['answered']+=0x1;this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x57')]=moment(this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x56')])[_0x9e0c('0x52')](this['channels'][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x53')],_0x9e0c('0x58'));this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x59')]=moment(this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x5a')])[_0x9e0c('0x52')](this['channels'][_0x166dbb['uniqueid']][_0x9e0c('0x56')],_0x9e0c('0x58'));this[_0x9e0c('0x8')]['sumHoldTime']+=this['channels'][_0x166dbb['uniqueid']][_0x9e0c('0x57')]||0x0;this[_0x9e0c('0x8')]['sumBillable']+=this['channels'][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x59')];}this['outbound'][_0x9e0c('0x5b')]+=this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]][_0x9e0c('0x51')];logger['debug']('[%s][voiceDialReport][hangup]\x20sending\x20voiceDialReport\x20event:',_0x166dbb[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]],{'showHidden':![],'depth':null}));ami[_0x9e0c('0x16')](_0x9e0c('0x5c'),this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]]);logger[_0x9e0c('0x17')](_0x9e0c('0x5d'),_0x166dbb[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]],{'showHidden':![],'depth':null}));ami[_0x9e0c('0x16')](_0x9e0c('0x5e'),this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]]);logger[_0x9e0c('0x17')](_0x9e0c('0x5f'),_0x166dbb[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]],{'showHidden':![],'depth':null}));this[_0x9e0c('0x16')](_0x9e0c('0x26'),'voice_outbound:save',this[_0x9e0c('0x8')]);logger[_0x9e0c('0x31')](_0x9e0c('0x60'),JSON[_0x9e0c('0x61')](this['channels'][_0x166dbb['uniqueid']]));logger[_0x9e0c('0x17')]('[%s][voiceDialReport][hangup]\x20sending\x20voice_outbound_channel:remove\x20event:',_0x166dbb['uniqueid'],util[_0x9e0c('0x1a')](this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x19')]],{'showHidden':![],'depth':null}));this['emit']('voice:outbound','voice_outbound_channel:remove',this[_0x9e0c('0x1c')][_0x166dbb['uniqueid']]);this[_0x9e0c('0x62')](_0x166dbb[_0x9e0c('0x19')]);}else if(this[_0x9e0c('0x1c')][_0x166dbb['linkedid']]){this[_0x9e0c('0x1c')][_0x166dbb['linkedid']][_0x9e0c('0x19')]=this[_0x9e0c('0x1c')][_0x166dbb[_0x9e0c('0x63')]][_0x9e0c('0x64')];}if(this[_0x9e0c('0xa')][_0x166dbb[_0x9e0c('0x19')]]){delete this[_0x9e0c('0xa')][_0x166dbb['uniqueid']];}}}catch(_0x3514d3){logger[_0x9e0c('0x29')](_0x9e0c('0x65'),_0x166dbb[_0x9e0c('0x19')],util[_0x9e0c('0x1a')](_0x3514d3,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype'][_0x9e0c('0x66')]=function(_0x190b56){try{if(this[_0x9e0c('0x14')](_0x190b56)){logger[_0x9e0c('0x17')]('[%s][voiceDialReport][newexten]\x20event:',_0x190b56['uniqueid'],util[_0x9e0c('0x1a')](_0x190b56,{'showHidden':![],'depth':null}));if(_0x190b56[_0x9e0c('0x67')][_0x9e0c('0x68')]()===_0x9e0c('0x69')){_0x190b56['applicationdata']=(_0x190b56['appdata']||_0x190b56['applicationdata'])[_0x9e0c('0x68')]();if(_['startsWith'](_0x190b56[_0x9e0c('0x6a')],_0x9e0c('0x6b'))){if(_[_0x9e0c('0x15')](this[_0x9e0c('0x9')][_0x190b56['uniqueid']]))this[_0x9e0c('0x9')][_0x190b56['uniqueid']]={};logger[_0x9e0c('0x31')](_0x9e0c('0x6c'),_0x190b56[_0x9e0c('0x19')],_0x190b56['application'],_0x190b56[_0x9e0c('0x6a')]);var _0x107270=_0x190b56[_0x9e0c('0x6a')][_0x9e0c('0x6d')]('=');var _0x3aa50c=_0x107270[0x0][_0x9e0c('0x6e')](/cdr\((.*)\)/);if(_0x3aa50c)this[_0x9e0c('0x9')][_0x190b56[_0x9e0c('0x19')]][_0x3aa50c[0x1]]=_0x107270[0x1];}}}}catch(_0x26bab8){logger['error'](_0x9e0c('0x6f'),_0x190b56[_0x9e0c('0x19')],util['inspect'](_0x26bab8,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x9e0c('0x13')][_0x9e0c('0x62')]=function(_0x50d978,_0x1e0ea6=0x2710){if(this[_0x9e0c('0x1c')][_0x50d978]){setTimeout(()=>{delete this[_0x9e0c('0x1c')][_0x50d978];},_0x1e0ea6);}};module[_0x9e0c('0x70')]=VoiceDialReport;