Créer un agent RBM basé sur Dialogflow (avancé)

Dans cet atelier de programmation, vous allez apprendre à créer une interface de conversation à l'aide de Dialogflow pour alimenter un agent RBM.

Que allez-vous créer dans cet atelier de programmation ?

  • Agent Dialogflow alimentant la conversation d'un agent RBM
  • Interface de conversation pour un magasin de vélos fictif qui fournit aux utilisateurs des informations sur le magasin de vélos et prend rendez-vous pour réparer ou réparer son vélo

Points abordés

  • Comment utiliser les trois principales constructions (intents, entités et contextes) de Dialogflow pour créer une interface de conversation
  • Connecter votre interface de conversation à vos propres services et API à l'aide du fulfillment et de l'éditeur intégré de Dialogflow (fourni par Cloud Functions for Firebase)
  • Comment créer des types de réponses RBM à partir de Dialogflow afin de créer une expérience RBM enrichie pour les utilisateurs

Prérequis

  • Un compte Google

Créer et interroger votre premier agent

Durée : 10 h 00

Créer votre premier agent Dialogflow

Pour créer un agent Dialogflow:

  1. Ouvrez un nouvel onglet et connectez-vous à Dialogflow.
  2. Cliquez sur Créer un agent dans le panneau de navigation de gauche.

  3. Saisissez "codelabRBMBikeShop" comme nom par défaut pour l'agent (anglais) et définissez le fuseau horaire par défaut sur celui de votre fuseau horaire. Cliquez ensuite sur Créer.

La console Dialogflow

La console Dialogflow doit s'afficher. Si vous travaillez sur un petit écran et que le volet de navigation de gauche est masqué, cliquez sur le bouton de navigation en haut à gauche. Le bouton des paramètres vous permet d'accéder aux paramètres de l'agent actuel.

Le milieu de la page affiche la liste des intents de l'agent. Par défaut, les agents Dialogflow commencent avec deux intents. Votre agent correspond à Intent de remplacement par défaut s'il ne comprend pas ce que disent vos utilisateurs. L'intent d'accueil par défaut accueille vos utilisateurs. Vous pouvez modifier ces intents pour personnaliser l'expérience.

À droite se trouve le simulateur Dialogflow. Vous pouvez ainsi tester votre agent en parlant ou en saisissant des messages.

Interroger votre agent

Les agents Dialogflow sont mieux décrits comme des modules NLU (Natural Language Understanding, compréhension du langage naturel). Vous pouvez les inclure dans votre application, produit ou service pour transformer les requêtes naturelles des utilisateurs en données exploitables.

Il est temps d'essayer votre agent ! Dans le simulateur de droite, cliquez sur le champ de texte Try it now (Essayer), saisissez "Hi"", puis appuyez sur Entrée.

Dialogflow identifie la requête, correspond à l'intent d'accueil par défaut et répond avec un message d'accueil générique. Cela fonctionne parce que Dialogflow entraîne automatiquement l'intent d'accueil par défaut avec des exemples de messages d'accueil.

Créer un agent RBM

Connectez-vous à la console développeur de Business Communications, puis cliquez sur Créer un agent.

Dans le champ "Nom", saisissez "Your Name's Bike Shop" (par exemple, "Sean’s Bike Agent""), sélectionnez une région, puis cliquez sur Create agent (Créer un agent).

Connecter votre agent RBM à Dialogflow

Une fois votre agent RBM créé, cliquez dessus pour afficher sa page Présentation. Cliquez sur le lien Intégrations dans le panneau de navigation de gauche.

Par défaut, les agents RBM utilisent Google Cloud Pub/Sub pour gérer les messages destinés aux utilisateurs. Pour connecter votre agent RBM à l'agent Dialogflow que vous avez créé précédemment, cliquez sur l'intégration de Dialogflow.

Dans la boîte de dialogue, cliquez sur Connecter un modèle existant. Suivez les instructions pour autoriser votre agent RBM à appeler votre agent Dialogflow, puis cliquez sur Suivant.

Enfin, vous devez fournir l'ID du projet Dialogflow. Dans un onglet de navigateur différent de celui de la console de développement Business Communications, accédez à Dialogflow et ouvrez l'agent CodelabRBMBikeShop que vous avez créé précédemment. Cliquez sur l'icône en forme de roue dentée à côté du nom du projet dans le panneau de navigation de gauche.

Vous accédez alors aux paramètres du modèle. Sous PROJET GOOGLE, recherchez et copiez l'ID du projet.

Revenez à l'onglet dans lequel la Business Communications Developer Console est ouverte, collez l'ID du projet dans la boîte de dialogue, puis cliquez sur Démarrer l'intégration.

Ce processus prend environ deux minutes. Une fois l'opération terminée, l'option d'intégration Dialogflow doit être encadrée et un lien View agent (Afficher l'agent) doit être disponible.

