From a620c7c6cfead5b45a84e607294a063981c8d5e3 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Wed, 4 Dec 2019 13:04:00 +0100 Subject: [PATCH] TT#71812 ama: handle anonymous caller - try fallback to source_user - use "00000000000" for open_digits Change-Id: Iae377b99b7eee338cce556b78ffd9be890fb919d (cherry picked from commit ebbc3762e7e843e9b7268ecac095cdeb71393ec8) --- .../Projects/Export/Ama/Ccs/CDR.pm | 65 +++++++++++++------ .../Projects/Export/Ama/Ccs/Settings.pm | 6 ++ .../Projects/Export/Ama/Ccs/settings.cfg | 2 + .../Export/Ama/Ccs/settings.debug.cfg | 2 + 4 files changed, 55 insertions(+), 20 deletions(-) diff --git a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm index 038f7e2..119bf64 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm @@ -24,6 +24,8 @@ use NGCP::BulkProcessor::Projects::Export::Ama::Ccs::Settings qw( $ama_outgoing_trunk_group_number $ama_originating_digits_cdr_field $ama_terminating_digits_cdr_field + $offnet_anonymous_fallback + $anonymous_originating_digits @ivr_u2u_headers $primary_alias_pattern @@ -319,6 +321,7 @@ sub _find_child_cdrs { my ($context,$id) = @_; my @correlated_cdrs = (); foreach my $correlated_group_cdr (@{NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_group::findby_cdrid($context->{db},$id)}) { + next unless $correlated_group_cdr->{call_id}; foreach my $correlated_cdr (@{NGCP::BulkProcessor::Dao::Trunk::accounting::cdr::findby_callid($context->{db},$correlated_group_cdr->{call_id})}) { push(@correlated_cdrs,$correlated_cdr); } @@ -348,7 +351,7 @@ sub _export_cdrs_init_context { if (exists $context->{correlated_cdrs_map}->{$cdr->{id}}) { @correlated_cdrs = @{$context->{correlated_cdrs_map}->{$cdr->{id}}}; } else { - @correlated_cdrs = grep { length($_->{call_id} =~ s/^\s+|\s+$//gr) > 0; } @{_find_child_cdrs($context,$cdr->{id})}; + @correlated_cdrs = @{_find_child_cdrs($context,$cdr->{id})}; } $cdr->{_correlated_cdrs} = \@correlated_cdrs; push(@scenario_cdrs,@correlated_cdrs); @@ -461,9 +464,9 @@ sub _export_cdrs_init_context { } if ($scenario->{code} == $BLIND_TRANSFER_NO_IVR) { - my $originating = $parent_cdrs->[0]->{$ama_originating_digits_cdr_field}; - my $terminating = $parent_cdrs->[1]->{$ama_terminating_digits_cdr_field}; - my $switch_number = $parent_cdrs->[0]->{$ama_terminating_digits_cdr_field}; + my $originating = _get_originating($parent_cdrs->[0]); + my $terminating = _get_terminating($parent_cdrs->[1]); + my $switch_number = _get_terminating($parent_cdrs->[0]); push(@{$scenario->{ama}},{ start_time => $parent_cdrs->[1]->{start_time}, #? duration => $parent_cdrs->[1]->{duration}, @@ -479,9 +482,9 @@ sub _export_cdrs_init_context { }, }); } elsif ($scenario->{code} == $BLIND_TRANSFER) { - my $originating = $parent_cdrs->[0]->{$ama_originating_digits_cdr_field}; - my $terminating = $parent_cdrs->[1]->{$ama_terminating_digits_cdr_field}; - my $switch_number = $parent_cdrs->[0]->{$ama_terminating_digits_cdr_field}; + my $originating = _get_originating($parent_cdrs->[0]); + my $terminating = _get_terminating($parent_cdrs->[1]); + my $switch_number = _get_terminating($parent_cdrs->[0]); push(@{$scenario->{ama}},{ start_time => $parent_cdrs->[0]->{start_time}, #? duration => abs($parent_cdrs->[0]->{start_time} - $parent_cdrs->[1]->{init_time}), @@ -510,8 +513,8 @@ sub _export_cdrs_init_context { }, }); } elsif ($scenario->{code} == $NO_TRANSFER_NO_IVR) { - my $originating = $parent_cdrs->[0]->{$ama_originating_digits_cdr_field}; - my $terminating = $parent_cdrs->[0]->{$ama_terminating_digits_cdr_field}; + my $originating = _get_originating($parent_cdrs->[0]); + my $terminating = _get_terminating($parent_cdrs->[0]); my $switch_number = $terminating; push(@{$scenario->{ama}},{ start_time => $parent_cdrs->[0]->{start_time}, #? @@ -528,8 +531,8 @@ sub _export_cdrs_init_context { }, }); } elsif ($scenario->{code} == $NO_TRANSFER) { - my $originating = $parent_cdrs->[0]->{$ama_originating_digits_cdr_field}; - my $terminating = $parent_cdrs->[0]->{$ama_terminating_digits_cdr_field}; + my $originating = _get_originating($parent_cdrs->[0]); + my $terminating = _get_terminating($parent_cdrs->[0]); my $switch_number = $terminating; push(@{$scenario->{ama}},{ start_time => $parent_cdrs->[0]->{start_time}, #? @@ -560,9 +563,9 @@ sub _export_cdrs_init_context { }); } elsif ($scenario->{code} == $ATTN_TRANSFER_NO_IVR) { my $correlated_cdr = $parent_cdrs->[1]->{_correlated_cdrs}->[0]; - my $originating = $correlated_cdr->{$ama_originating_digits_cdr_field}; - my $terminating = $parent_cdrs->[1]->{$ama_terminating_digits_cdr_field}; - my $switch_number = $correlated_cdr->{$ama_terminating_digits_cdr_field}; + my $originating = _get_originating($correlated_cdr); + my $terminating = _get_terminating($parent_cdrs->[1]); + my $switch_number = _get_terminating($correlated_cdr); push(@{$scenario->{ama}},{ start_time => $parent_cdrs->[1]->{start_time}, #? duration => $correlated_cdr->{duration} - abs($correlated_cdr->{start_time} - $parent_cdrs->[1]->{start_time}), @@ -579,9 +582,9 @@ sub _export_cdrs_init_context { }); } elsif ($scenario->{code} == $ATTN_TRANSFER) { my $correlated_cdr = $parent_cdrs->[1]->{_correlated_cdrs}->[0]; - my $originating = $correlated_cdr->{$ama_originating_digits_cdr_field}; - my $terminating = $parent_cdrs->[1]->{$ama_terminating_digits_cdr_field}; - my $switch_number = $correlated_cdr->{$ama_terminating_digits_cdr_field}; + my $originating = _get_originating($correlated_cdr); + my $terminating = _get_terminating($parent_cdrs->[1]); + my $switch_number = _get_terminating($correlated_cdr); push(@{$scenario->{ama}},{ start_time => $parent_cdrs->[1]->{start_time}, #? duration => abs($correlated_cdr->{start_time} - $parent_cdrs->[1]->{init_time}), @@ -610,9 +613,9 @@ sub _export_cdrs_init_context { }, }); } elsif ($scenario->{code} == $CFU) { - my $originating = $parent_cdrs->[0]->{$ama_originating_digits_cdr_field}; - my $terminating = $parent_cdrs->[1]->{$ama_terminating_digits_cdr_field}; - my $switch_number = $parent_cdrs->[0]->{$ama_terminating_digits_cdr_field}; + my $originating = _get_originating($parent_cdrs->[0]); + my $terminating = _get_terminating($parent_cdrs->[1]); + my $switch_number = _get_terminating($parent_cdrs->[0]); push(@{$scenario->{ama}},{ start_time => $parent_cdrs->[1]->{start_time}, #? duration => $parent_cdrs->[1]->{duration}, @@ -633,6 +636,28 @@ sub _export_cdrs_init_context { } +sub _get_originating { + my $cdr = shift; + my $src_user; + if ($offnet_anonymous_fallback + and $cdr->{source_user_id} eq "0" + and $cdr->{$ama_originating_digits_cdr_field} =~ /anonymous/i + and $cdr->{source_user} =~ /^[+ 0-9]+$/) { + $src_user = $cdr->{source_user}; + } else { + $src_user = $cdr->{$ama_originating_digits_cdr_field}; + } + if ($src_user =~ /anonymous/i) { + $src_user = $anonymous_originating_digits; + } + return $src_user; +} + +sub _get_terminating { + my $cdr = shift; + return $cdr->{$ama_terminating_digits_cdr_field}; +} + sub _rewrite_switch_number { my ($switch_number) = @_; diff --git a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm index 1b0da24..a594e75 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm @@ -60,6 +60,8 @@ our @EXPORT_OK = qw( $ama_outgoing_trunk_group_number $ama_originating_digits_cdr_field $ama_terminating_digits_cdr_field + $offnet_anonymous_fallback + $anonymous_originating_digits @ivr_u2u_headers $primary_alias_pattern @@ -102,6 +104,9 @@ our $ama_outgoing_trunk_group_number; our $ama_originating_digits_cdr_field; our $ama_terminating_digits_cdr_field; +our $offnet_anonymous_fallback = 1; #see rate-o-mat +our $anonymous_originating_digits = '00000000000'; + #our $ivr_duration_limit = 5; our @ivr_u2u_headers = (); our $primary_alias_pattern = undef; @@ -152,6 +157,7 @@ sub update_settings { unless (contains($ama_terminating_digits_cdr_field,[qw(destination_user destination_user_out destination_user_dialed destination_user_in)])) { configurationerror($configfile,'unknown ama_terminating_digits_cdr_field',getlogger(__PACKAGE__)); } + $anonymous_originating_digits = $data->{anonymous_originating_digits} if exists $data->{anonymous_originating_digits}; #$ivr_duration_limit = $data->{ivr_duration_limit} if exists $data->{ivr_duration_limit}; @ivr_u2u_headers = split_tuple($data->{ivr_u2u_headers}) if exists $data->{ivr_u2u_headers}; diff --git a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg index cec8c19..8130571 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg @@ -29,6 +29,8 @@ ama_outgoing_trunk_group_number = 2014 ama_originating_digits_cdr_field = source_cli ama_terminating_digits_cdr_field = destination_user_in +anonymous_originating_digits = 00000000000 + #ivr_duration_limit = 5 primary_alias_pattern = 431976 ivr_u2u_headers = IVRmenu,announcements diff --git a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.debug.cfg b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.debug.cfg index 1147cf5..6cd8d2f 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.debug.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.debug.cfg @@ -31,6 +31,8 @@ ama_outgoing_trunk_group_number = 2014 ama_originating_digits_cdr_field = source_cli ama_terminating_digits_cdr_field = destination_user_in +anonymous_originating_digits = 00000000000 + #ivr_duration_limit = 5 #primary_alias_pattern = 431976 ivr_u2u_headers = IVRmenu,announcements