Configuration Basique d’Asterisk

Afin de débuter la configuration de notre serveur Asterisk, voyons quelques configurations de base.

Nous allons créer des utilisateurs, puis configurer le DialPlan pour permettre aux appels de passer.

A l’issue de cet article vous disposerez d’un système basique mais fonctionnel.

 

1) L’administration d’Asterisk

 

Avant de nous plonger dans la configuration d’Asterisk, attardons nous sur la manière de l’administrer.

 

Nous disposons de deux choses pour administrer Asterisk :

  • La console
  • Les fichiers de configuration

 

La console permet principalement de faire du debug et de voir l’état du serveur.

Nous pouvons aussi l’utiliser pour redémarrer Asterisk, charger des modules, etc…

 

La console se lance avec la commande suivante :

asterisk –r

Il est possible de placer le paramètre « v » à la fin de la commande.

De cette manière la console s’ouvrira en mode verbeux.

 

Sans le mode verbeux, la console ne retourne aucun debug lors des actions.

Reload

 

Avec le mode verbeux, nous obtenons des retours sur les commandes entrées.

Reload

 

Plus nous plaçons de « v » à la fin de la commande, plus nous obtiendrons de debug.

asterisk -rvvv

 

La configuration d’Asterisk se fait dans les fichiers de configuration.

 

Ces fichiers sont placés dans le répertoire suivant :

/etc/asterisk/

 

Voici certains des fichiers que l’on retrouve dans le répertoire d’Asterisk :

Fichiers Asterisk

Pour que les modifications des fichiers soient prises en compte, il faut relancer Asterisk. Ou au moins le module concerné.

asterisk –rv
reload

 

2) Création d’utilisateur

 

La configuration des utilisateurs est à faire dans le fichier users.conf (dans /etc/asterisk/)

 

Avant d’éditer les fichiers pour la première fois, vous pouvez les vider comme ceci :

echo "" > users.conf

 

Chaque utilisateur sera défini dans ce fichier. Nous y retrouverons les paramètres des utilisateurs.

Afin de simplifier la création d’utilisateur, nous pouvons placer les paramètres communs dans un Template.

Les utilisateurs feront alors référence au Template.

De cette manière, il sera très simple d’ajouter de nouveaux users.

 

Commençons donc par créer le Template.

Voici un exemple :

[default_template](!)              ; Nom du template . Le « ! » indique qu’il s’agit d’un Template
type=friend                        ; Type d'objet SIP (friend = utilisateur)
host=dynamic                       ; L’utilisateur n’est pas associé à une IP fixe
dtmfmode=rfc2833                   ; Mode DTMF
disallow=all                       ; Interdit tous les codecs
allow=ulaw                         ; Autorise le codec ulaw
nat=never                          ; L'utilisateur ne se trouve pas derrière un NAT
hassip=yes                         ; L’utilisateur possède un compte SIP
hasiax=no                          ; L’utilisateur ne possède pas de compte iax
callwaiting = yes                  ; L’utilisateur peut mettre des appels en attente
transfer=yes                       ; L’utilisateur peut transférer des appels
canpark=yes                        ; L’utilisateur peut mettre des appels dans le parking
hasvoicemail=yes                   ; L’utilisateur possède une boîte vocale 
deny=0.0.0.0/0.0.0.0               ; Range d’IP non-autorisées pour le client
permit=192.168.1.0/255.255.255.0   ; Range d’IP autorisées pour le client
qualify=yes                        ; Permet le monitoring

Certains des paramètres ont pour valeur par défaut la valeur indiquée ici.

Le type d’objet SIP peut prendre 3 valeurs :

  • Peer
  • User
  • Friend

Le Peer est un objet auquel nous pouvons envoyer des appels (exemple : le Trunk vers l’ITSP).

L’User est un objet qui ne peut qu’appeler.

Le Friend est à la fois Peer et User. Il peut envoyer et recevoir des appels (exemple : un utilisateur)

 

