«

»

Sep 09 2012

[Tuto] Asterisk : Mettre en place un menu intéractif (IVR) avec GoogleTTS

Vous avez déja du, en appelant un service administratif ou le SAV d’un magasin, tomber sur une voix robotisé qui vous demandais de taper sur des touches de votre clavier téléphonique pour joindre un service spécifique?

Vous trouvez ça énervant?

Hé bien c’est ce que nous allons mettre en place dans ce tuto !

Qu’est-ce qu’un IVR?

Un IVR (Interactive Voice Response) permet de guider les utilisateurs vers le service qu’ils souhaitent joindre, on peut s’en servir aussi pour simplement annoncer les horraires d’ouvertures etc…

La mise en place d’un IVR va se faire en deux étapes, la première il faut que nous apprenons à Asterisk à nous parler, la seconde est la création de l’IVR.

Comment faire parler Asterisk?

Pour faire parler Asterisk, nous allons installer un moteur de synthèse vocale (Text To Speech) et nous allons mettre en place celui de Google appelé GoogleTTS.

Installation de GoogleTTS

Tout d’abord GoogleTTS à besoins de quelques dépendances pour fonctionner:

apt-get install perl libwww-perl sox mpg123

Puis nous allons aller dans le dossier /var/lib/asterisk/agi-bin/ et y mettre le fichier googletts.agi qui est le script pour mettre en place la synthèse vocale.

cd /var/lib/asterisk/agi-bin
wget https://raw.github.com/zaf/asterisk-googletts/master/googletts.agi
chmod +x googletts.agi

Et voila googletts est installé, maintenant voyons comment le faire parler.

Les premiers mots d’Asterisk

La configuration des IVR se fait dans le fichier extensions.conf

Ouvrez votre fichier extensions.conf et copiez les lignes suivantes à la fin du fichier

;Premier IVR
exten => 8000,1,Answer()
exten => 8000,2,agi(googletts.agi,"Par Toutatix je parle !",fr)
exten => 8000,3,Hangup()

Explications:
exten => 8000,1,Answer() : On crée l’extensions 8000 pour appeler l’IVR et on utilise l’application Answer() pour que ça soit Asterisk qui réponde étant donné que ce n’est pas un utilisateur que l’on appele.
exten => 8000,2,agi(googletts.agi, »Par Toutatix je parle ! »,fr) : Après avoir répondu on utilise donc googletts pour dire la phrase suivante : Par Toutatix je parle !, en spécifiant la langue de sortie (fr)
exten => 8000,3,Hangup(): A la fin de la phrase Asterisk raccroche

Maintenant faites un reload et appelez le 8000 à partir de n’importe quel utilisateur pour entendre Asterisk parler.

Mettre en place un vrai IVR

Maintenant nous allons mettre en place un véritable IVR qui va permettre d’appeler nos utilisateurs John et Albert.

;Second IVR

;Asterisk répond
exten => 8001,1,Answer()
;On met un timeout de 10 secondes pour le choix du destinatire
exten => 8001,2,Set(TIMEOUT(response)=10)
;On annonce les différents choix
exten => 8001,3,agi(googletts.agi,"Bienvenues chez test point com!",fr,any)
exten => 8001,4,agi(googletts.agi,"Qui souhaitez vous joindre?",fr,any)
exten => 8001,5,agi(googletts.agi,"Pour John Doe tapez 1",fr,any)
exten => 8001,6,agi(googletts.agi,"Pour Albert Dupont tapez 2",fr,any)
exten => 8001,7,agi(googletts.agi,"Appuyez sur dièse si vous souhaitez réécouter ce  message",fr,any)
;On attend que l'utilisateur appuis sur une touche
exten => 8001,8,WaitExten()

