1

UNIVERSITE CHEIKH ANTA DIOP DE DAKAR
FACULTE DES SCIENCES ET TECHNIQUES
DEPARTEMENT DE MATHEMATIQUES-INFORMATIQUE




CENTRE DE RESSOURCES EN TIC : PHASE II

RECHERCHE-DEVELOPPEMENT D’INTERFACES
HOMME-MACHINE BASEES SUR LES
TECHNOLOGIES SANS FIL ET LES LOGICIELS
LIBRES

Projet financé par Connectivity Africa / Exécuté par le CRDI :






Mouhamed D. Camara, Ahmad Khoureich Ka, Bassirou Kasse, Dame Samb et
Fatou Sylla.





Fevrier 2006




2


INSTALLATION IT CONIIGLRATION ÐIS
ÐIIIIRINTIS IONCTIONNALITIS ÐI
ASTIRISK


INTRODUCTION :
Astrisk est une plate-Iorme ouverte et OpenSource de telephonie sur IP. Elle permet de
concevoir des solutions complete de telephonie integrant aussi bien la telephonie
traditionnelle en analogique ou numerique que la telephonie sur IP avec les protocoles
MGCP, SIP et un protocole inter-PABX proprietaire : IAX.
On trouve de nombreux document sur Internet concernant Asterisk et comment le conIigurer,
mais nous avons decide de vous proposer une mise en oeuvre simpliIie et prenant les concepts
a la base aIin de Iaciliter le comprehension de la plate-Iorme. Nous commençons par ce billet
sur la conIiguration de base autorisant l`appel entre plusieurs postes localises sur le même
PABX.
I-INSTALLATION DU PBX ASTERISK:

Telecharger la derniere version des codes source Asterisk a partir du site Itp.digium.com/pub.
Ces Iichiers sont au Iormat compresse tar.gz.
Vous aurez besoin des packages suivant :
asterisk-1.2.0.tar.gz
asterisk-addons-1.2.0.tar.gz
asterisk-sounds-1.2.0.tar.gz
libpri-1.2.0.tar.gz
zaptel-1.2.0.tar.gz

Deplacer et compiler les sources dans le repertoire /usr/src :
# cd /usr/src/
# tar zxvI zaptel-1.2.0.tar.gz
# tar zxvI libpri-1.2.0.tar.gz
# tar zxvI asterisk-1.2.0.tar.gz
# tar zxvI asterisk-sounds-1.2.0.tar.gz

Apres decompression vous aurez les repertoires suivants : zaptel, libpri, asterisk,
asterisk-sounds.

1-Compilation de zaptel :




3
Si vous n`avez pas de carte digium et voulez utiliser des Ionctionnalites de Asterisk comme
Music On Hold vous devez modiIier le MakeIile dans le repertoire de zaptel : a la ligne 82
enlever le diese devant ztdummy.

# cd /usr/src/zaptel-version
# make clean
# make
# make install

2-Compilation libpri:

Allez dans le repertoire libpri
# cd /usr/src/libpri-1.2.0

Executer les commandes:
# make clean
# make
# make install

3-Compilation de asterisk :

Allez dans le repertoire de Asterisk
# cd /usr/src/asterisk-1.2.0

Executer les commandes:
# make clean
# make
# make install
# make samples

3-Installation des modules additionnels : le package asterisk-sounds

# cd /usr/src/asterisk-sounds
# make install

4-Chargement des modules zaptel :

Le module zaptel doit être charger avant tout autre module. Donc vous devez ajouter quelques
instructions dans votre Iichier rules : /etc/udev/rules d/50-udev.rules. Ajouter les lignes
suivantes a la Iin du Iichier.
# Section Ior zaptel device
KERNEL÷"zapctl", NAME÷"zap/ctl"
KERNEL÷"zaptimer", NAME÷"zap/timer"
KERNEL÷"zapchannel", NAME÷"zap/channel"
KERNEL÷"zappseudo", NAME÷"zap/pseudo"
KERNEL÷"zap|0-9|*", NAME÷"zap/°n"

