[Astpp-commit] SF.net SVN: astpp:[2237] trunk
Brought to you by:
darrenkw
|
From: <dar...@us...> - 2009-02-21 19:43:14
|
Revision: 2237
http://astpp.svn.sourceforge.net/astpp/?rev=2237&view=rev
Author: darrenkw
Date: 2009-02-21 19:43:05 +0000 (Sat, 21 Feb 2009)
Log Message:
-----------
More work on getting callingcards working.
Modified Paths:
--------------
trunk/freeswitch/astpp-callingcards.pl
trunk/modules/ASTPP/lib/ASTPP.pm
Modified: trunk/freeswitch/astpp-callingcards.pl
===================================================================
--- trunk/freeswitch/astpp-callingcards.pl 2009-02-21 18:36:58 UTC (rev 2236)
+++ trunk/freeswitch/astpp-callingcards.pl 2009-02-21 19:43:05 UTC (rev 2237)
@@ -149,13 +149,13 @@
if ($config->{calling_cards_rate_announce} == 1) {
if ( $numberinfo->{cost} > 0 ) {
$session->streamFile($sound->{call_will_cost});
-# $AGI->say_number(ceil($numberinfo->{cost} / 100));
+ $session->execute("phrase","pronounce," . ceil($numberinfo->{cost}/100));
$session->streamFile($sound->{currency});
my @call_cost = split(/\./, ($numberinfo->{cost} / 100));
-# $AGI->say_number(@call_cost[0]);
+ $session->execute("phrase","pronounce," . @call_cost[0]);
if (@call_cost[1]) {
$session->streamFile($sound->{point});
-# $AGI->say_number(@call_cost[1]);
+ $session->execute("phrase","pronounce," . @call_cost[1]);
$session->streamFile($sound->{sub_currency});
}
$session->streamFile($sound->{per});
@@ -163,7 +163,7 @@
}
if ( $numberinfo->{connectcost} > 0 ) {
$session->streamFile($sound->{a_connect_charge});
-# $AGI->say_number(ceil($numberinfo->{connectcost} / 100));
+ $session->execute("phrase","pronounce," . ceil($numberinfo->{connectcost}/100));
$session->streamFile($sound->{sub_currency});
$session->streamFile($sound->{will_apply});
}
@@ -243,11 +243,11 @@
$minutes = sprintf( "%.0f", $minutes );
$session->streamFile($sound->{call_will_last});
if ( $minutes == 1 ) {
-# $AGI->say_number($minutes);
+ $session->execute("phrase","pronounce," . $minutes);
$session->streamFile($sound->{minute});
}
elsif ( $minutes > 1 ) {
-# $AGI->say_number($minutes);
+ $session->execute("phrase","pronounce," . $minutes);
$session->streamFile($sound->{minutes});
}
}
@@ -284,19 +284,19 @@
my $interrupt = $session->playAndGetDigits(1,1,1,0,"#*","$sound->{card_has_balance_of}","$sound->{card_has_balance_of}",'^[0-9]+$');
if (!$interrupt || $interrupt eq "" || $interrupt == 0) {
if ( $main_balance == 1 ) {
-# $AGI->say_number($main_balance);
+$session->execute("phrase","pronounce," . $main_balance);
$session->streamFile($sound->{main_currency});
}
elsif ( $main_balance > 1 ) {
-# $AGI->say_number($main_balance);
+$session->execute("phrase","pronounce," . $main_balance);
$session->streamFile($sound->{main_currency_plural});
}
if ( $sub_balance == 1 ) {
-# $AGI->say_number($sub_balance);
+$session->execute("phrase","pronounce," . $sub_balance);
$session->streamFile($sound->{sub_currency});
}
elsif ( $sub_balance > 1 ) {
-# $AGI->say_number($sub_balance);
+$session->execute("phrase","pronounce," . $sub_balance);
$session->streamFile($sound->{sub_currency_plural});
}
}
@@ -370,8 +370,160 @@
$session->execute("set", "DIALSTATUS=NO ANSWER" );
}
+sub dialout() { # Rig up the LCR stuff and do the outbound dialing.
+ # If a call does not go through we give the user the option
+ # of trying again.
+ my ( $destination, $timelimit, $numberinfo, $pricelistinfo, $cardinfo, $brandinfo ) =
+ @_;
+ my ( $status, $count, $increment );
+ $ASTPP->debug( debug => "Looking for outbound Route", verbosity => $verbosity );
+ my @outboundroutes = &get_outbound_routes( $astpp_db, $destination,$cardinfo,$numberinfo, @resellerlist );
+ $count = @outboundroutes;
+ if ( $count == 0 ) {
+ $ASTPP->debug(debug => "NO OUTBOUND ROUTES FOUND!", verbosity => $verbosity );
+ my $order = $session->playAndGetDigits(1,1,1,$config->{calling_cards_general_input_timeout},"#*","$sound->{noanswer}","$sound->{noanswer}",'^[0-9]+$');
+ if ( $order != 1 ) {
+ &write_cdr( $cardinfo, "", $destination, gettext("NO Route Found"), "", 0, 0 );
+ &leave($cardinfo);
+ }
+ }
+ $count = 0;
+ foreach my $route (@outboundroutes) {
+ my $dialstring = $ASTPP->fs_dialplan_xml_bridge();
+ my $callstart = localtime();
+ my ($accountcode);
+ $callstart = &prettytimestamp if $cc == 1;
+ $session->execute->("sched_hangup","+" . $timelimit * 60);
+ my ($xml_string,$data_string) = $ASTPP->fs_dialplan_xml_bridge(
+ destination_number => $destination,
+ route_prepend => $route->{prepend},
+ trunk_name => $route->{trunk}
+ );
+ my $vars = $session->execute->("bridge",$data_string);
+# return 1 if (! $session->ready());
+# $VARS{destination_number} = $num_dial;
+# UPDATEV();
+# return 1;
+ my $asterisk_time = &prettytimestamp;
+ $ASTPP->debug( debug => "CALL STATUS $status", verbosity => 1);
+ $ASTPP->debug( debug => "ANSWERED TIME $answeredtime", verbosity => $verbosity);
+ $ASTPP->debug( debug => "Account CC?: $cc", verbosity => $verbosity);
+ if ( ( $status != ~/CHANUNAVAIL/ ) && ( $status != ~/CONGESTION/ ) ) {
+ if ( $status =~ /BUSY/ ) {
+ $ASTPP->debug( debug => "CALL BUSY", verbosity => $verbosity );
+ my $order = $session->playAndGetDigits(1,1,1,$config->{calling_cards_general_input_timeout},"#*","$sound->{busy}","$sound->{busy}",'^[0-9]+$');
+ if ( $order != 1 ) {
+ &write_cdr( $cardinfo, $clid, $destination, $status,
+ $callstart, 0, 0, $uniqueid )
+ if $cc == 0;
+ &write_account_cdr( $astpp_db, $cardinfo->{number}, 0,
+ $destination, $callstart, 0, $uniqueid, $clid )
+ if $cc == 1;
+ &write_asterisk_cdr( $accountcode, $clid, $destination, $status,
+ $callstart, $answeredtime, $trunk, "CallingCards", $dialedtime, $uniqueid . "a", $asterisk_time, $cdr_db);
+ &leave($cardinfo);
+ } else {
+ push @outboundroutes, $route;
+ }
+ }
+ elsif ( $status =~ /NOANSWER/ ) {
+ $ASTPP->debug(debug=> "NO ANSWER", verbosity => $verbosity );
+ my $order = $session->playAndGetDigits(1,1,1,$config->{calling_cards_general_input_timeout},"#*","$sound->{noanswer}","$sound->{noanswer}",'^[0-9]+$');
+ if ( $order != 1 ) {
+ &write_cdr( $cardinfo, $clid, $destination, $status,
+ $callstart, 0, 0, $uniqueid )
+ if $cc == 0;
+ &write_account_cdr( $astpp_db, $cardinfo->{number}, 0,
+ $destination, $callstart, 0, $uniqueid, $clid )
+ if $cc == 1;
+ &write_asterisk_cdr( $accountcode, $clid, $destination, $status,
+ $callstart, $answeredtime, $trunk, "CallingCards", $dialedtime, $uniqueid . "a", $asterisk_time, $cdr_db);
+ &leave($cardinfo);
+ } else {
+ push @outboundroutes, $route;
+ }
+ }
+ elsif ( $status =~ /ANSWER/ || $answeredtime > 0) {
+ $ASTPP->debug( debug => "CALL ANSWERED", verbosity => $verbosity );
+ my $increment;
+ if ( $numberinfo->{inc} > 0 ) {
+ $increment = $numberinfo->{inc};
+ }
+ else {
+ $increment = $pricelistinfo->{inc};
+ }
+ $ASTPP->debug( debug => "$numberinfo->{connectcost}, $numberinfo->{cost}, $answeredtime, $increment, $numberinfo->{includedseconds}",
+ verbosity => $verbosity);
+ my $charge = &calc_call_cost(
+ $numberinfo->{connectcost}, $numberinfo->{cost},
+ $answeredtime, $increment,
+ $numberinfo->{includedseconds}
+ );
+ $ASTPP->debug( debug => "Cost $charge ", verbosity => $verbosity );
+ if ($cardinfo->{minute_fee_pennies} > 0) {
+ $charge = (($cardinfo->{minute_fee_pennies} * 100) + $charge) if $cardinfo->{timeused} + $answeredtime => $cardinfo->{minute_fee_minutes};
+ }
+ if ($cardinfo->{min_length_pennies} > 0 && ($cardinfo->{min_length_minutes}*60) > $answeredtime) {
+ $charge = (($cardinfo->{min_length_pennies} * 100) + $charge);
+ }
+ if ( $cc == 0 ) {
+ &write_cdr(
+ $cardinfo, $clid, $destination, $status,
+ $callstart, $charge, $answeredtime, $uniqueid
+ );
+ &write_asterisk_cdr( $accountcode, $clid, $destination, "ANSWERED",
+ $callstart, $answeredtime, $trunk, "CallingCards", $dialedtime, $uniqueid . "a", $asterisk_time, $cdr_db);
+ &update_balance( $cardinfo, $charge );
+ $astpp_db->do("UPDATE callingcards SET timeused = "
+ . $astpp_db->quote($cardinfo->{timeused} + $answeredtime)
+ . " WHERE cardnumber = "
+ . $astpp_db->quote($cardinfo->{cardnumber}));
+ }
+ elsif ( $cc == 1 ) {
+ my $status =
+ &write_account_cdr( $astpp_db, $cardinfo->{number},
+ $charge, $destination, $callstart, $answeredtime, $uniqueid, $clid );
+ &write_asterisk_cdr( $accountcode, $clid, $destination, $status,
+ $callstart, $answeredtime, $trunk, "CallingCards", $dialedtime, $uniqueid . "a", $asterisk_time, $cdr_db);
+ $ASTPP->debug( debug => $status, verbosity => $verbosity );
+ }
+ $session->streamFile($sound->{call_completed});
+ &leave($cardinfo);
+ }
+ elsif ( $status =~ /CANCEL/ ) {
+ $ASTPP->debug( debug => "CALL CANCELLED", verbosity => $verbosity );
+ $session->streamFile($sound->{cancelled}) if $config->{calling_cards_cancelled_prompt} == 1;
+ &write_cdr( $cardinfo, $clid, $destination, $status, $callstart, 0,
+ 0, $uniqueid )
+ if $cc == 0;
+ &write_account_cdr( $astpp_db, $cardinfo->{number}, 0,
+ $destination, $callstart, 0, $uniqueid, $clid )
+ if $cc == 1;
+ &write_asterisk_cdr( $accountcode, $clid, $destination, $status,
+ $callstart, $answeredtime, $trunk, "CallingCards", $dialedtime, $uniqueid . "a", $asterisk_time, $cdr_db);
+ &leave($cardinfo);
+ }
+ else {
+ $ASTPP->debug( debug => "ERROR - ERROR - ERROR", verbosity => $verbosity );
+ my $order = $session->playAndGetDigits(1,1,1,$config->{calling_cards_general_input_timeout},"#*","$sound->{noanswer}","$sound->{noanswer}",'^[0-9]+$');
+ if ( $order != 1 ) {
+ &write_cdr( $cardinfo, $clid, $destination, $status,
+ $callstart, 0, 0, $uniqueid )
+ if $cc == 0;
+ &write_account_cdr( $astpp_db, $cardinfo->{number}, 0,
+ $destination, $callstart, 0, $uniqueid, $clid )
+ if $cc == 1;
+ &write_asterisk_cdr( $accountcode, $clid, $destination, $status,
+ $callstart, $answeredtime, $trunk, "CallingCards", $dialedtime, $uniqueid . "a", $asterisk_time, $cdr_db);
+ &leave($cardinfo);
+ }
+ }
+ }
+ }
+}
+
sub leave() { # Prepare everything and then leave the calling card app.
my ($cardinfo) = @_;
my ($whatnow);
@@ -539,18 +691,10 @@
# Congratulations, we now have a working card,pin, and phone number.
$stats{destination} = $destination;
-#&tell_cost( $numberinfo, $pricelistinfo, $cardinfo );
+&tell_cost( $numberinfo, $pricelistinfo, $cardinfo );
my $timelimit = &timelimit( $numberinfo, $pricelistinfo, $cardinfo, $destination );
$session->streamFile($sound->{please_wait_will_connect}) if $config->{calling_cards_connection_prompt} == 1;
-#&dialout( $destination, $timelimit, $numberinfo, $pricelistinfo, $cardinfo, $brandinfo );
+&dialout( $destination, $timelimit, $numberinfo, $pricelistinfo, $cardinfo, $brandinfo );
-
-
-
-
-
-
-
-
1;
Modified: trunk/modules/ASTPP/lib/ASTPP.pm
===================================================================
--- trunk/modules/ASTPP/lib/ASTPP.pm 2009-02-21 18:36:58 UTC (rev 2236)
+++ trunk/modules/ASTPP/lib/ASTPP.pm 2009-02-21 19:43:05 UTC (rev 2237)
@@ -131,7 +131,7 @@
# route_prepend = What do we tag on for numbers on this route?
{
my ($self, %arg) = @_;
- my ( $sql, $trunkdata, $dialstring );
+ my ( $sql, $trunkdata, $dialstring,$data );
$sql = $self->{_astpp_db}->prepare( "SELECT * FROM trunks WHERE name = "
. $self->{_astpp_db}->quote( $arg{trunk_name} ) );
$sql->execute;
@@ -151,19 +151,21 @@
}
}
if ( $trunkdata->{tech} eq "Zap" ) {
- $dialstring = "<action application=\"bridge\" data=\"openzap/" . $trunkdata->{path} . "/1/" . $arg{route_prepend} . $arg{destination_number}. "\"/>\n";
- return $dialstring;
+ $dialstring = "<action application=\"bridge\" data=\"openzap/" . $trunkdata->{path} . "/1/" . $arg{route_prepend} . $arg{destination_number} . "\"/>\n";
+ return $dialstring,$data;
}
elsif ( $trunkdata->{tech} eq "SIP" ) {
my ($profile,$dest) = split(m/","/m, $trunkdata->{path});
$profile =~ s/"//g; #Strip off quotation marks
$dest =~ s/"//g; #Strip off quotation marks
if ($profile eq "gateway") {
- $dialstring = "<action application=\"bridge\" data=\"sofia/gateway/" . $dest . "/" . $arg{route_prepend} . $arg{destination_number} . "\"/>\n";
+ $data = "sofia/gateway/" . $dest . "/" . $arg{route_prepend} . $arg{destination_number};
+ $dialstring = "<action application=\"bridge\" data=\"" . $data . "\"/>\n";
} else {
- $dialstring = "<action application=\"bridge\" data=\"sofia/" . $profile . "/" . $arg{route_prepend} . $arg{destination_number} . "\@" . $dest . "\"/>\n";
+ $data = "sofia/" . $profile . "/" . $arg{route_prepend} . $arg{destination_number} . "\@" . $dest;
+ $dialstring = "<action application=\"bridge\" data=\"" . $data . "\"/>\n";
}
- return $dialstring;
+ return $dialstring,$data;
}
else {
print STDERR "CANNOT ROUTE THIS CALL!!!!!\n";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|