Vous êtes sur la page 1sur 4

Configuration/voip Trac ResEl

https://trac.resel.fr/wiki/Configuration/voip

Mise en place d'un service de tlphonie IP sur le campus de Rennes


Introduction
Les chambres et studios du campus de Telecom Bretagne Rennes n'offrent pas de service de tlphonie fixe comme c'est le cas Brest. De ce constat a dbut un projet la voip Rennes ! Utilisation d'OVH et de son service voip pour obtenir un numro joingnable depuis l'extrieur.

Configuration de la vm
On a install notre petit serveur pour la voip dans une vm sur kwak, Olaf a nomm luckyluke. Cette vm devait pouvoir aller sur le vlan 168, vlan disi particuliers pour que la voip passe, (on a eu des soucis avec l'ancienne configuration). De plus luckyluke a une adresse ip publique. ( dtailler)

Configuration d'asterisk
Les fichier de configuration se trouve dans le dossier /etc/asterisk/. - fichier sip.conf : contient les information des differents comptes utilisateurs, et de nos infos vis vis du compte ovh. - fichier extensions.conf : contient le dial plan (ou va un appel quand on compose quoi) sip.conf Nous avons donc crer un fichier sip.conf pour asterisk, avec les informations propres ovh : le fichier est le suivant. On commence par les dfintions gnrales : [general] autofallthrough=yes context=default port=5060 qualify=yes externip=192.44.77.82 srvlookup=yes register=>0033974533604:passovh:0033974533604@sip.ovh.net/1000 ;

On dit donc asterisk de s'enregistrer auprs d'ovh avec notre compte, et que les appels entrants doivent tre rout vers le numro 1000 (qui sera dfinit dans notre dialplan). Ainsi ds qu'un appel entrant arrive vers 0974533604 il est rerout en local vers le numro 1000 qui correspondra notre standard (cf la suite). On dfinit ici l'ordre de prfrence des codecs pour la ngociation sip : disallow=all allow=g729 allow=g726 allow=alaw ;allow=ilbc allow=ulaw allow=gsm g729 sera donc utiliser si le client dispose de ce codec, sinon a sera g726, et ainsi de suite.. On passe alors la dfintion des diffrents compte. Remarquons qu'a terme la gestion des comptes utilisateurs pourra tre fait dans une base de donne mysql ou mme grace au serveur ldap ( creuser). ;compte user1

1 sur 4

03/10/2011 10:23

Configuration/voip Trac ResEl

https://trac.resel.fr/wiki/Configuration/voip

[user1] language=fr type=friend username=user1name secret=**** host=dynamic dtmfmode=rfc2833 context=resel nat=no allow=all canreinvite=no Les utilisateurs ainsi rajout seront dans le contexte resel au niveau du dialplan, c'est dire que ds qu'ils composeront un numro, asterisk regardera dans le fichier extenstions.conf le contexte resel et seulement lui, pour faire aboutir ou pas l'appel. On dfinit de la mme faon les diffrents utilisateurs (remarquons que pour l'instant aucun numro de ne leur est associ. ( il existe des astuces pour crer des template et ne pas avoir retaper l'ensemble des infos chaque utilisateurs nous dtaillerons ces diffrents point dans une version ultrieure de cette prsentation). On configure maintenant le compte ovh. Le insecure=very, nous permet de dire asterisk que l'utilisateur ovh n'a pas s'identifier auprs de notre asterisk (pas de mot de passe saisir par ovh, pas super scuris tout a, mais bon pour l'instant c'est ce que recommande ovh). Le contexte associ est cette fois fromovh, ainsi lors d'un appel provenant d'ovh (un appel entrant), asterisk regardera le dialplan dans le contexte fromovh, et pas resel, on peut ainsi diffrencier les droits entre les utilisateurs inscrit, et les correspondant nous appelant depuis l'extrieur (tout le monde ne sera par exemple pas autoris appeler un numro vers l'extrieur en passant pas notre serveur, seul les utilisateurs locaux aurront ce droit). [forfait-ovh] type=peer host=sip.ovh.net username=0033974533604 fromuser=0033974533604 secret=**** context=fromovh insecure=very register=>0033974533604:byFfTFTf:0033974533604@sip.ovh.net/1000 ; on fait le register, mais a a dj t fait dans global, on peut sans doute virer voir. Fichier extensions.conf Interessons nous maintenant au fichier extensions.conf qui contient le plan d'appel de notre serveur. On peut vraiment s'amuser avec ce fichier, et raliser des applications marrante. Ca serait chouette de faire un petit concours au sein du resel du meilleur dialplan (pour l'instant on a horloge parlante, standard telephonique, et echo.. et le routage des appels). On va dfinir dans ce fichier les diffrents contexte, les liens entre ces contextes (comment faire pour passer d'un contexte un autre), etc.. Un contexte correspond l'ensemble des actions ralisables en gros. Le premier contexte est le contexte gnral, (tous les contextes hritent de celui ci). [general] static=yes ;writeprotect=no autofallthrough=yes clearglobalvars=no priorityjumping=no Le contexte des utilisateur : resel. On va dfinir le dialplan propre au appels interne, tout ce qu'un utilisateur interne peut faire. On dfinit dans un premier temps ce qui se produit si le numro compos n'est pas un numro appartenant au dialplan et ce contexte, grave l'extension i :

2 sur 4

03/10/2011 10:23

Configuration/voip Trac ResEl

https://trac.resel.fr/wiki/Configuration/voip

[resel] exten => i,1,Playback(jeb4) exten => i,n,Goto(acceuil,s,1) ainsi, si l'utilisateur compose un numro non attribu dans notre dialplan on lui fera cout le son jeb4 dans un premier temps, suite quoi (n pour next) on le redirigera vers l'acceuil (Goto). On dfinit les associations entre numro et utilisateurs (ceux dfinit dans notre sip.conf) ; on joue le son de sonnerie l'appelant exten => 100,1,Ringing ; on attend un peu exten => 100,2,Wait(2) ; on transfre l'appel vers l'appel exten => 100,3,Dial(SIP/user1) ;chambre de user1 exten => 102,1,Ringing exten => 102,2,Wait(2) exten => 102,3,Dial(SIP/user2) ; compte pour l'user2 et ainsi de suite pour les diffrents utilisateurs (encore une fois il doit bien exister un module pour faire a automatiquement partir d'une base de donne). On a dans la suite l'horloge parlante accessible par le numro 1234, ;on commence par faire couter une sonnerie au correspondant, exten => 1234,1,Ringing ;on initialise un compteur qui va nous servir dans la suite, exten => 1234,2,SetVar,"COUNTER=0"; ;on dit asterisk de dcroch exten => 1234,3,Answer ;on dit a asterisk d'attendre 1 seconde aprs avoir dcrocher exten => 1234,4,Wait(1) ;on dit la date + l'heure :D exten => 1234,5,SayUnixTime(,CET,AdBY IM) ;on incrmente notre compteur exten => 1234,6,SetVar,"COUNTER=$[${COUNTER} + 1]"; ; on attend encore une seconde exten => 1234,7,Wait(1) ; si le compteur est infrieur 2 on retourne l'extension 5 (celle ou on dit la d exten => 1234,8,GotoIf,"$[${COUNTER} < 2]?5:9" ; on joue le son aurevoir exten => 1234,9,Playback(vm-goodbye) ; on dit asterisk de raccrocher exten => 1234,10,Hangup ;bon le +1 ne semble pas marcher, il y a un petit souci l rgler, mais l'ide est Le service d'acceuil, en gros ds qu'un utilisateur compose le numro 1000, il est redirig vers le contexte acceuil (cf la suite). exten => 1000,1,Goto(acceuil,s,1) Les lignes suivantes permettent de crer le service d'cho (pratique pour voir si le tel sip est bien rgl) ; test d'cho exten => 500,1,Wait(2) exten => 500,2,Answer exten => 500,3,Playback(echo-test) ; Let them know what's going on exten => 500,n,Echo() ; Do the echo test exten => 500,n,Playback(demo-echodone) ; Let them know it's over Et la partie importante, pour les appels sortants, en effet pour l'instant les utilisteurs dans le contexte resel ne peuvent que joindre les numro 1234, 500, et 1000, ainsi que les autres utilisateurs enregistrs, nous voulons les autoris appeler vers l'extrieur, les numro en 01, 02, 03, 04, 05 (pas de numro payant pour l'instant). On redirige donc les appels commenant

3 sur 4

03/10/2011 10:23

Configuration/voip Trac ResEl

https://trac.resel.fr/wiki/Configuration/voip

par 0 (expression rgulire _0) et suivi par un 1,2,3,4,ou 5 vers ovh, qui traitera l'appel. exten => _0[1-5]XXXXXXXX,1,Dial(SIP/${EXTEN}@forfait-ovh) ; Sur cette ligne allons a

On autorise aussi les utilisateurs appeler le numro du resel (en 09). exten => 0974533604,1,Dial(SIP/${EXTEN}@forfait-ovh)

On dfinit enfin le contexte acceuil : [acceuil] ; attente de 1 seconde exten => s,1,Wait(1) ; asterisk dcroche exten => s,n,Answer ; on dfinit le timeout (ncessaire pour qu'il attende un peu qu'on tape les numro, exten => s,n,Set(TIMEOUT(digit)=5) ; exten => s,n,Set(TIMEOUT(response)=10) ; ; on joue la son jeb3 (fournit par jeb, en anglais mais plus agrable que la voix fr exten => s,n(reject),Playback(jeb3) ; on enregistre le numro saisi dans la variable numero exten => s,n,Read(numero) ; on lit le numro saisi l'utilisateur (avec la charmante voix de l'hotesse). exten => s,n,SayNumber(${numero},f) ; on redirige l'appel vers l'extension allow (oui on peut donner des labels aux exte exten => s,n,GotoIf($[${LEN(${numero})} < 4]?allow:reject) ; (il s'agit de l'extension allow), on redirige l'appel vers le contexte resel (l o exten => s,n(allow),goto(resel,${numero},1) ; on met fin la conversion, l'appel tant dj redirig ailleurs exten => s,n,Hangup

On traite enfin le contexte fromovh, correspondant aux appels entrant, et associez au numro 1000 : [fromovh] ; on joue une sonnerie l'appelant exten => 1000,1,Ringing ; on redirige l'appel vers le contexte acceuil, avec comme extension s, et numro 1, exten => 1000,2,Goto(acceuil,s,1) Amlioration envisageable : intgration du rpondeur, avec envoie de message par mail (simple faire plein d'exemple partout sur le net). Un compteur de temps de communication (plus compliqu). Ajout de musique de mise en relation. Service de rveil, etc.

Cette documention est un dbut (soyez indulgents), je vais essayer de l'augmenter et de l'amliorer.

4 sur 4

03/10/2011 10:23