Nous pouvons ensuite créer des utilisateurs :

[100](default_template)        ; Numéro SIP et Template utilisé
fullname = Marc Aubert         ; Nom complet de l'utilisateur us
ername = maubert               ; Nom d'utilisateur
secret=password                ; Mot de passe
mailbox = 100                  ; N° de boîte vocale
context=dept_1                 ; Contexte de l’utilisateur

[101](default_template)        ; Numéro SIP et Template utilisé
fullname = Alain Aldric        ; Nom complet de l'utilisateur
username = aaldric             ; Nom d'utilisateur
secret=password                ; Mot de passe
mailbox = 101                  ; N° de boîte vocale
context=dept_1                 ; Contexte de l’utilisateur

[200](default_template)        ; Numéro SIP et Template utilisé
fullname = Leon Morgan         ; Nom complet de l'utilisateur
username = lmorgan             ; Nom d'utilisateur
secret=password                ; Mot de passe
mailbox = 200                  ; N° de boîte vocale
context=dept_2                 ; Contexte de l’utilisateur

Votre fichier d’utilisateurs sera amené à recevoir de nombreux users.

Pensez donc à l’agencer de manière claire.

Par exemple :

users.conf

Pensez à relancer Asterisk pour qu’il prenne en compte les modifications.

asterisk –rvv
reload

 

Veillez à ce qu’il ne retourne pas d’erreur.

 

3) Configuration des Voicemails

 

Les Voicemails permettent de laisser des messages aux utilisateurs lors-ce-que ceux-ci ne sont pas disponibles.

Il s’agit donc de leur messagerie vocale.

 

Pour se connecter à leur messagerie, les utilisateurs devront composer un certain numéro, puis entrer un mot de passe.

Voyons comment configurer le fichier voicemail.conf.

 

Le fichier à éditer est le suivant :

/etc/asterisk/voicemail.conf

 

Je vous invite à jeter un œil à son contenu avant de le vider.

echo "" > voicemail.conf

 

Au début du fichier, une section générale définira les paramètres généraux des Voicemails.

 

En voici un example :

[general]
maxmsg=100          ; Nombre max de message sur la Voicemail. Si elle est pleine, il n'est pas possible de rajouter des messages
maxsecs=0           ; Durée max d'un message. "0" = pas de limite
minsecs=2           ; Durée minimum d'un message
maxlogins=3         ; Nombre max d'erreur de login
review=no           ; Permet à l'appelant de réécouter son message avant de le transmettre à la Voicmail. Accessible en terminant le message par #
saycid=no           ; Dicte le numéro de l'appelant avant de jouer le message qu'il a laissé

 

La plupart de ces paramètres sont ici à leur valeur par défaut (hormis minsecs)

 

Dans la suite du fichier, nous définirons les utilisateurs.

[dept_1_vm]
100 => 1234, Marc Aubert
101 => 1234, Alain Aldric

[dept_2_vm]
200 => 1234, Leon Morgan

 

Ici, “1234” correspond au mot de passe de la Voicemail de l’utilisateur.

 

Il est possible de désactiver l’utilisation du mot de passe, en ne spécifiant rien avant la virgule.

200 => , Leon Morgan

 

Les trois utilisateurs précédemment créés ont à présent chacun une boite vocale.

En appelant leur messagerie, il leurs sera possible de consulter leurs messages, mais aussi de personnaliser leur message d’accueil.

 

Asterisk propose aussi d’envoyer un mail à l’utilisateur lors-ce-que celui a reçu un message sur sa Voicemail. De plus, le message audio sera inclus en pièce-jointe du mail.

Cette option nécessite une configuration plus poussée. Il faudra aussi qu’Asterisk puisse envoyer des mails.

 

N’oubliez pas de relancer Asterisk pour prendre en compte les modifications.

asterisk –rv
reload

 

Ou au moins la configuration des Voicemails.

asterisk –rv
voicemail reload

 

4) Le DialPlan

 

But du DialPlan

