# TP ASTERISK
## Serveur Asterisk (VoIP)
### Installer Asterisk
```c=
doe@debian:~$ su - root
Mot de passe :
root@debian:~# apt-get install asterisk
```
### Accéder à la console d'Asterisk
```c=
root@debian:~# asterisk -rvvvvvv
...
debian*CLI>
```
```
Quelques commandes :
help : liste des commandes
quit : quitter la console
```
### Créer les comptes sip
#### Sauvegarder (renommer) le fichier pjsip.conf
```c=
root@debian:~# mv /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.origin
```
### Créer les comptes
#### Configuration à effectuer :
Section transport
protocol=udp : protocole de transport à utiliser -> UDP
bind=0.0.0.0 : Le serveur pourra communiquer sur toutes ses adresses réseaux
Section endpoint
context=from-internal : lorsqu'Asterisk recoit un appel, il fait le lien entre l'utilisateur et son numéro à l'aide du fichier /etc/asterisk/extensions.conf contenant le plan de numérotation.
disallow=all : n'autorise aucun codec excepté celui indiqué dans la directive allow
allow=ulaw : autorise le codec ulaw
#### Utilisez un éditeur pour créer (ou modifier) le fichier /etc/asterisk/pjsip.conf. Exemple : nano, ...
```c=
root@debian:~# nano /etc/asterisk/pjsip.conf
```
```c=
root@debian:~# cat /etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
;Templates for the necessary config sections
[endpoint_internal](!)
type=endpoint
context=from-internal
disallow=all
allow=ulaw
language=fr
[auth_userpass](!)
type=auth
auth_type=userpass
[aor_dynamic](!)
type=aor
max_contacts=1
;Definitions for our phones, using the templates above
[alice](endpoint_internal)
auth=alice
aors=alice
[alice](auth_userpass)
password=bonjour; put a strong, unique password here instead
username=alice
[alice](aor_dynamic)
[bob](endpoint_internal)
auth=bob
aors=bob
[bob](auth_userpass)
password=bonjour ; put a strong, unique password here instead
username=bob
[bob](aor_dynamic)
[martin](endpoint_internal)
auth=martin
aors=martin
[martin](auth_userpass)
password=bonjour ; put a strong, unique password here instead
username=martin
[martin](aor_dynamic)
```
### Créer le plan de numérotation
#### Sauvegarder (renommer) le fichier extensions.co
```c=
root@debian:~# mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.origin
```
### Créer le plan de numérotation
#### Configuration à effectuer :
alice a pour numéro 6001
bob a pour numéro 6002
martin a pour numéro 6003
Leur téléphone sonnera pendant 10 secondes puis leur répondeur répondra.
Leur répondeur aura pour numéro 6099.
Syntaxe
```
exten => number,priority,application([parameter[,parameter2...]])
```
**Utilisez un éditeur pour créer (ou modifier) le fichier /etc/asterisk/extensions.conf. Exemple : nano, ...**
```
root@debian:~# nano /etc/asterisk/extensions.conf
```
```c=
root@debian:~# cat /etc/asterisk/extensions.conf
[from-internal]
exten=>6001,1,Dial(PJSIP/alice,10)
exten=>6002,1,Dial(PJSIP/bob,10)
exten=>6003,1,Dial(PJSIP/martin,10) ; Après 10 secondes envoi vers la règle 2
exten=>6099,1,VoiceMailMain() ; 6099 Numéro de téléphone du répondeur
; Règles 2
exten=>6001,2,VoiceMail(6001) ; Appel répondeur compte 6001
exten=>6002,2,VoiceMail(6002) ; Appel répondeur compte 6002
exten=>6003,2,VoiceMail(6003) ; Appel répondeur compte 6003
```
# Configurer la boîte vocale
#### Définir le code d'accès pour chaque boite vocale
**Sauvegarder (renommer) le fichier voicemail.conf**
```
root@debian:~# mv /etc/asterisk/voicemail.conf /etc/asterisk/voicemail.conf.origin
```
#### Effectuer la configuration
**Chaque boîte vocale aurra pour code d'accès par défaut : 1234. Utilisez un éditeur pour créer (ou modifier) le fichier /etc/asterisk/voicemail.conf. Exemple : nano, ...**
```c=
root@debian:~# cat /etc/asterisk/voicemail.conf
[general]
format=wav49|gsm|wav|ulaw
[default]
; Numéro de messagerie => mot de passe d’accès à la messagerie, nom d'utilisateur
6001 => 1234, alice
6002 => 1234, bob
6003 => 1234, martin
```
### Installer le dépôt contenant les sons en français
```c=
root@debian:~# apt-get install asterisk-core-sounds-fr
```
### Indiquez le fichier asterisk.conf d'utiliser la langue définie dans pjsip.conf
```c=
root@debian:~# cp /etc/asterisk/asterisk.conf /etc/asterisk/asterisk.conf.origin
```
#### La ligne ci-dessous doit être décommentée (il faut supprimer le ;) dans le fichier /etc/asterisk/asterisk.conf . Utilisez un éditeur effectuer cette modification dans le fichier /etc/asterisk/asterisk.conf. Exemple : nano, ...
```c=
root@debian:~# cat /etc/asterisk/asterisk.conf | grep languageprefix
languageprefix = yes ; Use the new sound prefix path syntax.
```
### Charger la configuration
```c=
root@debian:~# asterisk -rx "core restart now"
```
### Effectuer les tests de validation
#### Visualiser les ports ouverts
```c=
root@debian:~# ss -nlut | grep -E '5060|State'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 0.0.0.0:5060 0.0.0.0:*
```
### Le protocole SIP qui utilise le port 5060/udp se charge de l'établissement de la communication.
#### Valider l'installation à l'aide de la console
**Lancer la console**
```c=
root@debian:~# asterisk -rvvvvvv
Asterisk
...
Connected to Asterisk ... currently running on debian (pid = 851)
debian*CLI>
```
#### Visualiser les utilisateurs
```c=
debian*CLI> pjsip list aors
Aor: <Aor..............................................> <MaxContact>
==========================================================================================
Aor: alice 1
Aor: bob 1
Aor: martin 1
```
```c=
debian*CLI> pjsip list auths
I/OAuth: <AAuthId/UserName.............................................................>
==========================================================================================
Auth: alice/alice
Auth: bob/bob
Auth: martin/martin
```
### Configurer les postes des utilisateurs
#### Alice est équipée du Softphone microsip sur PC, Bob est équipée de l'application MizuDroid sur Smartphone Android, Martin est équipe d'un téléphone CISCO SPA303.
**Softphone microsip sur PC**
Téléchargez microsip (version portable Lite)
Décompressez-le
Configurez : flèche vers le bas en haut à droite -> Add account ...
### Configurer microsip

