21/05/10 Protocoles de la VoIP 2
3
4
!!Architecture modulaire ouverte!!facilite l adjonction de nouveaux modules!!les types de modules "!Applications "!Functions (Dialplan) "!Ressources modules "!Codecs "!File format "!Channels Drivers 5
6
Principales fonctions PBX Switching Core :!!Système de commutation de central téléphonique privé, reliant ensemble les appels entre divers utilisateurs et des tâches automatisées. Le noyau de commutation relie d'une manière transparente des appels arrivant sur divers interfaces de matériel et de logiciel. Application Launcher :!!Lance les applications qui assurent des services pour des usagers, tels que la messagerie vocale, la lecture de messages et le listage de répertoires (annuaires). 7
Principales fonctions Codec Translator :!!Utilise des modules de codec pour le codage et le décodage de divers formats de compression audio utilisés dans l'industrie de la téléphonie. Un certain nombre de codecs sont disponibles pour palier aux divers besoins et pour arriver au meilleur équilibre entre la qualité audio et l'utilisation de la bande passante. Scheduler & I/O Manager :!!Ils traitent la planification des tâches de bas niveau et la gestion du système pour une performance optimale dans toutes les conditions de charge. 8
Les APIs Asterisk Application API :!Elle autorise différents modules de tâches à être lancé pour exécuter diverses fonctions. Communication, audioconférence, pagination, liste d'annuaire, messagerie vocale, transmission de données intégrée, et n'importe quelle autre tâche qu'un système PBX standard exécute actuellement ou exécuterait dans l'avenir, sont mises en oeuvre par ces modules distincts. Asterisk Translator API :!Charge les modules de codec pour supporter divers formats de codage et de décodage audio tels que le GSM, la Mu-Law, l'a-law, et même le MP3. 9
Les APIs Asterisk Channel API :!!Cette API gère le type de raccordement sur lequel arrive un appelant, que ce soit une connexion VoIP, un RNIS, un PRI, une signalisation de bit dérobé, ou une autre technologie. Des modules dynamiques sont chargés pour gérer les détails de la couche basse de ces connexions. Asterisk File Format API :!!Elle permet la lecture et l'écriture de divers formats de fichiers pour le stockage de données dans le file system. 10
11
même source 21/05/10 Asterisk 12
21/05/10 Asterisk 13
21/05/10 Asterisk 14
21/05/10 Asterisk 15
21/05/10 Asterisk 16
21/05/10 Asterisk 17
PSTN 21/05/10 Asterisk 18
#!Flux RTP #!UDP #!ports dynamiques #!Codecs : #!G711 (!-law alaw) #!G729a #!GSM #!MP3 21/05/10 Asterisk 19
21/05/10 Asterisk 20
!!Démarrer Asterisk : o!asterisk -cvvvvvvvvvvvvvvv o!/etc/init.d/asterisk start Console Asterisk / CLI!!Se connecter à asterisk : o!asterisk rvvvvvvvvvvddddddddd!!quelques commandes : o!«!sip reload!» o!«!sip show peers!» o!«!dialplan reload!»! o!«!dialplan show default!» 21
Fichiers de configuration!!fichiers de configuration Asterisk : o!/etc/asterisk!!asterisk.conf : o!emplacement des repertoires de travail [directories] o!fichiers de configuration o!fichiers de logs o!fichiers de librairies o!scripts o!modules o!programme du serveur o!spool (transfert de données o!permissions et propriétés [files] o!comportement des options de démarrage [options] 22
Fichiers de configuration!!configuration des canaux!!iax.conf : o!configuration canaux de type iax!!mgcp.conf : o!canaux de type MGCP (tel MGCP)!!modem.conf : o!canaux modem de type ISDN-BRI (RNIS)!!sip.conf o!canaux de type SIP 23
Fichiers de configuration!!configuration du plan de numérotation!!extensions.conf : Cœur d Asterisk, contient le plan de numérotation.!!features.conf :parcage des appels!!meetme.conf : conférences meetme!!musiconhold.conf :musiques d attente!!queues.conf : configuration des files d attente!!voicemail.conf : configuration boîtes vocales 24
!!Autres fichiers de configuration Fichiers de configuration!!manager.conf :!!permet de configurer l Asterisk Manager!!Asterisk Manager fournit une API permettant la connexion de programmes externes!!modules.conf : modules à charger au démarrage!!types de modules!!ressources (res_xxx.so)!!enreg. CDR (cdr_xxx.so)!!canaux (chan_xxx.so)!!codecs (codec_xxx.so)!!formats (format_xxx.so)!!moteur Asterisk (pbx_xxx.so)!!fonctions autonomes (func_xxx.so)!!rtp.conf : configurer les ports RTP (défaut : 10000 < 20000) 25
!!Enregistrement CDR Fichiers de configuration!!cdr.conf :!!enregistrement des détails d un appel dans une base de données!!asterisk Manager fournit une API permettant la connexion de programmes externes!!cdr_manager.conf :!!Definit si Asterisk Manager doit générer des évenements CDR 26
!!Fichiers de déclaration Identification des utilisateurs!user.conf :!![General]!!Définit les paramètres par défaut!![utilisateur]!!chaque compte utilisateur est déclaré par une section!les Paramètrages surchargent tous les paramètrages des autres fichiers!voicemail.conf : (si messagerie vocale)!!après modification il faut les recharger avec la commande : #!CLI > sip reload 27
!!Exercice Créer les utilisateurs SIP :!!Pierre DUPONT!!extension : 6000!!Jean Marc!!extension 6001!!Jérome DURAND!!extension : 6002!!Jacques HENRY!!extension 7000 Identification des utilisateurs 28
29
Plan de numérotation!!on l'appelle codage E Z AB PQ MCDU : o!e Exploitant o!z Zone géographique o!ab Zone départementale o!pq Centre autonome d'acheminement o!mcdu Identifiant l'abonné final sur le centre d'acheminement (Millier, Centaine, Dizaine, Unité) Les règles de gestion du plan national de numérotation déterminent en son sein plusieurs catégories de numéros : - les numéros à dix chiffres géographiques de la forme 0ZABPQMCDU (Z = 1 à 5) ; - les numéros à dix chiffres de la forme 0ZABPQMCDU réservés aux services de téléphonie mobile (Z = 6) -.. 30
Plan de numérotation!!dialplan Asterisk dans le fichier o!extensions.conf!!après modification o!cli>dialplan reload!!dialplan contitué de 2 grands concepts o!les contextes (établit les règles de travail) o!les règles de numérotation $!Extensions $!Priorités $!Applications 31
Plan de numérotation!!extensions.conf divisé en sections o![general] définit paramètres globaux du plan de numérotation o![globals] définit les variables globales. o![<nom-du-contexte>] définit les contextes.!!un contexte regroupe les règles de numérotation «extensions»!!chaque contexte isole ces règles de numérotation des autres contextes!!des interactions entre contextes doivent être explicitement déclarées!!pas seulement identification de numéro, mais grammaire permettant de définir une stratégie pas par pas 32
Plan de numérotation/règles!!un pas est défini par : o!un mot clé «exten =>» o!un pattern de numérotation o!une priorité «priority» o!une application «application» o!exemple : $!exten => 123,1,Answer() $!exten => 123,n,fait quelquechose $!exten => 123,n,fait autre chose $!exten => 123,n,Hangup()!!le pattern peut être un simple nombre, une chaîne alphanumérique!!une extension peut être beaucoup plus puissante qu une simple chaîne!!une application permet d effectuer une action sur le canal en cours!!asterisk offre une multitude d applications «module show», «core show applications» 33
Plan de numérotation!!exercice!!dans le context «default» a)! l extension 123 répond b)! joue le message «hello-world» c)! puis raccroche : d)! Ajouter l appel de la fonction NoOP() pour afficher le message «Channel Hangup» 34
35
Plan de numérotation!!exercice!!extension 124 a)! Jouer le message «main-menu» en arrière plan b)! exécuter les priorités suivantes a.! Pour les chiffres 2,3,4 répéter le chiffre saisi c)! ensuite a)! Pour les chiffres 2,3 répéter le chiffre et retourner à l extension 124 b)! Pour le chiffre 4, répéter le chiffre annoncer le message «goodbye», raccrocher 36
37
Plan de numérotation!! Exercice!! Extension 125 a)! Jouer le message «main-menu» en arrière plan b)! Ensuite a)! Réaliser un IVR qui permet la saisie d un numéro de dossier (chiffre [0-9]) b)! La saisie est validée par la touche «#» le numéro de dossier est épelé pour vérification c)! Le numéro de dossier est réinitialisé à la saisie de la touche «*» 38
[exo_125] exten => entry_point,1,answer() exten => entry_point,n,set(dossier=) exten => entry_point,n,background(vm-messages) exten => entry_point,n,waitexten() exten => 0,1,Set(DOSSIER=${DOSSIER}0) exten => 0,n,Goto(exo_125,entry_point,4) exten => 1,1,Set(DOSSIER=${DOSSIER}1) exten => 1,n,Goto(exo_125,entry_point,4) exten => 2,1,Set(DOSSIER=${DOSSIER}2) exten => 2,n,Goto(exo_125,entry_point,4) exten => 3,1,Set(DOSSIER=${DOSSIER}3) exten => 3,n,Goto(exo_125,entry_point,4) 39
exten => 4,1,Set(DOSSIER=${DOSSIER}4) exten => 4,n,Goto(exo_125,entry_point,4) exten => 5,1,Set(DOSSIER=${DOSSIER}5) exten => 5,n,Goto(exo_125,entry_point,4) exten => 6,1,Set(DOSSIER=${DOSSIER}6) exten => 6,n,Goto(exo_125,entry_point,4) exten => 7,1,Set(DOSSIER=${DOSSIER}7) exten => 7,n,Goto(exo_125,entry_point,4) exten => 8,1,Set(DOSSIER=${entry_point}8) exten => 8,n,Goto(exo_125,125,4); exten => 9,1,Set(DOSSIER=${DOSSIER}9) exten => 9,n,Goto(exo_125,entry_point,4) exten => #,1,Saydigits(${DOSSIER}) exten => #,n,hangup() exten => *,1,Goto(exo_125,entry_point,2 exo_125] 40
41
Plan de numérotation/ DIAL() 42
!! Options m t T j r M(x) Plan de numérotation/ DIAL() Troisième argument Remplace tonalité par musique Permet à l appelé de transférer un appel (features.conf) Permet à l appelant.. Saut à la priorité n+101 si tous les canaux occupés Force la sonnerie de tonalité (ex: en cas d appel multiple) Exécute macro «x» lorsque l appelant répond h Permet à l appelé de raccrocher en utilisant la touche «*» H i C Permet à l appelant.. Ignore les requêtes de transfert Remise à zéro du CDR 43
!! Options Plan de numérotation/ DIAL() Troisième argument p Active le mode «screening» P(x) g A(x) S(n) L(x[:y][:z]) w W Privacy manager (database) Appelé raccroche => dial termine pour exécuter d autres commandes Joue le mesasage d annonce à l appelé Termine l appel (n secondes) après la connexion Limite l appel (millisecondes) Permet à l appelé de déclencher l enreg. «*l» (ou features.conf) Permet à l appelant ; 44
Plan de numérotation/ DIAL()!!Exercice!! Extension 126 : a)! Appeler extension 6002 b)! Après 10 s passer le message «vm-nobodyavail» c)! Raccrocher!! Extension 127 : a)! Demander le transfert vers un autre poste avec «#» et raccrocher avec «*» 45
46
Plan de numérotation/ DIAL()!!quatrième argument : o!adresse URL o!si la réception supporte de recevoir une adresse URL, elle sera utilisée o!téléphone IP, Softphone o!rarement utilisé o!le deuxième, troisième et quatrième arguments sont optionnels o!exemple : exten => 1,1,DIAL(SIP/6000,,m) 47
Plan de numérotation/ DIAL()!!La variable ${DIALSTATUS} permet de récupérer l état de l application:!!answer : appel abouti!!busy : appel abouti mais occupé!!noanswer : appel abouti mais pas de réponse!!cancel : appel abouti, appelant raccroche avant que l appelé ne décroche!!congestion : système en congestionj!!chanunavail : canal non disponible!!dontcall : l appelé a rejeté l appel!!torture : menu torture (privacy manager)!!invalidargs : erreur dans les arguments 48
Plan de numérotation/ DIAL()!!Exercice!! Extension 140 : a)! Appeler extension 6000 b)! En fonction de l état de retour d appel (en ligne ou non disponible) Envoyer l appel vers le boîte vocale avec le bon message. 49
50
Plan de numérotation/ patterns!!les patterns permettent de définir des expressions rationnelles!!un pattern commence toujours par «_», suivi par : #!«X» : tout caractère numérique #!«Z» : 1-9 #!«N» : 2-9 #!«.» : (wildcard) #!«!» :0 ou tous les caractères exten => _6XXX,1,Dial(SIP/${EXTEN}) exten => _6[8-9]XX,n,Dial(IAX2/TrunkSiteDistant/$ {EXTEN} exten => _00[1-5)XXXXXXXX,1,Dial(DAHDI/g1/${EXTEN}: 1) On peut définir une variable, dans [globals] ou dans [<contexte>] 51
Plan de numérotation avancé!!expressions : le plan de numérotation permet!!l utilisation des expressions, des opérateurs, de structures conditionnelles, et la construction d algoritme!!syntaxe : «$[«expression»]!!asterisk évalue et remplace l expression par son résultat exten => 321,1,Set(COUNT=3) exten => 321,n,Set(NEWCOUNT=$[${COUNT}+1]) exten => 321,n,SayNumber(${NEWCOUNT})!!OPERATEURS : permettent de manipuler les variables comme un langage!!«, &» : booléen!!«=, >, >=, <, <=,!=» : tests aritmétiques!!«+, -, +,/, *,%» : opérations!!«:» 52
Plan de numérotation avancé!!conditions : ajout de structures conditionnelles!!goto()!!gotoif : GoToIf(expression?destination1:destination2) exten => 150,1,Set(TEST=1) exten => 150,n,GoToIf($[$[TEST}=1]?vrai:faux) exten => 150,n(vrai),Playback(hello-world) exten => 150,n,Hanghup() exten => 150,n(faux),Playback(Goodbye)!!GotoIfTime GotoIfTime(times,days_of_the_week,days_of_the_month,months?destination) - Si la date courante est égale à «times,day..», le plan de numérotation saute au label destination - Le caractère «*» peut remplacer un argument 53
Plan de numérotation avancé!!exercice!! Réaliser un IVR sur l extension 151 : "! Pour les quatre premiers jours du mois de juillet "! Quelque soit l heure "! Quelquesoit le jour de la semaine $! Nous sommes fermés $! Pendant les heures de bureau envoyer les appels au contexte «open» $! Sinon nous sommes fermés 54
55
Plan de numérotation avancé!!macro : permet de construire des macros dans le plan de numérotation!!définir une macro :!!un contexte spécial!![macro-<nom_de_la_macro>!!appel de la macro par une application!!gosub(<nom_de_le_macro>,arg1,arg2, ]!!Les variables déjà définies ${MACRO_CONTEXT } ${MACRO_EXTEN} ${MACRO_PRIORITY} ${ARG N} 56
Plan de numérotation avancé!!exercice!!créer la macro «stdexten» qui permet de traiter un appel standard o!numérotation vers l extension demandée avec timeout de 20s o!prise en compte des états NOANSWER et BUSY pour envoyer sur la messagerie avec un message d annonce correspondant à l état o!retour dans le contexte default 57
58
File d attente!!definies dans le fichier : queues.conf!!commande : CLI> queue show!!une file d attente : #!Appels entrants placés en file #!Membres qui répondent à la file #!Extensions #!Agents!!Une stratégie de fonctionnement de file ringall : tous les canaux possibles roundrobin : (rmmemory) leastrecent : canal le moins recemment appelé random linear : ordre décrit dans fic de conf.!!une musique d attente pour les appels en attente!!messages vocaux 59
!!Dans le plan de numérotation : #!Queue() #!AddQueueMember() #!RemoveQueueMember() #!PauseQueueMember() #!UnpauseQueueeMember() #!AgentLogin() File d attente L application Queue ajoute un appel dans une file d attente Options : «h» appelé raccroche touche «*» «H» appelant «i» ignore transfert «n» désactive «essai à nouveau» «t» appelé transfert appel «T» appelant.. «w» appelé peut enregistrer la conversation «W» appelant.. 60
!!Exercice File d attente!!créer une file d attente «10»!!Configurer le plan de numérotation pour associer l extension 7000 à cette file d attente 61
File d attente 62
Voicemail!!Nombre de boîtes vocales illimité!!protection par mot de passe!!messages d accueil (greetings) par défaut ou personnalisé!!le fichier voicemail.conf contrôle la messagerie Asterisk "![general] : paramètres globaux "![zonemessages] : diff. Zones géographiques "![contexte] : permet de créer des groupes attach : «yes» ou «no» delete : «yes» ou «no» maxsilence : temps max. silence av. fin enreg silencethreshold servermail : adresse de notification maxmsg : nombre max. maxmessage : durée max. minmessage : durée min format : format de fichier audio maxgreet maxlogins : nb. tentatives emailsubjet : surcharge le sujet emailbody : surcharge le message par défaut userdirectory : renvoi vers autre boite emaildateformat : fomatage de la date nexaftercmd 63
!!Exercice voicemail!!créer les boites vocales 6000, 6001, 6002!!Ajouter l extension 888 pour consulter sa boite vocale!!ajouter l extension 889 pour consulter la boite vocale d une autre extension!!configurer Asterisk pour que la boite vocale de l extension 6006 impose la configuration du mot de passe et la configuration des messages d accueil à la première consultation 64
voicemail [general] forcename = yes ; Forces a new user to record their name. ;A new user is determined by the password being ; the same as the mailbox number. forcegreetings = yes ; This is the same as forcename, ;except for recording greetings. [default] 6006 => 6006,VoiceMail6006,Pinocchio@urec.fr 65
«TRUNK» SIP & IAX!!Définition du client et du serveur :!!Le client :!!la commande «register» permet d indiquer au serveur distant vers quel Asterisk envoyer les appels!!le serveur :!!section [server_distant] permet de définir les paramètres de l Asterisk distant qui exécute la commande «register»!!commande DIAL (): exten => _4XXX,1,Dial(IAX2/paris/${EXTEN}) 66
Trunk!!Exercice SIP :!!Réaliser un trunk SIP entre deux asterisk!!modifier le plan de numérotation pour appeler les extensions en : o!_41xx vers l Asterisk 1 o!_42xx vers l Asterisk 2!!Exercice IAX :!!Réaliser un trunk IAX2 entre deux asterisk!!modifier le plan de numérotation pour appeler les extensions en : o!_51xx vers l Asterisk 1 o!_52xx vers l Asterisk 2 67
Trunk _incoming 68
Trunk 69
Trunk/ IAX _incoming 70
Trunk / IAX exten=> _51XXXX,1,NoOp() exten = >_51XXXX,n,Dial(IAX2/${EXTEN:2},20) exten => _51XXXX,n,Hangup() exten =>_52XXXX,1,NoOp() exten = >_42XXXX,n,Dial(IAX2/osaka/${EXTEN},20) exten => _52XXXX,n,Hanghup() 71
Les journaux d appel!!) Asterisk gère un journal d évenements : o!(cdr) : Call Detail Recording!!Chaque appel génère des enregistrements dans le journal d appel!!journal d appel : o!/var/log/asterisk/cdr-csv o!fichier texte avec séparateur «;» o!possibilié stockage des CDR en base de données!!fichiers de configuration o!cdr.conf, cdr_manager.conf, cdr_custom.conf o!cdr_custom.conf permet de définir (journaux personnalisés 72
Asterisk Manager Interface : AMI!!Protocole de communication sur TCP/IP!!Format texte!!dialogue «host to host»!!configuration : manager.conf!!permet : $!la lecture de paramètres d Asterisk $!l écriture.. $!le pilotage d Astérisk $!l Abonnement aux évenements 73
Asterisk Manager Interface : AMI manager.conf!!section : [general] "!connexion réseau enable=yes "!paramètres réseau port=5038 bindaddr=0.0.0.0!!section [<client>] secret = password deny=0.0.0.0/0.0.0.0 permit = @IP/mask read = system, call, log, verbose, command, agent, user, config write = system, call, log, verbose, command, agent, user, config 74
Sécurité!!applicative "!configuration (users, trunk,manager) %!mot de passe / hash MD5 %!deny, permit "!contexte %!autorisation vers opérateurs (national/international) %!autorisation vers les Num. spécuax/surtaxés %!accès aux fonctions du plan de numérotation!!réseau %!Firewall ip tables.(flux audio port dynamiques) %!VPN, IPSec/SSL 75
Les méthodes Debuging et diagnostic!!vérification de configuration dans le CLI!!commandes de debug!!messages du CLI!!fichiers de log (logger.conf)!!analyseur réseau (whireshark) Niveau de verbosité!!asterisk -rvvvvvddd!!«core set verbose 5» «core set debug 3» 76
Les fichiers de log!!«logger.conf»!!permet de configurer %!niveau de log %!sorties de destination Debuging et diagnostic Exemple : debug=>debug console => notice,warning, error messsage => notice, warning,error full => notice,warning,error,verbose syslog.local0 => notice, warning,error 77
Présentation Asterisk GUI!!interface graphique de configuration!!accès via navigateur!!utilise AMI pour communiquer avec Asterisk!!ne modifie pas les configurations faîtes «à la main» dans les fichiers de configuration Utilisation %!http://@ip:8088/asterisk/static/config/ cfcgcasic.html identifiants => ceux saisis dans «manager.conf» 78
bibliographie %!http//www.asterisk.org %!http//www.voip-info.org %!http//www.digium.com %!http://www.freepbx.org 79
21/05/10 Protocoles de la VoIP 80