Pour le chargement automatique de zaptel :
# modprobe zaptel



4

5-Chargement du module ztdummy :

Le module ztdummy est charge apres zaptel. Pour automatiser son chargement executer :
# modprobe ztdummy


6-Les librairies libpri :

Les librairies libpri n`ont pas besoin d`être chargee. C`est a la compilation de Asterisk que ce
dernier cherche ces librairies pour sa propre conIiguration.

7-Configuration de sip.conf et extensions.conf :

Asterisk doit aussi reconnaître vos soItphones pour cela les Iichiers sip.conI et
extensions.conI doivent etre conIigurer

/etc/asteisk/sip.conI
|Phone1|
type ÷ Iriend
host ÷ dynamic
deIaultip ÷ adresse-ip-du-server-asterisk
dtmImode ÷ rIc2833
context ÷ sip
callerid ÷ "Phone1"·numero_du_telephone1~

|Phone2|
type ÷ Iriend
host ÷ dynamic
deIaultip ÷ adresse-ip-du-server-asterisk
dtmImode ÷ rIc2833
context ÷ sip
callerid ÷ "Phone2" · numero_du_telephone2 ~

Puis dans le Iichier /etc/asterisk/extensions.conI ajoutez les lignes suivantes :
Exten ÷~ numero_du_telephone1,1,Dial(SIP/Phone1,20,tr)
exten ÷~ numero_du_telephone2,1,Dial(SIP/Phone2,20,tr)

8-Démarrage de Asterisk :

Executer les commandes :
# asterisk vvvvc
ou :
# /usr/sbin/asterisk vvvc

Pour Asterisk c`est Iini. Il Iaut maintenant conIigurer vos soItphones pour apres pouvoir Iaire
des appels.





5
II-CONFIGURATION DES SOFTPHONES :



Vous pouvez telecharger les soItphones a partir du site de xten.
Sur le panneau de conIiguration du soItphone mettez les champs comme suit :
Enable: yes
Display Name: phone1
User Name: phone1
Domain/Realm: adresse ip du server asterisk
SIP Proxy: adresse ip du server asterisk
Send Internal IP: never
Register: Always

Vous pouvez commencer maintenant a Iaire des appels.

III-CONFIGURATIONS DES FONCTIONNALITES DE ASTERISK :

Il est possible d`emettre des appels avec notre conIiguration actuelle mais nous ne nous
arrêterons pas en si bon chemin, en eIIet asterisk dispose de nombreuses Ionctionnalites mais
qui necessitent une conIiguration pour etre mise a proIit.

1-Configuration d`un poste de téléphone :

Extensions.conI
On cree un context ou on va rediriger les appels (|acacia|)
|acacia|
Extex÷~9999,1,Dial(SIP/Phone1,60,tr)
Exten÷~9999,n,VoiceMail(999¸mb¸acacia)
Exten÷~9999,n,PlayBack(vm-goodgye)
Exten÷~9999,n,Wait(2)



6
Exten÷~9999,n,HangUp

Si quelqu`un appelle le poste Phopne1 de numero 9999, a l`arriver de l`appel nous avons :
-le telephone sonne
-s il sonne pendant 60 minutes et que personne ne decroche
-le message vocal est active (999¸mb¸acacia)
-un message est envoye vers l`hote (vm-goodgye)
-on attend 2 minutes
-et on raccroche

Exten÷~602,1,VoicemailMain(999)
Exten÷~602,n,HangUp

-si l`utilisateur de Phone1 desire ecouter son message vocal ,il compose le numero 600

Voicemail.conI

|mb¸acacia|
999÷~9999,Phone1,Phone1¸yahoo.Ir

-si l`utilisateur de Phone1 desire ecouter son message vocal, il compose le numero 600
-on lui demande de saisir le mot de passe (9999) pour ecouter le message

2-Redirectionner un appel vers un poste libre jusqu'à ce que l`on trouve
un poste libre :

