Introduction a la VoIP avec Asterisk
Un article de Wiki SOS-ADMIN.
| Version du 15 jan 2006 à 00:42 Jerome.pautex (Discuter | contribs) ← Différence précédente |
Version du 15 jan 2006 à 00:47 Jerome.pautex (Discuter | contribs) Différence suivante → |
||
| Ligne 547: | Ligne 547: | ||
| Le plus complet, le plus connu, ET incontournable : | Le plus complet, le plus connu, ET incontournable : | ||
| + | |||
| http://www.voip-info.org/ | http://www.voip-info.org/ | ||
| + | |||
| http://www.asteriskguru.com/tutorials/ | http://www.asteriskguru.com/tutorials/ | ||
| Ligne 557: | Ligne 559: | ||
| Pour ceux qui veulent se lancer, tout de meme, il vous faudra installer : | Pour ceux qui veulent se lancer, tout de meme, il vous faudra installer : | ||
| + | |||
| - eps-1.5 | - eps-1.5 | ||
| + | |||
| - gcc > 3 | - gcc > 3 | ||
| + | |||
| - tiff-v3.6.1 | - tiff-v3.6.1 | ||
| + | |||
| - spandsp-0.0.2 | - spandsp-0.0.2 | ||
| + | |||
| - rxfax/txfax | - rxfax/txfax | ||
| + | |||
| == Manager == | == Manager == | ||
Version du 15 jan 2006 à 00:47
Sommaire |
Introduction
Vous avez besoin de créer un réseau téléphonique entre un groupe de personnes,créer des numéros internes abrégés, disposer de votre propre musique d'attente, transferer des appels... ou bien faire un système de serveur vocal couplé à une base MYSQL, avec des menus, une identification ou l'enregistrement de messages vocaux pour vos sites internet ? Alors, vous avez besoin d'installer ASTERISK.
Je vais essayer de vous expliquer l'installation et le début de la configuration , mais les possibilités sont énormes, et il me serait impossible de rentrer dans les détails de chaque option.
Pour commencer,
ASTERISK est un logiciel serveur OpenSource PBX, c'est lui, qui va gérer votre identification au serveur, la réception et l'emmission des appels par internet.
Pour réaliser ce tutorial/howto, j'ai utilisé un serveur dedié sous linux, et un abonnement chez le fournisseur voIP : Wengo.fr (du groupe 9 telecom) L'abonnement wengo inclu 2 lignes (in ET out) l'inscription est rapide, et vous avez votre numéro en quelques minutes.
Il existe plusieurs autres opérateurs comme : directcentrex.com, ou phonesystems.net Je ne les ai pas testés, mais ils sont tous très comparables, et leur fonctionnement est identique, vous pouvez donc choisir celui qui vous conviendra le mieux.
Protocole
Il existe plusieurs protocoles d'identification pour la voIP, le standard aujourd'hui s'appelle "SIP" (Session Initiation Protocol), c'est un standard ouvert, le serveur Asterisk a son propre protocole "IAX2",mais asterisk sait très bien gérer les deux protocoles, et ceux-ci sont même compatibles entre eux. (exemple : un softPhone en IAX2, un fournisseur voIP en IAX2, et un softphone en SIP : tous branchés à asterisk!)
Un fournisseur voIP va donc, vous fournir non pas un fil arrivant chez vous pour brancher votre téléphone, mais simplement quelques paramètres : l'adresse IP de leur serveur, un login, et un mot de passe ! cela suffit aujourd'hui pour téléphoner depuis n'importe où !
Téléchargement
Ici, nous allons telecharger l'ensemble des applications utiles pour l'installation d'asterisk.
Les versions vont surement évoluer, méfiez vous des liens, et allez eventuellement télécharger directement les applications sur leur site respectif pour prendre la dernière version.
Le logiciel "Asterisk"
# wget http://ftp.digium.com/pub/asterisk/asterisk-1.2.1.tar.gz
les Addons d'asterisk, vont permettre l'utilisation d'asterisk avec MYSQL :
# wget http://ftp.digium.com/pub/asterisk/asterisk-addons-1.2.1.tar.gz
Le logiciel SOX vous permet de convertir un fichier "WAV" en format "GSM" qui est le format pour faire diffuser une annonce d'accueil par exemple.
# wget http://ovh.dl.sourceforge.net/sourceforge/sox/sox-12.17.8.tar.gz
Ceci est un package de voix en francais, plutot que la version standard en anglais (utiliser pour le repondeur, par exemple) les voix ne sont pas de tres bonne qualités, mais ont l'avantage tout de meme d'etre en francais.
# wget http://www.sineapps.com/FrenchPrompts.tar.gz
mpg123 est un logiciel permetant de diffuser un contenu en MP3, il est indispensable pour utiliser la musique d'attente
# wget http://www.mpg123.de/mpg123/mpg123-0.59r.tar.gz
Installation
On decompresse maintenant l'ensemble des logiciels telecharger
# tar -xzf asterisk-1.2.1.tar.gz # tar -xzf asterisk-addons-1.2.1.tar.gz # tar -xzf sox-12.17.8.tar.gz # tar -xzf FrenchPrompts.tar.gz # tar -xzf mpg123-0.59r.tar.gz
On va commencer par installer sox et mpg123, qui sont des petit logiciel assez rapide a installer.
# cd mpg123-0.59r # make linux # make install
On installe ensuite SOX
# cd ../sox-12.17.8 # ./configure # make # make install
On installe maintenant le serveur Asterisk
# cd ../asterisk-1.2.1 # make # make install # make samples
make samples va installer les fichiers de configuration par defaut. (Lors de vos mises a jours, plus la peine de l'executer)
On installe maintenant les addons Mysql
# cd ../asterisk-addons-1.2.1/ # make # make install
On installe les voix francaise
# cd ../ # mv fr /var/lib/asterisk/sounds/. # mv digits/fr /var/lib/asterisk/sounds/digits/fr
Configuration
Voila, votre serveur est installé, il faut maintenant faire la "configuration". L'ensemble de vos fichiers de configuration ce trouve dans le dossier /etc/asterisk/
# cd /etc/asterisk/
Seuls quelques fichier nous interesse, a savoir :
sip.conf extensions.conf
Le fichier sip.conf, va definir l'ensemble de vos utilisateurs, le fichier extensions.conf, va definir les actions a faire, lors d'un appels sur un numero de telephone. Pour connaitre l'ensemble des fonctions utilisable, rendez vous sur le site http://www.asteriskguru.com/tutorials/ et egalement sur le site http://www.voip-info.org/
Editer le fichier sip.conf, a la fin du fichier, Creer vos utilisateur ainsi :
[jerome] type=friend username=jerome secret=MonPaSswoRd host=dynamic context=moncontexte language=fr insecure=very nat=yes canreinvite=no [francois] type=friend username=francois secret=MonPaSswoRd host=dynamic context=moncontexte language=fr insecure=very nat=yes canreinvite=no
Ici, nous avons creer 2 utilisateurs : jerome, et francois, vous pouvez bien sur en creer autant que vous voulez.
type=friend : va definir que votre utilisateur est un "ami" est il sera autoriser a passer des appels SORTANT host=dynamic : permet de se connecter avec cet utilisateur depuis n'importe quel IP. context=moncontexte : l'option "context" sera ensuite utiliser dans le fichier extensions.conf, lorsque l'utilisateur emet un appel, il rentrera dans la zone "moncontexte", qu'on definira plus tard. language=fr : permet d'utiliser les fichiers audio francais.
Nous allons ensuite configurer notre compte WENGO
Rendez vous sur : http://ws.wengo.fr/softphone-sso/sso.php?login=VOTRE_EMAIL&password=VOTRE_PASS en modifiant VOTRE_EMAIL et VOTRE_PASS par vos identifiant WENGO.
Ouvrer ensuite la source de ce fichier, vous y trouverez un flux XML :
<?xml version="1.0" ?> - <#> <sso vapi="*1*"> <status code="*200*">OK</status> <user>ident-wengo</user> <userid>ident-wengo</userid> <displayname>ident-wengo</displayname> <password>XXXXXXXXXXXXXXX</password> <outbound>1</outbound> <realm>voip.wengo.fr</realm> - <#> <proxy> <host>213.91.9.210</host> <port>5060</port> </proxy> - <#> <server> <host>voip.wengo.fr</host> <port>5060</port> </server> - <#> <httptunnel> <host>httpproxy.wengo.fr</host> </httptunnel> </sso>
Recuperer votre "ident-wengo" et votre mot de passe "XXXXXXXXXXXXXXX" : il est different de votre compte wengo, ceci est votre mot de passe "SIP", cette etape est indispensable pour connaitre ce parametre.
Une fois ces elements en main, editer a nouveau le fichier sip.conf, et rajouter dans la section [general] la ligne suivante :
register => ident-wengo:XXXXXXXXXXXXXXX@wengo/ident-wengo
Ensuite, nous allons definir l'utilisateur @"wengo" , Tout comme vos utilisateurs (ex : jerome, francois...) a la difference qu'aulieu d'etre "type=friends" c'est "type=peer"
On met donc a la fin du fichiers sip.conf
[wengo] type=peer fromdomain=voip.wengo.fr host=voip.wengo.fr outboundproxy=sipproxy.wengo.fr outboundproxyport=5060 username=ident-wengo fromuser=ident-wengo secret=XXXXXXXXXXXXXXX insecure=very nat=yes canreinvite=no
Toujours dans la section [general] vous allez devoir modifier les parametres suivant, afin d'assurer le bon fonctionnement !
Modifier chaqu'une des lignes suivante :
context=default ;allowguest=no ;dtmfmode = rfc2833 ;notifyringing = yes ;relaxdtmf=yes
en :
context=wengo-in allowguest=no dtmfmode = auto notifyringing = yes relaxdtmf=yes
allowguest, autorise la connexion au serveur ASTERISK a n'importe quel personne : afin d'eviter ca, on bloque donc les utilisateurs.
le context dans la section [general] decrit le contexte dans le quel un appel arrive et ce qu'on dois en faire... on l'appel "wengo-in" !
Fermer le fichier SIP : normalement, c'est tout bon :-)
Maintenant, nous allons configurer le fichier extensions.conf :
Rendez vous a la fin du fichier, nous allons d'abord cree le context [wengo-in]
[wengo-in] exten => _.,1,Goto(moncontexte,100,1)
Lorsqu'un appel arrivera sur wengo, le serveur asterisk ira immediatement dans le contexte : "moncontexte", au numero 100, de la priorite 1.
Nous allons maintenant creer la zone "moncontexte"
[moncontexte]
exten => 100,1,Ringing
exten => 100,2,Wait,1
exten => 100,3,Answer
exten => 100,4,Dial(SIP/jerome&SIP/francois,50,tm)
exten => 100,5,Hangup
exten => 101,1,Dial(SIP/jerome,20,tm)
exten => 101,2,Wait,5
exten => 101,3,Dial(SIP/francois,20,tm)
exten => 101,4,Hangup
exten => 102,1,Dial(SIP/francois,20,tm)
exten => 102,2,Wait,5
exten => 102,3,Dial(SIP/jerome,20,tm)
exten => 102,4,Hangup
; ----------------------------------------
; Pour passer un appel (en france)
exten => _0[123456].,1,Dial(SIP/wengo/${EXTEN},240,T)
exten => _0[123456].,2,Hangup
; Numero GRATUIT
exten => _080[05].,1,Dial(SIP/wengo/${EXTEN},240,T)
exten => _080[05].,2,Hangup
; Numero INTERNET
exten => _087.,1,Dial(SIP/wengo/${EXTEN},240,T)
exten => _087.,2,Hangup
; -----------------------------------------
Cette zone moncontexte, defini plusieurs chose :
dans un premier temps, lorsqu'un appel arrive sur wengo, on le redirige vers le numero interne 100, priorite 1. on laisse sonner, puis, a la priorite 2, on attend, priorite 3, on decroche, priorite 4 : On fais sonner les 2 numeros de telephone "jerome" et "francois", qui sont nos 2 comptes SIP.
Que signifie 50 ? 50 est le timeout, en cas de non-reponse au bout de 50 secondes, nous passerons automatiquement a la priorite 5 : Hangup (on raccroche)
Que siginifie "tm" ?
t, signifie que la personne appellé pourra transferer un appel. T, sinifie que la personne qui appel pourra transferer un appel. m, l'option "m" correspond a la musique d'attente : lorsque vous executerai un "transfer" d'appel : votre correspondant entendra vos musiques d'attente situé dans le dossier : /var/lib/asterisk/mohmp3
le numero interne 101, est par contre, uniquement pour l'utilisateur "jerome".
Si l'utilisateur "francois" prend l'appel entrant, mais que l'appel est pour "jerome", il suffira alors de taper les touches #101 pour transferer immediatement l'appel a Jerome. en cas de non reponse dans les 20 secondes, l'appel reviendra sur francois.
Et inversement pour le numero 102.
Dans l'ecriture d'un numero de telephone, vous pouvez commencer votre numero par "_" ce signe signifie que votre numero de telephone sera ecrite sous forme de "pattern", vous pourrez ainsi utiliser [12345] pour un groupe de numero, le signe "." pour definir une chaine illimite, X pour definir un chiffre de 0 a 9.
Démarage du serveur
Pour demarrer automatiquement votre serveur asterisk au demarage, vous devez enregistrer la commande au demarage de votre serveur (a l'aide de WebMin?) :
/usr/sbin/safe_asterisk
Vous pouvez egalement demarrer depuis la consol en tapant la commande :
asterisk -vvvc
Une fois le serveur "demarrer" , vous pouvez vous connecter a la consol en tapant la commande :
asterisk -r
Cette commande ne demarre pas le serveur, il vous permet juste de vous reconnecter sur la consol une fois le serveur deja lancer !
Commande du serveur
Pour connaitre l'ensemble des commandes du serveur, vous pouvez taper : help, une fois connecter a la consol ASTERISK
Ceci dis, quelques commandes utiles :
A chaque modification du fichier sip.conf, vous devez executer la commande "sip reload" pour recharger le fichier
A chaque modification du fichier extensions.conf, vous devez executer la commande "extensions reload" pour recharger le fichier.
Pour recharger l'ensemble du serveur, taper la commande : reload
Pour connaitre l'ensemble des "peers" connecter (vos utilisateurs SIP) taper : sip show peers
Pour verifier que votre connexion avec WENGO est bien "Enregistrer", taper : sip show registry
SOFTPHONE ou HARDPHONE ?
Voila, nous avons fini d'installer , et de configurer le serveur : Maintenant, il vous faut un telephone ! Le choix est a vous : pour commencer simplement, avec un SOFTPHONE, telecharger le logiciel X-LITE, puis, allez dans :
Preferences > System Settings > SIP PROXY > [Default] >
Puis, configurer ainsi :
Enabled : YES (ne pas oublier de changer!!!) Display Name : jerome Username : jerome Authorization User : jerome Password : MonPasSword Domain/relam: IPduServeur SIP Proxy : IPduServeur Out Bound Proxy : IPduServeur
fermer les preferences.... c'est pret !
Un peu plus loin... (en vrac!)
SOX
Pour utiliser SOX, et convertire un fichier wav, en format GSM, utiliser la commande suivante :
sox foo.wav -r 8000 foo.gsm resample -ql
EXTEN
Pour faire ecouter un message d'accueil avant de re-envoyer vers une personne. vous devez utiliser la fonction : Playback.
Exemple :
exten => 100,1,Playback(bonjour)
le fichier dois ce trouver dans votre dossier "sounds", en format .gsm, dans l'appel de la fonction Playback, vous ne devez pas mettre l'extension .gsm
Maintenant, je vais vous montrer comment realiser un message d'accueil en autorisant l'utilisateur a choisir vers quel poste il desire appeller.
En reprenant notre exemple d'installation avec [wengo-in] et [moncontexte] de tout a l'heure :
[wengo-in] exten => _.,1,Goto(moncontexte,s,1) [moncontexte] ; on laisse sonner exten => s,1,Ringing exten => s,2,Wait,2 ; On decroche exten => s,3,Answer exten => s,4,Set(TIMEOUT(digit)=3) exten => s,5,Set(TIMEOUT(response)=5) ; on diffuse le message de "bonjour" exten => s,6,Background(msg-bonjour) ; on attend que l'utilisateur appuie sur une touche, puis, la touche definira la nouvelle "extension" sur le quel l'utilisera ira. exten => s,7,WaitExten ; Si l'utilisateur appuie sur la touche 1, cela appellera le poste de JEROME, si il appuie sur 2, il ira sur le poste de Francois. ; Poste interne "JEROME" exten => 1,1,Dial(SIP/jerome,50,tm) exten => 1,2,Hangup ; Poste interne "FRANCOIS" exten => 2,1,Dial(SIP/francois,50,tm) exten => 2,2,Hangup ; si l'utilisateur n'a pas appuyer sur une touche pendant le temps defini, alors,le systeme executera l'extension "t" (timeout) et on retourne a la priorite 6 qui redifusera le message exten => t,1,Goto(menu,s,6) ; Si l'utilisateur appuie sur une touche INVALIDE, le system executera l'extension "i", automatiquement. exten => i,1,Playback(desole) ; on met un message pour dire qu'on a pa compris la touche.... exten => i,2,Goto(moncontexte,s,6) ; on le renvoi vers le menu
ATTENTION avec la fonction WaitExten : Evitez d'autoriser votre utilisateur a passer n'importe quel appel, les differents "contexte" limite justement cette utilisation.
Si vous utiliser par exemple : (pour passer un appel)
exten => _0[123456].,1,Dial(SIP/wengo/${EXTEN},240,T)
Soyez donc vigilant dans la programmation de vos contextes.
Playback execute un fichier sons, et l'utilisateur est obliger de l'entendre jusqu'a la fin, Background, execute un fichier sons egalement, mais avec la fonction WaitExten, il permet a l'utilisateur d'appuyer sur une touche, meme pendant sa diffusion.
Une autre fonction tres utile : System(), elle vous permet d'executer des commandes systemes sur le serveur!
Exemple :
exten => _.,1,System(php /home/script.php ${EXTEN} ${CALLERIDNUM})
Maintenant, voici un exemple avec l'utilisation de MYSQL :
exten => 555,1,MYSQL(Connect connid localhost USER PASS DATABASE)
exten => 555,2,MYSQL(Query resultid ${connid} SELECT\ id\,name\ FROM\ membres\ WHERE\ telephone=${CALLERIDNUM})
exten => 555,3,MYSQL(Fetch fetchid ${resultid} idm auteur)
exten => 555,4,MYSQL(Clear ${resultid})
exten => 555,5,MYSQL(Disconnect ${connid})
exten => 555,6,Noop(APPEL DE - ${idm} - ${auteur})
Tester votre ligne ?
Vous pouvez, si vous desirez, faire un "test d'echo" : vous parlez, il vous retournera immediatement ce qu'il recoit.
Il faut utiliser pour ca, la fonction : Echo()
exten => 200,1,Answer exten => 200,2,Echo exten => 200,3,Hangup
Appeller le numero : 200, parlez !
Problemes ?
Si vous avez un probleme au chargement de votre serveur asterisk (probleme avec un modules?) Il se peu que vous soyez obliger de desactiver un module, pour X raisons.
Normalement, il ne devrai pas y avoir de probleme, mais au cas ou, voila la methode, pour lancer votre serveur en supprimant certain module qui ne marcherai pas.
Vos modules ce trouve dans le dossier : /usr/lib/asterisk/modules
Editer le fichier : /etc/asterisk/modules.conf
Les modules sont automatiquement charger, a partir du moment, ou il ce trouve dans ce dossier, si le parametre : autoload=yes est bien defini a "yes"
Vous pouvez, cependant, desactiver les modules
dans le contexte [modules] de notre fichier modules.conf
Vous pouvez taper :
noload => cdr_pgsql.so noload => codec_lpc10.so
la fonction noload, evitera le chargement de c'est modules, vous pourrez ainsi demarrer votre serveur, et le faire fonctionner, sans pouvoir utiliser les modules en question, evidement.
Boites Vocale
L'installation d'une boite vocale est assez simple, commencer par editer le fichier /etc/asterisk/voicemail.conf
Modifier les lignes suivantes :
format=wav serveremail=votre@email.fr attach=yes fromstring=VOTRE SOCIETE mailcmd=/usr/sbin/sendmail -t
Definisez ensuite votre Contexte :
[default] 1000 => 9999,Jerome,votre@email.fr
1000 etant le numero de ma boite vocale. (independant du numero de telephone!) 9999 le mot de passe Suivi de mon nom, et mon email sur le quel sera envoyer le fichier attache.
Lors de la reception d'un appel, voila a quoi resemblera notre fichier : extensions.conf
exten => 101,1,Dial(SIP/jerome&SIP/francois,50,tm) exten => 101,2,Voicemail(1000@default) exten => 101,3,Hangup
L'utilisera, ira , apres 50 secondes, automatiquement sur le repondeur numero 1000, du contexte [default]
Comment faire ensuite pour "consulter" ses messages?
C'est tres simple : vous devez creer un numero, sur le quel vous effecturai votre appel, et utiliser la fonction VoiceMailMain()
Exemple du fichier extensions.conf
; numero de la messagerie exten => 222,1,Answer exten => 222,2,VoiceMailMain(1000@default) exten => 222,3,Hangup
Lors de l'appel au numero : 222, votre utilisateur tombera directement sur la boite vocal 1000@default Le mot de passe lui sera demander : et vous accederez ensuite a vos messages.
Autre exemple ? Une horloge parlante :
Ca ne sert pas a grand chose, mais, voici comment faire une horloge parlante
exten => 777,1,Answer exten => 777,2,SayUnixTime(,CET,kM) exten => 777,3,Hangup
Pour terminer, je vous invite reelement a vous documenter d'avantage sur l'ensemble des fonctions possibles sur les deux sites qui pour moi m'ont le plus servi :
Le plus complet, le plus connu, ET incontournable :
http://www.asteriskguru.com/tutorials/
Fax
Sachez egalement qu'il est possible de recevoir et d'envoyer des fax avec Asterisk, malheureusement, et meme si j'ai pu avec beaucoup de mal installer les applications rxfax, et txfax, je n'ai malheureusement pas reussi a optenir un resultat suffisament correct, au niveau de la qualité de reception, surement du a la qualité de ligne wengo. je n'expliquerai donc pas l'installation, relativement longue, tant que je n'aurrai pas reussi a avoir un bon resultat.
Pour ceux qui veulent se lancer, tout de meme, il vous faudra installer :
- eps-1.5
- gcc > 3
- tiff-v3.6.1
- spandsp-0.0.2
- rxfax/txfax
Manager
Asterisk vous permet de prendre son controle, a distance, grace a l'option "manager" Il existe aujourd'hui quelques application permetant de surveiller le serveur, ou envoyer des commandes, grace au PHP, en utilisant les socket, par le port 5038.
Vous devez pour cela, creer un compte utilisateur au manager, et lui donnee certain droit.
[jerome] secret = MonPassword read = system,call,log,verbose,command,agent,user ; all, peu suffir! ;) write = system,call,log,verbose,command,agent,user
Rendez vous sur ce site, pour connaitre l'ensemble des fonctions lié au manager : http://www.voip-info.org/wiki-Asterisk+manager+API
Vos commentaires
Faites moi part de vos commentaires sur le deroulement de votre installation : jerome (at) repie.fr
-- Jerome.pautex 14 jan 2006 à 22:44 (CET) (c) JEROME PAUTEX - www.phplus.fr / www.rentashop.fr

