rendered paste body# Set the verbosity level of informational message, undefined or Asterisk verbosity level
$verbose = 1;
use File::Basename;
use Asterisk::AGI;
use Asterisk::Outgoing;
$AGI = new Asterisk::AGI;
%input = $AGI->ReadParse();
$AGI->setcallback(\&mycallback);
my ($outgoingclid, $broadcastclid, $broadcastext, $regextension, $context, $outgoingcontext, $accountcode) = @ARGV;
# outgoingclid = Outgoing Callerid info
# broadcastclid = Callerid number of person who goes into special extension ie "moderator"
# broadcastext = The special extension see above
# regextension = Typical extension
# context = The context to place the calls in
# outgoingcontext = Calls are placed using the "Local" channel. This specifies the context to use.
# accountcode = What accountcode does this call belong to.
#$dir = dirname($0);
sleep(1);
#if ($ARGV[0] ne "") {
# verbose("CALLBACK: Outcall");
# if ($ARGV[0] ne "noextension") {
# verbose("CALLBACK: Extension $ARGV[0].");
# $AGI->exec("SendDTMF", "$ARGV[0]");
# sleep(2);
# };
# for ($count=0; $count < 7; $count++) {
# $AGI->stream_file("outcall");
# };
# exit(0);
#};
$clidnumber = $input{'callerid'};
$clidnumber =~ s/\"//g;
if ($clidnumber =~ /^(\d+)\D/) {
$clidnumber = $1;
}
if ($clidnumber =~ /^\d\d\d\d\d\d\d\d\d\d$/) {
if ($clidnumber == $broadcastclid) {
$confirmed = "1";
$response = "1";
} else {
$AGI->stream_file("the-num-i-have-is");
$AGI->say_digits($clidnumber);
$AGI->stream_file("correct"); # Is this the number you wish to be called at?
$response = $AGI->get_data("1-yes-2-no", "5000", "1");
if ($response eq "1") {
$confirmed = "1";
$response = "1";
} else {
$clidnumber = $AGI->get_data("get-phonenumber"); # Please enter the phone number followed by the pound sign
verbose("CALLBACK: Get Phone Number.");
};
};
} else {
$clidnumber = $AGI->get_data("get-phonenumber");
verbose("CALLBACK: Get Phone Number.");
};
if ($clidnumber =~ /^\d\d\d\d\d\d\d\d\d\d$/) {
verbose("CALLBACK: Valid callback.");
$channel = "Local\/"."1".$clidnumber."\@$outgoingcontext";
} else {
verbose("CALLBACK: Valid callback.");
$channel = "Local\/".$clidnumber."\@$outgoingcontext";
};
if ($channel eq "") {
verbose("CALLBACK: Bad phone number $clidnumber. Exiting!");
$AGI->say_digits("$clidnumber");
$AGI->stream_file("notvalid");
exit(0);
};
verbose("CALLBACK: Get extension.");
if ($clidnumber == $broadcastclid) {
$extension = $broadcastext;
$channel = "Local\/"."1".$clidnumber."\@$outgoingcontext";
} else {
$extension = $AGI->get_data("enter-extension");
};
if (!defined($confirmed)) {
verbose("CALLBACK: Request confirmation.");
$AGI->stream_file("the-num-i-have-is");
$AGI->say_digits("$clidnumber");
if ($extension ne "") {
$AGI->stream_file("extension");
$AGI->say_digits("$extension");
};
$AGI->say_digits($clidnumber);
$AGI->stream_file("correct"); #the number you wish to be called at?
$response = $AGI->get_data("1-yes-2-no", "5000", "1");
};
if (!defined($extension)) {
$extension = $regextension; #"8200";
};
if ($response eq "1") {
verbose("CALLBACK: Callback to $clidnumber confirmed.");
$out = new Asterisk::Outgoing;
$out->setvariable("Channel", "$channel");
$out->setvariable("MaxRetries", "0");
$out->setvariable("context", "$context");
$out->setvariable("extension", "$extension");
$out->setvariable("CallerID", "$outgoingclid $clidnumber");
$out->setvariable("Account", "$accountcode");
$out->outtime(time() + 15);
$out->create_outgoing;
$AGI->stream_file("callback-confirmed");
} else {
verbose("CALLBACK: Callback to $clidnumber canceled!");
$AGI->stream_file("canceled");
$AGI->stream_file("please-hang-up-and-try-again");
};
sub mycallback {
my ($returncode) = @_;
print STDERR "MYCALLBACK: User Hungup ($returncode)\n";
exit($returncode);
}
sub verbose {
if (defined($verbose)) {
$AGI->verbose("@_", $verbose);
return(0);
};
};