Traitement des builds (Dialogflow)

Le traitement définit l'interface de conversation de votre action afin d'obtenir l'entrée utilisateur ainsi que la logique de traitement de l'entrée et, à terme, de l'exécution de l'action.

Définissez votre conversation

Maintenant que vous avez défini des actions, vous pouvez créer la conversation correspondante pour ces actions. Pour ce faire, vous devez créer des intents Dialogflow qui définissent la grammaire ou ce que les utilisateurs doivent dire pour déclencher l'intent et le traitement correspondant afin de traiter l'intent lorsqu'il est déclenché.

Vous pouvez créer autant d'intents que vous le souhaitez pour définir la grammaire complète de votre conversation.

Créer des intents

Cliquez sur le signe + à côté de l'élément de menu Intents dans le panneau de navigation de gauche de Dialogflow. L'éditeur d'intents s'affiche et vous permet de saisir les informations suivantes:

  • Nom de l'intent est le nom de l'intent affiché dans l'IDE.
  • Les contextes vous permettent de limiter le déclenchement de l'intent à des cas spécifiques. Pour en savoir plus, consultez la documentation Dialogflow sur les contextes.
  • Les événements déclenchent des intents sans que les utilisateurs aient besoin de dire quoi que ce soit. GOOGLE_ASSISTANT_WELCOME est un exemple d'événement, qui permet à l'Assistant Google d'appeler votre action. Cet événement est utilisé pour l'action par défaut de votre action. Pour en savoir plus sur les intents d'assistance intégrés, consultez notre documentation.
  • Les phrases d'entraînement définissent ce que les utilisateurs doivent dire (la grammaire) pour déclencher l'intent. Saisissez ici quelques phrases (5 à 10) de ce que les utilisateurs peuvent dire pour déclencher l'intent. Dialogflow gère automatiquement les variations naturelles des exemples de phrases que vous fournissez.
  • L'action et les paramètres définissent les données à transmettre au traitement, si celui-ci est activé pour cet intent. Cela inclut les données analysées à partir de l'entrée utilisateur et le nom que vous pouvez utiliser dans votre traitement pour détecter l'intent déclenché. Vous utiliserez ce nom plus tard pour mapper votre intent à la logique de traitement correspondante. Consultez la section Actions et paramètres de la documentation Dialogflow pour en savoir plus sur la définition des actions.

  • Responses est le générateur de réponses Dialogflow, dans lequel vous pouvez définir la réponse à cet intent directement dans Dialogflow, sans appeler de fulfillment. Cette fonctionnalité est utile pour les réponses statiques qui ne nécessitent pas de fulfillment. Vous pouvez l'utiliser pour fournir de simples messages de bienvenue ou d'au revoir. Toutefois, vous utiliserez probablement le fulfillment pour répondre à vos utilisateurs pour la plupart des intents.

  • Fulfillment indique si vous souhaitez ou non appeler le traitement lorsque cet intent est déclenché. Vous activerez probablement cette fonctionnalité pour la plupart des intents dans votre agent Dialogflow. Pour afficher cet élément dans l'intent, le fulfillment doit être activé pour l'agent dans le menu Fulfillment.

Créer des réponses dans Dialogflow

Pour certains intents, vous n'aurez peut-être pas besoin que votre traitement renvoie une réponse. Dans ce cas, vous pouvez utiliser le générateur de réponses dans Dialogflow pour créer des réponses.

Dans la zone Responses (Réponses), fournissez la réponse textuelle que vous souhaitez renvoyer aux utilisateurs. Les réponses textuelles par défaut sont de simples réponses texte par synthèse vocale qui peuvent fonctionner sur plusieurs intégrations Dialogflow. Les réponses de l'Assistant Google sont décrites sur la page Réponses.

Créer des réponses de fulfillment

Votre code de fulfillment est hébergé dans la logique de fulfillment du webhook pour une action. Par exemple, dans l'exemple Silly Name Maker, cette logique se trouve dans index.js pour la fonction Cloud pour Firebase.

Lorsqu'un intent utilisant un fulfillment est déclenché, vous recevez une requête de Dialogflow contenant des informations sur l'intent. Vous répondez ensuite à la requête en traitant l'intent et en renvoyant une réponse. Cette requête et cette réponse sont définies par le webhook Dialogflow.

Nous vous recommandons vivement d'utiliser la bibliothèque cliente Node.js pour traiter les requêtes et renvoyer des réponses. Voici le processus général d'utilisation de la bibliothèque cliente:

  1. Initialisez l'objet Dialogflow. Cet objet gère automatiquement l'écoute et l'analyse des requêtes afin que vous puissiez les traiter dans votre traitement.
  2. Créez des fonctions pour gérer les requêtes. Ces fonctions traitent l'entrée utilisateur et d'autres composants de l'intent, et créent la réponse à renvoyer à Dialogflow.

Initialiser l'objet Dialogflow

Le code suivant instancie Dialogflow et exécute une configuration Node.js standard pour Google Cloud Functions:

Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
Java
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

Créer des fonctions pour gérer les requêtes

Lorsque les utilisateurs prononcent une phrase qui déclenche un intent, vous recevez une requête de Dialogflow que vous gérez avec une fonction dans votre traitement. Dans cette fonction, vous effectuerez généralement les opérations suivantes:

  1. Appliquez toutes les logiques requises pour traiter l'entrée utilisateur.
  2. Créez vos réponses pour répondre aux intents déclenchés. Tenez compte de la surface qu'utilisent vos utilisateurs pour créer des réponses appropriées. Pour en savoir plus sur la manière de traiter les réponses pour différentes surfaces, consultez la section Fonctionnalités de surface.
  3. Appelez la fonction ask() avec votre réponse.

