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”

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”

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”

  • Internationalization and Localization

  • 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] dans extensions.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