Retrouvez cet article dans : Linux Magazine 90
Le monde des Logiciels libres dispose de différentes solutions VoIP axées sur des protocoles standards (H323, SIP...). Voyons comment réaliser une architecture simple de VoIP à l’aide d’un serveur Asterisk et de clients Ekiga. Puis, comment configurer différentes fonctionnalités de ce serveur Asterisk.
1. Mise en situation
L’objet de cet article est d’initier le lecteur à la mise en œuvre d’une petite architecture VoIP basée sur des Logiciels libres. Cette architecture est typiquement celle que l’on pourrait trouver dans une petite entreprise ou éventuellement chez un particulier. Elle s’articule autour d’un réseau local, avec un serveur de téléphonie Asterisk et plusieurs postes clients Ekiga. En s’appuyant sur cette architecture, quelques fonctionnalités courantes du serveur Asterisk sont illustrées.
Côté serveur, le logiciel Asterisk dispose de nombreuses fonctionnalités dignes des meilleures solutions VoIP commerciales. De plus, il supporte pratiquement tous les protocoles VoIP standards (H323, SIP, MGCP...). Côté client, le téléphone logiciel Ekiga (successeur de Gnomemeeting) propose une interface graphique conviviale et instinctive. Il supporte les protocoles H323 et SIP.
Les versions des logiciels utilisées sont Asterisk 1.2.10 et Ekiga 2.0.2. L’architecture VoIP proposée utilise exclusivement le protocole VoIP de signalisation SIP (Session Initiation Protocol) et les codecs audio G.711 loi µ. Les problématiques réseau de qualité de service ne sont pas abordées.
2. Configuration du serveur Asterisk
Après installation du serveur de téléphonie Asterisk sur votre distribution favorite, il est possible de tester rapidement le fonctionnement en lançant simultanément le processus serveur en mode " verbeux " (option -v) avec un processus client CLI attaché (option -c).
asterisk -vvvvc
Une invite de commande doit apparaître à la fin si tout se déroule correctement :
Asterisk Ready. *CLI>
On peut alors rapidement voir l’ensemble des commandes disponibles via l’interface CLI (Command Line Interface).
Asterisk Ready. *CLI>help
Pour arrêter le serveur depuis l’interface CLI, on peut utiliser la commande stop now :
Asterisk Ready. *CLI>stop now

Par la suite, il est préférable d’automatiser le lancement du processus serveur à l’aide de la variable RUNASTERISK du fichier /etc/default/asterisk.
RUNASTERISK=yes
Dans ce cas, on connecte des clients CLI à l’aide de l’option –r :
asterisk -r
La configuration du serveur est réalisée à travers plusieurs fichiers textes qui se situent dans le répertoire /etc/asterisk. Parmi eux, le fichier sip.conf permet la déclaration des téléphones. Pour déclarer trois téléphones logiciels Ekiga, il faut simplement ajouter les lignes suivantes à la fin de ce fichier :
[ekiga1] ; nom du téléphone type=friend ; type de téléphone host=dynamic ; enregistrement dynamique de l’adresse IP du téléphone username=ekiga1 ; nom d’utilisateur associé secret=toto ; mot de passe disallow=all ; interdit tous les codecs allow=ulaw ; autorise uniquement le codec G711 loi µ [ekiga2] ; nom du téléphone type=friend ; type de téléphone host=dynamic ; enregistrement dynamique de l’adresse IP du téléphone username=ekiga2 ; nom d’utilisateur associé secret=toto ; mot de passe disallow=all ; interdit tous les codecs allow=ulaw ; autorise uniquement le codec G711 loi µ [ekiga3] ; nom du téléphone type=friend ; type de téléphone host=dynamic ; enregistrement dynamique de l’adresse IP du téléphone username=ekiga3 ; nom d’utilisateur associé secret=toto ; mot de passe disallow=all ; interdit tous les codecs allow=ulaw ; autorise uniquement le codec G711 loi µ
Il suffit maintenant d’attribuer un numéro de téléphone à chacun de nos trois téléphones. Le fichier extensions.conf permet d’associer à chaque numéro de téléphone une suite de commandes. Pour ce faire, il suffit d’ajouter les trois lignes suivantes à la fin de ce fichier (plus exactement à la fin du contexte [default]) :
exten => 555,1,Dial(SIP/ekiga1) ; 555 appelle le téléphone ekiga1 exten => 556,1,Dial(SIP/ekiga2) ; 556 appelle le téléphone ekiga2 exten => 557,1,Dial(SIP/ekiga3) ; 557 appelle le téléphone ekiga3
Le serveur Asterisk est maintenant prêt à enregistrer les trois clients Ekiga qui disposent respectivement des numéros de ligne 555, 556 et 557.
3. Configuration des téléphones logiciels Ekiga
Pour utiliser le téléphone logiciel Ekiga, il est préférable de se procurer un micro/casque. Il faut également s’assurer que le greffon ALSA (Advanced Linux Sound Architecture) est correctement configuré. Le réglage convenable des niveaux sonores se fait empiriquement en relançant plusieurs fois " alsamixer ".
Lors du premier lancement d’Ekiga, une fenêtre, l’" Assistant de première configuration " apparaît. Quittez cette fenêtre en cliquant " Annuler ". La fenêtre principale d’Ekiga doit apparaître. Il suffit alors d’enregistrer le téléphone sur le serveur Asterisk. Dans le menu déroulant Edition, sélectionnez Compte. Cliquez alors sur le bouton " Ajouter ".
Complétez les différents champs comme ci-dessous :
NomDuCompte : MonAsterisk Protocole : SIP Registrar : Adresse IP de votre serveur Asterisk Utilisateur : ekiga 1 Mot de Passe : toto
Puis, confirmez avec le bouton " Validez ". Ensuite, on coche la case de la colonne " A " de gauche. L’état " Inscrit " doit apparaître dans la colonne " Etat " (à condition que le logiciel Asterisk soit démarré sur le serveur).
Maintenant le premier client Ekiga est configuré correctement. Il est possible d’appeler un numéro d’accueil sur le serveur Asterisk en composant le 3. Un message de bienvenue est alors annoncé (" Welcome to the Asterisk Open Source PBX... ").
Pour la configuration des autres clients Ekiga, la procédure est identique en changeant simplement le compte ekiga1 par ekiga2 ou ekiga3.
Dès que ces trois premiers clients sont correctement configurés, il est possible d’effectuer des appels internes. Le client ekiga1 peut, par exemple, appeler le client ekiga2 en composant le 556.
4. Enregistrement chez un fournisseur SIP
SIP pour Session Initiation Protocol est un protocole normalisé et standardisé par l’IETF (RFC 3261 + RFC 3265). Il se charge de l’authentification et de la localisation des multiples participants d’une session multimédia. SIP remplace progressivement H323.
L’architecture mise en place jusqu’à présent permet uniquement d’effectuer des appels internes. Pour pouvoir accéder au réseau téléphonique commuté, qui est toujours le standard de fait, une solution élégante est l’utilisation d’un fournisseur SIP. Ce dernier constitue une passerelle entre la téléphonie IP (basée sur le protocole SIP) et le réseau de l’opérateur historique. La plupart des fournisseurs SIP fonctionnent suivant le principe du crédit temps : vous créditez un compte chez le fournisseur qui est débité en fonction des communications. Les tarifs de la minute dépendent de la destination de l’appel. Les appels nationaux vers des fixes sont souvent gratuits.
Tous les fournisseurs SIP permettent les appels sortants vers le Réseau Téléphonique Commuté. Par contre, pour les appels entrants, seulement certains proposent l’attribution d’un numéro.
Le fournisseur d’accès internet " Free " propose un service de téléphonie SIP appelé " freephonie.net " pour les appels sortants et entrants. La configuration donnée pour ce fournisseur SIP peut facilement s’adapter à d’autres (voir les liens donnés plus bas).
Sur la page d’accueil de votre fournisseur d’accès " Free ", dans l’encadré " Gestion de mes services de téléphonie ", sélectionnez Gestion de mon compte SIP.

Il s’agit ensuite de configurer le service SIP. Pour ce faire, il faut saisir un mot de passe, puis valider les options " Rediriger les appels entrants vers le SIP " et " Activer le service ".

Cliquez alors " ENVOYER ", à ce moment le téléphone de la Freebox est désactivé et tous les appels transitent à travers la passerelle SIP.
Ensuite, on paramètre le serveur Asterisk pour qu’il s’enregistre auprès de son fournisseur SIP.
Cela se fait en ajoutant la ligne suivante dans le fichier /etc/asterisk/sip.conf à la fin du contexte [general] juste avant le contexte [authentication].
Il faut à présent déclarer le faisceau correspondant au fournisseur. Pour cela, il faut ajouter les lignes suivantes à la fin du fichier sip.conf :
[fournisseursip] type=friend ; type de lien correspondant insecure=very ; indispensable host=freephonie.net ; le fournisseur SIP username=0807060504 ; le nom d’utilisateur chez le fournisseur SIP secret=MotDePasse ; le mot de passe chez le fournisseur SIP fromuser=087060504 fromdomain=freephonie.net context=fournisseursip-entrant ; le contexte ou diriger les appels entrants
Enfin, il reste à affecter un préfixe qui permet de sélectionner le faisceau du fournisseur SIP. On peut, par exemple, définir le préfixe 0. Ainsi, tous les numéros débutant par 0 sont envoyés vers le réseau téléphonique commuté. Cette règle est à définir en ajoutant la ligne suivante à la fin du fichier extensions.conf :
exten=>_0.,1,Dial(SIP/${EXTEN:1}@fournisseursip)
Pour tester, il suffit de composer le 0 suivi d’un numéro de téléphone quelconque, soit 11 chiffres. Dans l’autre sens, si vous appelez votre numéro freephonie depuis le réseau commuté, vous entendez le message d’accueil d’Asterisk. On peut diriger les appels entrant sur les trois postes clients ekiga en ajoutant les lignes suivantes à la fin du fichier extensions.conf :
5. Fonctions utilisateurs
Comme tout serveur de téléphonie, Asterisk dispose des fonctions utilisateurs de base sur les appels : transfert, mise en attente, interception, enregistrement...
Ces fonctions sont activées par l’envoi de tonalités DTMF (Dual-Tone Multi-Frequency). Ces tonalités seront envoyées en cours de communication à l’aide de l’onglet " numéroteur " du téléphone logiciel " Ekiga ". La configuration de ces fonctions est réalisée à travers le fichier features.conf.
5.1 Paramétrage des tonalités DTMF
Le serveur de téléphonie Asterisk et le téléphone logiciel Ekiga doivent utiliser le même mode de fonctionnement DTMF. En principe, Asterisk et Ekiga utilisent le format DTMF " RFC2833 " par défaut. Mais, pour être rigoureux, il est préférable de forcer ce mode pour nos deux logiciels. Côté Asterisk, il suffit de décommenter la ligne suivante dans le fichier sip.conf (en supprimant le ; en début de ligne) :
 ;dtmfmode = rfc2833 ; Set default dtmfmode for sending DTMF. Default: rfc2833