Tous les messages échangés avec votre agent sont désormais gérés par l'agent Dialogflow CodelabRBMBikeShop.

Inviter votre appareil de test et envoyer un message

Avant de vous lancer dans Dialogflow, configurez votre appareil de test. Si vous ne disposez pas déjà d'un appareil capable de recevoir des messages RBM, suivez ce guide pour le préparer.

Dans la console de développement Business Communications, cliquez sur Appareils dans le menu de navigation de gauche. Dans le formulaire, saisissez le numéro de téléphone complet de votre appareil au format E.164 (par exemple, +12223334444), puis cliquez sur Ajouter.

Vous recevez l'invitation à tester sur votre appareil. Appuyez sur Faire de moi un testeur.

Dans votre navigateur, recherchez votre appareil dans la liste des appareils et envoyez-lui un message de test. Si vous avez reçu un message sur votre appareil de la part de votre agent RBM, vous êtes prêt à poursuivre cet atelier de programmation.

Créer votre intent de bienvenue

Généralement, avec un agent RBM fourni par Dialogflow, pour lancer une conversation, vous effectuez un appel d'API spécifiant le numéro de téléphone de l'utilisateur et l'intent Dialogflow qui démarre la conversation (généralement l'intent de bienvenue de l'agent). Pour cet atelier de programmation, nous ignorons cette étape et utilisons à la place le fil de discussion que nous avons déjà créé à l'étape précédente avec l'appareil de test de la console de développement Business Communications. Toutefois, si vous souhaitez en savoir plus sur cette fonctionnalité d'API, consultez ce guide.

Commençons par ajouter des réponses RBM à l'intent d'accueil par défaut afin que Dialogflow puisse l'utiliser avec votre agent RBM. Commencez par accéder à l'onglet du navigateur dans lequel Dialogflow est ouvert. Cliquez sur Intent d'accueil par défaut, faites défiler la page jusqu'à la section Réponses, cliquez sur + dans la liste des types de réponses, puis sélectionnez RCS Business Messaging (RBM).

Cliquez sur Ajouter des réponses, puis sélectionnez Réponse simple. Dans le champ de texte Simple Response (Réponse simple), saisissez "Hello", bienvenue dans le magasin de vélos de Hogarth. Comment puis-je vous aider ? (remplacez Hogarth par votre nom), puis cliquez sur Save (Enregistrer).

Démarrer une conversation

Maintenant que l'intent de bienvenue est configuré, retournez sur votre appareil de test et envoyez le message "Bonjour". Ce message déclenche l'intent d'accueil par défaut. Vous devriez voir quelque chose de semblable à l'image ci-dessous.

Modifier votre intention de bienvenue

Maintenant que Dialogflow envoie un message simple, mettons-le à jour pour qu'il soit un peu plus utile. Nous voulons non seulement saluer l'utilisateur, mais aussi guider les actions qu'il effectue.

L'agent que nous créons doit avoir deux fonctionnalités principales: vérifier les horaires d'ouverture de l'établissement et planifier un rendez-vous. Remplacer notre simple message de bienvenue par une fiche proposant des réponses suggérées pour effectuer ces interactions.

Dans la section Intents d'accueil par défaut, Réponses, sélectionnez l'onglet RCS Business Messaging (RBM). Supprimez la réponse simple existante en cliquant sur l'icône de la corbeille. Cliquez ensuite sur Ajouter des réponses, puis sélectionnez Carte enrichie autonome.