Passons à présent au cœur d’Asterisk : le DialPlan.

 

Le DialPlan est ce qui va définir le routage des appels à travers le serveur.

 

La configuration du DialPlan est contenue dans le fichier suivant :

/etc/asterisk/extensions.conf

 

Dans ce fichier, nous devrons définir le comportement d’Asterisk vis-à-vis des appels.

 

Par exemple, que ce passe-t-il lors-ce-que Asterisk reçoit un appel à destination du numéro 100 ?

Nous allons définir une règle qui dit qu’il faut faire sonner le téléphone de l’utilisateur 100, et ce pendant X secondes, avant de renvoyer l’appelant sur la messagerie de l’utilisateur 100.

 

De même, pour permettre à un utilisateur de consulter sa messagerie, nous définirons un numéro associés à la messagerie du groupe d’utilisateur.

Par exemple, pour les utilisateurs 100 à 190, s’ils composent le numéro 199, ils tomberont sur leur messagerie.

Etc…

 

Voici un aperçu de ce que cela pourrait donner dans le fichier extensions.conf :

exten => _1[0-8]X,1,Dial(SIP/${EXTEN},30)
exten => _1[0-8]X,2,Voicemail(${EXTEN}@dept_1_vm)

 

Sans rentrer dans les détails pour le moment, cela signifie que si quelqu’un appelle un numéro entre 100 et 189, le téléphone associé à ce numéro sonnera pendant 30 secondes. Sans réponse, l’appelant tombera sur la Voicemail de l’utilisateur qu’il cherchait à joindre.

 

Pour ce qui est de consulter la messagerie :

exten => 199,1,Answer()
exten => 199,2,VoiceMailMain(${CALLERID(num)}@dept_1_vm)

 

Quand un utilisateur appel le numéro 199, il sera redirigé vers sa propre messagerie. A condition qu’il ait une messagerie définie dans dept_1_vm.

 

Étudions plus en détail le fonctionnement du fichier extensions.conf.

 

Les contextes

Tout d’abord, le DialPlan est agencé sous forme de contexte.

Chaque utilisateur appartient à un contexte, d’après le fichier User.conf.

 

Quand un utilisateur lance un appel, Asterisk va chercher, dans le contexte associé à l’utilisateur, les actions à effectuer.

 

Les contextes sont définis entre crochet.

 

Voici un exemple :

[dept_1]
exten => _1[0-8]X,1,Dial(SIP/${EXTEN},30)
exten => _1[0-8]X,2,Voicemail(${EXTEN}@dept_1_vm)

[dept_2]
exten => _2[0-8]X,1,Dial(SIP/${EXTEN},30)
exten => _2[0-8]X,2,Voicemail(${EXTEN}@dept_2_vm)

 

Les Extensions

Les entrées dans le fichier extension.conf sont appelées des extensions.

Elles se composent comme ceci :

exten => Numéro,Priorité, Applications ()

Le mot clé « Exten => » marque le début d’une extension.

Le numéro correspond au numéro de téléphone pris en compte par l’extension.

 

La priorité définie l’ordre des actions de l’extension.

En effet, nous spécifierons toujours plusieurs actions dans une extension (voir exemple précédent).

 

L’application définit ce que le serveur va faire.

 

Voyons les possibilités qui s’offrent à nous pour la rédaction d’une extension.

 

Commençons par le numéro.

 

Les numéros

Comme nous l’avons vu, nous pouvons spécifier un numéro bien précis.

exten => 199,1,Answer()

 

Ou bien, nous pouvons spécifier un pattern.

Le but ici est de prendre en compte plusieurs numéros.

 

Tout d’abord, un pattern doit commencer par un « _ ».

Ensuite, nous pouvons utiliser les caractères suivants :

  • « X » : correspond aux chiffres de 0 à 9
  • « Z » : correspond aux nombres de 1 à 9
  • « N » : correspond aux nombres de 2 à 9
  • « . » : correspond à un ou plusieurs chiffres
  • « ! » : correspond à zéro ou plusieurs chiffres

 

