# TP de téléphonie
## Installation d'asterisk
### Récupérer asterisk
wget @ip ou svn <checkout | update | info | status>
mkdir -p /usr/src/asterisk
cd /usr/src/asterisk
su
## Commande Asterisk
En étant root:
asterisk -rvvvvvv \\ Pour accéder au CLI du serveur asterisk
? \\ Liste les commande
reload \\ Recharge la conf
pjsip show endpoints \\ Montre les abbonnés Pjsip
## Exemple de Config PJSIP.conf et extensions.conf
pjsip.conf:
;Template commun pour les endpoints
[endpoint-template](!)
type=endpoint
context = default
disallow=all
allow=ulaw
transport=udptrans
;Template commun pour les authentifications
[auth-template](!)
type=auth
auth_type=userpass
;Template commun pour les aors
[aor-template](!)
type=aor
max_contacts=1
[2000](endpoint-template)
auth=auth2000
aors=2000
[2001](endpoint-template)
auth=auth2001
aors=2001
[2002](endpoint-template)
auth=auth2002
aors=2002
[auth2000](auth-template)
username=2000
password=2000
[auth2001](auth-template)
username=2001
password=2001
[auth2002](auth-template)
username=2002
password=2002
[2000](aor-template)
[2001](aor-template)
[2002](aor-template)
extension.conf:
exten => _200[0-7],Dial(PJSIP/200${EXTEN:7}) , déclaration des numéros interne
exten => 15,1,NoOp(Appel vers le Samu)
same => n,Dial(PJSIP/${EXTEN}@mon_trunk)
same => n,Hangup()
## Paramétrage Tel Thomson
config poste sip via navigateur
192.168.21.44/admin/html
mdp admin: 784518
id: administrator
## Faire une Interception
Pour paramétré les interceptions il faute attribué des Call group et des Pickup group au différents endpoints dans le pjsip.conf:
[6001]
Call_group=1
Pickup_group=1
[6002]
Call_group=1
Dans cette configuration 6001 peut intercepté 6002 mais pas l'inverse.
Il faut aussi dé-commenter la variable pickupexten dans features.conf.
## BVI
Pour paramétrer une boite Vocal il faut:
* Déclarer les numéros dans un contexte dans le fichier Voicemail.conf au format => "num => mdp, nom, email, email pager, options"
***
* Il faut ensuite ajouté le voicemail au numéros paramétré dans extensions.conf: exten => 2000,1,Dial(PJSIP/2000)
same => n,VoiceMail(2000@default,u)
same=> n,Hangup()
exten => 2001,1,Dial(PJSIP/2001)
same => n,VoiceMail(2001@default,u)
same=> n,Hangup()
*Dans la déclaration de la boite vocale @default correspond au context déclaré dans Voicemail.conf*
***
* Pour finir il faut définir un numéro de contact pour que les utilisateurs puisse contacter la boite vocal:
exten => 7000,1,VoiceMailMain(${CALLERID(num)}@default)
*Dans cette configuration les utilisateur devrons appelé 7000 pour écouter leurs messages*
## Faire un groupement
Les groupements d'appels peuvent être configurer dans extensions.conf ou être déclaré sous forme de file d'attente dans queues.conf.
**Avec extensions.conf:**
Faire sonner les deux téléphone en même temps:
exten => 30,1,Dial(PJSIP/2000&PJISP/2001)
same => n,Hangup()
Faire sonner les numéros chacun leurs tours:
exten => 100,1,Dial(PJSIP/2000,15) ; Appelle 2000 pendant 15 secondes
same => n,Dial(PJSIP/2001,15) ; Si 2000 ne répond pas, appelle 2001
same => n,Dial(PJSIP/2002,15) ; Si 2001 ne répond pas, appelle 2002
same => n,Hangup()
Boucle d'appel qui fait sonner différents numéros en boucle chacun leurs tour pendant un nombre de tours définie:
exten => 3000,1,NoOp(Boucle pour le groupement 3000 soit 2000 et 2001)
same => n,Set(LOOPCOUNT=0)
same => n(LOOPSTART),GotoIf($[${LOOPCOUNT} > 5]?hangup)
same => n,Dial(PJSIP/2000,15)
same => n,Dial(PJSIP/2001,15)
same => n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
same => n,Goto(LOOPSTART)
***
**Avec queues.conf:**
Déclaration d'une file d'attente:
[general]
persistentmembers = yes ; Sauvegarde les membres dynamiques dans un fichier
autofill = yes ; Distribue les appels à plusieurs agents simultanément
updatecdr = no ; Ne pas mettre à jour les CDR avec les détails de la file
[my_queue] ; Nom de la file d'attente
musicclass = default ; Musique en attente (définie dans musiconhold.conf)
strategy = rrmemory ; Stratégie de distribution (Round-Robin avec mémoire)
timeout = 15 ; Temps d'attente maximum pour un agent avant de passer au suivant
retry = 5 ; Temps d'attente avant de rappeler un agent après un échec
maxlen = 5 ; Nombre maximal d'appels en attente
joinempty = yes ; Autorise les appels même si aucun agent n'est disponible
leavewhenempty = no ; Garde les appels en attente même si aucun agent n'est disponible
ringinuse = no ; Ne sonne pas les agents déjà en communication
announce = queue-thankyou ; Annonce à jouer avant de joindre un agent
periodic-announce = queue-periodic-announce ; Annonce périodique
periodic-announce-frequency = 30 ; Intervalle en secondes pour l'annonce périodique
memberdelay = 0 ; Délai avant de joindre un agent après l'annonce
; Membres statiques (agents fixes)
member => PJSIP/2000 ; Ajoute l'agent 2000 à la file
member => PJSIP/2001 ; Ajoute l'agent 2001 à la file
***
Différent paramètre pour la strategy:
ringall : Tous les agents sonnent en même temps.
rrmemory : Appelle les agents en boucle, en reprenant à l'agent suivant après chaque appel.
rrordered : Appelle les agents en boucle, mais toujours dans le même ordre.
leastrecent : Appelle l'agent qui n'a pas pris d'appel depuis le plus longtemps.
fewestcalls : Appelle l'agent ayant pris le moins d'appels.
random : Appelle un agent au hasard.
***
Ajout de la file d'attente dans extentions.conf:
exten => 100,1,Answer() ; Répond à l'appel
same => n,Queue(my_queue) ; Place l'appelant dans la file "my_queue"
same => n,Hangup() ; Termine l'appel si la file est vide
## Heures d'ouverture
exten => 600,1,GotoIfTime(11:00-11:50,mon-fri,*,*?open,s,1) ; Renvoie vers le context open si les condition sont remplie
same => n,Goto(closed,s,1) ;Renvoie vers le context Closed si les conditions précédentes ne sont pas valides
[open]
exten => s,1,Dial(PJSIP/6001,20)
same => Hangup()
[closed]
exten => s,1,agi(googletts.agi,"L'entreprise est fermé pour le moment",fr,any)
same => n,MusicOnHold(pers1) ;Le profil pers1 est à définir dans le fichier MusicOnHold.conf
same => n,Hangup()
## SVI
- Installation des dépendances de player mpg
*apt-get install perl libwww-perl sox mpg123*
- Installation de l’application googletts (script pour mettre en place la
synthèse vocale)
*/var/lib/asterisk/agi-bin/ ou /usr/share/asterisk/agi-bin/*
- Selon le type d’installation (manuelle premier cas ou automatique par apt-get
install asterisk)
*wget https://raw.github.com/zaf/asterisk-googletts/master/googletts.agi*
- chmod +x googletts.agi ; "permet de rendre l’application exécutable par asterisk"
***
Paramétrage d'une SVI dans extensions.conf:
exten => 500,1,Answer()
same => n,agi(googletts.agi,"Salut !",fr,any)
same =>n,agi(googletts.agi,"Je vais bientot te répondre.",fr,any)
same =>n,agi(googletts.agi,"appuie sur 1 pour joindre le 6001",fr,any)
same =>n,agi(googletts.agi,"appuie sur 2 pour joindre le 6002",fr,any)
same => n,agi(googletts.agi,"Faite votre choix",fr,any)
same =>n,WaitExten(10)
exten => 1,1, Goto(6001,1)
exten => 2,1,Goto(6002,1)
exten =>_[3-8#],1,Goto(500,5)
exten => t,1,Goto(500,5)
exten => i,1,Goto(500,5)
## Musique d'attente
Exemple de config d'un profil de musique:
dans MusicOnHold.conf
[default]
mode=files
directory=moh
Set(CHANNEL(musicclass)=pers1)
[pers1]
mode=files
directory=/var/lib/asterisk/moh/pers1
sort=random