Voice Bot avec Google Dialogflow
Introduction
Ce guide vous montrera comment passer un appel téléphonique à un agent Dialogflow en utilisant Dialogflow Essentials et une intégration Vonage WebSockets.
Le diagramme ci-dessous donne un aperçu de l'architecture.

Pré-requis
Pour effectuer les actions décrites dans les étapes suivantes, vous devez créer :
Créer un agent Dialogflow
Dialogflow est un logiciel en tant que service (SaaS) et une plateforme de compréhension du langage naturel utilisée pour créer des interfaces utilisateur conversationnelles.
Un agent est une instance Dialogflow, que vous pouvez considérer comme votre application de chatbot. Il vous permet de prendre ce que les utilisateurs disent, de le mettre en correspondance avec les éléments suivants intentions et leur fournir des réponses.
Suivez les étapes
- Ouvrir le console dialogflow
- Créez un agent en lui donnant un nom, en définissant la langue par défaut, en choisissant le fuseau horaire et en cliquant sur le bouton de création d'un agent. Le bouton peut être affiché sous la forme
CreateouCreate Agent - Dans le menu de gauche, cliquez sur l'icône de l'engrenage.
- Sous Google Project, cliquez sur le nom de l'identifiant du projet. Par exemple,
VonageDFVous accéderez ainsi à la page Console Google Cloud

Créer un Account de service sur la Google Cloud Console
Nous allons utiliser l'interface utilisateur graphique pour gérer notre projet Google Cloud et nos ressources via la console Google Cloud en utilisant le même projet créé dans Dialogflow. Dans les étapes suivantes, nous allons créer un Account de service pour le contrôle d'accès et l'authentification.
Suivez les étapes
- A partir de la Console Google Cloudcliquer sur
Go to project settings - Dans le menu de gauche, cliquez sur
Service accounts - Dans la barre supérieure, cliquez sur
+ Create Service Account - Donnez-lui un nom de compte de service dont vous vous souviendrez, par exemple
VonageDF - Ajouter une description du compte de service
- Cliquez sur
Create and Continue - Sous
Grant this service account access to projectFiltrer et sélectionner le rôleDialogflow API Admin

Vous revenez à la page Comptes de service.
- Cliquez sur les trois points situés sous
action - Cliquez sur
Manage keys - Cliquez sur
Add Key - Cliquez sur
Create new Key - Sélectionner
JSON - Cliquez sur
Create - Vous pouvez en voir un
.jsona été téléchargé. Nous ajouterons ce fichier à la base de données Dialogflow Reference Connection Dépôt GitHub que nous clonerons dans l'étape suivante

Configuration de la connexion à la référence Dialogflow
La connexion de référence Dialogflow utilise la fonction Fonctionnalité WebSockets de l'API Voice de Vonage. Lorsqu'un appel vocal est établi, une application Voice API déclenche une connexion WebSocket à l'interface utilisateur de Vonage. Dialogflow-reference-connection. Il diffuse en temps réel l'audio vers et depuis l'appel vocal.
Dans les étapes suivantes, nous allons donner deux options à titre d'exemple. Utiliser ngrok pour tunneliser le serveur de connexion, qui interagit avec notre agent Dialogflow et le déployer sur Heroku.
Suivez les étapes
- Cloner le
dialogflow-reference-connectiondépôt de GitHub et modifiez le répertoiregit clone https://github.com/nexmo-community/dialogflow-reference-connection && cd dialogflow-reference-connection - Ouvrez le code dans votre IDE ou éditeur de texte préféré
- Ajouter le
.jsonque vous avez téléchargé à la racine du projet - Créer un
.envdu fichier.env.example - Renseigner les variables d'environnement :
GCLOUD_PROJECT_ID=<TheProjectIdFoundOnDialogflow>GOOGLE_CLOUD_CREDENTIALS=<TheJSONFileYouDownloaded.json>Depuis le terminal : - Installer les dépendances
npm install - Exécuter le fichier Dialogflow connectant le serveur
node df-connecting-server.jsIl existe de nombreux types de déploiement, tels que App Engine, Heroku, Cloud Run.
Dans ce guide, nous montrerons des exemples utilisant la fonction ngrok le creusement de tunnels. Voici un lien expliquant plus en détail ce qu'est ngrok et Heroku.
Option 1 : Exemple avec ngrok
- Exécuter
ngrok http 5000 - Notez l'URL trouvée dans la console (par ex.
xxxx.ngrok.io). Nous ajouterons cette information dans leDF_CONNECTING_SERVERargument de la partie 'Set Up the Dialogflow Voice API Sample Application' du guide