Dans le formulaire de carte enrichie, saisissez la commande suivante:

  • Titre de la fiche : Bonjour et bienvenue dans le magasin de vélos de Hogarth.
  • Description de la carte : Comment puis-je vous aider ? Sélectionnez l'une des options ci-dessous:
  • Select Card Orientation (Sélectionner l'orientation de la fiche) : Vertical
  • URL de l'image/de la vidéo: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Sélectionner la hauteur du support : Medium

Cliquez sur Ajouter une suggestion, puis saisissez ce qui suit:

  • Suggestion de texte : Quels sont vos horaires ?
  • Suggestion de postback : response_hours

Ajoutez une autre suggestion en cliquant sur Ajouter une suggestion, puis en saisissant ce qui suit:

  • Texte de la suggestion : Prenez rendez-vous
  • Suggestion de postback: response_appointment

Cliquez sur Enregistrer.

Essayez !

Lorsque le modèle indique "Entraînement de l'agent terminé", revenez sur votre appareil et envoyez le message "Bonjour" à votre agent. Vous devriez maintenant voir la carte enrichie autonome que vous venez de créer.

Appuyez sur Horaires. Notez que l'intent de remplacement par défaut est déclenché. En effet, votre agent Dialogflow ne sait pas comment gérer les données de postback que vous avez configurées pour cette suggestion (reply_hours&hourt).

Résolvons à présent ce problème.

Créer votre intent "Heures"

Dans Dialogflow, les intents permettent de classer les intentions d'un utilisateur. Les intents ont des phrases d'entraînement, qui sont des exemples de ce qu'un utilisateur pourrait dire à votre agent. Par exemple, un internaute souhaitant connaître les horaires d'ouverture de notre magasin de vélos peut demander : "Quand ouvrez-vous ?", &"Quels sont vos horaires?" ou "Combien de temps puis-je arriver ?".

Toutes ces requêtes sont uniques, mais ont la même intention: obtenir des informations sur les horaires d'ouverture de notre magasin de vélos.

Pour couvrir cette requête, créez un intent "Hours" (Heures) :

  1. Dans le volet de navigation de gauche, cliquez sur le signe + à côté de la section Intents.
  2. Dans le champ Intent name (Nom de l'intent), saisissez "Hours".
  3. Sous Phrases d'entraînement, cliquez sur Ajouter une expression utilisateur et saisissez les informations suivantes, en appuyant sur Entrée après chaque entrée:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours.

    Cette dernière expression d'entraînement permet de mapper les données de postback que vous avez configurées dans la section précédente avec cet intent.

  4. Sous Réponses, cliquez sur +, puis sélectionnez RCS Business Messaging (RBM).

  5. Cliquez sur Ajouter des réponses, puis sélectionnez Réponse simple.

  6. Dans le champ de texte Réponse simple, saisissez "Nous sommes ouverts tous les jours de 9h à 17h30".

  7. Cliquez sur Enregistrer.

Essayez !

Essayez maintenant de demander à l'agent ses horaires d'ouverture. Sur votre appareil, dans la conversation de votre agent RBM, saisissez "Quand êtes-vous ouvert ?" et envoyez le message à votre agent.

Votre agent répond maintenant correctement à la requête. Notez que même si votre requête était légèrement différente de l'expression d'entraînement ("Quand êtes-vous ouvert ? par rapport à l'expression d'entraînement) Dialogflow a toujours fait correspondre la requête à l'intent approprié. Vous pouvez également appuyer sur Quels sont vos horaires ? dans la carte enrichie.

Dialogflow utilise les expressions d'entraînement comme exemples pour un modèle de machine learning afin de faire correspondre les requêtes utilisateur à l'intent approprié. Le modèle de machine learning compare la requête à chaque intent de l'agent, attribue un score à chaque intent et met en correspondance l'intent ayant le score le plus élevé. Si l'intent ayant le score le plus élevé a un score très faible, l'intent de remplacement est utilisé.

Ajouter un traitement

Pendant que cela fonctionne, l'agent que nous avons créé se comporte un peu de manière naturelle. Lorsque l'utilisateur pose une question du type "Êtes-vous ouvert ?", l'agent répond "Nous sommes ouverts tous les jours de la semaine de 9h à 17h30". Il serait beaucoup plus naturel et utile de nous indiquer directement si le magasin est ouvert.

Pour ce faire, notre agent doit vérifier si le magasin est actuellement ouvert et générer une réponse différente dans les deux cas. Dans Dialogflow, ce type de logique complexe doit être mis en œuvre dans le webhook de fulfillment.

Un webhook de fulfillment est un serveur HTTP appelé par Dialogflow avec des informations sur l'état actuel de la conversation. Le code de fulfillment effectue toutes les actions requises, puis génère une réponse que Dialogflow renvoie à l'utilisateur.

Nous allons maintenant procéder au déploiement d'un webhook de fulfillment permettant à notre agent de répondre plus efficacement.

Configuration: déployer et activer le fulfillment

Dialogflow dispose d'un éditeur Cloud Functions for Firebase intégré qui vous permet d'écrire et de déployer du code JavaScript pour gérer votre traitement.

Dans le menu de navigation de gauche de Dialogflow, cliquez sur Fulfillment pour ouvrir la page de fulfillment. Cliquez sur le bouton d'activation à côté de l'option Éditeur intégré pour activer l'éditeur Cloud Functions for Firebase.

Vous remarquerez que l'éditeur contient deux fichiers: "index.js", qui contient le code principal du fulfillment, et "package.json", qui détaille les dépendances requises.

Nous allons maintenant importer un exemple de code pour alimenter votre traitement.

Copiez et collez le texte de ce fichier dans "index.js" en remplaçant tout son contenu actuel:

https://storage.googleapis.com/df-rbm-codelab/index.js

Faites défiler la page jusqu'en bas, puis cliquez sur DÉPLOYER. Au bout d'une minute environ, votre code sera déployé dans Cloud Functions for Firebase.

Une fois la fonction déployée, la date et l'heure du déploiement s'affichent au bas de la page:

Examinez le code de traitement. La fonction hoursHandler appelle currentlyOpen pour déterminer si le magasin est actuellement ouvert et ajoute une réponse RBM différente en fonction de la condition.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

La ligne intentMap.set('Hours', hoursHandler); indique à la bibliothèque de traitement que la fonction hoursHandler doit s'exécuter lorsque l'intent "Hours" (Heures) est mis en correspondance. Toutefois, nous devons également indiquer à Dialogflow d'activer le fulfillment pour notre intent "Hours".

Dans le panneau de navigation de gauche, cliquez sur Intents et ouvrez l'intent "Hours". Ouvrez la section Fulfillment en bas de la page, puis sélectionnez Activer l'appel webhook pour cet intent afin qu'il soit activé.

Une fois l'intent enregistré, vous pouvez l'essayer. Dans le simulateur de droite, saisissez "Êtes-vous ouvert ?". Si vous cliquez sur Informations de diagnostic et que vous inspectez la réponse de l'API, vous devriez voir la réponse du fulfillment. Notez que le fuseau horaire utilisé par le serveur Cloud Functions for Firebase est UTC. La réponse risque donc de ne pas être correcte pour votre heure locale actuelle.

En cas d'erreur dans votre fulfillment, Dialogflow utilise la réponse définie dans la section Réponses de la page Intent pour permettre à votre agent de récupérer normalement.

Ensuite, nous utiliserons des entités pour extraire les parties pertinentes de la requête de l'utilisateur. Cela permet aux utilisateurs de prendre rendez-vous avec notre magasin de vélos pour réparer ou réparer son vélo.

Extraire des données avec des entités

Durée : 12 h

Dans cette section, nous allons voir comment extraire des données d'une requête utilisateur pour permettre aux utilisateurs de prendre rendez-vous avec notre magasin de vélos pour réparer ou réparer son vélo.

Ajouter des paramètres à vos intents

Les paramètres sont des mots ou des expressions pertinents dans une requête utilisateur que Dialogflow extrait pour que votre agent puisse fournir une réponse appropriée. Vous allez créer un intent avec des paramètres et apprendre à inclure leurs valeurs dans vos réponses.

  1. Cliquez sur + à côté de la section Intents dans le menu de navigation de gauche pour créer un intent.
  2. Pour le nom de l'intent, saisissez "Prendre rendez-vous" en haut de la page.
  3. Ajoutez les éléments suivants en tant qu'expressions d'entraînement :
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed, I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

Dialogflow détecte automatiquement les paramètres connus dans vos phrases d'entraînement et les crée pour vous.

Sous Phrases d'entraînement, Dialogflow remplit automatiquement le tableau de paramètres avec les informations recueillies:

  • le paramètre est facultatif (facultatif)
  • nommé date et time
  • correspond au type d'entité système @sys.date et @sys.time**
  • a la valeur $date et $time
  • n'est pas une liste

Utiliser les données de paramètre

Vous pouvez utiliser la valeur d'un paramètre dans vos réponses. Dans ce cas, vous pouvez utiliser $date et $time dans vos réponses. Elles seront remplacées par la date et l'heure spécifiées dans la requête destinée à votre agent.

Dans Réponses, ajoutez l'onglet RCS Business Messaging, ajoutez le code suivant à une réponse simple, puis cliquez sur Enregistrer:

Great! I've set up your appointment for $date at $time.  See you then!

Essayez !

À présent, interrogez votre agent en disant : "Puis-je prendre rendez-vous pour 14h demain ?" dans le simulateur situé dans le panneau de droite.

En bas de la sortie du simulateur, vous pouvez constater que Dialogflow a correctement extrait les paramètres "demain" et "14h" de la requête, et les a correctement analysés en tant que date et heure. Essayez maintenant la même chose sur votre appareil de test et vérifiez que la réponse inclut correctement la date et l'heure analysées.

Rendre les paramètres obligatoires

Dans le cas de notre magasin de vélos, nous devons connaître la valeur de la date et de l'heure avant de pouvoir prendre rendez-vous. Par défaut, tous les paramètres Dialogflow sont facultatifs. Pour les rendre obligatoires, nous devons cocher la case à côté de chaque paramètre que vous souhaitez rendre obligatoire. Cochez la case à côté de chaque paramètre dans l'intent "Prendre rendez-vous" :

Maintenant que chaque paramètre est obligatoire, nous devons créer une invite pour chacun d'eux. Les invites demandent à l'utilisateur de fournir une valeur pour tout paramètre non fourni lorsque l'utilisateur a initialement exprimé son intention (dans ce cas, de prendre rendez-vous). Cliquez sur Définir les invites afin de créer une invite pour un paramètre, puis saisissez les invites suivantes pour chaque paramètre:

Paramètre Prompt
date Quel jour souhaitez-vous venir ?
Temps Quelle heure vous convient le mieux ?

Après avoir saisi les invites, cliquez sur Enregistrer.

Essayez !

Sur votre appareil, appuyez sur la suggestion Prendre rendez-vous ou saisissez "Je veux faire réparer mon vélo". Vous obtenez la réponse "Quel jour voulez-vous arriver ?". Indiquez une date (demain) et vous obtenez une réponse en demandant l'heure. Répondez-y et le rendez-vous est pris.

Les requêtes contenant des informations dans la requête initiale (par exemple, "Je veux prendre rendez-vous pour demain") renseignent le paramètre approprié (la date), ignorent l'invite de date ( "Quel jour voulez-vous venir ?") et se déplacent jusqu'à l'invite temporelle ("Quelle heure vous convient ?").

Nous venons d'utiliser des entités et des paramètres Dialogflow pour créer une conversation unique, sans code ni configuration. Ensuite, nous verrons comment utiliser le fulfillment pour guider les réponses de l'utilisateur à des invites telles que "À quelle date souhaitez-vous planifier un rendez-vous".

Configuration: activer le fulfillment

Dans le panneau de navigation de gauche, cliquez sur Intents et ouvrez l'intent "Prendre rendez-vous". Ouvrez Fulfillment, sélectionnez Activer l'appel webhook pour cet intent et Activer l'appel webhook pour le remplissage de cases pour qu'ils soient tous les deux activés, puis cliquez sur Enregistrer.

Lorsque ces deux options sont activées, lorsque cet intent est déclenché, Dialogflow utilise le fulfillment pour générer des réponses pour les paramètres requis, si nécessaire, ainsi que la réponse RBM pour l'intent.

Appliquer le traitement

Dans le menu de navigation de gauche de Dialogflow, cliquez sur Fulfillment pour ouvrir la page de fulfillment. Faire défiler jusqu'à la ligne

intentMap.set('Hours', hoursHandler);

Ajoutez la ligne suivante:

intentMap.set('Make Appointment', makeAppointment);

Cela indique à la bibliothèque de fulfillment que la fonction makeAppointment doit s'exécuter lorsque l'intent "Prendre rendez-vous" est mis en correspondance.

Ensuite, copiez le code ci-dessous et collez-le sous la fonction currentlyOpen. Les deux fonctions getSuggestedTimes et getSuggestedDates créent des listes de chips utiles pour faciliter les réponses des utilisateurs.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

Ensuite, sous hoursHandler, copiez et collez le code ci-dessous, puis cliquez sur Déployer.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Prenez quelques minutes pour inspecter le code. Notez que les valeurs requises sont en cours de vérification pour les valeurs et, si ce n'est pas le cas, que l'utilisateur reçoit un message approprié et un ensemble de suggestions.

Essayez !

Sur votre appareil, appuyez sur la suggestion Prendre rendez-vous ou saisissez "Je veux faire réparer mon vélo". Vous obtenez la réponse "Quel jour voulez-vous arriver ?", ainsi que quelques suggestions utiles : "Demain" ou "Dans une semaine à partir de maintenant". Indiquez une date (« demain ») et vous recevrez une réponse un peu plus tard. Répondez à cela et vous verrez que votre rendez-vous a été défini.

Gérer l'état avec des contextes

Durée: 7:00

Ajouter des contextes à l'état conversationnel

Une fois que notre utilisateur a réussi à prendre rendez-vous, nous pouvons lui demander des informations supplémentaires. Imaginez que notre magasin de vélos propose deux types de rendez-vous: la réparation ou la révision. Nous voulons savoir de quoi il a besoin.

Pour commencer, mettons à jour la réponse pour l'intent "Prendre rendez-vous" pour demander à l'utilisateur de quel type de rendez-vous il a besoin. Remplacez la réponse réussie dans votre fonction de traitement makeAppointment par le texte ci-dessous, puis cliquez sur Deploy (Déployer).

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

Pour collecter la réponse à cette question, nous devons créer un autre intent. Toutefois, il est important que cette nouvelle intention ne soit mise en correspondance qu'une fois que vous avez obtenu une réponse à cette question. Pour ce faire, nous pouvons le définir comme un intent de suivi.

Les intents de suivi sont des intents qui ne peuvent être mis en correspondance qu'après la mise en correspondance de leur intent "parent" (dans ce cas, notre intent "Prendre rendez-vous"). Cliquez sur Intents dans le menu de navigation de gauche (si le menu est masqué, cliquez sur le bouton de menu 💙 en haut à gauche). Passez ensuite la souris sur l'intent "Prendre rendez-vous", puis cliquez sur Ajouter un intent de suivi qui s'affiche à droite du nom de l'intent:

Ensuite, cliquez sur Personnalisé dans le menu déroulant.

Dialogflow a automatiquement nommé l'intent de suivi "Prendre rendez-vous – personnalisé", et la flèche indique la relation entre les intents.

Les intents de suivi ne peuvent être mis en correspondance qu'après la mise en correspondance de l'intent parent. Étant donné que cet intent ne sera mis en correspondance qu'après l'intent "Prendre rendez-vous", nous partons du principe que l'utilisateur vient de se poser la question "Avez-vous besoin d'une réparation ou d'une révision".

Pour obtenir la réponse à cette question, nous devons d'abord définir des entités.

Création de votre première entité

Dialogflow permet de définir des entités de développeur, qui fonctionnent de la même manière que les entités système de Dialogflow. Commençons par créer un type d'entité. Nous souhaitons que les utilisateurs puissent choisir le type de rendez-vous qu'ils souhaitent réserver dans notre magasin. Par conséquent, nous allons appeler le type d'entité AppointmentType. Nous allons ajouter deux entités dans le type d'entité AppointmentType pour les deux types de rendez-vous : service et fix.

Pour créer un type d'entité:

  1. Cliquez sur le signe + à côté de la section Entités dans le panneau de navigation de gauche.
  2. Saisissez le nom du type d'entité.
  3. Cliquez sur le champ de texte et ajoutez les entrées suivantes :
    • service
    • corriger
  4. Lorsque vous saisissez une entrée, appuyez sur Tabulation pour déplacer le curseur dans le champ de synonyme. Ajoutez les synonymes suivants à chaque entrée. Veillez à ajouter chaque mot individuellement plutôt que de copier et coller la chaîne entière:
Entrée Synonyme
service
  • service
  • refonte
  • entretien
  • réglage
  • régler
corriger
  • corriger
  • repair
  • réparer
  • cassé
  • pneu crevé
  • nombre fixe
  1. Cliquez sur Enregistrer.

Chaque type d'entité doit avoir les éléments suivants:

  • un nom permettant de définir la catégorie ("appointType")
  • une ou plusieurs entrées ("service&fixt;
  • un ou plusieurs synonymes (entretien, réglage, etc.)

Dialogflow gère des éléments simples tels que le pluriel et les majuscules, mais veillez à ajouter tous les synonymes possibles. Plus vous ajoutez d'éléments, plus votre agent sera en mesure de déterminer vos entités.

Ajouter votre entité

Maintenant que nous avons défini le type d'entité pour le rendez-vous, nous pouvons l'utiliser dans les expressions d'entraînement de notre intent "Prendre rendez-vous – personnalisé" :

  1. Cliquez sur Intents dans le panneau de navigation de gauche, puis cliquez sur la flèche à côté de l'intent "Prendre rendez-vous" pour afficher ses intents de suivi. Cliquez sur l'intent "Prendre rendez-vous – Personnalisé".
  2. Ajoutez les expressions d'entraînement suivantes :

    • Peux-tu entretenir mon vélo ?
    • J'ai besoin d'une réparation.

  3. Le type d'entité de rendez-vous doit être automatiquement annoté dans les expressions d'entraînement que vous avez saisies. Le paramètre AppointmentType est alors ajouté à la table, qui est sous la section Training phrases (Expressions d'entraînement). Cochez la case pour marquer ce paramètre comme REQUIRED (OBLIGATOIRE).

  4. Cliquez sur Définir les invites, puis saisissez "Nous pouvons réparer ou réparer votre vélo. Laquelle préférez-vous ?

  5. Sous Responses (Réponses), modifiez la réponse par "OK". Nous allons planifier un $RendezType.", puis cliquez sur Save (Enregistrer).

Essayez !

Sur votre appareil, appuyez sur la suggestion Prendre rendez-vous ou saisissez "Je veux faire réparer mon vélo". Vous obtenez la réponse "Quel jour voulez-vous arriver ?", ainsi que quelques suggestions utiles : "Demain" ou "Dans une semaine à partir de maintenant". Indiquez une date (demain) et vous recevrez une réponse le temps d'y répondre.

Sélectionnez une heure pour afficher la réponse que vous avez créée et vous demander si le service est destiné à des fins de service ou d'optimisation.

Ensuite, saisissez "J'ai besoin d'une réparation". Vous devriez voir la réponse "OK, nous allons programmer une correction.", indiquant que Dialogflow a extrait le type de rendez-vous correct en tant qu'entité.

Pour le moment, la réponse à cette intention (et nous allons programmer une correction) ne s'avère pas très utile. Il serait bon que la réponse confirme la date et l'heure de prise de rendez-vous. Pour ce faire, nous avons besoin de la date et de l'heure, mais les paramètres de date et d'heure ne sont présents que dans l'intent "Prendre rendez-vous" et non dans l'intent "Prendre rendez-vous – personnalisé".

Intents et contextes

Pour répondre avec un paramètre collecté à partir de l'intent "Prendre rendez-vous", vous devez savoir comment fonctionnent les intents de suivi. Les intents de suivi utilisent des contextes pour savoir si un intent parent a été déclenché. Si vous inspectez l'intent "Make appointment" (Prendre rendez-vous), vous verrez s'afficher le champ "MakeRendez-followup" (Faire un suivi des rendez-vous) comme un contexte de sortie, précédé du nombre 2 :

Une fois que l'intent "Prendre rendez-vous" est mis en correspondance, Dialogflow associe le contexte "Rendez-vous" à la conversation pendant deux tours. Par conséquent, lorsque l'utilisateur répond à la question ("Avez-vous besoin d'une réparation ou d'une révision" ?), le contexte "Rendez-vous" est actif. Tout intent ayant le même contexte d'entrée est fortement privilégié lorsque Dialogflow met un intent en correspondance.

Cliquez sur Intents dans le panneau de navigation de gauche, puis cliquez sur l'intent "&Rendez-vous - personnalisé".

Vous pouvez constater que l'intent a le même contexte d'entrée (« Rendez-vous – suivi ») que le contexte de sortie de « Prendre rendez-vous ». C'est pourquoi l'option "Rendez-vous - personnalisé" ne correspond qu'après la mise en correspondance de l'intent "Prendre rendez-vous".

Contextes et paramètres

Les contextes stockent les valeurs des paramètres, ce qui signifie que vous pouvez accéder aux valeurs des paramètres définis dans l'intent "Prendre rendez-vous" dans d'autres intents, comme "MakeRendez-vous" personnalisé.

Ajoutez la réponse suivante à l'intent &Maket – custom&quot ; puis cliquez sur Save (Enregistrer) : "OK, nous allons programmer un $RendezType, #Makeappoint- followup.date, à #MakeRendez-followup.time. À très bientôt."

Vous pouvez maintenant ré-interroger votre agent et obtenir la réponse appropriée. Saisissez d'abord "Puis-je prendre rendez-vous pour entretenir mon vélo à 11h demain matin, puis répondre à la question en demandant « J'ai besoin d'une réparation ».

Dans la réponse confirmant le rendez-vous, vous devriez constater que les valeurs des paramètres de date et d'heure ont été extraites du contexte.

Améliorer le format des réponses

Durée : 5 min

Utiliser le fulfillment pour mettre en forme la date et l'heure

Comme vous l'avez probablement remarqué, la date et l'heure indiquées dans le message de réussite ne sont pas très conviviales. Pour résoudre ce problème, nous devons à nouveau utiliser le fulfillment, afin d'utiliser JavaScript pour mettre en forme les paramètres de date et d'heure de sorte qu'ils soient facilement lisibles par un utilisateur.

Accédez à votre intent "Rendez-vous – personnalisé" en cliquant sur Intents dans le panneau de navigation de gauche, puis cliquez sur l'intent "&Rendez-vous" personnalisé. Faites défiler la page jusqu'en bas et activez l'option Activer l'appel webhook pour cet intent, puis cliquez sur Enregistrer.

Accédez au traitement en cliquant sur le lien Fulfillment dans le panneau de navigation de gauche. Copiez le code ci-dessous et collez-le sous la fonction makeAppointment.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Sous cette fonction, recherchez la ligne intentMap.set('Make appointment', makeAppointment);, puis ajoutez intentMap.set('Make appointment - custom', makeAppointmentFollowUp); pour que l'intent de suivi soit appelé en même temps que la fonction que vous avez collée précédemment.

Examinez le code makeAppointmentFollowUp et voyez comment les paramètres sont extraits du contexte entrant et de cet intent. Avant la génération de responseText, le code met en forme la date et l'heure pour qu'elles soient lisibles.

Essayez !

Sur votre appareil, appuyez sur la suggestion Prendre rendez-vous ou saisissez "Je veux faire réparer mon vélo". Vous obtenez la réponse "Quel jour voulez-vous arriver ?", ainsi que quelques suggestions utiles : "Demain" ou "Dans une semaine à partir de maintenant". Indiquez une date (demain) et vous recevrez une réponse le temps d'y répondre.

Sélectionnez une heure pour afficher la réponse que vous avez créée et vous demander si le service est destiné à des fins de service ou d'optimisation.

Ensuite, saisissez "J'ai besoin d'une réparation". La réponse confirmant le rendez-vous s'affiche, avec le type de rendez-vous, la date et l'heure dans un format lisible.

Vous avez terminé !

Durée : 1 min

Bien joué !

Vous avez suivi toutes les étapes de création d'un agent RBM fourni par Dialogflow.

Amusez-vous à développer cette nouvelle plate-forme passionnante !