;Si l'utilisateur appuis sur 1 on va à la priorité 1 du numéro 6001
exten => 1,1,Goto(6001,1)
;Si l'utilisateur appuis sur 1 on va à la priorité 1 du numéro 6002
exten => 2,1,Goto(6002,1)
;Si l'utilisateur tape un numéro compris entre 3 et 9 et # il retourne à l'étape 3 de l'IVR
exten => _[3-9#],1,Goto(8001,3)
;Si l'utilisateur ne fais rien il retourne à l'étape 3 de l'IVR au bout de 10 secondes.
exten => t,1,Goto(8001,3)

Et voila vous pouvez maintenant faire un reload et tester votre IVR.

Rendre plus clair le fichier extensions.conf avec des Goto

Nous pouvons rendre plus clair et lisible le fichier extensions.conf avec des Goto

Voici par exemple la même déclaration des IVR dans le fichier extensions.conf mais avec des Goto

;extensions des IVR
exten => 8000,1,Goto(first-ivr,s,1)
exten => 8001,1,Goto(second-ivr,s,1)

;Contexte first-ivr
[first-ivr]
;Premier IVR
exten => s,1,Answer()
exten => s,2,agi(googletts.agi,"Par Toutatix je parle !",fr)
exten => s,3,Hangup()

;Contexte second-ivr
[second-ivr]
;Second IVR
exten => s,1,Answer()
exten => s,2,Set(TIMEOUT(response)=10)
exten => s,3,agi(googletts.agi,"Bienvenus chez test point com!",fr,any)
exten => s,4,agi(googletts.agi,"Qui souhaitez vous joindre?",fr,any)
exten => s,5,agi(googletts.agi,"Pour John Doe tapez 1",fr,any)
exten => s,6,agi(googletts.agi,"Pour Albert Dupont tapez 2",fr,any)
exten => s,7,agi(googletts.agi,"Appuyez sur dièse si vous souhaitez réécouter ce  message",fr,any)
exten => s,8,WaitExten()

exten => 1,1,Goto(work,6001,1)
exten => 2,1,Goto(work,6002,1)
exten => _[3-9#],1,Goto(second-ivr,s,3)
exten => t,1,Goto(second-ivr,s,3)

Je vous laisse découvrir les différents changements par vous mêmes.

(27 commentaires)

Passer au formulaire de commentaire

  1. mbai

    Bonjour à tous
    J’ai un problème avec googletts
    Quand j’appelle sur 8000 ça fonctionne même si tape 1 l’appelle est dirigé vers 1003
    mais le problème c’est que je n’attends rien le son

    ;Premier IVR
    exten => 8000,1,Answer()
    exten => 8000,2,agi(googletts.agi, »Par Toutatix je parle ! »,fr)
    exten => 8000,3,agi(googletts.agi, »Pour John Doe tapez 1″,fr,any)
    exten => 8000,4,WaitExten()
    exten => 1,1,Goto(1003,1)

  2. Borja Sixto

    Bonjour,

    Le Dialplan est un peu limité pour une intégration de la synthèse de parole, surtout pour créer des menus.

    Il est préférable d’utiliser l’application Voximal.
    Elle qui ajoute à l’Asterisk un véritable interpréteur VoiceXML (langage W3C pour les IVR).
    Celle-ci permet d’utiliser n’importe quel moteur de synthèse, y compris GoogleTTS (mais aussi microsoft Azure, Cereproc Cloud, Voxygen Cloud…), avec un atout majeur il garde en cache les contenus déjà générés.
    De plus il permet des anticipations par DTMF ou vocale si un moteur de reconnaissance lui est aussi ajouté.

    Plus d’information : http://www.ulex.fr ou http://www.voximal.com

  3. Cristiano

    Merci Beaucoup

  4. gourbiere

    Bonjour,
    Merci pour ce tuto.
    J’ai suivi la procédure et j’ai mis en place mon IVR .lorsque j’appelle depuis l’extérieur ,c’est bien asterisk qui répond « Bienvenue… »mon souci ,c’est pour le transfère des appels.Lorsqu’il me demande de taper une touche ,je le fait mais rien ne se produit,c’est-à-dire ,il ne transfère pas les appels vers les utilisateurs.
    Par avance merci pour votre aide.

  5. Mertiziner

    Bonjour, je déploie actuellement une solution VoIP dans une entreprise.
    J’ai réussi à mettre en place plus ou moins toutes les fonctionnalités que j’espérais jusqu’à présent hormis GoogleTTS…

    En effet, le script .agi ne fonctionne pas malgré toutes mes tentatives de résolutions…

    Je cru comprendre via certains forums qu’il a plusieurs fois été indisponible, pouvez-vous me confirmer que ça fonctionne de votre côté ou, dans le cas contraire, me dire que le service n’est plus disponible via le script… ?
    Merci d’avance !

    Mertiziner

    1. Mertiziner

      J’ai enfin trouvé d’où vient mon problème.

      Dans le fichier modules.conf, si vous êtes en autoload=no, il faut charger le format : format_sln.so car c’est dans ce format que le fichier temporaire s’écrit dans /tmp

      J’espère que ça pourra en aider certains :)

  6. heritahianhiana

    Bonjour est-ce que ça remarche à nouveau ou est-ce qu’il faut dire adieu au googletts?

    Quelles ont les autre solutions alternatives viables?

    1. ramzyasterisk

      bonjour ,je travaille avec asterisk et googletts fonctionne correctement . il y’a d’autre solution mais our moi googletts est le meilleur .

      1. hasina

        Bjr à tous!!! J’ai bien suivi ce tuto et lorsque j’appel le 8000, je n’entend rien… J’ai eu d’abord un petit warning indiquant que je dois mettre le fichier googletts.agi dans /usr/share/asterisk/agi-bin/ et je l’ai fait.. Après je n’ai plus aucun warning mais il ne se passe rien même dans les logs.. Merçi de m’aider!!!

  7. Emmanuel

    Bonjour Denis,
    Le service googletts ne fonctionne plus depuis peu.
    Es-tu au courant s’ils ont arrêté cette fonctionnalité ?
    J’ai tous mes autocoms en panne du coup :(
    Merci d’avance.
    Emmanuel

    1. Denis

      Salut,

      Je vois qu’il y a eu des changement au niveau du code cette semaine, tu peux essayer de récupérer la dernière version de googletts.agi sur le Github du projet: https://github.com/zaf/asterisk-googletts

      Denis

      1. hasina

        Bjr à tous!!! J’ai bien suivi ce tuto et lorsque j’appel le 8000, je n’entend rien… J’ai eu d’abord un petit warning indiquant que je dois mettre le fichier googletts.agi dans /usr/share/asterisk/agi-bin/ et je l’ai fait.. Après je n’ai plus aucun warning mais il ne se passe rien même dans les logs.. Merçi de m’aider!!!

  8. Insha Allah

    slt La gerbe j sais que ça fait longtemps mais j le mm problème que vous aujourd’huis, est ce que vous avez eu de solution pour votre problème et le faire partager avec nous s’il vous plaît. mecri

  9. Chrigo

    Euh bonjour par ici.

    Super tutoriel, mais il y a un oublie de [work] au niveau de la synthase de la déclaration des IVR

    Faire :

    ;Premier IVR
    [work]
    exten => 8000,1,Answer()
    exten => 8000,2,agi(googletts.agi, »Par Toutatix je parle ! »,fr)
    exten => 8000,3,Hangup()

    Au lieu de

    ;Premier IVR
    exten => 8000,1,Answer()
    exten => 8000,2,agi(googletts.agi, »Par Toutatix je parle ! »,fr)
    exten => 8000,3,Hangup()

    A bientot

  10. HHH

    Si ça peut aider
    le script google ne marchait pas pour moi, les instructions s’enchaînaient mais aucune voix ne sort, en allant récupéré le script googletts ailleurs cela s’est rétablie ..

    1. Babacar

      trs bn tuto, mais au niveau de:

      ;Premier IVR
      exten => 8000,1,Answer()
      exten => 8000,2,agi(googletts.agi, »Par Toutatix je parle ! »,fr)
      exten => 8000,3,Hangup()
      chez moi sa ne passai pa j’ai du mettre:

      exten => 8000,1,Answer()
      exten => 8000,2,agi(/etc/asterisk/googletts.agi, »Par Toutatix je parle ! »,fr)
      exten => 8000,3,Hangup()
      pour que sa puisse passer!
      jste au cas ou klk1 rncntre c prblm!
      encor mr6 a tw!

  11. onerique

    Salut merci pour l tuto. Mais j’ai un problême. Quand l routeur est connecté à internet jentend la voix et xa march bien, mais quand je dconnect et jl fais en local xa n repond plu. Tout l message defil normalmnt ds l console asterisk mais jnenten rien ds l terminal.merci d m repondre cher ami.

  12. Pinson David

    Trop fort ce tuto !
    Une question: peut-on avoir une voix masculine ?
    Je ne suis pas macho mais c’est encore plus sympa de varier les voix.

    Encore bravo,

  13. Lou

    sont où les tuto a2billing? :)

  14. alex

    très intéressant est ce que je peux utiliser cet application pour lire les informations stockés dans une base de donné Mysql
    puisque mon memoire de fin d’étude consiste à concevoir un svi pour gérer les notes des étudiants.

  15. mohaman ahman

    coment dois-je telecharger le pilote d’une imprimante canon IR2018 et dans quel site SVP

  16. Alexandra

    Bonjour,
    comment je peux tester Asterisk et l’entendre parler sur ma machine est ce que j’ai la possibilité de faire ca en utilisant juste un vmr pour installer asterisk et faire le fonctionner avec ivr.
    merci pour la réponse

  17. bellucci

    Bonjour,

    J’ai la version 1.8 d’asterisk.
    J’ai configuré mon IVR, et lorsque j’appuie sur une touche pour naviguer dans le menu il ne la reconnait pas.

    [Jun 21 17:13:55] WARNING[2341]: pbx.c:5169 __ast_pbx_run: Invalid extension ‘1’, but no rule ‘i’ or ‘e’ in context ‘srv-vocal-1’

    Votre aide plz.

  18. La gerbe

    Bonjour,
    Merci pour votre tuto.
    J’ai cependant un problème.
    En contacter l’IVR, je n’entends aucune voix, cependant, les correspondances des touches fonctionnent, à savoir en appuyant sur 1 je tombe bien sur le numéro configuré. Le problème doit venir de certains packages manquants (j’ai entendu parler d’un format_sln nécessaire au fonctionnement de Google TTS mais introuvable sur le web). Avez vous des infos, des pistes à explorer ?
    PS : je suis sous debian.

    1. Insha Allah

      slt j sais que ça fait longtemps mais j le mm problème que vous aujourd’huis, est ce que vous avez eu de solution pour votre problème et le faire partager avec nous s’il vous plaît. mecri

  19. Cadorex

    Super tuto :)

  20. abidi adnen

    quels sont les dérivées d’Asterisk open source qui permettent de faire un IVR outbound ?

Laisser un commentaire

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

Lire les articles précédents :
Asterisk_logo
[Tuto] Asterisk: Mettre en place des salles de conférences avec MeetMe

Nous allons voir dans ce tutoriel comment mettre en place des salles de conférences dans Asterisk avec MeetMe.

Fermer