Création d’un menu vocal interactif avec Asterisk

Création d’un menu vocal interactif avec Asterisk

Sélection du moteur de syntèse vocale

Il existe plusieurs moteurs de synthèse vocale : Flite (intégré à Asterisk), Googletts (le plus poussé actuellement).
Notre choix s’est porté sur Googletts, projet libre de Google, possédant une agi simple a utiliser mais nécessitant un accès à internet pour la génération vocale.

Installation des dépendances

Nous rappelons que nous avons installé Asterisk sur une CentOS 6.5 minimale, il manque donc certaines dépendances :

  • Perl : langage de programmation PERL
  • perl-libwww : Librairie Perl pour le WEB
  • sox : SOund eXchange, Processeur sonore
  • mpg123 : lecteur et encodeur MPG audio

Nous devons donc ajouter le dépot RPMFORGE pour CentOS 6.x

  1. Téléchargez le package :
    $ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
  2. Importez la clé de sécurity GPG :
    $ rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
  3. Installez le dépot:
    $ rpm -K rpmforge-release-0.5.3-1.el6.rf.*.rpm
    
  4. Installation des dépendaces requises : perl perl-libwww-perl.noarch sox.x86_64 mpg123
    $ yum install perl perl-libwww-perl.noarch sox.x86_64 mpg123

Téléchargement de Googletts

Téléchargez l’Agi googletts.agi
version zip (pour windows)

version tar.gz
Décompressez l’archive et copier le fichier googletts.agi dans le répertoire /var/lib/asterisk/agi-bin/

$ wget http://www.madti.info/dl/googletts.zip
$ unzip googletts.zip
$ cp googletts.agi /var/lib/asterisk/agi-bin/googletts.agi

Génération du menu vocal interactif avec Asterisk

Pour cet exemple créons un menu standard d’accueil avec choix de l’interlocuteur entre Thomas, Hervé et Gauvain.
Editez le fichier extensions.conf d’asterisk dans /etc/asterisk/. Ajoutez les lignes suivantes dans le fichier.

[accueil]
exten => 8001,1,Answer() ; asterisk decroche
exten => 8001,n,Set(TIMEOUT(response)=5) ; mise en place d'un timer de 5 secondes
exten => 8001,n,agi(googletts.agi,"Bienvenue sur ce menu interactif.",fr,any,1.3) ; message d'accueil
exten => 8001,n,agi(googletts.agi,"Qui souhaitez vous joindre ?",fr,any,1.3)
exten => 8001,n,agi(googletts.agi,"Pour Thomas tapez 1.",fr,any) ; message de premiere option
exten => 8001,n,agi(googletts.agi,"Pour Hervé tapez 2.",fr,any) ; message de seconde option
exten => 8001,n,agi(googletts.agi,"Pour Gauvain tapez 3.",fr,any) ; message de troisieme option
exten => 8001,n,agi(googletts.agi,"Pour raccrocher tapez étoile",fr,any,1.2) ; message de fin
exten => 8001,n,agi(googletts.agi,"Pour réécouter ce message tapez dièse",fr,any) ; message de repetition
exten => 8001,n,WaitExten() ; attente d'une touche
exten => 1,1,Goto(admin,1001,1) ; sur pression de la touche '1' allez dans le contexte admin et appeler 1001, a la premiere ligne du contexte
exten => 2,1,Goto(admin,1002,1) ; sur pression de la touche '2' allez dans le contexte admin et appeler 1002, a la premiere ligne du contexte
exten => 3,1,Goto(gestion,2001,1) ; sur pression de la touche '3' allez dans le contexte gestion et appeler 2001, a la premiere ligne du contexte
exten => _[4-9],1,agi(googletts.agi,"Touche non supportée. Retour au menu",fr,any,1.3) ; sur pression d'une touche de 4 à 9 inclus, message vocal
exten => _[4-9],n,Goto(accueil,8001,4) ; sur pression d'une touche de 4 à 9 inclus aller dans le contexte accueil, appeler 8001 (ce menu), a la ligne 4
exten => #,1,Goto(accueil,8001,3) ; sur pression de la touche 'diese' aller dans le contexte accueil, appeler 8001 (ce menu), a la ligne 3
exten => *,1,Hangup() ; sur pression de la touche 'etoile', racrocher
exten => t,1,Goto(accueil,8001,3) ; si le timer se termine aller dans le contexte accueil, appeler 8001 (ce menu), a la ligne 3

Test du menu

Pour tester le menu il suffit d’appeler le numéro 8001 pour avoir l’accueil.
Si tout fonctionne vous entendrez une voix féminine faire les annonces, et sur pression de la touche requise votre correspondant vous répondra.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *