Lancement d'Asterisk
Pour lancer Asterisk, il faut d'abord se loguer en root :
root@asterisk:~# sudo -s root
Lancer Asterisk :
root@asterisk:~# /etc/init.d/asterisk start
Lancer la CLI (Command-Line Interface) :
root@asterisk:~# asterisk -vvvvvvvvvr
Les commandes de la CLI
Le nombre de commandes est important. Voici celles que nous avons le plus utilisées :
- sip debug : active le mode debug et affiche les trames
- sip show users : affiche les utilisateurs inscrits
- reload : recharge les fichiers de configuration
- show dialplan : affiche extensions.conf
Vous pouvez accéder à toutes les commandes ici.
Les fichiers de configuration
Les fichiers de configuration d'Asterisk se trouvent dans /etc/asterisk/ et portent l'extension .conf.
- asterisk.conf : contient les emplacements des différents répertoires utilisés par Asterisk
- cdr.conf : permet de modifier la façon dont Asterisk stocke les Enregistrements des Appels (Call Detail Record)
- cdr_mysql.conf : permet de définir les paramètres d'accès à la base MySQL
- extconfig.conf : permet de modifier la façon dont Asterisk cherche les fichiers de configuration (statique ou temps réel)
- extensions.conf : permet de définir le plan de numérotation (Dial Plan)
- features.conf : permet de modifier certaines fonctionnalités (parcage d'appels)
- iax.conf : permet de configurer les liaisons utilisant le protocole IAX (entre 2 serveurs Asterisk,...)
- modules.conf : permet de définir quel module doit être lancé au démarrage
- musiconhold.conf : permet de définir les paramètres des musiques d'attente
- sip.conf : permet de définir les contextes d'appel et les utilisateurs utilisant le protocle SIP
- voicemail.conf : permet de configurer les boîtes vocales de chaque utilisateur
Configuration de base d'Asterisk
Pour mieux comprendre le fonctionnement d'Asterisk, on se basera sur des modèles simplifiés d'extensions.conf et sip.conf. Il est conseillé de faire une copie des fichiers d'origine et de les renommer en extensions.conf.ORIG et sip.conf.ORIG afin de pouvoir revenir aux configurations par défaut en cas de problème.
Pour modifier les fichiers de configuration, il faut utiliser un éditeur de texte, de préférence gedit.
root@asterisk:~# gedit /etc/asterisk/extensions.conf &
Pour ajouter des abonnés, il faut d'abord modifier le fichier extensions.conf.
; extensions.conf ; ; [general] static=yes writeprotect=no autofallthrough=yes clearglobalvars=no priorityjumping=yes ; autorise le saut d'appel n+101 ; [globals] ; On ajoute des variables pour une meilleure visibilité Loulou = SIP/2201 ; Téléphone 1 Totoche = SIP/2202 ; Téléphone 2 gigi = SIP/2203 ; Softphone Xlite PC XP ; [from-sip] ; Ajout du contexte from-sip exten => 2201,1,Answer() ; On répond exten => 2201,n,Wait,1 ; Pause d'une seconde exten => 2201,n,DIAL(${Loulou},8,rTt) ; 8 sonneries ; r : génère une tonalité pour l'appelant ; (par exemple : ligne occupée) ; T : autoriser l’appelant à transférer l’appel ; t : autoriser l'appelé à transférer l'appel exten => 2201,n,VoiceMail(u2201) ; Lancement de la messagerie de Loulou exten => 2201,n,Hangup() ; On raccroche ; ;etc
; sip.conf ; [general] ; ... [2201] ; Ajout du numéro de tel de l'abonné Loulou type=friend language = fr ; Langage par défaut (de tous les utilisateurs) context=from-sip ; Comment traiter un appel venant de ce poste ; (contexte défini dans extensions.conf) callerid=Loulou <2201> ; Identifiant de l'appelant complet host=dynamic ; Nous avons une adresse IP statique mais privée secret = 2201 ; Mot de passe nat=no ; Pas de NAT entre le tél. et son serveur d’enregistrement ;canreinvite=yes ; autorise le flux RTP dtmf=rcf2833 ; mailbox=2201@default ; mailbox 1234 in voicemail context "default" disallow=all ; On interdit tous les types de codec avant de les autoriser allow=ulaw ; Note: In user sections the order of codecs allow=alaw ; ; faire de même pour les autres abonnés
Il faut alors qu'Asterisk prenne en compte les changements et relise les fichiers de configuration.
asterisk*CLI> reload
Configuration de base des téléphones SIP
Nous pouvons maintenant mettre sous tension les téléphones. Il faut d'abord faire un reset constructeur en renseignant leur adresse mac, marquée dessous. Nous allons utiliser des adresses IP statiques que nous rentrerons manuellement, en prenant soin de désactiver la fonction DHCP.
Après un reboot, ils doivent être accessibles par leur adresse IP via le navigateur des PC du réseau.

Page d'identification du téléphone

Configurations de base (Basic settings)
Nous choisissons d'utiliser le serveur de temps (NTP) de l'UJF.

Configuration du NTP (Advanced settings)

Ajout d'un utilisateur sur le téléphone (account)
Il faut maintenant enregistrer les modifications (update) et redémarrer le téléphone (reboot) pour qu'elles soient prises en compte.

Sauver la configuration et redémarrer le téléphone
Configuration du Softphone Xlite
On ajoute le compte utilisateur gigi de numéro de poste 2203 en reprenant les manipulations précédentes des fichiers extensions.conf et sip.conf. Nous allons utiliser le Softphone Xlite. Il doit être configuré comme ceci :

Configuration du softphone
Destinataire occupé
L'application DIAL permet de lancer une autre application si la ligne est occupée. Dans ce cas, elle renvoie à la ligne n+101. Pour autoriser cela, il faut éditer extensions.conf.
; extensions.conf ; [general] priorityjumping=yes ; autorise le renvoi à la ligne n+101 si occupé
Si la ligne est occupée, on veut que l'appelant soit informé par la lecture d'un fichier audio. On ajoute alors la ligne adéquate dans extensions.conf.
; extensions.conf ; exten => 2201,1,Answer() exten => 2201,n,Wait,1 exten => 2201,n,DIAL(${Loulou},8,rTt) ; Après 8 sonneries, on va à la ligne 104 exten => 2201,n,Hangup() exten => 2201,104,PlayBack(tt-allbusy)
Gestion de la messagerie
Par défaut Asterisk ne contient que des fichiers audios en anglais. Pour obtenir ceux en français, il faut lancer Synaptic et lancer une recherche avec le mot asterisk. On installe ensuite les paquets en français.
Il faut maintenant indiquer à Asterisk d'utiliser les fichiers audios en français plutôt que ceux en anglais. On modifie alors le fichier sip.conf.
; sip.conf ; [general] language=fr ; définit le français comme langue par défaut
On veut que la messagerie d'un utilisateur se déclenche au bout de n sonneries. On adapte le fichier extensions.conf.
; extensions.conf ; exten => 2201,n,DIAL(${Loulou},8,rTt) ; 8 sonneries exten => 2201,n,VoiceMail(u2201) ; Lancement de la messagerie de Loulou
On indique quelle est la messagerie d'un utilisateur dans sip.conf.
; sip.conf ; [2201] mailbox=2201@default ; Loulou a la messagerie 2201 dans le contexte ; default de voicemail.conf
On ajoute la mailbox de l’utilisateur dans le contexte default de voicemail.conf
; voicemail.conf ; [default] 2201 => 2201,Loulou,,,tz=paris24
Après un reload et un test, on entend un message en français nous indiquant de laisser un message.
Ecouter ses messages
Pour consulter ses messages, on utilise l'application VoiceMailMain() dans extensions.conf. Pour y accéder, il faut composer un numéro. Ici, le code 888 demande le numéro de boîte vocale et le mot de passe :
; extensions.conf ; [from-sip] ; Accès à la messagerie : numéro de messagerie + MDP exten => 888,1,Answer() exten => 888,n,VoiceMailMain() ; aucun paramètre exten => 888,n,Hangup()
Le code 555 demande seulement le mot de passe car on lie l’appel depuis un téléphone à la boîte vocale ayant le même numéro:
; Accès à la messagerie : MDP exten => 555,1,Answer() exten => 555,n,VoiceMailMain(${CALLERIDNUM}) ; appel lié exten => 555,n,Hangup()
Le code 555 permet de consulter sa messagerie depuis un autre poste.
Messagerie unifiée
On souhaite qu'un utilisateur ayant reçu un message soit notifié par email. On installe donc un serveur de messagerie sur le pc Asterisk. A l'aide de Synaptic, installer les paquets suivant :
- postfix
- courier-imap
- courier-authdaemon
- mozilla-thunderbird
Attention à bien répondre « Site Internet » à la question sur Postfix.
Il faut ensuite créer les comptes utilisateurs Unix totoche et gigi
; voicemail.conf ; [general] format = wav ; Le format des pièces jointes est wav attach = yes ; L'email contient le message vocal en pièce jointe
Compléter les lignes mailbox avec l’adresse mail :
; voicemail.conf ; [default] 2201 => 2201,Loulou,loulou@localhost,,tz=paris24
On souhaite faire en sorte que les mails arrivent dans le home directory de l'utilisateur. On doit pour cela passer Postfix au format Maildir en éditant son fichier de configuration (/etc/postfix/main.cf) :
; /etc/postfix/main.cf ; home_mailbox = Maildir/ ; Ligne à ajouter
Il suffit de relancer Postfix pour prendre en compte les changements :
root@asterisk:~# /etc/init.d/postfix reload
Nous allons utiliser IMAP grâce à courier-imap (déjà en marche). Il faut relier l'authentification IMAP avec les comptes UNIX :
root@asterisk:~# /etc/init.d/courier-authdaemon start
Il ne reste plus qu'à ajouter les comptes dans Thunderbird et nous obtenons alors ceci :

Messagerie unifiée
Liaison inter Asterisk
Pour réaliser une liaison entre 2 serveurs Asterisk, nous allons utiliser un protocole propre à Asterisk :
IAX (Inter Asterisk eXchange). IAX permet le cryptage et l'utilisation d'un seul port (utile pour NAT et Firewall).
Nous avons dans notre cas réalisé une liaison sans cryptage. Nous avons pour cela fait le test avec un autre binôme. Nous avons dû éditer notre fichier iax.conf :
; iax.conf ; [general] language=fr bandwidth=low ; On peut laisser le paramètre à 'low'
Les deux binômes sont BX et BY. Nous sommes le binôme Y, soit la colonne de droite sur le modèle suivant :
[binomeY] [binomeX] type=friend type=friend host=@IP_binomeY host=@IP_binomeX auth=plaintext auth=plaintext username=binomeX username=binomeY secret=toto secret=toto context=iax context=iax permit=0.0.0.0/0.0.0.0 permit=0.0.0.0/0.0.0.0 trunk=yes trunk=yes
Après modification, on obtient :
; iax.conf ; ; On ajoute à la fin ; [binome18] type=friend host=10.33.18.253 auth=plaintext username=binome22 secret=toto context=iax permit=0.0.0.0/0.0.0.0 trunk=yes
On vérifie que dans le fichier extensions.conf la ligne suivante est bien commentée :
; iax.conf ; ;TRUNK=IAX2/user:pass@provider -- doit être commentée
On ajoute une extension pour les appels sortants vers l'autre binôme (Loulou) :
; extensions.conf ; [from-sip] exten => _9101,1,DIAL(IAX2/binome18/${EXTEN:1}) ; 101 numéro local de Loulou de l'autre binôme (18)
On ajoute une extension pour les appels entrants depuis l'autre binôme dans un nouveau contexte, les appels venant de la liaison IAX seront ainsi interprétés et traités de la même façon que les appels locaux :
; extensions.conf ; [iax] include => from-sip
Après un reload dans la CLI, il est possible d'appeler les utilisateurs de part et d'autre de la liaison. Voici quelques commandes permettant d'obtenir des informations sur la liaison :
- show peer binomeX
- iax2 show peers
- iax2 debug
- iax2 trunk debug
Manipulation avec Wireshark
On installe Wireshark sur la machine Asterisk.
On lance alors une capture puis on se fait appeler par l'autre binôme. On voit alors apparaître dans les premières trames les valeurs des variables "username" et "secret". Nous constatons déjà que le cryptage devient nécessaire. Nous allons voir maintenant qu'il est possible d'écouter les conversations !
On sélectionne alors une ligne au hasard, puis "Statistics", "RTP", "Show All Streams". On sélectionne les deux flux (nommés "Forward" et "Inverse"), puis "Analyze". Il n'y a plus qu'à Sauvegarder avec "Save payload" au format ".au". Cela va nous permettre de l'exploiter avec le logiciel Audacity.
On installe ensuite Audacity sur le poste XP et on ouvre le fichier .au.

Lecture du .au avec Audacity
Enregistrer des messages simplement
Asterisk propose d'enregistrer facilement des messages vocaux par le biais d'un téléphone.
; extensions.conf ; [from-sip] ;Enregistre un message au format .gsm dans /tmp/ ; exten => 662202,1,Answer() exten => 662202,2,Wait(1) exten => 662202,3,Record(/tmp/file_${EXTEN:2}:gsm) ; Le nom du fichier sera 2202.gsm, exten => 662202,4,Wait(2) ; les 2 premiers chiffres sont supprimés exten => 662202,5,PlayBack(/tmp/file_${EXTEN:2}) ; Lit le message après enregistrement exten => 662202,6,Wait(1) exten => 662202,7,Hangup()
IVR
Au lieu de changer le contexte d'un téléphone en [default], on préfère utiliser l'application Goto dans le contexte [from-sip] pour renvoyer vers [default]. Ainsi tous les téléphones peuvent joindre les numéros IVR et continuer à joindre les numéros from-sip. On obtient la configuration suivante :
; extensions.conf ; [from-sip] ; exten => 2200,1,Answer exten => 2200,2,Wait(1) exten => 2200,3,Goto(default,2200,1) ; Redirection vers le contexte default, ; num 2200, ligne 1 [default] exten => 2200,1,Answer exten => 2200,2,Wait(1) exten => 2200,3,Background(merci) ; "Merci de votre appel. Pour le service "Ventes", ; faîtes le 1,pour joindre le support technique, faîtes le 2" exten => 2200,n,WaitExten ; attend la saisie d'un numéro exten => 1,1,Goto(submenu,s,1) ; Redirection vers le contexte submenu, num s, ligne 1 ; si la touche saisie est 1 exten => 2,1,Hangup ; raccroche si la touche saisie est 2 ; [submenu] exten => s,1,Ringing ; Laissons alors sonner 2 secondes. exten => s,n,Wait,2 exten => s,n,Background(submenuventes) ; "Vous êtes au service des ventes. ; Pour joindre Loulou, faîtes le 1, pour joindre Totoche, faîtes le 2." exten => s,n,WaitExten ; attend la saisie d'un numéro exten => 1,1,Goto(from-sip,2201,1) ; Redirection vers le contexte from-sip, ; num 2201, ligne 1 exten => 2,1,Goto(from-sip,2202,1) ; Redirection vers le contexte from-sip, ; num 2202, ligne 1
Messages variables, en fonction des heures ouvrées
Dans cet exemple Loulou prend les appels sur le 2210 les heures ouvrées, et Totoche les heures non ouvrées et le week-end :
; extensions.conf ; [from-sip] ; exten => 2210,1,Answer exten => 2210,2,Wait(1) exten => 2210,3,Goto(default,2210,1); Redirection vers le contexte default ; num 2200, ligne 1 [default] exten => 2210,1,Answer exten => 2210,n,Set(HEURE=${IFTIME(08:29-17:59,mon-fri,*,*?OUVERT:FERME)}) ; ; si l'heure est comprise entre 08:29 et 17:59, ; et que le jour est compris entre lundi et vendredi la variable HEURE = OUVERT ; sinon HEURE = FERME ; exten => 2210,n,Background(merci1) ;"Merci de votre appel.Nous contactons un technicien" exten => 2210,n,GotoIf($[${HEURE}=OUVERT]?semaine:week) ; ; Si HEURE = OUVERT on va à la ligne n(semaine) ; Sinon on va à la ligne n(week) ; exten => 2210,n(semaine),Goto(from-sip,2201,1) ; redirection vers Loulou exten => 2210,n(week),Goto(from-sip,2202,1) ; redirection vers Totoche
Conversation vidéo
Pour pouvoir profiter de la vidéo, il faut utiliser des téléphones compatibles. Nous avons à notre disposition deux téléphones vidéo Grandstream GVX3000.
Pour activer la négociation d'une communication vidéo entre deux téléphones, on doit ajouter dans sip.conf la ligne suivante :
; sip.conf ; [general] videosupport=yes ;
Il faut ajouter deux nouveaux utilisateurs (video1 : 2204 et video2 : 2205). Nous devons aussi indiquer quel codec sera utilisé pour chaque videophone. Nous utilisons ici le codec h263 car notre version d'Asterisk est ancienne (1.2.x). Pour les versions plus récentes (1.4.x) on utilise le codec h264 :
; sip.conf ; [2204] ; ... disallow=all ; On interdit tous les types de codec avant de les autoriser allow=ulaw allow=alaw allow=h263 ; [2205] ; ... disallow=all ; On interdit tous les types de codec avant de les autoriser allow=ulaw allow=alaw allow=h263
Il ne reste plus qu'à faire un reset constructeur des deux téléphones, configurer leur adresse ip respective et les utilisateurs (vu précédemment).
Après un reload, la vidéo fonctionne !
Liaison avec les bases de données
Pour rendre possible la liaison d'Asterisk avec une base de donnée, il faut installer les paquets suivants grâce à Synaptic :
- mysql
- libmysqlclient
- libmysqlclient-dev
- gcc
- asterisk-dev
Sur le site http://www.asterisk.org/downloads , choisir "Older releases of Asterisk can be found here"

Anciennes version d'Asterisk
Téléchargeons ensuite asterisk-addons-1.2.7.tar.gz sous /tmp par exemple.

asterisk-addons-1.2.7.tar.gz
On décompresse les fichiers sous /usr/share/ puis on va dans le répertoire créé : /usr/share/asteriskaddons-1.2.7 :
root@asterisk:~# cd /usr/share/ root@asterisk:/usr/share# tar xvzf /tmp/asterisk-addons-1.2.7.tar.gz root@asterisk:/usr/share# cd asterisk-addons-1.2.7/
Ensuite on compile sans oublier d'installer les librairies :
root@asterisk:~# apt-get install build-essential root@asterisk:/usr/share/asterisk-addons-1.2.7# make root@asterisk:/usr/share/asterisk-addons-1.2.7# make install
Les modules compilés sont maintenant présents dans /usr/lib/asterisk/modules.
Nous allons à présent créer une configuration CDR (Call Details Record) qui utilisera notre future base de données. Cela nous permettrait de facturer les abonnés et de faire des statistiques. Editons pour cela le fichier /usr/share/asterisk-addons-1.2.7/configs/cdr_mysql.conf.sample.
; cdr_mysql.conf.sample --> SAUVER SOUS /etc/asterisk/cdr_mysql.conf ; [global] hostname=127.0.0.1 ; adresse du serveur mysql dbname=asterisk ; nom de la base de données table=cdr ; nom de la table sock=/tmp/mysql.sock user=user ; nom d'utilisateur pour se connecter à la base password=toto ; mot de passe
On peut maintenant lancer mysql :
root@asterisk:~# /etc/init.d/mysql start Starting MySQL database server: mysqld...already running. * Root password is blank. To change it use: * /etc/init.d/mysql reset-password
On nous indique alors comment changer le mot de passe de l'utilisateur root de mysql, ce que nous allons faire. Le mot de passe sera totomysql.
root@asterisk:~# /etc/init.d/mysql reset-password New MySQL root password: Verify: Setting new MySQL root password
On se connecte à la base en root:
root@asterisk:~# mysql -u root -p
On crée la base nommée "asterisk" :
mysql> create database asterisk ; Query OK, 1 row affected (0.00 sec)
On donne tous les droits à l'utilisateur nommé "user" sur toutes les tables de cette base :
mysql> grant all privileges on asterisk.* to user@localhost identified by 'toto'; Query OK, 0 rows affected (0.01 sec)
On efface les anciens privilèges :
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
On se déconnecte puis reconnecte en User :
mysql> quit root@asterisk:~# mysql -u user -p // avec le mot de passe toto
On peut voir les bases de données (sur lesquelles user a les autorisations) :
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | asterisk | // La database à bien été créée +--------------------+ 2 rows in set (0.00 sec)
On sélectionne la base de données qui nous intéresse : asterisk :
mysql> use asterisk; Database changed
Nous pouvons maintenant créer la table cdr :
CREATE TABLE `cdr` ( `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '', `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `userfield` varchar(255) NOT NULL default '' ); ALTER TABLE `cdr` ADD `uniqueid` VARCHAR(32) NOT NULL default ''; ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` ); ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
On peut voir les tables de la base de données asterisk :
mysql> show tables; +--------------------+ | Tables_in_asterisk | +--------------------+ | cdr | // La table à bien été créée +--------------------+ 1 row in set (0.00 sec)
Il suffit de relancer Asterisk avec un reload et de vérifier que le module a bien été chargé avec la commande show modules like mysql.
Après quelques appels, la table se complète. On peut la visualiser avec une requête select :

Contenu de la table CDR
Liaison Apache2/PHP/MySQL
Pour améliorer l'utilisation des données nous allons rendre la base de données accessible depuis une interface web.
Nous allons installer différents logiciels, les uns après les autres avec Synaptic. Dans le menu « Configuration », « Préferences », cocher «Toujours préférer la version la plus élevée ».

Préférences Synaptic
Pour installer on utilise le bouton « Rechercher ». Ensuite on sélectionne le paquet pour l'installation (clic droit) et l'installer («Appliquer»).
- apache2 (version 2)
- libapache2-mod-php5 (relancer /etc/init.d/apache2 restart)
- php5-mysql (relancer /etc/init.d/apache2 restart)
On peut vérifier le bon fonctionnement en éditant une page index.php contenant une ligne
<?php phpinfo(); ?>. Si on se rend à l'adresse localhost, on obtient :

http://localhost/index.php
Téléchargeons asterisk-stat-v2_0_1.tar.gz dans /tmp depuis le FTP ftp://ftp.gtrgrenoble.fr/.
On décompresse les fichiers sous /var/www/ :
root@asterisk:~# cd /usr/share/ root@asterisk:/usr/share# tar xvzf /tmp/asterisk-addons-1.2.7.tar.gz
<!-- /var/www/asterisk-stat-v2/lib/defines.php --> <?php // ... define ("HOST", "127.0.0.1"); define ("PORT", "5432"); define ("USER", "user"); define ("PASS", "toto"); define ("DBNAME", "asterisk"); define ("DB_TYPE", "mysql"); // mysql or postgres // ... include ("/var/www/asterisk-stat-v2/lib/DB-modules/phplib_".DB_TYPE.".php") // emplacement du fichier phplib_mysql.php //... ?>
Le site est maintenant opérationnel, nous pouvons le consulter à l'adresse suivante :
http://127.0.0.1/asterisk-stat-v2/cdr.php

site php cdr
Musique d'attente
Nous devons d'abord installer un lecteur MP3 pour Unix avec Synaptic, "mpg123".
Modifions à présent le fichier musiconhold.conf :
; musiconhold.conf ; [default] mode=quietmp3 ; pour Asterisk 1.2.X - pour MP3s directory=/usr/share/asterisk/mohmp3 ; Répertoire contenant les fichiers ausio ; (nous mettons notre propre MP3 dedans) application=/usr/bin/mpg123 ; Application permettant de lire les MP3s
On peut tester la configuration actuelle en ajoutant une extension dans le fichier extensions.conf :
; extensions.conf ; exten => 6000,1,Answer exten => 6000,2,MusicOnHold()
Il faut quitter puis relancer Asterisk pour que les modifications soient prises en compte.
La musique d'attente fonctionne !