Page de CallBack Simple

Ce tuto vous permet de créer une petite page de callback simple. Une fois cette page en place, vous pouvez vous connecter sur https://<serveur>/callback, et vous trouverez une page comportant 2 champs

Le premier est le numéro sur lequel votre serveur asterisk doit vous appeler

le second est le numéro de téléphone de la personne que vous souhaitez appeler

Asterisk se chargera de vous appeler, puis d'appeler votre destinataire, et mettra les deux canaux en relation.

Installation des paquets nécessaires

yum --enablerepo=fws --enablerepo=rpmforge install perl-Asterisk-AMI

Mise en place du script

mkdir -p /opt/callback/ cat <<'EOF' > /opt/callback/index.cgi #!/usr/bin/perl -w use Asterisk::AMI; use CGI qw/:standard/; my $q = new CGI; print $q->header, $q->start_html(), $q->h1('page de callback'), $q->start_form, "Entrez ici votre numero ",textfield('nback'),p, "Entrez ici le numero de votre destinataire ", textfield('ndest'),p, $q->submit, $q->end_form, $q->hr; if ($q->param()) { my $nback = $q->param('nback') || $ENV{'HTTP_USER_EXTENSION'}; my $ndest = $q->param('ndest'); $nback =~ s/[\s\(\)\.<>]//g; $ndest =~ s/[\s\(\)\.<>]//g; unless (($nback =~ m/^\d+$/) && ($ndest =~ m/^\d+$/)){ print $q->h1('un des numeros ne semble pas valide, ils ne doivent contenir que des chiffres'); die ('bad number'); } my $astman = Asterisk::AMI->new(PeerAddr => '127.0.0.1', PeerPort => '5038', Username => 'callback', Secret => '__SECRET__' ); die "Unable to connect to asterisk" unless ($astman); my $response = $astman->action({Action => 'Originate', Channel => "Local/$nback\@from-internal", Context => 'from-internal', CallerID => $ndest, Exten => $ndest, Priority => 1}); } EOF chown root:www /opt/callback/index.cgi chmod 750 /opt/callback/index.cgi

Création d'un utilisateur pour l'accès au manager d'asterisk

cat <<EOF >> /etc/asterisk/manager_custom.conf [callback] secret = __SECRET__ deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.255 read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user EOF

Génération d'un mot de passe aléatoire

On va maintenant créer un mot de passe parfaitement aléatoire pour cet utilisateur callback (et remplacer les SECRET)

openssl rand -base64 60 | tr -c -d '[:alnum:]' > ~/callback.secret chmod 600 ~/callback.secret export SECRET=$(cat ~/callback.secret) sed -i -e "s/__SECRET__/$SECRET/g" /etc/asterisk/manager_custom.conf sed -i -e "s/__SECRET__/$SECRET/g" /opt/callback/index.cgi unset SECRET rm -f ~/callback.secret

Rechargement de la configuration d'asterisk

asterisk -rx 'reload'

Configuration apache

Il ne reste plus qu'on configurer apache pour rendre ce script accessible

mkdir -p /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf cat <<EOF > /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/90callback ScriptAlias /callback /opt/callback/index.cgi <Directory /opt/callback> order deny,allow deny from all allow from all Options ExecCGI AllowOverride None AuthName "Callback" AuthType Basic AuthExternal pwauth require user admin user1 user2 Satisfy all </Directory> EOF

En remplaçant admin user1 user2 par la liste des utilisateurs qui doivent y avoir accès (require valid-user pour que n'importe quel utilisateur authentifié ait accès à la page)

Reste plus qu'à étendre les templates et tester

expand-template /etc/httpd/conf/httpd.conf sv t /service/httpd-e-smith