Mon réseau d’entreprise
21.5 Service Vocal Interactif
Dans cette partie nous allons présenter comment mettre en place un serveur vocal interactif. Il faut un serveur Asterisk et au moins deux téléphones, dont un matériel. Ensuite, nous présentons les actions élémentaires qu’un Serveur Vocal Interactif (SVI) peut réaliser. À partir de ces éléments, nous mettons en place un menu.
Enfin, nous présentons quelques fonctionnalités avancées.
Nous allons introduire deux nouveautés dans le fichier extensions.conf :
-
• L’instruction answer qui est systématiquement la première utilisée. Un des intérêts consiste à avoir une première instruction, qui porte donc le numéro 1, mais qui ne fait pas d’action visible. Il est plus facile dans la séquence qui suit de rajouter ou d’enlever des actions.
-
• L’instruction same : ceci permet de faciliter le copier/coller entre deux séquences, puisque le numéro n’est pas répété.
Un serveur vocal interactif est une application avec laquelle un utilisateur distant peut interagir. par exemple :
-
• Un serveur d’assurance offrant un menu :
-
1. pour un accident
-
2. pour une maladie
-
3. pour une modification de contrat
-
Les serveurs proposent donc des fonctionnalités, comme :
-
• Diffusion d’un message enregistré ou d’une musique
-
• Saisie d’un chiffre pour sélectionner une action
-
• Mise en relation vers une boîte vocale ou un abonné
-
• Définitions de menus et sous menus
-
• Messages en synthèse vocale
-
• Enregistrement de messages vocaux
-
• Enregistrement de séquence de chiffres
-
• …
21.5.1 Actions élémentaires
Nous présentons ici les actions que peut faire un SVI.
21.5.1.1 Émission d’un son
En général, quand on appelle un SVI, la première action qu’il effectue consiste à envoyer un son pré enregistré. Ce son peut être une musique d’accueil avec en fond vocal un message de bienvenue identifiant l’entreprise ou directement un message identifiant l’entreprise et présentant une liste d’actions.
La première action consiste donc à identifier les fichiers sons Asterisk. Les fichiers sons vont être classés en fonction de leur signification (prononciation d’une lettre, d’un numéro, annonce de boîte vocale…) et du codage utilisé (G711, GSM, MP3…).
Nous allons jouer un son au téléphone. Pour cela, nous allons rajouter l’extension 600.
exten => 600,1,answer() same => n,Playback(agent-incorrect) exten => 601,1,answer() same => n,Playback(digits/18) same => n,Playback(digits/mon-4) same => n,Playback(digits/thousand) same => n,Playback(digits/9) same => n,Playback(digits/hundred) same => n,Playback(digits/80) same => n,Playback(digits/3)
C’est une des façons de réaliser de la synthèse vocale.
Rajoutez language=fr dans la définition d’un téléphone, appelez de nouveau le 600 et le 601.
21.5.1.2 Conversion de fichiers son
Nous allons aussi utiliser une source musicale, ce qui nous fera, presque, un troisième téléphone :
-
• Allez sur un site de musique libre , et récupérez un fichier mp3
-
• Nommez le attente.mp3
-
• La décompression d’un fichier mp3 n’est pas très coûteuse en cpu quand il n’y a qu’un seul fichier joué, comme dans le cas d’une écoute normale. Par contre, pour un central téléphonique, il peut y avoir beaucoup de lecture simultanées. Pour cela, il est conseillé de n’utiliser que des fichiers adaptés au téléphone sans conversion de codec en temps réel :
sox attente.mp3 -t raw -r 8000 -s -c 1 attente.sln
Si vous avez des warnings indiquant que des échantillons ont été clippés, ce n’est pas grave pour aujourd’hui. -
• Copiez le fichier dans le répertoire /var/lib/asterisk/sounds/
-
• Ajoutez l’appel dans extensions.conf, section default :
exten => 602,1,Playback(/usr/share/asterisk/sounds/attente) -
• Testez l’appel sur 602 (casque et console asterisk)
21.5.1.3 Enregistrement
Nous allons maintenant enregistrer un fichier. L’enregistrement des fichiers sons peut se faire dans un studio d’enregistrement de qualité. Sans accès à ce type de studio, l’autre solution consiste à utiliser le téléphone comme source sonore et Asterisk comme studio. Nous allons diffuser un message demandant un enregistrement. Puis lancer l’enregistrement (terminer par dièse) en écouter le fichier enregistré. Pour cela, modifiez extensions.conf pour ajouter le contenu suivant.
exten => 602,1,answer() same => n,Playback(vm-intro) same => n,Record(/tmp/welcome.wav) same => wait(2) same => n,Playback(phonetic/i_p) same => n,Playback(/tmp/welcome)
21.5.1.4 Interactions avec le système
Nous allons commencer à lancer des commandes systèmes depuis Asterisk. Pour cela, il faut utiliser la fonction System, avec comme paramètre la commande à utiliser. Ajoutez le contenu du suivant dans le fichier extensions.conf.
exten => 607,1,answer() same => n,System(date >> /tmp/astdate)
Il est possible aussi de récupérer une information depuis le système pour l’utiliser, comme avec l’exemple suivant.
exten => 609,1,Answer()
same => n,Set(Result=${SHELL(hostname)})
same => n,Verbose(2,MACHINE: ${Result})
same => n,SayAlpha(${Result})
21.5.2 Menu
Nous allons maintenant mettre en place des menus. Le menu commence par une annonce qui liste les choix possibles. En général, peu de choix. Après pression sur une touche, l’action désignée est exécutée.
Enregistrez le message suivant « Bonjour, tapez 1 pour tel1, 2 pour tel2 » Copiez le résultat dans le répertoire /usr/share/asterisk/sounds/custom/ sous le nom bienvenue.wav
Vous pouvez maintenant mettre en place votre SVI. Les éléments remarquables sont :
-
• Utilisation de background plutôt que playback. Ces deux fonctions se ressemblent, mais background s’arrête dès qu’une touche est enfoncée.
-
• GOTO : permet de se déplacer dans le plan de numérotation et de changer de contexte. La syntaxe Goto(menu,s,1) :
- menu
-
Va à l’étiquette menu
- s
-
va au numéro d’extension ”s”
- 1
-
va à la première instruction
-
• L’utilisation d’un contexte spécifique évite des conflits entre plusieurs numérotations.
-
• WaitExten : attend une extension existante dans ce contexte. Il est donc important que seules les extensions de ce contexte concernent ce menu. Pour les sous menus, il y aura autant de contextes différents que nécessaire.
exten => 666,1,Answer()
same => n,Background(custom/bienvenue)
same => n,Goto(menu,s,1)
[menu]
exten => s,1,Verbose(2,Menu)
same => n,WaitExten(5)
exten => 1,1,Verbose(HHHHHHHHHHEEEEEEEINNNNNNN)
same => n,Dial(SIP/tel1/33)
exten => 2,1,Verbose(DDDDDDDDDDDEEEEEEUUUUUUUUUUUUXXXXXX)
same => n,Dial(SIP/tel2/33)
Vous avez maintenant à votre disposition les éléments pour construire des serveurs vocaux interactifs performants. Il suffit pour cela de construire le squelette, puis de programmer les éléments. La construction du squelette commence par la rédaction de l’arbre listant tous les menus et sous menus et toutes les actions déclenchées par les feuilles.
L’utilisation des applications Shell et System permet de lancer tous les programmes disponibles sous GNU/Linux ou utilisables à partir de celui-ci. Il est donc possible d’interroger un serveur météo ou de programme de télévision et de fournir le résultat au téléphone.