Nous pouvons aussi utiliser les crochets.

[1-5] correspond aux nombre de 1 à 5.

[123] correspond aux nombres 1, 2 ou 3.

 

Voici à présent quelques exemples :

exten => _[123].[7-9],1,Answer()

Cette extension englobe tous les numéros commençant par 1, 2 ou 3, et qui finissent par 7, 8 ou 9.

 

exten => _0XXXXXXXXX,1, Answer()

Cette extension correspond à tous les numéros à 10 chiffres, qui commencent par 0.

 

exten => _1[0-8]X,1,Answer()

Cette extension englobe tous les numéros de 100 à 189. Ainsi nous pouvons garder les 10 derniers numéros comme numéros spéciaux (Voicemail, Conférence, etc…).

 

Les applications

Les applications définissent ce que doit faire le serveur.

Par exemple, Answer() signifie que le serveur doit décrocher l’appel.

Ces applications peuvent prendre un ou plusieurs paramètres.

 

Voici une liste de quelques applications possibles :

  • Answer() : permet de décrocher l’appel
  • HangUp() : permet de raccrocher l’appel
  • Dial(type/identifier,timeout) : permet de composer un numéro, avec un timeout en cas de non-réponse
  • VoiceMail(user@context) : permet de joindre la messagerie de l’utilisateur spécifié
  • VoiceMailMain(user@context) : permet de consulter la messagerie de l’utilisateur spécifié
  • Playback(sound-file) : permet de jouer un son
  • SetMusicOnHold(class) : permet de jouer une musique d’attente
  • Goto(contexte,extension,priorité): permet de se rendre à un contexte précis, à une certaine extension, à une certaine priorité

 

Il existe encore bien d’autres applications.

 

En paramètre de ces applications, nous pouvons utiliser des variables.

 

Les variables

Voici quelques variables qui peuvent être utilisés dans le DialPlan :

  • ${EXTEN} : Renvoie l’extension actuellement appelée
  • ${CONTEXT} : Renvoie le contexte actuel
  • ${CALLERID(name)} : Renvoie le nom de la personne qui appel
  • ${CALLERID(num)} : Renvoie le numéro de la personne qui appel
  • ${DATETIME} : Renvoie la date actuelle au format DDMMYYYY-HH:MM:SS
  • ${PRIORITY} : Renvoie la priorité actuelle de l’extension

 

 

De même que pour les applications, il existe de très nombreuses variables.

 

A présent, vous êtes en mesure de comprendre l’intégralité des exemples précédents.

exten => _1[0-8]X,1,Dial(SIP/${EXTEN},30)
exten => _1[0-8]X,2,Voicemail(${EXTEN}@dept_1_vm)

 

Le « ${EXTEN} » de la  priorité 1 fait référence au numéro composé par l’appelant, ce qui permet de joindre le numéro qui a été composé.

Le « ${EXTEN} » de la  priorité 2 permet de joindre la Voicemail.

 

exten => 199,1,Answer()
exten => 199,2,VoiceMailMain(${CALLERID(num)}@dept_1_vm)

 

Ici, le ${CALLERID(num)} fait référence au numéro de l’appelant, et lui permet de joindre sa Voicemail.

 

Les extensions spéciales

Il existe aussi certaines extensions spéciales.

 

Voyons certaines de ces extensions.

 

L’extension « I »

Correspond à l’extension qui est appelée quand l’appelant compose une extension qui n’existe pas dans le contexte ou dans l’IVR (standard auto avec choix au clavier).

L’extension « t »

Correspond à l’extension qui est appelée lors d’un timeout. Par exemple, si l’utilisateur ne choisit pas d’option dans un IVR.

L’extension « h »

Correspond à l’extension qui est appelée lors-ce-que l’utilisateur raccroche.

L’extension « s »

Correspond à l’extension qui est appelée lors-ce-que le serveur n’a pas d’information sur le numéro appelé (cas typique d’un appel sur une ligne analogique).

 

