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.

Architecture overview showing how the parts are connected

Pré-requis

Pour effectuer les actions décrites dans les étapes suivantes, vous devez créer :

  1. A Compte Dialogflow
  2. A Compte API Vonage

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

  1. Ouvrir le console dialogflow
  2. 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 Create ou Create Agent
  3. Dans le menu de gauche, cliquez sur l'icône de l'engrenage.
  4. Sous Google Project, cliquez sur le nom de l'identifiant du projet. Par exemple, VonageDF Vous accéderez ainsi à la page Console Google Cloud
Gif showing the steps to create the dialogflow Agent

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

  1. A partir de la Console Google Cloudcliquer sur Go to project settings
  2. Dans le menu de gauche, cliquez sur Service accounts
  3. Dans la barre supérieure, cliquez sur + Create Service Account
  4. Donnez-lui un nom de compte de service dont vous vous souviendrez, par exemple VonageDF
  5. Ajouter une description du compte de service
  6. Cliquez sur Create and Continue
  7. Sous Grant this service account access to projectFiltrer et sélectionner le rôle Dialogflow API Admin
Gif showing the seven above steps while creating the Service Account

Vous revenez à la page Comptes de service.

  1. Cliquez sur les trois points situés sous action
  2. Cliquez sur Manage keys
  3. Cliquez sur Add Key
  4. Cliquez sur Create new Key
  5. Sélectionner JSON
  6. Cliquez sur Create
  7. Vous pouvez en voir un .json a é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
Gif showing the above steps to generate the keys

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

  1. Cloner le dialogflow-reference-connection dépôt de GitHub et modifiez le répertoire git clone https://github.com/nexmo-community/dialogflow-reference-connection && cd dialogflow-reference-connection
  2. Ouvrez le code dans votre IDE ou éditeur de texte préféré
  3. Ajouter le .json que vous avez téléchargé à la racine du projet
  4. Créer un .env du fichier .env.example
  5. Renseigner les variables d'environnement : GCLOUD_PROJECT_ID=<TheProjectIdFoundOnDialogflow> GOOGLE_CLOUD_CREDENTIALS=<TheJSONFileYouDownloaded.json> Depuis le terminal :
  6. Installer les dépendances npm install
  7. Exécuter le fichier Dialogflow connectant le serveur node df-connecting-server.js Il 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

  1. Exécuter ngrok http 5000
  2. Notez l'URL trouvée dans la console (par ex. xxxx.ngrok.io). Nous ajouterons cette information dans le DF_CONNECTING_SERVER argument de la partie 'Set Up the Dialogflow Voice API Sample Application' du guide
The ngrok URL highlighted on the Visual Studio Code IDE

Option 2 : Exemple avec Heroku

  1. Installer git
  2. Installer Ligne de commande Heroku et connectez-vous à votre Account Heroku
  3. Si vous n'avez pas encore de dépôt git local, créez-en un : git init
  4. 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 thisappname avec un nom unique sur l'ensemble de la plateforme Heroku. heroku create thisappname
  5. Sur votre tableau de bord Heroku où s'affiche la page de votre application, cliquez sur. Settings ajouter ce qui suit Config Vars et leur attribuer leurs valeurs respectives :
GCLOUD_PROJECT_ID GOOGLE_APPLICATION_CREDENTIALS
  1. Déployer l'application git push heroku master ou git push heroku main en fonction du nom de votre branche.
  2. Notez l'URL trouvée dans la console (par ex. thisappname.herokuapp.com). Nous ajouterons cette information dans le DF_CONNECTING_SERVER argument 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

An image explaining that to complete this guide you need a VONAGE API Account and to purchase a virtual number