#### Remarque : l'adresse IP de mon serveur Asterisk est 192.168.1.34. Il était également possible d'utiliser un nom ou un alias définit dans un serveur DNS si vous en possédez un actif dans votre réseau.
Sur la console Asterisk apparaît l'enregistrement du poste avec l'adresse IP du PC sur lequel a été faite l'installation :
```c=
-- Added contact 'sip:alice@192.168.1.201:49637;ob' to AOR 'alice' with expiration of 300 seconds
== Endpoint alice is now Reachable
```
Remarque : pour que l'application fonctionne, il faut qu'elle est l'autorisation d'accéder au micro du PC. Pour activer cette autorisation : Paramètres > Confidentialité > Microphone > Activé
```
URLL https://ressourcesinformatiques.com/article.php?article=612i
```
# Groupement d'appel
```
nano extensions.conf
```

```c=
exten => 2222,1,Dial(PJSIP/alice,10)
same => n,Dial(PJSIP/bob,10)
same => n,Dial(PJSIP/martin,10)
```
**L’appel vers le 2222 fera toujours sonner le poste alice puis le poste bob et le poste martin**
# Transfert/Renvoi d'appel
Dans extensions.conf
La commande Dial doit contenir des options supplémentaires
– le paramètre « t » autorise la fonction transfert pour l’appelé
– le paramètre « T » autorise la fonction transfert pour l’appelant.
– le paramètre « x » autorise la fonction enregistrement pour l’appelé
– le paramètre « X » autorise la fonction enregistrement pour l’appelant.
– le paramètre « k » autorise la fonction parcage pour l’appelé
– le paramètre « K » autorise la fonction parcage pour l’appela
#### Pour le transfert d’appel, on définit les paramètres
1)suivants dans le contexte [general] du fichier **features.conf**
- **transferdigittimeout** : Permet de définir le nombre de secondes à
attendre entre les chiffres afin de transférer l’appel.
- **xfersound** permet d’indiquer par un son la réussite du transfert
supervisé d’appel.
- **Xferfailsound** est à l’inverse la variable qui permet d’indiquer l’échec
d’un transfert.

2) On trouve aussi dans ce fichier
– un context [featuremap] contenant deux variables utiles:
• Blindxfer permet de définir les touches pressées pour initialiser
un transfert « aveugle » sachant qu’ Astérisk supporte les
transferts aveugles avec les protocoles H323 et SIP.
• Atxfer qui permet de définir les touches pressées pour initialiser
un transfert supervisé
3)Dans le fichier extensions.conf, mettre l'argument tT
obligatoirement en 2ème position (après une durée)
```c=
exten => 6001,1,Dial(PJSIP/alice,20,Tt)
```
# Interception
Dans le fichier **pjsip.conf**, rajouter la ligne suivante à chaque abonné
faisant partie d'un même groupe dans l’extension type=endpoint
il faut ajouter dans le fichier **pjsip.conf**
```c=
call_group=1 mettre les utilisateur qui doivent s'appeler sur le meme groupe
pickup_group=1 celui qui intercept l'appel
```

pareille pour martin

bob intercepte l'appel entre alice et bob (faut faire *8 sur le poste de bob)
# Calendrier
Du lundi au vendredi n'importe quelle heure et n'importe quelle jour entre 10:00-12h59 si on appelle le 526 on recoi idriss sinon on recoi alice
dans le fichiers extension.conf mettre les lignes suivantes:
```c=
exten => 526,1,GotoIfTime(10:00-12:59,mon-fri,*,*?closed,s,1)
same => n,Dial(PJSIP/alice)
[closed]
exten => s,1,Dial(PJSIP/idriss)
```

# Liste d'attente

