[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. |