AGI et base de données
Asterisk propose des options avancées de configuration et d’ouverture parmi lesquelles une base de données interne et un système de communication avec des applications externes : AGI.
Asterisk DB
La base de données est très simple et proche d’une table indexée. Il est possible d’organiser la base en sections ou familles, dans une famille données on affectera une valeur à une clé d’index. Il est ensuite possible de lire et écrire dans cette base de données, aussi bien depuis le plan de numérotation (cf fichier extensions.conf) que dans un script externe via AGI.
AGI
AGI est un canal de communication bidirectionnel entre Asterisk et un programme externe, indépendamment du langage utilisé pour ce dernier. Les échanges s’effectuent en mode texte, certains paramètres sont passés à l’initialisation du script depuis le plan de numérotation démarré avec la commande AGI(). Depuis le script on peut donner des ordres à Asterisk au niveau de la prise de décision, par exemple HANGUP pour raccrocher ou SET CALLERID pour changer la représentation de l’identifiant appelant.
Exemple: pretty-print de l’appelant
Afin d’illustrer ce propos, voici un petit exemple d’application utilisant ces deux principes: une base de données permettant de stocker les intitulés correspondant aux numéros appelant et un script AGI qui manipule le CALLERID en fonction du numéro appelant.
la base AstDB
La famille utilisée se nomme callerid, la clé est basée sur le numéro appelant au format ENUM (code pays + numéro), la valeur est ce qui sera affiché à l’écran de l’appelé.
/callerid/33426903783 : Alex Chauvin Bureau /callerid/33609573932 : Alex Chauvin Cell
le script AGI en perl
J’ai utilisé Perl pour ce script, d’une part car ce langage est simple et d’autre part car la librarie Asterisk::AGI est très pratique. Voici les points clés du script :
#!/usr/bin/perl
#
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my $callerid = $input{'callerid'}; # on recupere le callerid
# normalisation du numero passe {country code}{number}
# suppression des caracteres non numeriques
$callerid =~ s/[^d]//g;
# si le numero commence par 00, on supprime cette partie
if ($callerid =~ /^00(d+)/) {
$callerid = $1;
}
# si le numero est sous la forme d’un numero en France, on ajoute 33
# et supprime le premier 0
if ($callerid =~ /^0([1-6]d{8})/) {
$callerid = "33$1";
}
# on cherche le nom dans la base de donnees AstDB (callerid)
$name = "";
$dbname = $AGI->database_get("callerid", $callerid);
if (defined $dbname && $dbname ne "noresponse") {
# si le nom est defini, on modifie le CALLERID
$name = $dbname;
$newcallerid = "\"$name <$callerid>\"";
$AGI->set_callerid($newcallerid);
}
exit(0);
Conclusion
Voilà un exemple très simple de fonctionnement d’un script AGI qui simplifie grandement la manipulation dans le plan de numérotation, on utilisera ce type de mécanisme pour du CTI principalement ou des traitements d’appel évolués.
|
Posté par: Alexandre Chauvin-Hameau, le 05/05/2006 Trackback | Popularité: 20% marqué 1.2, AGI, asterisk, CTI, database et perl |
|






(3 votes, average: 4.33 out of 5)
