Cet article a pour but de présenter les concepts de base de Dialogflow de façon à ce que vous puissiez écrire votre propre Chatbot.
Dialogflow (anciennement API.ai) permet de déterminer l’intention (Intent) d’un utilisateur en utilisant du “Machine Learning” sur ce qu’il dit.
Une fois que l’intention de l’utilisateur a été déterminée, il sera possible de lui répondre en conséquence et, si cela a été configuré, exécuter une action sur un système externe.
Dialogflow ne nécessite aucune connaissance en développement, tout se passe avec une interface graphique.
Connexion à Dialogflow
Pour se connecter à Dialogflow un compte Google sera obligatoire.
Il vous faudra aussi autoriser Dialogflow à :
- Accéder à vos données dans les services GCP (Google Cloud Platform).
- Afficher et gérer vos actions dans Google.
- Accéder à l’assistant vocale.
Concepts de base
Je vais vous décrire chaque concept de base en une phrase avant de les expliquer plus en détail par la suite.
Agent
Un agent représente un module qui analysera ce que dit un utilisateur pour déterminer son intention.
Intent
Représente une intention de l’utilisateur.
Entities
Permet d’extraire des paramètres à partir de ce que dit l’utilisateur.
Events
Un évènement permet de déclencher une intention.
Context
Représente le contexte du dialogue.
Fulfillment
Permet de spécifier un Webhook qui sera appelé lorsqu’une intention a été déterminée.
Follow-up intent
Permet de structurer un arbre de discussion (chat-flow).
Agents
Nous allons commencer par créer un nouvel agent.
L’agent doit être lié à un projet Google, si vous en avez déjà créé un, sélectionnez le dans la liste.
Une fois l’agent créé nous pouvons voir qu’il contient par default 2 Intents.
Default Fallback Intent
Le “Default Fallback Intent” est utilisé lorsqu’aucun Intent ne match avec ce que dit l’utilisateur.
Default Welcome Intent
Correspond à l’Intent par défault pour les salutations.
Cette intention contient un event “Welcome” envoyé, par exemple, lorsque vous vous connectez via Google Assistant.
En bas de l’écran vous pouvez voir la liste des réponses qui seront renvoyées aléatoirement par l’Intent.
Commençons par écrire un Intent simple qui va nous retourner la date de création de la société.
Sous la partie User says on retrouve les différentes formes possibles d’entrée qui matcheront avec cet Intent. A noter que, si ce que dit l’utilisateur ne match pas exactement (faute d’orthographe, mot légèrement différent) l’Intent pourra tout de même, dans la limite du possible, être identifié.
La partie Action permet d’identifier l’Intent qui a matché avec l’entrée de l’utilisateur. Cela est très utile pour des systèmes externes qui sont appelés via des Webhooks.
La partie paramètre, permet de spécifier des valeurs qui seront mises dans le contexte ou envoyées à un Webhook. La plupart du temps, ils sont construits à partir de ce que dit l’utilisateur.
Dans la partie réponse, on retrouvera les différentes réponses possibles de l’Intent.
A noter que, si un Webhook est connecté, sa réponse sera prioritaire par rapport à celle de l’Intent.
Type de réponse
Il est possible de spécifier différents types de réponses. Il existe par exemple le type “Basic Card” qui permet de structurer la réponse avec, entre autres, une image et un lien hypertexte.
Pour la réponse “Simple Response” il est possible de spécifier une réponse orale différente de la réponse écrite. Pour cela, il suffit de cliquer sur “Customize audio output”.
Performance
Sur la partie droite de l’écran, on peut tester directement notre agent :
Comme vous pouvez le voir, j’ai volontairement fait une faute d’orthographe à “depui” et j’ai rajouté “t’elle” à la fin. Malgré cela, l’agent arrive à déterminer l’Intent qui match avec la phrase que je lui ai écrite.
Si jamais la phrase dite par un utilisateur n’est pas correctement reconnue, il suffit de l’ajouter directement dans la partie “User says” ou d’utiliser l’outil “Training” de Dialogflow.
Entities
Les Entitites sont comme des types (entier, date, lieu …). Par exemple, une Entitie Room contiendra une énumération des pièces disponibles (cuisine, salon …)
Dialogflow propose de base des Entitites tel que la couleur, les artistes de musique, des dates, des lieux, des prénoms communs …
Pour les Entitites de type Date, lorsque l’utilisateur dit “dans 2 minutes”, la date qui sera mise dans les paramètres sera l’heure actuelle auquel on aura ajouté 2 minutes.
Pour la valeur de chaque nouvelle Entitie, il est possible de définir des synonymes. Cela va permettre de regrouper les différentes valeurs qui sont au final identiques.
Par exemple, si on créé une Entitie de type Room, pour la pièce “Entrée” on pourrait mettre comme synonyme “Couloir” ou “Hall”.
Paramètres
Il est possible d’ajouter des paramètres qui seront extraits de ce que dit l’utilisateur. Un paramètre est forcément lié à une Entitie.
Ces paramètres peuvent être une liste, ils peuvent aussi être obligatoires. Il suffit pour cela de cocher les bonnes options.
Sur l’exemple ci-dessus, on peut voir que l’on a un paramètre Name qui est de type @sys.last-name (prénom) qui est obligatoire.
Si jamais ce paramètre n’est pas dans ce que dit l’utilisateur, alors, on lui demandera de le renseigner. Pour cela, dans “prompts” on va pouvoir définir, la question à poser à l’utilisateur, et ses variantes, de façon à récupérer le paramètre obligatoire.
Contexte
Les contextes permettent de stocker des paramètres de façon à pouvoir les réutiliser plus tard.
Par exemple :
On peut voir dans cet exemple, issu d’un autre projet que j’ai développé, qu’à partir du moment où l’on parle d’une ou plusieurs lumières on n’a plus besoin de les spécifier pour pouvoir interagir avec elles.
Output context
Il est possible de mettre dans un contexte, les paramètres de l’Intent courant, pour cela il suffit de rajouter dans la partie “Add Output Context” le nom du contexte de sortie.
Dans l’exemple ci-dessous les paramètres de l’Intent seront mis dans le contexte User.
Input context
La partie “Add Input Context” permet de spécifier un contexte obligatoire de façon à pouvoir exécuter l’Intent. Cela va permettre de construire des réponses personnalisées. Par exemple, retourner une réponse avec le prénom de l’utilisateur.
Fulfillment
Permet de configurer le Webhook d’une application externe.
À savoir
Le Webhook doit être une URL en HTTPS. Le certificat doit être valide et ne pas être auto-signé, il doit donc avoir été généré par une autorité de certification.
S‘il y a un quelconque problème avec le Webhook, on aura seulement une erreur 206.
Le timeout pour un Webhook est de 5 secondes.
Follow-up intent
Les Follow-up intent permettent d’architecturer un arbre de conversation (chat-flow).
Dans l’exemple ci-dessous, on peut voir que l’on a deux Follow-up Intent un positif et un négatif.
Langues
Dialogflow gère le multi-langue, il est possible de spécifier plusieurs langues pour un agent.
Vous aurez les mêmes Intents. Il suffira simplement de définir les phrases que peut dire l’utilisateur ainsi que les réponses dans la langue cible.
Intégrations
Dialogflow peut être connecté avec plusieurs services comme par exemple, Google Assistant, Slack, Cortana, Alexia, Twitter…
Il suffit pour cela de cocher le service avec lequel vous souhaitez connecter Dialogflow.
Il est possible de télécharger le package nuget ApiAiSDK de façon à interfacer facilement un projet C# avec Dialogflow. Cela va permettre par exemple d’interfacer un Bot Framework avec Dialogflow.
Je décrirais dans un prochain article comment connecter Dialogflow avec Actions on Google de façon à avoir un bot qui sera accessible à partir de Google Assistant.