Asterisk intermédiaire
On trouvera ici une seconde étape pratique dans l’étude d’Asterisk : interactivité, connectivité externe, boites vocales, sécurité du trafic sont au menu de cet exercice.
Ce document fait référence aux chapitres suivants du livre officiel Asterisk: The Definitive Guide, 4th Edition :
-6. Dialplan Basics, 7. Outside Connectivity, 8. Voicemail, 9. Internationalization, 10. Deeper into the Dialplan, 11. Parking, Paging, and Conferencing, 13. Automatic Call Distribution (ACD) Queues, 14. Device States, 15. The Automated Attendant, 17. Interactive Voice Response.
1. Interactivité
Chapitre 6 “Dialplan Basics”
1.1. Rappels et notions sur le Dialplan
Application Dial()
Chapitre 6, Section “Using the Dial() Application”
Définition de paramètres
Variables
Chapitre 6, Section “Using Variables”
- Variables Channel
- Manipulation de variables
- Configurer les variables de Channel
- Sélectionner des caractères à partir des variables
Correspondance de motifs d’appel
Chapitre 6, Section “Pattern Matching”
Motifs :
-
_
: définit un pattern -
X
: 0 à 9 -
N
: 2 à 9 -
Z
: 1 à 9 -
.
: wilcard
Directive Include
Chapitre 6, Section “Include”
Notion de “Classes de service”
appels-internationaux
appels-nationaux
appels-internes
services-internes
...
Applications Goto, Background, WaitExten
Chapitre 6, section “The Goto(), Background(), and WaitExten() Applications”
- Goto Application Priority Labels
- Background WaitExten Applications
- Record Application
- SayDigits SayNumber SayAlpha SayPhonetic Applications
- Creating a Simple IVR Menu
- Handling Special Extensions
1.2. Service d’enregistrement audio et serveur interactif
Chapitre 15 “The Automated Attendant”
Scénario proposé : service d’enregistrement de fichiers audio notés XX
.wav (en deux chiffres). On propose ici d’encoder le message 01
qui sera utilisé sur le serveur interactif.
- Création d’un service d’enregistrement audio (numéro
_71XX
) - Création d’un service de rejeu de fichier (numéro
_72XX
) - Mise en œuvre d’un prototype de serveur interactif
;extensions.conf adapté
;service d’enregistrement audio (71XX) et rejeu du fichier audio (72XX)
[appels-internes]
exten=>_230X,1,Dial(PJSIP/telephone${EXTEN:3})
exten=>201,1,GoTo(testmenu,start,1)
include=>recplay
[recplay]
exten => _71XX,1,answer()
same => n,Record(en/${EXTEN:2}.ulaw,,10,y)
same => n,Playback(${EXTEN:2})
same => n,Hangup()
exten => _72XX,1,answer()
same => n,Playback(${EXTEN:2})
same => n,Hangup()
[testmenu]
exten => start,1,Answer()
same => n,Background(01)
same => n,WaitExten(10)
exten => 1,1,Dial(PJSIP/telephone1,10)
same => n,Playback(vm-nobodyavail)
same => n,Hangup()
exten => i,1,Playback(pbx-invalid)
same => n,Goto(testmenu,start,1)
exten => t,1,Playback(vm-goodbye)
same => n,Hangup()
2. Boites vocales
Chapitre 8 “Voicemail”
2.1. NTP/SMTP
Sous Debian/Ubuntu :
apt-get install ntpdate
ntpdate be.pool.ntp.org
dpkg-reconfigure tzdata
Configuration adéquate du serveur SMTP.
2.2. Configuration
Commandes :
mv /etc/asterisk/voicemail.conf /etc/asterisk/voicemail.conf.old
nano /etc/asterisk/voicemail.conf
; voicemail.conf
[general]
format=wav
serveremail=no-reply@raspbx
attach=yes
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
emaildateformat=%A, %B %d, %Y at %r
pagerdateformat=%A, %B %d, %Y at %r
sendvoicemail=yes ; Allow the user to compose and send a voicemail while inside
[zonemessages]
european=Europe/Brussels|'vm-received' a d b 'digits/at' HM
[default]
2301 => 1111,user1,user1@user1.be
2302 => 1111,user2,user2@user2.be
2.3. Extensions.conf / Plan d’appel
;extensions.conf adapté
;*98 pour atteindre le menu voicemail
[appels-internes]
include=>vm-menu
[vm-menu]
exten => *98,1,VoicemailMain()
exten=>2301,1,Dial(PJSIP/telephone1,10)
same => n,VoiceMail(2301@default,u)
exten=>2302,1,Dial(PJSIP/telephone2,10)
same => n,VoiceMail(2302@default,u)
2.4. Commandes
*CLI>voicemail reload
*CLI>dialplan reload
2.5. Tests à partir des téléphones
3. Connectivité externe
Chapitre 7 “Outside Connectivity”
3.1. Configuration du Trunk
;sip.conf adapté
[general]
register => ACCOUNT_NUMBER:SIP_PASSWORD@sip.de.anveo.com:5010
context=unauthenticated ; default context for incoming calls
allowguest=no ; disable unauthenticated calls
srvlookup=no ; disabled DNS SRV record lookup on outbound calls
[anveo]
type=friend
host=sip.de.anveo.com
port=5010
username= ACCOUNT_NUMBER
secret= SIP_PASSWORD
insecure=port,invite
disallow=all
allow=ulaw
context=from-anveo
Avec PJSIP, on fera référence au wiki res_pjsip Configuration Examples mais surtout à PJSIP Configuration Wizard et au fichier d’exemple des sources. Le type wizard facilite les configurations de scénarios communs.
; pjsip.conf
[anveo]
type = wizard
sends_auth = yes
sends_registrations = yes
transport = ipv4
remote_hosts = sip.de.anveo.com:5010
outbound_auth/username = ACCOUNT_NUMBER
outbound_auth/password = SIP_PASSWORD
endpoint/allow = ulaw
endpoint/context = from-anveo
3.2. Route sortante
;extensions.conf adapté
[appels-nationaux]
include => appels-internes
include => appels-fixes-be
include => appels-mobiles-be
[appels-fixes-be]
exten => _0XXXXXXXX,1,Set(CALLERID(number)=32123456789)
same => n,Dial(PJSIP/anveo/${EXTEN})
[appels-mobiles-be]
exten => _0XXXXXXXXX,1,Set(CALLERID(number)=32123456789)
same => n,Dial(PJSIP/anveo/${EXTEN})
;sip.conf adapté
[telephones](!)
context=appels-nationaux
3.3. Route entrante
[from-anveo]
exten => 3212345679,1,Dial(SIP/telephone1,5)
same => n,Goto(appels-internes,1234,1)
3.4 Simplification wizard de pjsip.conf
Voir PJSIP Configuration Wizard et le fichier d’exemple des sources :
[telephones](!)
type = wizard
accepts_auth = yes
accepts_registrations = yes
transport = ipv4
endpoint/allow = ulaw
endpoint/context = default
[telephone1](telephones)
inbound_auth/username = telephone1
inbound_auth/password = 1111
3.5. Internationalisation
Chapitre 9 “Internationalization”
- Fichiers et dossiers de langue (
/var/lib/asterisk/sounds/en
,/var/lib/asterisk/sounds/fr
, …) - Variable de langue
- sur le l’appel (
Set(CHANNEL(language)=fr)
) - sur l’utilisateur (dans
pjsip.conf
:endpoint/language = en
Asterisk 14) - globale (section
[globals]
dansextensions.conf
.
4. Trafic sécurisé
4.1. Simple trunk SIP
On trouvera un exemple chan_sip à adapter en PJSIP.
Étape 1 Trunk SIP
1.a. Le plus simple est de créer deux périphériques SIP aux noms identiques et d’identifier leur adresse IP.
Sur le serveur du Site A dans le fichier sip.conf :
[Trunk_AB]
type=peer
host=192.168.1.201
context=trunk_ab
username=Trunk_AB ; nom du périphérique distant (ici identiques)
secret=test1234 ; secret partagé
Sur le serveur du Site B dans le fichier sip.conf :
[Trunk_AB]
type=peer
host=192.168.1.200
context=trunk_ab
username=Trunk_AB
secret=test1234
1.b. Vérifiez l’état du trunk dans la console Asterisk :
*CLI> sip show peers
Étape 2 Route sortante
2.a. Il s’agit de modifier le plan d’appel dans extensions.conf
sur les deux serveurs, ajoutez la ligne dans le contexte des appels entrants [appels-internes]
via un include
sur le contexte [trunk_ab]
. On utilise le préfixe d’appel 9
pour joindre la destination sur le Trunk.
exten => _9XXXX,1,Dial(SIP/Trunk_AB/${EXTEN:1})
2.b. Tentez de joindre un poste du Site B à partir d’un poste du Site A et inversement.
2.c. Comment devez-vous modifier votre configuration si vous nommez différemment les périphériques SIP du trunk ?
2.d. Comment sont traités les appels qui n’aboutissent pas ? Peut-on leur donner un autre traitement ?
4.2. Client/serveur SIPS/SRTP
4.3. Serveur/serveur SIPS
4.4. Trunking IAX2
5. Fonctionnalités diverses
5.1. Dire l’adresse IP avec la fonction curl
Chapitre 17 “Interactive Voice Response” p. 484
Au préalable installer Curl.
sudo apt-get install libcurl4-openssl-dev
ou
sudo yum -y install libcurl-devel
et tenter ceci dans extensions.conf
:
; extensions.conf modifié
[appels-internes]
include=>adresse-ip
[adresse-ip]
exten => *764,1,Verbose(2, Utilise CURL pour obtenir son adresse IP de ipinfo.io)
same => n,Set(CHANNEL(language)=fr)
same => n,Answer()
same => n,Set(MyIPAddressIs=${CURL(http://ipinfo.io/ip)})
same => n,SayAlpha(${MyIPAddressIs})
same => n,Hangup()
5.2. Fichiers d’exemples
On peut comprendre et envisager la mise en oeuvre de l’exemple de base situé dans les sources : ~/src/asterisk-complete/asterisk/current/configs/
- basic-pbx
- Samples
5.3. Exploration de fonctionnalités plus avancées
- -10. Deeper into the Dialplan
- -11. Parking, Paging, and Conferencing
- -13. Automatic Call Distribution (ACD) Queues
- -14. Device States
- -17. Interactive Voice Response
- -19. Fax