Amélioration du plan de numérotation
Introduction
Dans le chapitre précédent, nous avons vu l’essentiel pour constituer rapidement un plan de numérotation fonctionnel. Cependant, dans le cas d’une structure plus importante comme une PME de 100 personnes, il faut apporter des améliorations nouvelles comme par exemple l’utilisation de variables, de macros ou fonctions qui permettent de simplifier le plan, l’utilisation de syntaxe comme les branchements conditionnels, la mise en place de conférences, la mise en base de données des comptes SIP, des boîtes vocales.
Optimisation avec les macros
Exemple : Considérons le plan de numérotation constitué de 3 fois 100 lignes
[internal]
exten => 400, 1, Answer()
exten => 400, 2, Dial(SIP/400,10,r)
exten => 400, 3, Hangup()
...
exten => 499, 1, Answer()
exten => 499, 2, Dial(SIP/499,10,r)
exten => 499, 3, Hangup()
Ce plan peut être amélioré en écrivant une macro Appel.
Toute macro devra être mise entre crochets et le nom devra commencer par macro- :
[macro-Appel]
exten => s, 1, Answer()
exten => s, 2, Dial(${ARG1},10,r)
exten => s, 3, Hangup()
La variable ${ARG1} contient le premier argument (ou paramètre) passé à la macro et dans le plan de numérotation, l’appel de la macro se fait à l’aide de l’application Macro(nom_de_la_macro, argument).
Le même plan de numérotation peut donc s’écrire de la façon suivante :
[macro-Appel]
exten => s, 1, Answer()
exten => s, 2, Dial(${ARG1},10,r)
exten => s, 3, Hangup()
[internal]
exten => 400, 1, Macro(Appel, SIP/400)
..
exten => 499, 1, Macro(Appel, SIP/499)
Fonctions avancées
1. Variables et expressions
a. Variables
Les variables sont utilisées pour être passées en argument à des fonctions.
La syntaxe d’une variable est la suivante :
${nom_de_la_variable:offset:longueur}
où :
-
nom_de_la_variable est le nom de la variable.
-
offset est un champ optionnel qui définit un pointeur. Si l’offset est négatif, la lecture de la chaîne s’effectue de droite à gauche.
-
longueur est un champ optionnel qui définit le nombre de caractères qui seront retournés, à partir de l’offset.
Exemples :
remerciements=Merci à Patrick et à Damien
${remerciements} : retourne Merci à Patrick et à Damien
${remerciements:1} : retourne erci à Patrick et à Damien
${remerciements:-2} : retourne en
${remerciements:8:19} : retourne Patrick et à Damien
Nous supprimons ici le préfixe de sortie 0 :
exten => _00XXXXXXXXX, 1, SetVar(numero=${EXTEN:1})
exten => _00XXXXXXXXX, 2, Dial(${numero})
Il existe trois types de variables :
-
variables globales : elles sont présentes dans la section [globals] du plan de numérotation ou peuvent être affectées en tant que telles par la commande SetGlobalVar().
-
variables de canaux : chaque canal dispose de ses propres variables qui sont détruites lorsque le canal...
Les conférences Meet-Me
1. Généralités
Asterisk permet de mettre en place des conférences de façon très simple : chaque utilisateur interne ou externe peut donc entrer dans un espace de communication dédié.
Chaque conférence peut être gérée par un administrateur qui peut rendre muets des participants et même les expulser.
Cette fonctionnalité est très intéressante pour les entreprises, d’un point de vue financier, puisqu’il est donc possible de faire transiter les flux de conferencing via les liens intersites déjà en place, évitant ainsi de faire appel à un coûteux dispositif de "pont téléphonique" auprès d’un opérateur.
Les déplacements peuvent également être réduits de façon conséquente.
Exemple : Conférence MeetMe avec borne audio SIP
Les "Meet-Me" sont mises en place à l’aide du fichier de configuration /etc/asterisk/meetme.conf et d’un appel à la fonction MeetMe() dans le plan de numérotation.
2. Fichier de configuration meetme.conf
Ce fichier permet de déclarer des conférences de type statiques.
;
; Configuration file for MeetMe simple conference rooms for
Asterisk of course.
;
; This configuration file...
Audio et vidéo
L’utilisation des conférences audio est une application très intéressante d’Asterisk mais il faut bien constater que vouloir bâtir une réunion entre plusieurs personnes distantes de 1000 Kms, sans support visuel pour les documents ou sans vidéo, peut rapidement être rébarbatif et ainsi perdre en efficacité.
Certaines fonctionnalités peuvent être ajoutées en périphérie de la plate-forme Asterisk :
-
support de web-conferencing via un logiciel adhoc, par exemple, OpenMeetings (http://www.openmeetings.net) permet d’effectuer des réunions en ligne :
-
Les utilisateurs se connectent à une conférence pour écouter l’orateur, celui qui présente le dernier document marketing par exemple, en diaporama.
-
En même temps, les utilisateurs se connectent sur un lien URL afin de visualiser le document qui est commenté par l’orateur.
-
-
plate-forme DIMDIM (http://www.dimdim.org) permet d’héberger un système de webconférence. DIMDIM existe en version SAAS (version payante) ou peut être installé en version Open Source sur un serveur au sein de l’entreprise (http://ebooks.zedl.fr).
-
mise en place de communication via deux softphones équipés du support vidéo ; la version commerciale de X-Lite EyeBeam permet d’obtenir une communication audio...
Asterisk et les bases de données
1. La base de données AstDB
Le stockage de données au sein même du plan de numérotation, à l’aide de fonction et de variables, atteint vite ses limites en terme d’exploitation.
Asterisk permet de stocker des valeurs à l’aide d’une base de données interne, AstDB (Asterisk DataBase) qui est au format Berkeley.
Les données sont sauvegardées dans des familles et sont identifiées par des clés. Celles-ci sont uniques par famille.
Il faut noter que les données de la base sont persistantes dans le sens où elles demeurent accessibles depuis n’importe où dans le plan de numérotation même après un reboot du serveur. La base est stockée dans /var/lib/asterisk/astdb.
Les postes connectés sont stockés dans la base AstDB (clé SIP / Registry).
a. AstDB dans le plan de numérotation
Exemple : Écriture d’une valeur dans la clé prenom de la famille utilisateur
${prenom}=Zoe
exten => s, 1, Set(DB(utilisateur/prenom=${prenom})
Exemple : Lecture de la valeur de la clé prenom de la famille utilisateur
exten => s, 1, Set(prenom=${DB(utilisateur/prenom)})
exten => s, 2, NoOP($prenom)
b. Commandes AstDB
DBdel(famille/clé) : supprime une clé de la base.
DBdeltree(famille) : supprime une famille de la base.
DBget(variable=famille/clé) : recherche une valeur dans la base.
DBput(famille/clé=valeur) : enregistre une valeur dans la base.
Commandes CLIdatabase show : affiche l’ensemble de la base AstDB.
database get : recherche une valeur d’une clé d’une famille.
database put : stocke une valeur dans une clé d’une famille.
database del : supprime une clé.
database...