Extensions.conI
|acacia|
Exten÷~600,1, Dial(SIP/Phone1,30,tr)
Exten÷~600,n, Dial(SIP/Phone2,30,tr)
Exten÷~600,n, Dial(SIP/Phone3,30,tr)
Exten÷~600,n, Dial(SIP/Phone4,30,tr)
Exten÷~600,n, Goto(acacia,600,1)


3-Transfert d`un appel vers un serveur de renseignement :


Extensions.conI
|acacia|
Exten÷~604,1, Goto(departement,s,1) //appel est envoye vers l`extension
|departement| de priorite 1

|departement|
Exten÷~s,1,Answer
Exten÷~s,n,Background(vm-acceuil) // appuyiez 1 pour poste1, 2 pour poste2,
// 3 poste 3, et 4 pour quitter
Exten÷~s,n,WaitExten
Exten÷~1,1, Goto(acacia,poste1,1) // appel renvoye vers poste1
Exten÷~2,1, Goto(acacia,poste2,1) // appel renvoye vers poste2



7
Exten÷~3,1, Goto(acacia,poste3,1) // appel renvoye vers poste3
Exten÷~4,1, PlayBack(vm-goodbye) // on quite
Exten÷~4,n,Hangup

4-Enregistrement de fichier son :

Extensions.conI
|acacia|
Exten÷~605,1,Goto(recordsounds,s,1) // appel est envoye vers extension
|recordsounds| de priorite 1

|recordsounds|
Exten÷~s,1,Wait(2)
Exten÷~s,n,PlayBack(vm-bienvenu)
Exten÷~s,n,Record(/home/acacia-sounds/essai.gsm) // pour Valier appuyer sur #
Exten÷~s,n, Wait(2)
Exten÷~s,n, ,PlayBack(/home/acacia-sounds/essai)
Exten÷~s,n, PlayBack(vm-option-validation) // 1 pour memoriser ,2 pour modiIier
Exten÷~s,n,WaitExten
Exten÷~1,1, Goto(recordsounds,s,1) // on retourne a la place de depart
Exten÷~2,1,PlayBack(vm-bye) // l`enregistrement est memoriser
Exten÷~2,n, Hangup

5-La facturation:

La Iacturation sous asterisk consiste a enregistrer un certain nombre de parametres lors de
l'etablissement d'une connexion comme par exemple l'appelant,l'appele,la duree de l'appel
etc...
Pour se Iaire nous avons decide de creer une base de donnees postgres, de creer une table sous
postgres, et ainsi a chaque appel on insere les diverses inIormations dans la base. Tout
d'abord nous avons commence a installer postgres en suivant la procedure sous dessus

5-1-Procedure d'installation de postgres:

Creer un repertoire pour le server
mkdir /usr/src/serverpostgres

Creer un utilisateur
C'est avec ce compte utilisateurX que nous utiliserons PostgreSQL.
adduser utilisateurX
passwd utilisateurX