Côté Ekiga, dans le menu Edition, sélectionnez Préférences, puis Paramètres SIP. Vérifiez alors, que " mode DTMF " est à " RFC2833 ".
5.2 Transfert d’appel (#)
La fonctionnalité de transfert d’appel est souvent implémentée directement au niveau des terminaux téléphoniques SIP, qu’ils soient logiciels ou matériels. C’est le cas du téléphone logiciel Ekiga où l’on peut accéder cette fonction par le menu déroulant Appel, suivi de Transférer l’appel (raccourci [Ctrl]+[T]).
Cette fonction SIP est également disponible au niveau du serveur de téléphonie. Cela permet d’utiliser le transfert qu’il soit disponible ou non à partir du terminal, et de la même manière quel que soit ce téléphone. Le serveur de téléphonie Asterisk dispose de cette possibilité de transfert au cours d’une communication au travers de commandes DTMF.
Il ne reste plus qu’à autoriser le transfert d’appel au niveau des commandes Dial() associées aux trois numéros de téléphone (555, 556, et 557) du fichier extensions.conf. Pour ce faire, modifiez la fin du fichier extensions.conf comme suit :
exten => 555,1,Dial(SIP/ekiga1,,tT) exten => 556,1,Dial(SIP/ekiga2,,tT) exten => 557,1,Dial(SIP/ekiga3,,tT)
Les options t et T autorisent respectivement l’appelé et l’appelant à transférer l’appel.
Pour tester le transfert, il faut alors établir une communication. Puis, durant la conversation, tapez # sur le poste. A ce moment, le serveur répond en prononçant " transfer ". Saisissez alors le numéro du téléphone de destination.
5.3 Mise en attente (#700)
La fonction de mise en attente d’appel consiste à mettre une communication en pause. Cela permet de libérer temporairement la ligne ou de récupérer une communication sur un autre téléphone. Une musique d’attente peut être diffusée pour faire patienter le correspondant.
Pour activer le parc d’attente, il faut ajouter la ligne suivante dans le contexte [default] à la fin du fichier extensions.conf :
include=>parkedcalls
Pour tester la mise en attente, il suffit d’établir une communication, puis de taper # pour activer le transfert et 700 pour transférer vers le parc d’attente. Le serveur prononce alors un numéro dans le parc. On peut ensuite raccrocher le poste courant, se déplacer sur un autre poste et reprendre la communication en composant simplement le numéro attribué dans le parc.
L’utilisateur dont l’appel est mis en attente ne dispose alors d’aucune indication sonore et risque de penser que la communication est perdue. Pour éviter cela, il est judicieux d’activer la musique d’attente sur le serveur Asterisk.
Le serveur Asterisk peut diffuser des musiques d’attente au format MP3 à travers différents logiciels de lecture. La méthode la plus simple consiste à utiliser le lecteur " madplay ".
On paramètre ensuite Asterisk de manière à ce qu’il utilise ce lecteur MP3 pour diffuser la musique d’attente. Pour cela, il faut modifier la section [default] du fichier musiconhold.conf comme suit :
Il ne reste plus qu’à copier votre fichier MP3 dans le répertoire usr/share/asterisk/mohmp3 dont il est question ci-dessus. Maintenant, l’utilisateur mis dans le parc entend la musique d’attente.
5.4 Interception d’appel (*8)
L’interception d’appel intervient lorsqu’un téléphone sonne. Elle autorise la récupération de l’appel destiné au poste qui sonne à partir d’un autre poste. Pour cela, il faut que l’intercepté appartienne au groupe d’appel qui correspond au groupe d’interception de l’interceptant.
Pour illustrer cela, on peut par exemple autoriser l’interception du téléphone ekiga2 par ekiga1. Dans ce cas, il suffit d’associer ekiga1 au groupe d’interception qui correspond au groupe d’appel de ekiga2. Pour cela modifiez, le fichier sip.conf, comme suit :
[ekiga1] type=friend host=dynamic username=ekiga1 secret=toto pickupgroup=1 [ekiga2] type=friend host=dynamic username=ekiga2 secret=toto callgroup=1
Pour tester, il faut d’abord lancer un appel du téléphone ekiga3 vers ekiga2. Puis, au moment où le téléphone ekiga2 sonne, il suffit de composer *8 sur le terminal " ekiga1 " pour prendre la communication.
5.5 Enregistrement d’appel (*)
Le serveur Asterisk offre la possibilité d’enregistrer un appel sur demande d’un utilisateur.
Pour activer cette fonction, il faut lui associer une touche à travers le fichier features.conf, et l’autoriser dans le contexte [globals] et au niveau des trois commandes Dial() du fichier extensions.conf.
Modifiez d’abord la touche associée à la fonction One Touch Record dans le fichier features.conf (*1 semble ne pas fonctionner avec Ekiga au moment où j’écris ces lignes) en remplaçant la ligne :
;automon => *1 ; One Touch Record
par (pensez à décommenter en enlevant le ; du début de ligne) :
[globals] DYNAMIC_FEATURES=>automon
Ensuite, ajoutez la ligne suivante au début du contexte [globals] dans le fichier extensions.conf comme suit :
exten => 555,1,Dial(SIP/ekiga1,60,wW) exten => 556,1,Dial(SIP/ekiga2,60,wW) exten => 557,1,Dial(SIP/ekiga3,60,wW)
Puis, modifiez les trois commandes Dial() correspondant aux trois numéros de téléphone (555, 556, 557) comme cela :
L’option w indique que l’enregistrement peut être initié par l’appelé et W indique qu’il peut être demandé par l’appelant.
Pour tester, il suffit d’établir une communication et de presser la touche * sur un des téléphones.
La conversation a été enregistrée sur le serveur Asterisk dans le répertoire /var/spool/asterisk/monitor. Pour l’écouter, on peut utiliser la commande aplay sur le serveur Asterisk comme ci-dessous :
aplay /var/spool/asterisk/monitor/autoÂ*.wav
On peut envisager de développer différentes interfaces de consultation. Par exemple, des pages web pour télécharger ces enregistrements sur n’importe quel ordinateur ou un menu vocal interactif pour les écouter à partir d’un téléphone quelconque.
Asterisk est un PABX (Private Automatic Branch eXchange) ou PBX, un commutateur téléphonique privé.
6. Boîtes vocales
6.1 Utilisation de la boîte vocale d’exemple
Par défaut, le serveur de téléphonie Asterisk dispose d’un utilisateur 1234 avec une boîte configurée accessible avec le mot de passe 4242.
Dans un premier temps, on peut installer les messages vocaux en francais :
apt-get install asterisk-prompt-fr
Ensuite, indiquez la langue préférée pour les téléphones SIP dans le fichier sip.conf en remplaçant la ligne :
;language=en ; Default language setting for all users/peers
par (pensez à décommenter en enlevant le ; du début de ligne) :
language=fr ; Default language setting for all users/peers
Pour tester la messagerie vocale d’exemple, il suffit alors d’appeler le 1235 (pas le 1234 qui correspond à la Console) et de laisser directement un message à l’utilisateur 1234. Après cela, appelez le 8500 et authentifiez-vous en tant qu’utilisateur 1234 et mot de passe 4242. Puis tapez 1 pour écouter le message que vous venez de laisser.
6.2 Création d’une boite vocale
Pour créer une boite vocale associée à un numéro de téléphone, il faut d’abord la déclarer dans la partie " [default] " du fichier voicemail.conf comme suit :
555 est le numéro de téléphone auquel la boite vocale est associée, et 0000 est le mot de passe correspondant. ekiga1 désigne l’utilisateur associé et root@localhost est son adresse mail.
Les lignes exten du fichier extensions.conf permettent de décrire un algorithme de programmation linéaire (comme en BASIC). En effet, elles disposent d’un champ d’étiquette qui indique l’ordre d’exécution des commandes.
La commande Dial() accepte un argument timeout qui correspond à la durée de la tentative d’appel avant de passer à la commande suivante. Après ce délai, l’instruction suivante (étiquette 2) est exécutée. Elle renvoie sur la messagerie. Finalement, la dernière instruction (étiquette 3) est lancée. Elle provoque le raccrochage de la ligne.
exten => 555,1,Dial(SIP/ekiga1, 10) exten => 555,2,Voicemail(b555) exten => 555,3,Hangup
Pour essayer votre messagerie vocale, appelez ekiga1 au 555 à partir du poste ekiga2, et ne décrochez pas le poste ekiga1.
7. Messagerie unifiée
La messagerie unifiée permet, plutôt que de consulter la boite vocale à l’aide du téléphone, de recevoir les messages vocaux en fichiers .wav joints dans le courriel. Cette fonctionnalité peut être implémentée de différentes manières :
- en installant un logiciel de MTA qui transfère ces courriels sur un serveur SMTP externe.
- en transformant la machine qui héberge le serveur de téléphonie Asterisk pour qu’elle devienne aussi serveur de mail.
Nous illustrons ici la seconde solution. Pour cela, nous allons ajouter deux logiciels à la machine qui héberge le serveur Asterisk : un logiciel de MTA (Mail Transfer Agent) pour permettre l’envoi de mail par Asterisk, et un serveur POP pour transformer la machine en serveur de courriel. Dans ce cas, il y a un compte mail par compte utilisateur.
7.1 Installation et configuration du Mail Transfer Agent "Â exim4Â "
Pour transmettre les courriels avec les messages vocaux rattachés, le serveur téléphonie Asterisk fait appel à un programme de MTA tel que " exim4 " (commande sendmail). Ce dernier doit être paramétré comme suit (cas d’une distribution Debian) :
Faut-il séparer la configuration dans plusieurs fichier ? NON Type de configuration : Distribution locale seulement (pas de réseau) Nom du courriel du système : localhost Liste d’adresses IP où Exim sera en attente de connexions SMTP : 127.0.0.1 Autres destinations dont le courriel doit être accepté : (vide) Faut-il minimiser les requêtes DNS (connexions à la demande) ? NON
A ce stade, Asterisk rattache les messages vocaux destinés à ekiga1 dans un courriel qui est envoyé à toto@localhost (sur le port 25 de la boucle locale 127.0.0.1). Ce courriel est accessible sur la machine qui héberge le serveur Asterisk par l’utilisateur toto via la commande mail.
7.2 Installation et configuration du serveur POP " ipopd "
Afin de pouvoir consulter les courriels à partir d’un logiciel de messagerie quelconque et depuis n’importe quelle machine, il suffit d’installer un serveur POP " ipopd " sur la machine qui héberge le serveur Asterisk. Il est alors possible de paramétrer un logiciel de messagerie pour relever les courriels du serveur Asterisk en utilisant le protocole POP avec chiffrement SSL (port 995 du serveur Asterisk).
Après avoir correctement paramétré votre client de courriel, vous récupérez les courriers envoyés par le serveur Asterisk avec les messages vocaux joints au format *.wav.
Dear ekiga1: Just wanted to let you know you were just left a 0:18 long message (number 2) in mailbox 555 from ph, on Wednesday, September 20, 2006 at 03:40:08 PM so you might want to check it when you get a chance. Thanks! --Asterisk
Le gabarit du mail, ici en anglais, peut être facilement adapté en modifiant la variable emailbody dans le fichier voicemail.conf.
8. Menu Vocal Interactif
Une des fonctionnalités fortes du serveur de téléphonie Asterisk est l’IVR (Interactive Voice Response). En français, cela peut se traduire par " menu vocal interactif ".
Pour illustrer cette fonctionnalité, nous pouvons imaginer le menu suivant :

La navigation à travers les différents Messages Vocaux est assurée par la pression des touches [1], [2], [3] du téléphone comme indiqué sur le schéma. La touche [*] permettant de quitter à tout moment.
La première étape consiste à enregistrer les fichiers audio qui contiennent les différents Messages Vocaux. A titre d’exemple, on peut enregistrer les messages suivants :

L’enregistrement peut se faire avec la commande arecord que l’on termine avec [Ctrl-C] :
arecord > MessageVocalBienvenue.wav
Il est conseillé de vérifier chaque enregistrement avec la commande aplay
aplay MessageVocalBienvenue.wav
La conversion des fichiers enregistrés au format GSM se fait avec l’utilitaire " sox " :
apt-get install sox sox MessageVocalMenu0.wav –r8000 –c1 MessageVocalMenu0.gsm resample –ql ... cp *.gsm /usr/share/asterisk/sounds/MessagesVocaux
Enfin, il suffit de décrire le Menu Vocal à l’aide d’un algorithme de programmation linéaire. En effet, comme cela a été expliqué précédemment : les lignes exten du fichier extensions.conf permettent de décrire un algorithme de programmation linéaire (comme en BASIC). Comme dans toute programmation linéaire, il est possible de réaliser un saut conditionnel. La condition est la pression d’une touche sur le téléphone. Voilà le code qui doit être ajouté à la fin du fichier extensions.conf :
exten => 559,1, Set(TIMEOUT(digit)=3) ; Durée max d’un chiffre DTMF à 3 sec exten => 559,2, Set(TIMEOUT(response)=10)ResponseTimeout,10; Attente d’une tonalité DTMF durant 10 sec exten => 559,3, Answer ; Decrochage exten => 559,4, Background(MessagesVocaux/MessageVocalBienvenue) ; Lecture en arrière plan exten => 559,5, Goto(MenuVocal0,s,1) [MenuVocal0] exten => s,1, Background(MessagesVocaux/MessageVocalMenu0) ; Lecture en arrière plan exten => s,2, WaitExten exten => 1,1, Goto(MenuVocal1,s,1) ; Aller au contexte MenuVocal1 exten => 2,1, Goto(MenuVocal2,s,1) ; Aller au contexte MenuVocal2 exten => 3,1, Goto(MenuVocal3,s,1) ; Aller au contexte MenuVocal3 exten => *,1, Hangup ; Raccrochage exten => i,1, Playback(MessagesVocaux/MessageVocalToucheInvalide) ; Lecture exten => t,1, Goto(MenuVocal0,s,1) ; Si ResponseTimeout dépassé retour [MenuVocal1] exten => s,1, Background(MessagesVocaux/MessageVocalMenu1) ; Lecture en arrière plan exten => s,2, WaitExten exten => 1,1, Goto(MenuVocal11,s,1) ; Aller au contexte MenuVocal11 exten => 2,1, Goto(MenuVocal12,s,1) ; Aller au contexte MenuVocal12 exten => *,1, Hangup ; Raccrochage exten => i,1, Playback(MessagesVocaux/MessageVocalToucheInvalide) ; Lecture exten => t,1, Goto(MenuVocal1,s,1) ; Si ResponseTimeout dépassé retour [MenuVocal2] exten => s,1, BackGround(MessagesVocaux/MessageVocalMenu2) ; Lecture en arrière plan exten => s,2, WaitExten exten => *,1, Hangup ; Raccrochage exten => i,1, Playback(MessagesVocaux/MessageVocalToucheInvalide) ; Lecture exten => t,1, Goto(MenuVocal2,s,1) ; Si ResponseTimeout dépassé retour [MenuVocal3] exten => s,1, BackGround(MessagesVocaux/MessageVocalMenu3) ; Lecture en arrière plan exten => s,2, WaitExten exten => *,1, Hangup ; Raccrochage exten => i,1, Playback(MessagesVocaux/MessageVocalToucheInvalide) ; Lecture exten => t,1, Goto(MenuVocal3,s,1) ; Si ResponseTimeout dépassé retour [MenuVocal11] exten => s,1, BackGround(MessagesVocaux/MessageVocalMenu11) ; Lecture en arrière plan exten => s,2, WaitExten exten => *,1, Hangup ; Raccrochage exten => i,1, Playback(MessagesVocaux/MessageVocalToucheInvalide) ; Lecture [MenuVocal12] exten => s,1, BackGround(MessagesVocaux/MessageVocalMenu12) ; Lecture en arrière plan exten => s,2, WaitExten exten => *,1, Hangup ; Raccrochage exten => i,1, Playback(MessagesVocaux/MessageVocalToucheInvalide) ; Lecture
9. Fonctionnalité Realtime MySQL
Le serveur Asterisk permet de remplacer les fichiers de configuration du répertoire/etc/asterisk par des tables de base de données. A titre d’exemple, nous ne décrivons que la migration des fichiers sip.conf et extensions.conf vers des tables (le principe est identique pour les autres fichiers). La base de données utilisée est MySQL.
La fonctionnalité Realtime n’étant pas disponible de manière standard dans Asterisk, elle nécessite l’installation du paquet asterisk-addons disponible sur le site d’Asterisk.
9.1 Configuration initiale de MySQL
Après avoir installé le serveur MySQL, il faut créer un utilisateur ayant les droits appropriés. Pour simplifier, nous utilisons le compte root avec un " mot " de passe toto.
mysqladmin password toto
On peut ensuite connecter un client CLI au serveur MySQL en administrateur :
mysql -u root -p
La première étape consiste à créer une base " asterisk " dans MySQL :
mysql>create database asterisk;
La création peut être vérifiée ainsi :
mysql>show databases;
9.2 Installation de " asterisk-addons "
Après avoir téléchargé et compilé asterisk-addons, il suffit de copier les fichiers suivants aux emplacements convenables.
cp res_config_mysql.so /usr/lib/asterisk/modules/ cp configs/res_mysql.conf.sample /etc/asterisk/res_mysql.conf
La connexion d’Asterisk à MySQL est définie dans le fichier res_mysql.conf. Il convient d’ajouter les lignes suivantes à la fin de ce fichier :
[general] dbhost = 127.0.0.1 dbname = asterisk dbuser = root dbpass = toto dbport = 3306
9.3 Migration du fichier " sip.conf "
Pour indiquer à Asterisk que les informations sipusers et sippeers sont dans la base MySQL, il est nécessaire d’ajouter les deux lignes suivantes à la fin du fichier extconfig.conf :
sipusers => mysql,asterisk,sip sippeers => mysql,asterisk,sip
Maintenant, il ne reste plus qu’à créer la table sip dans la base " asterisk " de MySQL :
mysql>CREATE TABLE `sip` ( `id` int(11) NOT NULL auto_increment, `name` varchar(80) NOT NULL default ‘’, `accountcode` varchar(20) default NULL, `amaflags` varchar(13) default NULL, `callgroup` varchar(10) default NULL, `callerid` varchar(80) default NULL, `canreinvite` char(3) default ‘yes’, `context` varchar(80) default NULL, `defaultip` varchar(15) default NULL, `dtmfmode` varchar(7) default NULL, `fromuser` varchar(80) default NULL, `fromdomain` varchar(80) default NULL, `fullcontact` varchar(80) default NULL, `host` varchar(31) NOT NULL default ‘’, `insecure` varchar(4) default NULL, `language` char(2) default NULL, `mailbox` varchar(50) default NULL, `md5secret` varchar(80) default NULL, `nat` varchar(5) NOT NULL default ‘no’, `deny` varchar(95) default NULL, `permit` varchar(95) default NULL, `mask` varchar(95) default NULL, `pickupgroup` varchar(10) default NULL, `port` varchar(5) NOT NULL default ‘’, `qualify` char(3) default NULL, `restrictcid` char(1) default NULL, `rtptimeout` char(3) default NULL, `rtpholdtimeout` char(3) default NULL, `secret` varchar(80) default NULL, `type` varchar(6) NOT NULL default ‘friend’, `username` varchar(80) NOT NULL default ‘’, `disallow` varchar(100) default ‘all’, `allow` varchar(100) default ‘g729;ilbc;gsm;ulaw;alaw’, `musiconhold` varchar(100) default NULL, `regseconds` int(11) NOT NULL default ‘0’, `ipaddr` varchar(15) NOT NULL default ‘’, `regexten` varchar(80) NOT NULL default ‘’, `cancallforward` char(3) default ‘yes’, `setvar` varchar(100) NOT NULL default ‘’, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), KEY `name_2` (`name`) ) TYPE=MyISAM ROW_FORMAT=DYNAMIC;
 Puis de la renseigner avec un poste :
mysql>insert into sip (name,type,host,username,secret) values (‘ekiga1’,’friend’,’dynamic’,’ekiga1’,’toto’);
On peut vérifier avec :
mysql>select name,type,host,username,secret from sip; +-----------+--------+---------+----------+--------+ | name | type | host | username | secret | +-----------+--------+---------+----------+--------+ | ekiga1 | friend | dynamic | ekiga1 | toto | +-----------+--------+---------+----------+--------+ 1 rows in set (0.01 sec)
Au redémarrage d’Asterisk, les informations qui étaient auparavant recherchées dans le fichier sip.conf sont maintenant prises dans la table sip de la base " asterisk ".
9.4 Migration du fichier " extensions.conf "
Comme précédemment, pour indiquer à Asterisk que les informations extensions sont dans la base MySQL, il faut ajouter la ligne suivante à la fin du fichier extconfig.conf :
Cette fois, il faut également ajouter la ligne suivante à la fin du fichier extensions.conf pour indiquer que la suite des informations à prendre en compte se trouve dans la base :
switch => Realtime/@
Il ne reste plus qu’à créer la table :
mysql>CREATE TABLE `extensions` ( `id` int(11) NOT NULL auto_increment, `context` varchar(20) NOT NULL default ‘’, `exten` varchar(20) NOT NULL default ‘’, `priority` tinyint(4) NOT NULL default ‘0’, `app` varchar(20) NOT NULL default ‘’, `appdata` varchar(128) NOT NULL default ‘’, PRIMARY KEY (`context`,`exten`,`priority`), KEY `id` (`id`) ) TYPE=MyISAM;
Et à la renseigner avec un numéro de téléphone associé au poste décrit dans la table sip :
mysql> insert into extensions (context,exten,priority,app,appdata) values (‘default’,’555’,’1’,’Dial’,’SIP/ekiga1’);
Au redémarrage d’Asterisk, les informations qui étaient auparavant cherchées dans le fichier extensions.conf sont maintenant recherchées dans la table extensions de la base " asterisk ".
Conclusion
Le début de cet article a démontré comment mettre en place simplement une architecture VoIP autour d’un serveur Asterisk. La suite du document a expliqué la configuration de quelques fonctionnalités couramment utilisées. Elles ne révèlent que très partiellement les possibilités du serveur Asterisk qui sont en permanente évolution.
 Liens:
- Asterisk : http://www.asterisk.org
- Ekiga : http://www.ekiga.org
- Quelques fournisseurs SIPÂ :
http://www.sipdiscount.com
http://www.voipbuster.com
http://www.freecall.comÂ
Retrouvez cet article dans : Linux Magazine 90