Par exemple, dans le contexte d’un IVR, si l’utilisateur ne fait pas de choix, nous pouvons raccrocher.

exten => t,1,Hangup() 

 

Ou encore, en cas de choix invalide, nous pouvons jouer un son.

exten => i,1,Playback(invalid)

 

Nous aurons l’occasion de voir des exemples dans de prochaines configurations (IVR, Trunk SIP, etc…)

 

5) Configuration du DialPlan

 

A présent que nous avons étudié la structure du DialPlan, configurons celui de notre serveur, afin d’obtenir un comportement basique.

De plus, ce sera l’occasion de voir des exemples sur les notions abordées précédemment.

 

Tout d’abord, il nous faut permettre aux utilisateurs d’un même contexte de s’appeler entre eux.

 

En effet, même les actions basiques comme celle-ci sont à configurer dans le DialPlan.

 

La configuration à mettre en place a déjà été présentée précédemment.

 

Avant de configurer quoi que ce soit, il faut vider le fichier extensions.conf.

Au passage, n’hésitez pas à jeter un œil à la configuration d’exemple avant de la supprimer.

echo "" > extensions.conf

 

Commençons donc par autoriser les appels internes au contexte dept_1 et dept_2, et permettons la consultation de la messagerie.

 

Voici la configuration à placer dans le fichier :

[dept_1]
exten => _1[0-8]X,1,Dial(SIP/${EXTEN},40)
exten => _1[0-8]X,2,Voicemail(${EXTEN}@dept_1_vm)

exten => 199,1,Answer()
exten => 199,2,VoiceMailMain(${CALLERID(num)}@dept_1_vm)

[dept_2]
exten => _2[0-8]X,1,Dial(SIP/${EXTEN},40)
exten => _2[0-8]X,2,Voicemail(${EXTEN}@dept_2_vm)

exten => 299,1,Answer()
exten => 299,2,VoiceMailMain(${CALLERID(num)}@dept_2_vm)

 

Nous avons volontairement gardé la plage 190 à 199 libre (de même pour le range 200).

De cette manière, nous pouvons utiliser les numéros 190 à 199 comme numéros spéciaux (Voicemail, IVR, etc…).

 

Sauvegarder le fichier et relancer Asterisk.

asterisk –rvv
reload

 

A présent, les utilisateurs d’un même contexte peuvent se joindre.

 

Pour réaliser les tests, j’utilise le logiciel Blink, sous Windows.

Blink test d'appel

Ici, l’utilisateur 101 parvient à joindre l’utilisateur 100.

 

De même, l’utilisateur 101 peut consulter sa messagerie avec le numéro 199.

Une fois sur la messagerie, il lui est demandé d’entrer un mot de passe (à partir du clavier).

Si l’authentification est bonne, l’utilisateur a accès à ses messages ainsi qu’aux options de configuration.

 

Vous constaterez que tous les utilisateurs du même contexte utilisent le même numéro pour consulter leur messagerie.

 

A présent, il nous faut autoriser les utilisateurs de contexte différents à s’appeler.

Voici la configuration à mettre place (ajouter les extensions dans le contexte indiqué) :

[dept_1]
exten => _2XX,1,Goto(dept_2,${EXTEN},1)

[dept_2]
exten => _1XX,1,Goto(dept_1,${EXTEN},1)

 

A présent, les utilisateurs peuvent se joindre entre les contextes.

Voici le scénario :

Si un utilisateur appel le numéro 100, et qu’il n’y a pas de réponse au bout de 30 secondes, l’appel est redirigé vers le 101. Si ce dernier ne répond pas non plus, l’appelant tombe sur la boite vocale du 100.

 

Voici la configuration à mettre en place dans extensions.conf :

[dept_1]
exten => 100,1,Dial(SIP/100,30)
exten => 100,2,Dial(SIP/101,30)
exten => 100,3,Voicemail(${EXTEN}@dept_1_vm)

 