Suivez les étapes

  1. Créer une application à partir de la page Tableau de bord de l'API Vonage
  2. Donnez un nom à l'application, par exemple VonageDF
  3. Cliquez sur le bouton pour générer une clé publique et une clé privée, un private.key sera téléchargé. Nous l'ajouterons à l'exemple d'application Dialogflow Voice API dans la prochaine section de ce guide.
  4. Associez un numéro de téléphone à cette application. Si vous n'en avez pas encore, dans le menu de gauche, cliquez sur Numbers et ensuite Buy Numbers et 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

  1. 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-application Vous 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
  2. Ajouter le private.key généré à partir du tableau de bord de Vonage et téléchargé sur votre machine à la racine du projet.
  3. A partir de la .env.example créer un .env fichier
  4. Remplir les variables d'environnement avec les informations présentes dans le fichier Tableau de bord de l'API Vonage
  • Les SERVICE_NUMBER est 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_SERVER est 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)
  1. Installer les dépendances npm install

  2. Exécuter le df-application.js node df-application.js Vous trouverez ci-dessous les étapes suivantes pour ngrok et pour Heroku :

    Option 1 : Voici les étapes à suivre pour utiliser ngrok

  3. Dans un autre terminal, lancez ngrok http 8000 Retournez au site Web de Vonage Dashboard et à la rubrique Capacités :

  4. Basculer vers Voice pour activer cette capacité

  5. Ajouter l'URL ngrok fonctionnant sur dialogflow-sample-voice-application suivi de /answer sur l'URL de la réponse. Assurez-vous que l'option HTTP GET est sélectionnée.

  6. Ajouter l'URL ngrok fonctionnant sur dialogflow-sample-voice-application suivi de /event sur l'URL de l'événement. Assurez-vous que l'option HTTP POST est sélectionnée.

  7. Cliquez sur Enregistrer les modifications

Vonage Dashboard

Option 2 : Étapes ci-dessous avec Heroku

  1. Dans un autre terminal, si vous n'avez pas encore de dépôt git local, créez-en un : git init
  2. Commencez par créer cette application sur Heroku à partir de la ligne de commande en utilisant le CLI Heroku. Note : Dans la commande, remplacez myappname avec un nom unique sur l'ensemble de la plateforme Heroku. heroku create myappname
  3. Sur votre tableau de bord Heroku où s'affiche la page de votre application, cliquez sur. Settings ajouter ce qui suit Config Vars et leur attribuer les valeurs respectives trouvées dans votre .env fichier.
API_KEY API_SECRET APP_ID SERVICE_NUMBER DF_CONNECTING_SERVER

Ajouter également le paramètre PRIVATE_KEY_FILE avec la valeur ./private.key

  1. Sur votre tableau de bord Heroku où s'affiche la page de votre application, cliquez sur l'icône de l'application. Open App et copier l'URL
  2. Maintenant, déployons l'application. Retournez sur le site Web de Vonage Dashboard et cliquez sur capabilities (capacités) :
  3. Basculer vers Voice pour activer cette capacité
  4. Cela hostname (l'URL que vous avez copiée depuis Heroku) sera utilisée, suivie de /answer sur l'URL de la réponse. Assurez-vous que l'option HTTP GET est sélectionnée
  5. Faites de même pour /event sur l'URL de l'événement. Assurez-vous que l'option HTTP POST est sélectionnée
  6. Cliquez sur Enregistrer les modifications
Vonage Dashboard

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

  1. Ouvrir le console dialogflow et assurez-vous que vous êtes dans le bon agent pour ce guide
  2. Cliquez sur l'icône Default Welcome Intent
  3. 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?
  4. Cliquez sur Enregistrer
  5. Cliquez sur l'élément de menu Intents
  6. Cliquez sur le bouton Nouvelle intention
  7. Donnez-lui le nom de Table Booker
  8. 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.date et @sys.time.
  9. Sous Actions et paramètres, cochez required pour person, date et time
  10. 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.
Training phrases examples
  1. Dans la réponse, vous pouvez ajouter ce qui suit : Table booked for $person at $time on $date. Thank you!
  2. Toggle Set this intent as end of conversation, ci-dessous les réponses
  3. Cliquez sur Enregistrer
Table Booker Intent Overview

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

  1. Appelez le numéro de téléphone lié à votre application Voice API et interagissez avec l'agent Dialogflow.

  2. Voici une façon potentielle de tester la conversation :

    1. Vonage Websocket : Connexion de votre appel, veuillez patienter.
    2. Bot : Bienvenue dans notre restaurant de démonstration. Quand et pour qui souhaitez-vous réserver une table ?
    3. Vous : Je souhaite réserver une table à 10h00 le 01/09/2022 pour Tanya
    4. 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.