DIAL TECHNOLOGIES Document pratique Asterisk sous Debian 01/07/2013 Réallisé par : MAACHI Yassine ZYANE Ayoub
Oct 20, 2015
DIAL TECHNOLOGIES
Document pratique Asterisk sous Debian
01/07/2013
Réallisé par :
MAACHI Yassine
ZYANE Ayoub
2
Sommaire
Remerciements: ...................................................................................................................................... 3
Introduction : ........................................................................................................................................... 4
I-Installation d’ Asterisk : ......................................................................................................................... 4
1-Préparation à l’installation : ............................................................................................................. 4
2-Installation : ...................................................................................................................................... 4
II-Configuration d’Asterisk : ..................................................................................................................... 5
1-Création des utilisateurs : ................................................................................................................ 6
2-Configuration du Dialplan : .............................................................................................................. 8
3-Teste de l’appel : .............................................................................................................................. 9
III-Mettre en place un menu interactif (IVR) avec GoogleTTS : ............................................................. 10
1-Un IVR : ........................................................................................................................................... 10
2-Installation de GoogleTTS : ............................................................................................................ 11
3-Les premiers mots d’Asterisk : ....................................................................................................... 11
4-Mettre en place un IVR .................................................................................................................. 11
IV-Enregistrer la voix pour créer un IVR personnalisé : ......................................................................... 12
1-Enregistrement de voix : ................................................................................................................ 12
2-Création de l’IVR : ........................................................................................................................... 12
V-Programmation et limitation des appels : ......................................................................................... 13
1-Appels automatisés vers les clients :.............................................................................................. 13
2-Limitations des appels : .................................................................................................................. 14
Conclusion : ........................................................................................................................................... 14
Bibliothèque : ........................................................................................................................................ 14
3
Remerciements:
Tout d’abord on tient à remercier très chaleureusement la société DIALY qui nous a offert
cette opportunité d’effectuer notre stage au sein de son organisme, chose qui nous mène à
bien croire à nos cadres supérieurs qui aident au développement et au progrès de notre cher
pays à travers l’encadrement des jeunes compétences des dirigeants du futur.
On tient aussi à remercier Mr. Zouheir LAKHDISSI le directeur de la société pour son accueil
très chaleureux au sein de son équipe et pour avoir mis à notre disposition tous les outils dont
nous avions besoin pour le bon déroulement de notre stage.
On remercie très chaleureusement aussi le corps administratif de l’Ecole Nationale des
Sciences Appliquées de Safi, et sans oublier d’exprimer notre chère gratitude à notre
encadrant Mr. Abdellah ZYANE chef de la filière Réseaux et Télécom à l’ENSAs qui a mis à
notre disposition tout son savoir et son savoir-faire qu’il a accumulé pendant des années, et on
le remercie aussi pour tout le temps précieux qu’il nous a consacré.
4
Introduction :
Le présent rapport a pour but d’expliquer les différents points concernant le projet de la CNSS
intitulé ALLO DAMANE qui a pour objectif principale de faciliter l’accès à l’information aux
citoyens, en utilisant un serveur vocal interactive.
I-Installation d’ Asterisk :
Il y a deux façons d’installer Asterisk sur une distribution à base de Debian, la première via le
gestionnaire de paquet de Debian, la seconde en compilant directement la dernière
version d’Asterisk.
1-Préparation à l’installation :
On commence par mettre à jour notre distribution et installer les dépendances nécessaires à la
compilation d’Asterisk.
apt-get update && apt-get upgrade
apt-get install build-essential libxml2-dev libncurses5-dev linux-headers-
`uname -r` libsqlite3-dev libssl-dev
Puis on créer un dossier ou nous allons placer les sources d’Asterisk dans /usr/src :
mkdir /usr/src/asterisk
cd /usr/src/asterisk
2-Installation :
On télécharge la version 10.7.0 d’Asterisk et on l’installe :
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-10.7.0.tar.gz tar xvzf asterisk-10.7.0.tar.gz cd asterik-asterisk-10.7.0 ./configure make menuselect
La commande make menuselect va faire apparaître un écran qui va nous permettre de
personnaliser notre installation d’Asterisk.
Nous allons en profiter pour installer les sons français pour Asterisk au format µ-law.
Dans Core Sound Package nous allons cocher la case CORE-SOUNDS-FR-ULAW avec la
touche Espace puis appuyez sur Echap pour retourner à l’écran précédent.
Puis dans Music On Hold File Packages nous allons cocher MOH-OPSOUND-ULAW (et
décocher celui en WAV), appuyez sur Echap et enfin allez dans dans Extras Sound
Packages et cochez EXTRA-SOUNDS-FR-ULAW.
5
Enfin nous allons appuyer sur Echap et une fois à l’écran principal une autre fois Echap et
puis S pour sauvegarder les changements.
Enfin on va taper les commandes suivantes pour terminer l’installation:
Attention ! Pendant le make install il faut s’assurer que notre serveur soit connecté à
internet parce que celui ci va télécharger les package de langue FR que nous avons
sélectionnés.
make make install make samples make config
Après toutes ces commandes on peut lancer Asterisk à l’aide de la commande suivant :
/etc/init.d/asterisk start
On peut vérifier le bon fonctionnement de notre serveur Asterisk avec la commande suivante
qui sert à afficher la console d’Asterisk
asterisk –cvvvvvvvvvvr
Si les lignes suivantes s’affichent:
Asterisk 10.7.0, Copyright (C) 1999 - 2012 Digium, Inc. and others. Created by Mark Spencer Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ====================================================================== == Parsing '/etc/asterisk/asterisk.conf': == Found == Parsing '/etc/asterisk/extconfig.conf': == Found Connected to Asterisk 10.7.0 currently running on Asterisk .......................
C’est que notre serveur Asterisk a démarré et fonctionnel !
II-Configuration d’Asterisk :
Pour configurer notre serveur Asterisk nous allons modifier les fichiers suivants:
6
Le fichier sip.conf : pour la configuration général d’Asterisk
Le fichier users.conf : pour la configuration des utilisateurs
Le fichier extensions.conf : pour la configuration du Dialplan
Ces fichiers se trouvent dans le dossier /etc/asterisk
Nous allons commencer par éditer le fichier sip.conf qui va nous permettre pour l’instant de
mettre les sons par défauts en Français.
Rechercher la ligne :
;language=en
Et remplacer la par :
language=fr
A chaque fois qu’on modifie un fichier de conf il faut recharger ce fichier de configuration
dans Asterisk.
Dans la console d’Asterisk il nous suffit de taper la commande : reload cette commande
permet de recharger les fichiers de configurations d’Asterik sans redémarrer le serveur.
1-Création des utilisateurs :
La création des utilisateurs se fait donc dans le fichier users.conf
Voici un exemple de fichier users.conf avec deux utilisateurs Yassine MAACHI et Ayoub
ZYANE avec comme numéros respectifs le 6001 et le 6002.
[general] hasvoicemail = yes hassip = yes hasiax = yes callwaiting = yes threewaycalling = yes callwaitingcallerid = yes transfer = yes canpark = yes cancallforward = yes callreturn = yes callgroup = 1 pickupgroup = 1 nat = yes [6002] type=friend host=dynamic dtmfmode=rfc2833 disallow=all allow=ulaw fullname = Ayoub ZYANE username = azyane secret=secret context = work
7
[6001] type=friend host=dynamic dtmfmode=rfc2833 disallow=all allow=ulaw fullname = Yassine MAACHI username = ymaachi secret=secret context = work
Explication de ce que veut dire chaque ligne lors de la création d’un utilisateur:
[6001] –> Numéro SIP
type=friend –> type d’objet SIP, friend = utilisateur
host=dynamic –> On peut se connecter a ce compte SIP a partir de n’importe quelle adresse
IP
dtmfmode=rfc2833 –> type de rfc utilisé
disallow=all –> Désactivation de tous les codecs
allow=ulaw –> Activation du codec µlaw
fullname = Yassine MAACHI –> Prénom et NOM de l’utilisateur (ce qui sera afficher sur le
téléphone lors d’un appel)
username = ymaachi –> Nom d’utilisateur
secret=secret –> Mot de passe du compte SIP
context = work –> Contexte (on verra ça dans le fichier extensions.conf)
Une fois le fichier users.conf enregistré on tape reload dans la console Asterisk, ensuite la
commande sip show users.
Les deux comptes utilisateurs que nous venons de créer devrait y apparaitre.
Asterisk*CLI> sip show users Username Secret Accountcode Def.Context ACL ForcerPort 6002 secret work No Yes 6001 secret work No Yes
On voit que quand même créer un utilisateur est assez lourd, nous pouvons aussi utiliser des
templates pour pouvoir créer des utilisateurs plus rapidement.
Reprenons le fichier users.conf avec les mêmes utilisateurs de créer mais cette fois-ci avec un
Template:
[template](!) type=friend host=dynamic dtmfmode=rfc2833 disallow=all allow=ulaw context = work [6001](template)
8
fullname = Yassine MAACHI username = ymaachi secret=secret [6002](template) fullname = Ayoub ZYANE username = azyane secret=secret
Dans ce nouveau fichier de configuration nous avons créé un Template appelé Template et ce
Template est appelé pour la création des deux utilisateurs. Ce qui réduit la création d’un
utilisateur à quatre lignes au lieu de dix.
Nos utilisateurs sont créer, mais ils n’ont pas encore la possibilité de s’appeler.
Nous allons maintenant éditer le fichier extensions.conf qui permet de configurer le Dialplan.
2-Configuration du Dialplan :
Le Dialplan ou plan d’appel est le fichier de configuration d’Asterisk qui permet de
configurer en gros: « Que se passe-t’il si j’appelle tel numéros? »
Nous allons donc configurer Asterisk de tel sorte que l’utilisateur 6001 puisse appeler le
numéro 6002.
Voici donc pour exemple notre fichier extensions.conf
[general] static=yes writeprotect=no clearglobalvars=no [globals] CONSOLE=Console/dsp ; Console interface for demo IAXINFO=guest ; IAXtel username/password TRUNK=DAHDI/G2 ; Trunk interface TRUNKMSD=1 ; MSD digits to strip (usually 1 or 0) [work] exten => _6XXX,1,Dial(SIP/${EXTEN},20) exten => _6XXX,2,Hangup()
Ce sont les trois dernières lignes qui vont nous intéresser.
Dans ces trois dernières lignes nous allons voir deux choses, les contextes et les extensions.
[work] est le contexte c’est une sorte de conteneur dans lequel les utilisateurs faisant partis de
ce contexte pourrons communiquer entre eux.
Lors de la création de nos deux utilisateurs nous avons spécifié le contexte work.
exten => : déclare l’extension (on peut aussi simplement dire numéros)
_6XXX : Prend les extensions (ou numéros) de 6000 a 6999 le « _ » permet d’utiliser des
regex
9
1 : Ordre de l’extension
Dial : application qui va être utilisé
SIP: Protocol qui va être utilisé
${EXTEN} : variable de l’extension composé, si on appelle le 6001 la variable ${EXTEN}
prendra comme valeur 6001
20: temps d’attente avant de passer a l’étape suivante.
Donc la ligne exten => _6XXX,1,Dial(SIP/${EXTEN},20) se traduit par:
Quand on compose le numéro (par exemple) 6001, on appelle le numéro 6001 et si au bout de
20 secondes il n’y a pas de réponses on passe à la ligne du dessous.
Dans le cas du numéros 6001 la ligne devient comme ceci:
exten=>6001,1,Dial(SIP/6001,20), mais l’avantage de la ligne précédente est qu’elle permet
d’appeler les numéros de 6000 a 6999.
La seconde ligne : exten => _6XXX,2,Hangup() permet de raccrocher si il n’y a pas de
réponses au bout des 20 secondes.
Maintenant, on peut enregistrer notre fichier extensions.conf et faire un reload dans la console
d’Asterisk.
3-Teste de l’appel :
Maintenant que nos deux utilisateurs sont crées et que nous avons configuré les extensions du
contexte « work » nous allons pourvoir effectuer un appel entre ces deux utilisateurs.
On peut configurer un compte SIP à partir de n’importe quel client SIP.
Sous Windows et MacOSX on a X-LITE
Sous Linux on a Ekiga
Sous Android on a CSipSimple
Dans ce test on a deux clients SIP.
Un que nous allons configurer avec le compte de Yassine MAACHI et l’autre avec le compte
Ayoub ZYANE.
Voici par exemple la configuration d’un compte sous Ekiga sous Linux.
Le Registar est l’adresse IP ou hostname de notre serveur SIP
10
Figure 01 :Compte EKIGA des clients .
Test de l’appelle :
Figure 02 :Appelle entrant du client 6001 .
III-Mettre en place un menu interactif
(IVR) avec GoogleTTS :
1-Un IVR :
Un IVR (Interactive Voice Response) permet de guider les utilisateurs vers le service qu’ils
souhaitent joindre, on peut s’en servir aussi pour simplement annoncer les horaires
d’ouvertures etc.
La mise en place d’un IVR va se faire en deux étapes, la première il faut que nous apprenons
à Asterisk à nous parler, la seconde est la création de l’IVR.
Pour faire parler Asterisk, nous allons installer un moteur de synthèse vocale (Text To
Speech) et nous allons mettre en place celui de Google appelé GoogleTTS.
11
2-Installation de GoogleTTS :
Tout d’abord GoogleTTS à besoins de quelques dépendances pour fonctionner:
apt-get install perl libwww-perl sox mpg123
Puis nous allons aller dans le dossier /var/lib/asterisk/agi-bin/ et y mettre le
fichier googletts.agi qui est le script pour mettre en place la synthèse vocale.
cd /var/lib/asterisk/agi-bin wget https://raw.github.com/zaf/asterisk-googletts/master/googletts.agi chmod +x googletts.agi
Et voila googletts est installé, maintenant voyons comment le faire parler.
3-Les premiers mots d’Asterisk :
La configuration des IVR se fait dans le fichier extensions.conf
Ouvrez votre fichier extensions.conf et copiez les lignes suivantes à la fin du fichier :
;Premier IVR exten => 8000,1,Answer() exten => 8000,2,agi(googletts.agi,"Bienvenue chez Dialy Technologies !",fr) exten => 8000,3,Hangup()
Explications:
exten => 8000,1,Answer() : On crée l’extensions 8000 pour appeler l’IVR et on utilise
l’application Answer() pour que ça soit Asterisk qui réponde étant donné que ce n’est pas un
utilisateur que l’on appele.
exten => 8000,2,agi(googletts.agi, « Bienvenue à Dial technologies»,fr) : Après avoir
répondu on utilise donc googletts pour dire la phrase suivante : Bienvenue à Dial
technologies, en spécifiant la langue de sortie (fr)
exten => 8000,3,Hangup(): A la fin de la phrase Asterisk raccroche
Maintenant faites un reload et appelez le 8000 à partir de n’importe quel utilisateur pour
entendre Asterisk parler.
4-Mettre en place un IVR
Maintenant nous allons mettre en place un véritable IVR qui va permettre d’appeler nos
utilisateurs Yassine et Ayoub.
;Second IVR ;Asterisk répond exten => 8001,1,Answer() ;On met un timeout de 10 secondes pour le choix du destinatire exten => 8001,2,Set(TIMEOUT(response)=10) ;On annonce les différents choix exten => 8001,3,agi(googletts.agi,"Bienvenues chez DIALY Technologies",fr,any) exten => 8001,4,agi(googletts.agi,"Qui souhaitez vous joindre?",fr,any) exten => 8001,5,agi(googletts.agi,"Pour Yassine MAACHI tapez 1",fr,any) exten => 8001,6,agi(googletts.agi,"Pour Ayoub ZYANE tapez 2",fr,any)
12
exten => 8001,7,agi(googletts.agi,"Appuyez sur dièse si vous souhaitez réécouter ce message",fr,any) ;On attend que l'utilisateur appuis sur une touche exten => 8001,8,WaitExten() ;Si l'utilisateur appuis sur 1 on va à la priorité 1 du numéro 6001 exten => 1,1,Goto(6001,1) ;Si l'utilisateur appuis sur 1 on va à la priorité 1 du numéro 6002 exten => 2,1,Goto(6002,1) ;Si l'utilisateur tape un numéro compris entre 3 et 9 et # il retourne à l'étape 3 de l'IVR exten => _[3-9#],1,Goto(8001,3) ;Si l'utilisateur ne fais rien il retourne à l'étape 3 de l'IVR au bout de 10 secondes. exten => t,1,Goto(8001,3)
IV-Enregistrer la voix pour créer un IVR
personnalisé :
1-Enregistrement de voix :
Dans votre fichier extensions.conf d’Asetrisk rajoutez les deux lignes suivantes dans votre
contexte: exten => _5XXX,1,Record(IVR-${EXTEN:1}:ulaw)
exten => _5XXX,2,Playback(IVR-${EXTEN:1})
Explication de ces lignes:
La première ligne crée une extension 5XXX qui permet d’appeler les numéros de 5000 à
5999.
Si vous appelez par exemple le 5001, vous entendrez un BIP, après ce bip enregistrez votre
message et terminez en appuyant sur #.
Un fichier son au format ulaw sera alors crée dans le dossier /var/lib/asterisk/sounds avec
comme nom IVR-001 (si vous appelez le 5002 le fichier s’appellera IVR-002 etc..).
La seconde ligne permet de jouer le son que vous venez d’enregistrer.
Si vous souhaitez ré-enregistrer un son rappelez juste le même numéro, l’ancien sera effacé
par la nouvelle version.
2-Création de l’IVR :
Nous avons vu dans la partie précédente comment mettre en place un IVR avec googleTTS
comme moteur de synthèse vocale, nous allons donc créer le même mais en jouant un son que
nous allons enregistrer.
Imaginons donc qu’on a un fichier son portant le nom IVR-001 avec le texte suivant:
« Bienvenus chez test.com!
Qui souhaitez vous joindre?
13
Pour Yassine MAACHI tapez 1
Pour Ayoub ZYANE tapez 2
Appuyez sur dièse si vous souhaitez réécouter ce message »
Voici donc comment se crée l’IVR an jouant ce son:
;On crée un extension pour appeler l'IVR exten => 8002,1,Goto(ivr-voice,s,1) ;Contexte ivr-voice [ivr-voice] exten => s,1,Answer() exten => s,2,Set(TIMEOUT(response)=10) exten => s,3,Background(IVR-001) exten => s,4,WaitExten() exten => 1,1,Goto(home,6001,1) exten => 2,1,Goto(home,6002,1) exten => _[3-9#],1,Goto(ivr-voice,s,3) exten => t,1,Goto(ivr-voice,s,3)
Comme l’application « Playback » l’application « Background » permet de jouer un son
mais celle-ci permet aussi de donner à l’utilisateur la possibilité d’appuyer sur une
touche pendant que le son est joué.
V-Programmation et limitation des appels :
1-Appels automatisés vers les clients :
On crée un fichier 6001.call dans /var/spool/asterisk/tmp qui contient les paramètres suivants:
Channel: SIP/6001 ; le canal le protocole et le numéro de l'utilisateur
MaxRetries: 2 ; nombre d'essais maximale si l'utilisateur ne répond pas
RetryTime: 60
WaitTime: 30
Context: menu-general ; le contexte que le fichier 6001.call va
exécuter dans extension.conf
Extension: s
Priority: 1
Après la création du fichier, on le déplace vers /var/spool/asterisk/outgoing/ une fois dans ce
répertoire l'appelle va être lancé et le .call va être supprimé :
mv /var/spool/asterisk/tmp/6001.call /var/spool/asterisk/outgoing/
14
2-Limitations des appels :
Configuration de la limitation des appelles :
exten => 8000,1,Set(GROUP()=OUTBOUND_GROUP)
exten => 8000,2,Noop(${GROUP_COUNT(OUTBOUND_GROUP)})
exten => 8000,3,GotoIf($[${GROUP_COUNT(OUTBOUND_GROUP)} > 8]?max)
exten => 8000,4,Answer()
exten => 8000,5,agi(googletts.agi,"Bienvenue à Dialy Technologies 1",fr)
exten => 8000,6,agi(googletts.agi,"Bienvenue à Dialy Technologies 2",fr)
exten => 8000,7,agi(googletts.agi,"Bienvenue à Dialy Technologies 3",fr)
exten => 8000,8,Hangup()
exten => 8000,9(max),agi(googletts.agi,"Le service est occupé veuillez appeler plu tard",fr)
exten => 8000,10,Hangup()
Conclusion :
Ce projet s’est révélé très enrichissant dans la mesure où il a consisté en une approche
concrète du métier d’ingénieur. En effet, la prise d’initiative, le respect des délais et le travail
en équipe seront des aspects essentiels de notre futur métier.
De plus, il nous a permis d’appliquer nos connaissances sur la configuration des serveurs
vocaux.
Bibliothèque :
http://www.asterisk.org/
http://maniatux.fr/index.php?article14/configurer-un-serveur-asterisk
http://doc.ubuntu-fr.org/asterisk
http://jeyg.info/installation-et-configuration-dun-serveur-ipbx-asterisk/
http://leblogdupouaro.blogspot.com/2011/03/installation-et-configuration-dun.html
https://wiki.asterisk.org/wiki/display/AST/Creating+a+Simple+IVR+Menu
http://fr.slideshare.net/Agarik/scurit-asterisk-web
http://www.siteduzero.com/forum/sujet/menu-vocal-sous-asterisk-96915
http://denisrosenkranz.com/tuto-asterisk-mettre-en-place-un-menu-interactif-ivr-avec-googletts/
http://www.fruitnotes.com/blogs/Limiting_Asterisk_calls_1101