Le code suivant vous montre comment créer deux réponses de synthèse vocale qui gèrent un intent d'appel (input.welcome) et un intent de boîte de dialogue (input.number) qui redirige l'utilisateur vers votre action et renvoie le numéro qu'un utilisateur a énoncé pour un intent Dialogflow portant le nom:

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
Java
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

L'intent personnalisé Input Number (Numéro d'entrée), qui accompagne le code ci-dessus, utilise l'entité @sys.number pour extraire un nombre des énoncés de l'utilisateur. L'intent envoie ensuite le paramètre num, qui contient le numéro de l'utilisateur, à la fonction du traitement.

Au lieu d'avoir des gestionnaires individuels pour chaque intent, vous pouvez également ajouter une fonction de remplacement. Dans la fonction de remplacement, vérifiez quel intent l'a déclenchée et effectuez les actions appropriées.

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
Java
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

Nouvelle demande en cas d'absence de correspondance

Lorsque Dialogflow ne peut établir aucune correspondance avec les grammaires d'entrée définies dans les phrases d'entraînement de vos intents, il déclenche un intent de remplacement. Les intents de remplacement repoussent généralement l'utilisateur à fournir l'entrée nécessaire pour votre action. Vous pouvez fournir des expressions de nouvelle requête en les spécifiant dans la zone Réponse d'un intent de remplacement, ou vous pouvez utiliser un webhook pour fournir des réponses.

Lorsque la réponse d'un utilisateur ne correspond pas aux phrases d'entraînement de votre action, l'Assistant Google tente de gérer l'entrée. Ce comportement facilite la modification des actions par les utilisateurs au milieu d'une conversation. Par exemple, un utilisateur demande : "Quels sont les films à l'affiche cette semaine ?", puis change de contexte en cours de conversation : "Quel temps fera-t-il demain ?" Dans cet exemple, comme "Quel temps fera-t-il demain ?" n'est pas une réponse valide à la conversation déclenchée par l'invite initiale, l'Assistant tente automatiquement de gérer la correspondance et de placer l'utilisateur dans une conversation appropriée.

Si l'Assistant ne parvient pas à trouver une action appropriée correspondant à l'entrée utilisateur, il est renvoyé au contexte de votre action.

Étant donné que l'Assistant peut interrompre votre action pour répondre à un scénario d'absence de correspondance valide, n'utilisez pas d'intents de remplacement pour traiter les requêtes des utilisateurs. Vous ne devez utiliser des intents de remplacement que pour demander à l'utilisateur une entrée valide.

Pour créer un intent de remplacement:

  1. Cliquez sur Intents dans le menu de navigation de Dialogflow.
  2. Cliquez sur ⋮ à côté de Créer un intent, puis sélectionnez Créer un intent de remplacement. (Vous pouvez également cliquer sur l'intent de remplacement par défaut pour le modifier.)
  3. Spécifiez des phrases de nouvelle invite pour répondre aux utilisateurs. Ces expressions doivent être conversationnelles et être aussi utiles que possible au contexte actuel de l'utilisateur.

    Pour ce faire sans traitement: spécifiez les expressions dans la zone Réponse de l'intent. Dialogflow choisit des expressions de cette liste de manière aléatoire pour répondre aux utilisateurs jusqu'à ce qu'un intent plus spécifique soit déclenché.

    Pour ce faire avec le fulfillment:

    1. Activez l'option Enable webhook call for this intent (Activer l'appel webhook pour cet intent) dans la section Fulfillment de l'intent.
    2. Dans la logique de traitement, gérez l'intent de remplacement comme n'importe quel autre intent, comme décrit dans la section Créer des fonctions pour gérer les requêtes.

    Par exemple, la fonction suivante utilise l'objet conv.data (une charge utile de données arbitraire que vous pouvez utiliser pour maintenir l'état) de la bibliothèque cliente Node.js pour stocker un compteur qui suit le nombre de fois où un intent de remplacement est déclenché. Si elle est déclenchée plusieurs fois, l'action se ferme. Bien que cela ne soit pas indiqué dans le code, vous devez définir les autres intents sur 0 lorsqu'un intent autre qu'une solution de remplacement est déclenché. Consultez l'exemple Number Genie pour en savoir plus sur la mise en œuvre de cette fonctionnalité.

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    Java
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

Utiliser des contextes

Utilisez des contextes si vous souhaitez que Dialogflow ne déclenche des intents de remplacement que dans certaines situations. Cette approche est utile si vous souhaitez disposer de différents intents de remplacement pour différents scénarios sans correspondance.

  • Si vous ne définissez pas de contextes sur un intent de remplacement, il est considéré comme un intent de remplacement global que Dialogflow déclenche lorsqu'aucun autre intent n'est mis en correspondance. Si vous décidez d'en utiliser un, vous ne devez définir qu'un seul de ces éléments.
  • Si vous définissez des contextes d'entrée sur un intent de remplacement, Dialogflow déclenche cet intent de remplacement lorsque les conditions suivantes sont remplies:

    • Les contextes actuels de l'utilisateur constituent un sur-ensemble des contextes définis dans l'intent.
    • Aucun autre intent ne correspond.

    Cela vous permet d'utiliser plusieurs intents de remplacement avec différents contextes d'entrée pour personnaliser des invites sans correspondance pour des scénarios spécifiques.

  • Si vous définissez un contexte de sortie pour un intent de remplacement, vous conservez l'utilisateur dans le même contexte une fois l'intent de remplacement déclenché et traité.

Pour en savoir plus, consultez la section Contextes Dialogflow.

Nouvelle invite sans saisie

Consultez la page Nouvelles invites pour savoir comment gérer les cas où l'utilisateur ne fournit pas d'autres entrées sur un appareil vocal, tel qu'un Google Home, qui nécessite une interaction continue.