Le scenario est effectivement respecté.

Pour faciliter les tests, vous pouvez réduire les Timeouts à 5s.

 

6) Conclusion

 

Nous voici arrivés au terme de cette première configuration d’Asterisk.

Nous avons eu l’occasion de voir la création des utilisateurs, des Voicemails et la configuration du DialPlan.

Nous avons à présent un système de VoIP basique mais fonctionnel.

Nous verrons des configurations plus poussées par la suite (IVR, musique d’attente, conférence, parking, etc…).

 

Tagués avec : , ,
Publié dans Configuration Basique
12 commentaires pour “Configuration Basique d’Asterisk
  1. NIANG dit :

    très bon article et intéressant.

  2. nounou dit :

    Mes appel passent mais je n’arrive pas à envoyer de message ni à laisser une note vocal. Merci de me répondre c’est urgent.

    • Valentin Weber dit :

      Bonjour,

      Avez-vous configuré le fichier voicemail.conf comme indiqué dans la partie 3 de cet article ?
      Aussi, dans le DialPlan, il faut choisir au bout de combien de temps les appels sont redirigés vers la boite vocale.
      Ici « exten => _1[0-8]X,1,Dial(SIP/${EXTEN},40) » le nombre 40 signifie 40 secondes. Donc en appelant le numéro 101, il faudra attendre 40 secondes avant de tomber sur la boite vocale. Pour simplifier vos tests, je vous recommande de mettre 5 secondes.

      Sinon, vous pouvez ouvrir la console Asterisk (asterisk –rvv) et voir les logs qui s’affichent pendant que vous lancez un appel.
      N’oubliez pas non plus de relancer Asterisk après avoir fait des modification.

  3. alvinsteph dit :

    Merci votre article est tres tres explicite j’ai compris de nombreux aspect grace a vous!!!! je me demandais qi on pouvais envoyer des message grace a asterisk.

  4. amine dit :

    Bonjour,
    je fais tous les étapes comme le tutorial mais la premiere appel n’est pas réalisé j’ai réçu dans mon softphone ce message la : Initiating Call.
    et dans la CLI asterisk j’ais eu ce message là :

    chan_sip.c:25697 handle_request-invite: Call from « (82.5.145.85:5071) to extensions ‘335553366433’ rejected because extension not found in context ‘default’

    Qui peut m’aider c’est trop urgent je fais mon pfe sur asterisk et je suis tombé dans ce probleme. ????

    • Valentin Weber dit :

      Bonjour,

      Avez-vous bien une extension ou un pattern qui match le numéro que vous souhaitez joindre ? Je vois qu’il s’agit d’un numéro public. Avez-vous un Trunk SIP vers un opérateur, ou bien cela pointe vers un poste interne ?
      Pensez à relancer Asterisk depuis la console à chaque modification.

      Si rien n’y fait, postez une copie de vos fichiers de configurations.

  5. roscelin dit :

    Salut a tous, sil vous je suis nouveau dans le monde de la telephonie sur IP et plus precicement avec les solution open source et en particulier Asterisk, jai lu le tuto mais je ne parviens pas a creer les template avec la commande «  » » » » » »[default_template](!) » » » » » dans le mode /etc/asterisk/users.conf

    voici le message de retour *** -bash: /etc/asterisk/user.conf: No such file or directory ***

    sil vous plait jai besoin de votre et pardon le plus rapidement possible merci a vous d avance !!!

  6. james dit :

    grace à cet article mon TFC aura sa forme

  7. Gil dit :

    Bonjour,

    J’utilise Asterisk et Ekiga (mais aussi jitsi) sur une distribution Mageia. Le softphone est bien installé, je peux recevoir des appels de l’extérieur. Si j’ai installé ce PABX, c’est que je désire un standard avec pré décroché. Le problème que je rencontre est à ce niveau:ça sonne bien, mais aucune musique d’accueil et d’attente.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Le temps imparti est dépassé. Merci de saisir de nouveau le CAPTCHA.