Créer une action de conversation (Dialogflow)

Vous définissez la conversation de votre action à l'aide d'un fulfillment, Il s'agit d'un code déployé en tant que webhook qui contient le code de votre agent la logique de conversation. Le traitement indique à votre action ce qu'il faut faire lorsque les utilisateurs requêtes.

Pour Interactive Canvas, votre traitement communique également des informations sur votre l'application Web à l'Assistant. Vous pouvez utiliser un HtmlResponse pour demander à l'Assistant de afficher votre application Web. Un HtmlResponse peut également fournir des mises à jour à data, qui votre logique personnalisée d'application Web utilise pour apporter des modifications à votre application Web.

Cette page explique comment utiliser HtmlResponse dans le traitement et les paramètres généraux consignes d'utilisation de ce type de réponse.

Réponses HTML

Pour transmettre à l'Assistant des informations concernant votre application Web, vous devez inclure un HtmlResponse dans le traitement spécifique à l'intent. Un élément HtmlResponse peut contenir l'URL de l'application Web et les données qui la mettent à jour. Lorsque vous envoyez un HtmlResponse, les étapes suivantes se produisent:

  1. Le traitement de l'intent correspondant envoie un HtmlResponse à l'appareil.
  2. L'appareil utilise l'URL du fichier HtmlResponse pour charger l'application Web.
  3. La charge utile JSON data est transmise à l'application Web dans un rappel.
  4. Votre action de conversation envoie un nouveau HtmlResponse pour envoyer des mises à jour ou charger de nouveaux états.

Exemple de traitement

L'extrait suivant de l'exemple fulfillment montre comment implémenter HtmlResponse:

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

const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});

// map of human speakable colors to color values
const tints = {
  red: 0xFF0000,
  green: 0x00FF00,
  blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
  if (color in tints) {
    conv.ask(`Ok, I changed my color to ${color}. What else?`);
    conv.ask(new HtmlResponse({
      data: {
        tint: tints[color],
      },
    }));
    return;
  }
  conv.ask(`Sorry, I don't know that color. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      query: conv.query,
    },
  }));
});
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});

app.intent('pause', (conv) => {
  conv.ask(`Ok, I paused spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: false,
    },
  }));
});

app.intent('restart game', (conv) => {
  conv.ask(new HtmlResponse({
    data: {
      command: 'RESTART_GAME',
    },
  }));
});

exports.conversation = functions.https.onRequest(app);

welcome intent

Dans l'extrait de code ci-dessus, le traitement de l'intent welcome envoie une HtmlResponse par l'URL de l'application Web. L'Assistant reçoit ceci et charge le code HTML et JavaScript à cette adresse.

...
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});
...

Autres intents

Le HtmlResponse dans le traitement pour les autres intents transmet des valeurs variables (tint ou spin dans l'exemple) à l'application Web. La logique personnalisée pour le Web L'application utilise ces valeurs pour mettre à jour des éléments (animations, couleur, etc.):

...
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});
...

Consignes et restrictions

Gardez à l'esprit les consignes et restrictions suivantes pour HtmlResponse lorsque vous créez votre traitement:

  • Chaque intent de votre traitement doit inclure un HtmlResponse. Si un intent n'inclut pas de HtmlResponse, votre application Web se ferme.
  • Il vous suffit d'inclure l'URL de votre application Web dans le premier intent que vous envoyez à l'utilisateur (il s'agit généralement de l'intent Welcome).
  • La taille de HtmlResponse ne doit pas dépasser 50 Ko.