[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.

(35 commentaires)

Passer au formulaire de commentaire

    • Azdine on 27 décembre 2017 at 19 h 05 min
    • Répondre

    mon SVI ne marche pas sous asterisk 13 aidez moi a corriger s’il vous plait

    EXTENSIONS.conf
    —————————————————————————————————-

    [test]

    exten => _1XXX,1,Dial(SIP/${EXTEN},15)
    exten => _1XXX,2,Voicemail(${EXTEN})
    exten => _1XXX,3,Hungup( )

    exten => 1000,1,Answer( )
    exten => 1000,2,VoiceMailMain(${CALLERIDNUM})

    exten => 1111,1,Answer
    exten => 1111,2,Goto(svi,s,1)
    exten => 1111,3,Goto(svi,s,2)

    [svi]

    exten => s,1,Background(/var/lib/asterisk/sounds/custom/bienvenu)
    exten => s,2,Background(/var/lib/asterisk/sounds/custom/choix)
    exten => s,3,WaitExten(3)
    exten => 1,1,Playback(/var/lib/asterisk/sounds/custom/infos)
    exten => _[3-90],1,Background(/var/lib/asterisk/sounds/custom/erreur)
    exten => 2,1,Dial(SIP/1001,20,tr)
    exten => 2,n,Dial(SIP/1002,20,tr)
    exten => 2,n,Dial(SIP/1003,20,tr)
    exten => 2,2,Hangup( )
    exten => *,1,Hangup( )
    exten => #,1,Goto(s,1)
    exten => t,1,Hangup( )

    • lafrouji on 14 août 2017 at 5 h 01 min
    • Répondre

    Merci beaucoup

    • grah on 31 janvier 2017 at 14 h 59 min
    • Répondre

    bjr je vuex qu’asterisk aille lire dans une base de donées mysql en local. j’ai pu connecté avec ODBC mais lire dans la table mysql ne marge pas aidez moi

  1. Super Tuto :p

    Seul amélioration à apporter : prévoir quand l’utilisateur tape le numéro du correspondant avant que l’annonce d’accueil soit finie que celui ci soit bien redirigé. Chez moi, je suis obligé d’attendre que l’annonce d’accueil soit finie d’être lue avant de pouvoir taper ( ce qui peut être long si il y a une dizaines de numéros paramétrés dans l’IVR…)

    • mbai on 29 novembre 2016 at 12 h 46 min
    • Répondre

    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. 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

    • Cristiano on 18 mai 2016 at 21 h 14 min
    • Répondre

    Merci Beaucoup

    • gourbiere on 11 mai 2016 at 15 h 31 min
    • Répondre

    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.

    • Mertiziner on 5 février 2016 at 20 h 58 min
    • Répondre

    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

      • Mertiziner on 8 février 2016 at 13 h 33 min
      • Répondre

      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 :)

    1. Essays like this are so important to brnidenaog people’s horizons.

    2. Nc vi o pedro dias tão feliz cm naqela parte do baloiço em alcacer…xD ahaha abusado aqele transfer do pedro dias,força nisso pah!! Bom edit,o icepick na pool foi abusado!

    • heritahianhiana on 17 novembre 2015 at 6 h 58 min
    • Répondre

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

    Quelles ont les autre solutions alternatives viables?

      • ramzyasterisk on 20 novembre 2015 at 9 h 50 min
      • Répondre

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

        • hasina on 26 novembre 2015 at 9 h 20 min
        • Répondre

        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!!!

        1. That’s really thninikg at a high level

    • Emmanuel on 5 août 2015 at 15 h 10 min
    • Répondre

    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. 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

        • hasina on 26 novembre 2015 at 9 h 19 min
        • Répondre

        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!!!

  3. 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

    • Chrigo on 27 février 2015 at 10 h 27 min
    • Répondre

    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

    • HHH on 17 février 2015 at 17 h 56 min
    • Répondre

    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 ..

      • Babacar on 8 juillet 2015 at 10 h 36 min
      • Répondre

      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!

    • onerique on 24 décembre 2013 at 9 h 52 min
    • Répondre

    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.

    • Pinson David on 18 décembre 2013 at 22 h 53 min
    • Répondre

    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,

    • Lou on 9 décembre 2013 at 9 h 41 min
    • Répondre

    sont où les tuto a2billing? :)

    • alex on 20 octobre 2013 at 6 h 18 min
    • Répondre

    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.

    • mohaman ahman on 29 août 2013 at 12 h 36 min
    • Répondre

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

    • Alexandra on 29 juin 2013 at 13 h 05 min
    • Répondre

    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

    • bellucci on 21 juin 2013 at 17 h 15 min
    • Répondre

    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.

    • La gerbe on 11 avril 2013 at 9 h 52 min
    • Répondre

    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.

      • Insha Allah on 2 mai 2015 at 15 h 02 min
      • Répondre

      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

    1. Yeah that’s what I’m talking about ba-i-bnyce work!

    • Cadorex on 5 avril 2013 at 9 h 45 min
    • Répondre

    Super tuto :)

    • abidi adnen on 14 février 2013 at 11 h 27 min
    • Répondre

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

Laisser un commentaire

Your email address will not be published.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

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