Option 2 : Exemple avec Heroku
- Installer git
- Installer Ligne de commande Heroku et connectez-vous à votre Account Heroku
- Si vous n'avez pas encore de dépôt git local, créez-en un :
git init - Commencez par créer cette application sur Heroku à partir de la ligne de commande en utilisant le CLI Heroku. Note : Dans la commande ci-dessous, remplacez
thisappnameavec un nom unique sur l'ensemble de la plateforme Heroku.heroku create thisappname - Sur votre tableau de bord Heroku où s'affiche la page de votre application, cliquez sur.
Settingsajouter ce qui suitConfig Varset leur attribuer leurs valeurs respectives :
- Déployer l'application
git push heroku masterougit push heroku mainen fonction du nom de votre branche. - Notez l'URL trouvée dans la console (par ex.
thisappname.herokuapp.com). Nous ajouterons cette information dans leDF_CONNECTING_SERVERargument de la partie du guide intitulée 'Set Up the Dialogflow Voice API Sample Application' (Configuration de l'application Dialogflow Voice API)
Configurer les informations d'identification et le numéro de téléphone de l'application Voice API de Vonage
Suivez les étapes
- Créer une application à partir de la page Tableau de bord de l'API Vonage
- Donnez un nom à l'application, par exemple
VonageDF - Cliquez sur le bouton pour générer une clé publique et une clé privée, un
private.keysera téléchargé. Nous l'ajouterons à l'exemple d'application Dialogflow Voice API dans la prochaine section de ce guide. - Associez un numéro de téléphone à cette application. Si vous n'en avez pas encore, dans le menu de gauche, cliquez sur
Numberset ensuiteBuy Numberset suivez les étapes pour l'acheter
Nous allons configurer l'application Dialogflow Voice API Sample et nous reviendrons bientôt sur le tableau de bord de l'application Vonage pour y ajouter d'autres informations.
Configuration de l'exemple d'application Dialogflow Voice API
Cet exemple d'application utilise l'API Voice de Vonage pour répondre aux appels vocaux entrants et établir une connexion WebSocket pour diffuser de l'audio vers et depuis la connexion de référence Dialogflow pour chaque appel.
Les dialogflow reference connection Le code de la santé publique sera :
- Envoyer de l'audio à l'agent Dialogflow à partir de la voix de l'appelant,
- Diffusion en continu des réponses audio de l'agent Dialogflow à l'appelant via le WebSocket,
- Renvoyer en temps réel les transcriptions et les scores de sentiment de la parole de l'appelant via des webhooks. Exemple d'application Voice API.
Une fois cette application lancée, vous appellerez le numéro de téléphone lié à votre application pour interagir vocalement avec votre agent Dialogflow.
Nous allons utiliser ngrok pour tunneliser le serveur de connexion qui interagit avec notre agent Dialogflow, mais si vous souhaitez voir un exemple utilisant Heroku, vous pouvez suivre les étapes suivantes Exemple d'application de la Voice API de Dialogflow de GitHub.
Suivez les étapes
- Depuis votre terminal, clonez le fichier Exemple d'application de la Voice API de Dialogflow de GitHub et modifiez le répertoire
git clone https://github.com/nexmo-community/dialogflow-sample-voice-application && cd dialogflow-sample-voice-applicationVous pouvez continuer à suivre l'explication des étapes ci-dessous ou à partir du fichier readme de l'application Exemple d'application de la Voice API de Dialogflow - Ajouter le
private.keygénéré à partir du tableau de bord de Vonage et téléchargé sur votre machine à la racine du projet. - A partir de la
.env.examplecréer un.envfichier - Remplir les variables d'environnement avec les informations présentes dans le fichier Tableau de bord de l'API Vonage
- Les
SERVICE_NUMBERest le numéro virtuel que vous avez acheté. N'oubliez pas d'ajouter au préalable l'indicatif du pays sans 00 ni +. - Les
DF_CONNECTING_SERVERest le serveur de la référence Dialogflow que vous avez déjà en cours d'exécution (celui dont vous avez pris note précédemment)
Installer les dépendances
npm installExécuter le
df-application.jsnode df-application.jsVous trouverez ci-dessous les étapes suivantes pour ngrok et pour Heroku :Option 1 : Voici les étapes à suivre pour utiliser ngrok
Dans un autre terminal, lancez
ngrok http 8000Retournez au site Web de Vonage Dashboard et à la rubrique Capacités :Basculer vers Voice pour activer cette capacité
Ajouter l'URL ngrok fonctionnant sur
dialogflow-sample-voice-applicationsuivi de/answersur l'URL de la réponse. Assurez-vous que l'option HTTP GET est sélectionnée.Ajouter l'URL ngrok fonctionnant sur
dialogflow-sample-voice-applicationsuivi de/eventsur l'URL de l'événement. Assurez-vous que l'option HTTP POST est sélectionnée.Cliquez sur Enregistrer les modifications

Option 2 : Étapes ci-dessous avec Heroku
- Dans un autre terminal, si vous n'avez pas encore de dépôt git local, créez-en un :
git init - Commencez par créer cette application sur Heroku à partir de la ligne de commande en utilisant le CLI Heroku. Note : Dans la commande, remplacez
myappnameavec un nom unique sur l'ensemble de la plateforme Heroku.heroku create myappname - Sur votre tableau de bord Heroku où s'affiche la page de votre application, cliquez sur.
Settingsajouter ce qui suitConfig Varset leur attribuer les valeurs respectives trouvées dans votre.envfichier.
Ajouter également le paramètre PRIVATE_KEY_FILE avec la valeur ./private.key
- Sur votre tableau de bord Heroku où s'affiche la page de votre application, cliquez sur l'icône de l'application.
Open Appet copier l'URL - Maintenant, déployons l'application. Retournez sur le site Web de Vonage Dashboard et cliquez sur capabilities (capacités) :
- Basculer vers Voice pour activer cette capacité
- Cela
hostname(l'URL que vous avez copiée depuis Heroku) sera utilisée, suivie de/answersur l'URL de la réponse. Assurez-vous que l'option HTTP GET est sélectionnée - Faites de même pour
/eventsur l'URL de l'événement. Assurez-vous que l'option HTTP POST est sélectionnée - Cliquez sur Enregistrer les modifications

Amélioration de l'agent Dialogflow
Si vous essayez d'appeler le numéro de téléphone à ce stade du guide, vous pourrez interagir avec le point de départ de la conversation du point de vue de Dialogflow, l'écran d'accueil. Default Welcome Intent.
Un message sera renvoyé à l'appelant à partir de la liste des réponses de l'utilisateur. Mais la conversation ne prendrait pas de tour car nous n'avons pas d'autres données formées pour d'autres tours de conversation.
Prenons un peu de recul et explorons certains des concepts de Dialogflow pour ajouter les énoncés que les utilisateurs pourraient prononcer, leur fournir une réponse et ajouter la fin de la conversation, de sorte que vous puissiez voir une conversation complète se dérouler à tour de rôle.
Une fois que vous avez créé un agent, vous créez des intentions qui gèrent et façonnent la conversation.
En cas d'énonciation par l'utilisateur, Dialogflow fait correspondre ce qui est dit à une intention, qui est basée sur le NLP et les phrases d'entraînement qu'un utilisateur pourrait potentiellement dire pour correspondre à cette intention. Une fois la classification de l'intention effectuée, une réponse est envoyée à l'utilisateur.
Les entités sont les types d'informations que nous allons extraire de la conversation. Dans le cas d'utilisation que nous verrons ci-dessous, nous réservons une table par téléphone. Les informations que nous allons extraire de la conversation sont les suivantes person, date et time.
Améliorons l'intention de bienvenue par défaut, créons une intention, décrivons les entités, ajoutons une fin à la conversation et testons-la.
Suivez les étapes
- Ouvrir le console dialogflow et assurez-vous que vous êtes dans le bon agent pour ce guide
- Cliquez sur l'icône
Default Welcome Intent - Faites défiler vers le bas, effacez les réponses et ajoutez-les :
Welcome to our Demonstration Restaurant. When and for whom would you like to book a table? - Cliquez sur Enregistrer
- Cliquez sur l'élément de menu Intents
- Cliquez sur le bouton Nouvelle intention
- Donnez-lui le nom de
Table Booker - Sous Phrases d'entraînement, ajoutez les phrases d'entraînement suivantes
- Une table pour Nicole le 10 à 13 heures, s'il vous plaît.
- Puis-je réserver un créneau à 14h00 le 10/12/2021 pour Joseph ?
- Je voudrais réserver une table le 10/09/2020 à 16:00 pour Amanda
Vous remarquerez qu'au fur et à mesure que vous tapez ces phrases, certains mots seront surlignés en couleur. Veillez à double-cliquer sur les mots et à vous assurer qu'ils utilisent les entités correctes.
@sys.person,@sys.dateet@sys.time.
- Sous Actions et paramètres, cochez
requiredpourperson,dateettime - Ajoutez des invites pour chacun des paramètres, car au cas où ils n'auraient pas dit cet élément d'information spécifique au cours de la conversation, ils seront invités à l'ajouter.

- Dans la réponse, vous pouvez ajouter ce qui suit :
Table booked for $person at $time on $date. Thank you! - Toggle
Set this intent as end of conversation, ci-dessous les réponses - Cliquez sur Enregistrer

Interagir par la voix avec l'agent Dialogflow
Maintenant que tous les éléments sont en place, il est temps d'appeler votre numéro de téléphone virtuel et de le tester. Voyons ce qui se passe et suivons la dernière étape pour passer l'appel !
Une fois que vous avez appelé le numéro de téléphone lié à votre application Voice API pour interagir avec l'agent Dialogflow.
Vous entendrez le message de confirmation : Connecting your call, please wait.. Cette synthèse vocale provenant de la plateforme API de Vonage est diffusée dès que la plateforme répond à votre appel.
Une fois que la liaison WebSocket est établie, la plateforme API de Vonage lit le message vocal. Hello à l'agent Dialogflow (vous ne l'entendrez pas en tant qu'appelant).
L'agent Dialogflow vous a maintenant lu la configuration.
À ce stade, vous interagirez avec les intentions que vous avez définies dans la section précédente de ce guide pour réserver une table.
Vous verrez les transcriptions sur la console d'application de la connexion de référence Dialogflow et également sur la console d'application de l'API vocale de l'échantillon Dialogflow.
Si vous souhaitez voir les résultats de l'analyse des sentiments, vous devez activer l'API Cloud Natural à partir de la console Google Cloud. Si elle n'est pas activée, vous obtiendrez une erreur similaire à la suivante PERMISSION_DENIED: Cloud Natural Language API has not been used in project xxxx before or it is disabled.
Passons à l'étape finale et voyons tous les éléments en action !
Suivez les étapes
Appelez le numéro de téléphone lié à votre application Voice API et interagissez avec l'agent Dialogflow.
Voici une façon potentielle de tester la conversation :
- Vonage Websocket : Connexion de votre appel, veuillez patienter.
- Bot : Bienvenue dans notre restaurant de démonstration. Quand et pour qui souhaitez-vous réserver une table ?
- Vous : Je souhaite réserver une table à 10h00 le 01/09/2022 pour Tanya
- Réponse du bot : Table réservée pour Tanya à 10:00 le 01/09/2022. Nous vous remercions de votre attention.
Fin de l'appel
Félicitations
Vous avez terminé ce guide sur les appels téléphoniques à un agent Dialogflow en utilisant une intégration Vonage WebSockets.
Ressources
Vous pouvez trouver le Exemple de référence Dialogflow et Exemple d'application vocale sur GitHub.
Vérifier le Guide de référence WebSockets.
Vérifier le Un article de blog expliquant ngrok.
Vous pouvez également examiner un exemple similaire en utilisant un Amazon Lex Bot.