diff --git a/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_direction.pm b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_direction.pm new file mode 100644 index 00000000..d0322d6f --- /dev/null +++ b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_direction.pm @@ -0,0 +1,115 @@ +package NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_direction; +use strict; + +## no critic + +use NGCP::BulkProcessor::Logging qw( + getlogger +); + +use NGCP::BulkProcessor::ConnectorPool qw( + get_accounting_db + destroy_dbs +); + +use NGCP::BulkProcessor::SqlProcessor qw( + checktableinfo + copy_row + +); +use NGCP::BulkProcessor::SqlRecord qw(); + +require Exporter; +our @ISA = qw(Exporter NGCP::BulkProcessor::SqlRecord); +our @EXPORT_OK = qw( + gettablename + check_table + + findall + + $SOURCE + $DESTINATION + +); + + +my $tablename = 'cdr_direction'; +my $get_db = \&get_accounting_db; + +my $expected_fieldnames = [ + "id", + "type", +]; + +our $SOURCE = 'source'; +our $DESTINATION = 'destination'; + +my $indexes = {}; + +my $insert_unique_fields = []; + +sub new { + + my $class = shift; + my $self = NGCP::BulkProcessor::SqlRecord->new($class,$get_db, + $tablename,$expected_fieldnames,$indexes); + + copy_row($self,shift,$expected_fieldnames); + + return $self; + +} + +sub findall { + + my ($load_recursive) = @_; + + check_table(); + my $db = &$get_db(); + my $table = $db->tableidentifier($tablename); + + my $stmt = 'SELECT * FROM ' . $table; + my @params = (); + my $rows = $db->db_get_all_arrayref($stmt,@params); + + return buildrecords_fromrows($rows,$load_recursive); + +} + +sub buildrecords_fromrows { + + my ($rows,$load_recursive) = @_; + + my @records = (); + my $record; + + if (defined $rows and ref $rows eq 'ARRAY') { + foreach my $row (@$rows) { + $record = __PACKAGE__->new($row); + + # transformations go here ... + + push @records,$record; + } + } + + return \@records; + +} + +sub gettablename { + + return $tablename; + +} + +sub check_table { + + return checktableinfo($get_db, + __PACKAGE__,$tablename, + $expected_fieldnames, + $indexes); + +} + +1; diff --git a/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_provider.pm b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_provider.pm new file mode 100644 index 00000000..8b607fb0 --- /dev/null +++ b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_provider.pm @@ -0,0 +1,117 @@ +package NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_provider; +use strict; + +## no critic + +use NGCP::BulkProcessor::Logging qw( + getlogger +); + +use NGCP::BulkProcessor::ConnectorPool qw( + get_accounting_db + destroy_dbs +); + +use NGCP::BulkProcessor::SqlProcessor qw( + checktableinfo + copy_row + +); +use NGCP::BulkProcessor::SqlRecord qw(); + +require Exporter; +our @ISA = qw(Exporter NGCP::BulkProcessor::SqlRecord); +our @EXPORT_OK = qw( + gettablename + check_table + + findall + + $CUSTOMER + $RESELLER + $CARRIER + +); + + +my $tablename = 'cdr_provider'; +my $get_db = \&get_accounting_db; + +my $expected_fieldnames = [ + "id", + "type", +]; + +our $CUSTOMER = 'customer'; +our $RESELLER = 'reseller'; +our $CARRIER = 'carrier'; + +my $indexes = {}; + +my $insert_unique_fields = []; + +sub new { + + my $class = shift; + my $self = NGCP::BulkProcessor::SqlRecord->new($class,$get_db, + $tablename,$expected_fieldnames,$indexes); + + copy_row($self,shift,$expected_fieldnames); + + return $self; + +} + +sub findall { + + my ($load_recursive) = @_; + + check_table(); + my $db = &$get_db(); + my $table = $db->tableidentifier($tablename); + + my $stmt = 'SELECT * FROM ' . $table; + my @params = (); + my $rows = $db->db_get_all_arrayref($stmt,@params); + + return buildrecords_fromrows($rows,$load_recursive); + +} + +sub buildrecords_fromrows { + + my ($rows,$load_recursive) = @_; + + my @records = (); + my $record; + + if (defined $rows and ref $rows eq 'ARRAY') { + foreach my $row (@$rows) { + $record = __PACKAGE__->new($row); + + # transformations go here ... + + push @records,$record; + } + } + + return \@records; + +} + +sub gettablename { + + return $tablename; + +} + +sub check_table { + + return checktableinfo($get_db, + __PACKAGE__,$tablename, + $expected_fieldnames, + $indexes); + +} + +1; diff --git a/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_tag.pm b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_tag.pm new file mode 100644 index 00000000..849163c8 --- /dev/null +++ b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_tag.pm @@ -0,0 +1,121 @@ +package NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag; +use strict; + +## no critic + +use NGCP::BulkProcessor::Logging qw( + getlogger +); + +use NGCP::BulkProcessor::ConnectorPool qw( + get_accounting_db + destroy_dbs +); + +use NGCP::BulkProcessor::SqlProcessor qw( + checktableinfo + copy_row + +); +use NGCP::BulkProcessor::SqlRecord qw(); + +require Exporter; +our @ISA = qw(Exporter NGCP::BulkProcessor::SqlRecord); +our @EXPORT_OK = qw( + gettablename + check_table + + findall + + $CALLING_PARTY_CATEGORY + $FURNISHED_CHARGING_INFO + $HEADER_DIVERSION + $HEADER_P_ASSERTED_IDENTITY + $HEADER_USER_TO_USER + +); + + +my $tablename = 'cdr_tag'; +my $get_db = \&get_accounting_db; + +my $expected_fieldnames = [ + "id", + "type", +]; + +our $CALLING_PARTY_CATEGORY = 'calling_party_category'; +our $FURNISHED_CHARGING_INFO = 'furnished_charging_info'; +our $HEADER_DIVERSION = 'header=Diversion'; +our $HEADER_P_ASSERTED_IDENTITY = 'header=P-Asserted-Identity'; +our $HEADER_USER_TO_USER = 'header=User-to-User'; + +my $indexes = {}; + +my $insert_unique_fields = []; + +sub new { + + my $class = shift; + my $self = NGCP::BulkProcessor::SqlRecord->new($class,$get_db, + $tablename,$expected_fieldnames,$indexes); + + copy_row($self,shift,$expected_fieldnames); + + return $self; + +} + +sub findall { + + my ($load_recursive) = @_; + + check_table(); + my $db = &$get_db(); + my $table = $db->tableidentifier($tablename); + + my $stmt = 'SELECT * FROM ' . $table; + my @params = (); + my $rows = $db->db_get_all_arrayref($stmt,@params); + + return buildrecords_fromrows($rows,$load_recursive); + +} + +sub buildrecords_fromrows { + + my ($rows,$load_recursive) = @_; + + my @records = (); + my $record; + + if (defined $rows and ref $rows eq 'ARRAY') { + foreach my $row (@$rows) { + $record = __PACKAGE__->new($row); + + # transformations go here ... + + push @records,$record; + } + } + + return \@records; + +} + +sub gettablename { + + return $tablename; + +} + +sub check_table { + + return checktableinfo($get_db, + __PACKAGE__,$tablename, + $expected_fieldnames, + $indexes); + +} + +1; diff --git a/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_tag_data.pm b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_tag_data.pm new file mode 100644 index 00000000..94302b40 --- /dev/null +++ b/lib/NGCP/BulkProcessor/Dao/Trunk/accounting/cdr_tag_data.pm @@ -0,0 +1,135 @@ +package NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag_data; +use strict; + +## no critic + +use NGCP::BulkProcessor::Logging qw( + getlogger +); + +use NGCP::BulkProcessor::ConnectorPool qw( + get_accounting_db + destroy_dbs +); + +use NGCP::BulkProcessor::SqlProcessor qw( + checktableinfo + copy_row + +); +use NGCP::BulkProcessor::SqlRecord qw(); + +require Exporter; +our @ISA = qw(Exporter NGCP::BulkProcessor::SqlRecord); +our @EXPORT_OK = qw( + gettablename + check_table + + findby_cdrproviderdirectiontag + +); + +my $tablename = 'cdr_tag_data'; +my $get_db = \&get_accounting_db; + +my $expected_fieldnames = [ + "cdr_id", + "provider_id", + "direction_id", + "tag_id", + "val", + "cdr_start_time", +]; + +my $indexes = {}; + +my $insert_unique_fields = []; + +sub new { + + my $class = shift; + my $self = NGCP::BulkProcessor::SqlRecord->new($class,$get_db, + $tablename,$expected_fieldnames,$indexes); + + copy_row($self,shift,$expected_fieldnames); + + return $self; + +} + +sub findby_cdrproviderdirectiontag { + + my ($xa_db,$cdrid,$providerid,$directionid,$tagid,$load_recursive) = @_; + + check_table(); + my $db = &$get_db(); + $xa_db //= $db; + my $table = $db->tableidentifier($tablename); + + my $stmt = 'SELECT * FROM ' . $table . ' WHERE ' . + $db->columnidentifier('cdr_id') . ' = ?' . + ' AND ' . $db->columnidentifier('provider_id') . ' = ?' . + ' AND ' . $db->columnidentifier('direction_id') . ' = ?' . + ' AND ' . $db->columnidentifier('tag_id') . ' = ?'; + my @params = ($cdrid,$providerid,$directionid,$tagid); + my $rows = $xa_db->db_get_all_arrayref($stmt,@params); + + return buildrecords_fromrows($rows,$load_recursive); + +} + +sub findby_callid { + + my ($xa_db,$callid,$load_recursive) = @_; + + check_table(); + my $db = &$get_db(); + $xa_db //= $db; + my $table = $db->tableidentifier($tablename); + + my $stmt = 'SELECT * FROM ' . $table . ' WHERE ' . + $db->columnidentifier('call_id') . ' = ?'; + my @params = ($callid); + my $rows = $xa_db->db_get_all_arrayref($stmt,@params); + + return buildrecords_fromrows($rows,$load_recursive); + +} + +sub buildrecords_fromrows { + + my ($rows,$load_recursive) = @_; + + my @records = (); + my $record; + + if (defined $rows and ref $rows eq 'ARRAY') { + foreach my $row (@$rows) { + $record = __PACKAGE__->new($row); + + # transformations go here ... + + push @records,$record; + } + } + + return \@records; + +} + +sub gettablename { + + return $tablename; + +} + +sub check_table { + + return checktableinfo($get_db, + __PACKAGE__,$tablename, + $expected_fieldnames, + $indexes); + +} + +1; diff --git a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm index 2c24283e..8d8369e7 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/CDR.pm @@ -25,7 +25,7 @@ use NGCP::BulkProcessor::Projects::Export::Ama::Ccs::Settings qw( $ama_originating_digits_cdr_field $ama_terminating_digits_cdr_field - $ivr_duration_limit + $primary_alias_pattern $switch_number_pattern @@ -39,6 +39,7 @@ use NGCP::BulkProcessor::Projects::Export::Ama::Ccs::Settings qw( $terminating_open_digits_6001 ); +#$ivr_duration_limit use NGCP::BulkProcessor::Logging qw ( getlogger @@ -55,6 +56,10 @@ use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr qw(); use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_export_status qw(); use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_export_status_data qw(); use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_group qw(); +use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_provider qw(); +use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_direction qw(); +use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag qw(); +use NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag_data qw(); use NGCP::BulkProcessor::Dao::Trunk::accounting::mark qw(); use NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_subscribers qw(); @@ -92,6 +97,7 @@ use NGCP::BulkProcessor::ConnectorPool qw( use NGCP::BulkProcessor::Utils qw(threadid kbytes2gigs); # stringtobool check_ipnet trim); use NGCP::BulkProcessor::Calendar qw(from_epoch); +use NGCP::BulkProcessor::Array qw(array_to_map); require Exporter; our @ISA = qw(Exporter); @@ -363,12 +369,17 @@ sub _export_cdrs_init_context { and ($scenario->{ccs_subscriber}->{primary_alias} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_dbaliases::findby_subscriberidisprimary($scenario->{ccs_subscriber}->{id},1)->[0]) and (not defined $primary_alias_pattern or $scenario->{ccs_subscriber}->{primary_alias}->{username} =~ $primary_alias_pattern) ) { - my $ivr_duration = abs($parent_cdrs->[0]->{start_time} - $parent_cdrs->[1]->{init_time}); - if ($ivr_duration < $ivr_duration_limit) { - $scenario->{code} = $BLIND_TRANSFER_NO_IVR; - } else { + if (get_u2u_header($context,$parent_cdrs->[0])) { $scenario->{code} = $BLIND_TRANSFER; + } else { + $scenario->{code} = $BLIND_TRANSFER_NO_IVR; } + #my $ivr_duration = abs($parent_cdrs->[0]->{start_time} - $parent_cdrs->[1]->{init_time}); + #if ($ivr_duration < $ivr_duration_limit) { + # $scenario->{code} = $BLIND_TRANSFER_NO_IVR; + #} else { + # $scenario->{code} = $BLIND_TRANSFER; + #} $result = 1; #no transfer: } elsif ((scalar @$parent_cdrs) == 1 @@ -379,12 +390,17 @@ sub _export_cdrs_init_context { and ($scenario->{ccs_subscriber}->{primary_alias} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_dbaliases::findby_subscriberidisprimary($scenario->{ccs_subscriber}->{id},1)->[0]) and (not defined $primary_alias_pattern or $scenario->{ccs_subscriber}->{primary_alias}->{username} =~ $primary_alias_pattern) ) { - my $ivr_duration = $parent_cdrs->[0]->{duration}; - if ($ivr_duration < $ivr_duration_limit) { - $scenario->{code} = $NO_TRANSFER_NO_IVR; - } else { + if (get_u2u_header($context,$parent_cdrs->[0])) { $scenario->{code} = $NO_TRANSFER; + } else { + $scenario->{code} = $NO_TRANSFER_NO_IVR; } + #my $ivr_duration = $parent_cdrs->[0]->{duration}; + #if ($ivr_duration < $ivr_duration_limit) { + # $scenario->{code} = $NO_TRANSFER_NO_IVR; + #} else { + # $scenario->{code} = $NO_TRANSFER; + #} $result = 1; #attn transfer: } elsif ((scalar @$parent_cdrs) == 2 @@ -396,13 +412,18 @@ sub _export_cdrs_init_context { and ($scenario->{ccs_subscriber}->{primary_alias} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_dbaliases::findby_subscriberidisprimary($scenario->{ccs_subscriber}->{id},1)->[0]) and (not defined $primary_alias_pattern or $scenario->{ccs_subscriber}->{primary_alias}->{username} =~ $primary_alias_pattern) ) { - my $correlated_cdr = $parent_cdrs->[1]->{_correlated_cdrs}->[0]; - my $ivr_duration = abs($correlated_cdr->{start_time} - $parent_cdrs->[1]->{init_time}); - if ($ivr_duration < $ivr_duration_limit) { - $scenario->{code} = $ATTN_TRANSFER_NO_IVR; - } else { + if (get_u2u_header($context,$parent_cdrs->[1])) { $scenario->{code} = $ATTN_TRANSFER; + } else { + $scenario->{code} = $ATTN_TRANSFER_NO_IVR; } + #my $correlated_cdr = $parent_cdrs->[1]->{_correlated_cdrs}->[0]; + #my $ivr_duration = abs($correlated_cdr->{start_time} - $parent_cdrs->[1]->{init_time}); + #if ($ivr_duration < $ivr_duration_limit) { + # $scenario->{code} = $ATTN_TRANSFER_NO_IVR; + #} else { + # $scenario->{code} = $ATTN_TRANSFER; + #} $result = 1; #cfu: } elsif ((scalar @$parent_cdrs) == 2 @@ -938,9 +959,65 @@ sub _export_cdrs_create_context { $file_sequence_number = $fsn; } + eval { + ($context->{cdr_provider_map}, my $types, my $ids) = array_to_map(NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_provider::findall(), + sub { return shift->{type}; }, sub { return shift->{id}; }, 'last'); + }; + if ($@) { + _error($context,"failed to load cdr_provider enum: " . $@); + $result = 0; + } elsif (not exists $context->{cdr_provider_map}->{$NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_provider::CUSTOMER}) { + _error($context,"cannot find cdr_provider '" . $NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_provider::CUSTOMER . "'"); + $result = 0; + } else { + _info($context,"cdr_provider '" . $NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_provider::CUSTOMER . "' found"); + } + eval { + ($context->{cdr_direction_map}, my $types, my $ids) = array_to_map(NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_direction::findall(), + sub { return shift->{type}; }, sub { return shift->{id}; }, 'last'); + }; + if ($@) { + _error($context,"failed to load cdr_direction enum: " . $@); + $result = 0; + } elsif (not exists $context->{cdr_direction_map}->{$NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_direction::SOURCE}) { + _error($context,"cannot find cdr_direction '" . $NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_direction::SOURCE . "'"); + $result = 0; + } else { + _info($context,"cdr_direction '" . $NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_direction::SOURCE . "' found"); + } + eval { + ($context->{cdr_tag_map}, my $types, my $ids) = array_to_map(NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag::findall(), + sub { return shift->{type}; }, sub { return shift->{id}; }, 'last'); + }; + if ($@) { + _error($context,"failed to load cdr_tag enum: " . $@); + $result = 0; + } elsif (not exists $context->{cdr_tag_map}->{$NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag::HEADER_USER_TO_USER}) { + _error($context,"cannot find cdr_tag '" . $NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag::HEADER_USER_TO_USER . "'"); + $result = 0; + } else { + _info($context,"cdr_tag '" . $NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag::HEADER_USER_TO_USER . "' found"); + } + return $result; } +sub get_u2u_header { + my ($context,$cdr) = @_; + + my $cdr_tag = NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag_data::findby_cdrproviderdirectiontag($context->{db},$cdr->{id}, + $context->{cdr_provider_map}->{$NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_provider::CUSTOMER}, + $context->{cdr_direction_map}->{$NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_direction::SOURCE}, + $context->{cdr_tag_map}->{$NGCP::BulkProcessor::Dao::Trunk::accounting::cdr_tag::HEADER_USER_TO_USER})->[0]; + + if ($cdr_tag) { + return $cdr_tag->{val}; + } else { + return undef; + } + +} + sub _error { my ($context,$message) = @_; diff --git a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm index 77275ce1..2784c72a 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/Settings.pm @@ -61,7 +61,7 @@ our @EXPORT_OK = qw( $ama_originating_digits_cdr_field $ama_terminating_digits_cdr_field - $ivr_duration_limit + $primary_alias_pattern $switch_number_pattern @@ -75,6 +75,7 @@ our @EXPORT_OK = qw( $terminating_open_digits_6001 ); +#$ivr_duration_limit our $defaultconfig = 'config.cfg'; our $defaultsettings = 'settings.cfg'; @@ -101,7 +102,7 @@ our $ama_outgoing_trunk_group_number; our $ama_originating_digits_cdr_field; our $ama_terminating_digits_cdr_field; -our $ivr_duration_limit = 5; +#our $ivr_duration_limit = 5; our $primary_alias_pattern = undef; our $switch_number_pattern = undef; our $switch_number_replacement = undef; @@ -151,7 +152,7 @@ sub update_settings { configurationerror($configfile,'unknown ama_terminating_digits_cdr_field',getlogger(__PACKAGE__)); } - $ivr_duration_limit = $data->{ivr_duration_limit} if exists $data->{ivr_duration_limit}; + #$ivr_duration_limit = $data->{ivr_duration_limit} if exists $data->{ivr_duration_limit}; my $regexp_result; $primary_alias_pattern = $data->{primary_alias_pattern} if exists $data->{primary_alias_pattern}; diff --git a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg index 4d5ef29c..d73f0cc3 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.cfg @@ -29,7 +29,7 @@ ama_outgoing_trunk_group_number = 2014 ama_originating_digits_cdr_field = source_cli ama_terminating_digits_cdr_field = destination_user_in -ivr_duration_limit = 5 +#ivr_duration_limit = 5 primary_alias_pattern = 431976 switch_number_pattern = ^43 @@ -43,7 +43,7 @@ terminating_replacement = terminating_open_digits_6001 = 4319558290 -#international_destination_pattern = +#international_destination_pattern = #domestic_destination_pattern = #international_destination_not_pattern = #domestic_destination_not_pattern = \ No newline at end of file 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 f1f58d8e..4180c6a9 100644 --- a/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.debug.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Export/Ama/Ccs/settings.debug.cfg @@ -31,7 +31,7 @@ ama_outgoing_trunk_group_number = 2014 ama_originating_digits_cdr_field = source_cli ama_terminating_digits_cdr_field = destination_user_in -ivr_duration_limit = 5 +#ivr_duration_limit = 5 #primary_alias_pattern = 431976 switch_number_pattern = ^43 @@ -45,7 +45,7 @@ terminating_replacement = terminating_open_digits_6001 = 4319558290 -#international_destination_pattern = +international_destination_pattern = abc #domestic_destination_pattern = #international_destination_not_pattern = #domestic_destination_not_pattern = \ No newline at end of file