Copier les Iichiers sources
cp /mnt/cdrom/sources/* /usr/src/serverpostgres

On commence par decompresser les sources de PostgreSQL
cd /usr/src/serverpostgres
tar xvzI postgresql-8.1.1.2.tar.gz




8
On retourne vers le repertoire racine de PostgreSQL. On conIigure, puis on compile
PostgreSQL
cd ..
LDFLAGS÷-lstdc¹¹ ./conIigure --with-libs÷/usr/local/lib --with-includes÷/usr/local/include \
--enable-multibyte --with-CXX --preIix÷/usr --sysconIdir÷/etc
make

On installe PostgreSQL
cd /usr/src/serverpostgres/postgresql-8.1.1.2
make install

Initialisation de PostgreSQL
Cette section contrairement aux autres sections doit avoir lieu en etant utilisateur normal
utilisateurX dans le terminal shell utilise du root.

Initialisation et test de creation d'une base
su utilisateurX
initdb -A trust -D /home/utilisateurX/pgdata
pg¸ctl -D /home/utilisateurX/pgdata -o -i start
createdb --encoding÷SQL¸ASCII ma¸base
createlang plpgsql ma¸base

Pour Demarrer/Arrêter le serveur PostgreSQL
Tout demarrage doit être eIIectuer sous la session (terminal) de l'utilisateurX. On utilisera
pour ce Iaire la commande

Pour le demarrage:
su utilisateurX
pg¸ctl -D /home/utilisateurX/pgdata -o -i start

Pour l'arrêt:
su utilisateurX
pg¸ctl -D /home/utilisateurX/pgdata -o -i stop

Apres avoir demarrer le serveur et creer la base de donnees qui dans notre cas s'appelle
ma¸base, on entre dans la base avec la commande:
psql ma¸base

Creer la table dans la base de donnees
C'est dans cette table qu'on va inserer les diverses inIormations
CREATE TABLE cdr (
calldate timestamp with time zone NOT NULL deIault now(),
clid varchar(80) NOT NULL deIault '',
src varchar(80) NOT NULL deIault '',
dst varchar(80) NOT NULL deIault '',
dcontext varchar(80) NOT NULL deIault '',
channel varchar(80) NOT NULL deIault '',
dstchannel varchar(80) NOT NULL deIault '',
lastapp varchar(80) NOT NULL deIault '',
lastdata varchar(80) NOT NULL deIault '',



9
duration bigint NOT NULL deIault '0',
billsec bigint NOT NULL deIault '0',
disposition varchar(45) NOT NULL deIault '',
amaIlags bigint NOT NULL deIault '0',
accountcode varchar(20) NOT NULL deIault '',
uniqueid varchar(32) NOT NULL deIault '',
userIield varchar(255) NOT NULL deIault ''
);

Creer un utilisateur dans la base
create user Iatou with password 'Iatou';
Apres on donne a cette utilisateur d'inserer dans la table
grant insert on cdr to Iatou;

5-2-Configuration du cdr:

La conIiguration du cdr(call details records) permet de Iaire l'enregistrement des inIormations
dans la base de donnees. Ainsi on va Iaire pointer le cdr notre base de donnees pour pouvoir
Iaire les enregistrements.

Compiler cdr¸pgsql.so
Pour se Iaire il suIIit d'editer le Iichier /cdr/MakeIile et ajouter la ligne
MODS÷cdr¸pgsql.so cdr¸csv.so cdr¸manager.so


Editer le Iichier de conIiguration
cd /etc/asterisk
vi cdr¸pgsql.conI

|global|
hostname÷asterisk
port÷5432
dbname÷ma¸base
password÷Iatou
user÷Iatou
table÷cdr

Et enIin on Iait un reload de asterisk,et la conIiguration est terminee.

6-Filtrage des appels:

Apres la conIiguration d'asterisk, une politique d'attribution des numeros doit être mise en
place. Cette politique doit etre accompagnee d'un processus de Iiltrage des appels. En eIIet
dans une societe tout le monde ne dois pas avoir le droit d'appeler tout monde. Ainsi dans
notre cas on va interdire a tous les numeros commençant par 4 d'appeler le 2222

Procedure:
cd /etc/asterisk
vi extensions.conI



10
dans notre context acacia on met
exten÷~2222,1,GotoII($|"$¦CALLERIDNUM:0:1}" ÷ "4"|?reIus,s,1:departement,s,1)
ainsi tout numero commençant par 4 qui appelle le 2222 est renvoye au context reIus qui
deIinit ci dessous
|reIus|
exten÷~s,1,Ringing
exten÷~s,n,Wait(2)
exten÷~s,n,PlayBack(/home/acacia-sounds/reIus¸acces)

Ainsi cette politique de Iiltrage peut être generalisee et etablir d'une maniere general qui a
droit ou non d'appeler tel numero.

CONCLUSION :
Voici un exemple tres simple de telephonie sur IP. La preuve est Iacilement Iaite que l`on
peut rapidement mettre en oeuvre un PABX IP sur l`excellente base d`Asterisk, sans
connaissances tres approIondies.

Sign up to vote on this title
UsefulNot useful