A simple Callback CGI script on SME Server. Needs asterisk. Not mainteained anymore
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
4.0 KiB

13 years ago
#!/usr/bin/perl -w
use Net::Telnet;
13 years ago
use CGI qw/:standard/;
require ('/etc/callback/callback.conf');
$host ||= '127.0.0.1';
$port ||= '5038';
$user ||= 'callback';
$secret ||= 'secret';
$defaultcid ||= '';
$webhost ||= '';
13 years ago
my $q = new CGI;
print $q->header,
$q->start_html(-title=>'CallBack',
-style=>{"src"=>"$webhost/server-common/css/bootstrap.min.css"}
),
$q->div({
-class=>"well",
-style=>"width: 500px; margin-top: 40px; margin-right: auto; margin-left: auto"
}),
$q->h1('<center>Mise en relation t&eacute;l&eacute;phonique</center><p><p>'),
$q->start_form(-class=>"form-horizontal"),
$q->div({-class=>"control-group"},
"<label class= \"control-label\" for=\"nback\">Votre num&eacute;ro</label>",
$q->div({-class=>"controls"},
$q->textfield(
-name=>"nback",
-class=>"input-xlarge",
-size=>"30",
-style=>"width: 300px; height: 25px"
),
)
),
$q->div({-class=>"control-group"},
"<label class= \"control-label\" for=\"ndest\">Le num&eacute;ro &agrave; joindre</label>",
$q->div({-class=>"controls"},
$q->textfield(
-name=>"ndest",
-class=>"input-xlarge",
-size=>"30",
-style=>"width: 300px; height: 25px"
),
)
),
$q->div({-class=>"control-group"},
"<label class= \"control-label\" for=\"cid\">Le num&eacute;ro &agrave; pr&eacute;senter</label>",
$q->div({-class=>"controls"},
$q->textfield(
-name=>"cid",
-class=>"input-xlarge",
-size=>"30",
-style=>"width: 300px; height: 25px"
),
)
),
$q->submit(
-name=>"submit",
-class=>"btn btn-primary",
-style=>"margin-left: 200px",
-value=>"Appeler",
),
$q->end_form;
13 years ago
if ($q->param()) {
my $nback = $q->param('nback') || $ENV{'HTTP_USER_EXTENSION'};
my $ndest = $q->param('ndest');
my $cid = $q->param('cid') || $ENV{'HTTP_USER_TELEPHONE'};
$cid = $defaultcid if ($cid eq '');
$nback =~ s/[\s\(\)\.<>]//g;
$ndest =~ s/[\s\(\)\.<>]//g;
$nback =~ s/^\+/00/g;
$ndest =~ s/^\+/00/g;
unless (($nback =~ m/^\d+$/) && ($ndest =~ m/^\d+$/)){
print $q->div({-class=>"alert-message error",},
"<strong>Erreur !</strong> Un des numeros ne semble pas valide"
);
die 'bad number';
}
my $telnet = new Net::Telnet (Timeout => 5,
Errmode => "die",
Host => "$host",
Port => "$port");
# Login
$telnet->open ();
$telnet->print ("Action: Login");
$telnet->print ("Username: $user");
$telnet->print ("Secret: $secret");
$telnet->print ("");
13 years ago
my ($status, $what) = $telnet->waitfor ("/Message: .*/");
13 years ago
# Check login status
unless (($status =~ m/Success/) && ($what =~ m/Authentication/)) {
print $q->div({-class=>"alert-message error",},
"<strong>Erreur !</strong> Une erreur d'authentification est survenue"
);
die 'Authentication error';
}
13 years ago
$telnet->print ("Action: Originate");
$telnet->print ("Channel: Local/$nback\@from-internal");
$telnet->print ("Context: from-internal");
$telnet->print ("Exten: $ndest");
$telnet->print ("Priority: 1");
$telnet->print ("Callerid: $cid");
$telnet->print ("");
13 years ago
($status, $what) = $telnet->waitfor ("/Message: .*/");
13 years ago
# Check originate command status
unless (($status =~ m/Success/) && ($what =~ m/Originate/)) {
print $q->div({-class=>"alert-message error",},
"<strong>Erreur !</strong> Une erreur est survenue pendant la num&eacute;rotation"
);
die 'Originate error';
}
13 years ago
$telnet->close;
}
13 years ago