tuto:ipasserelle:telephonie:page_de_callback

Ceci est une ancienne révision du document !


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.

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

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
asterisk -rx 'reload'

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
  • tuto/ipasserelle/telephonie/page_de_callback.1321617824.txt.gz
  • Dernière modification: 18/11/2011 13:03
  • de dani