Konversationsaktion erstellen (Dialogflow)

Sie definieren die Unterhaltung für Ihre Aktion mit der Auftragsausführung. Dabei handelt es sich um Code, der als Webhook bereitgestellt ist und die Unterhaltungslogik des Dialogflow-Agents enthält. Die Auftragsausführung teilt deiner Aktion mit, was zu tun ist, wenn Nutzer Anfragen stellen.

Bei Interactive Canvas sendet die Auftragsausführung auch Informationen zu Ihrer Webanwendung an Assistant. Mit einem HtmlResponse kannst du Assistant anweisen, deine Web-App zu rendern. Ein HtmlResponse kann auch Updates für data bereitstellen. Diese verwendet die benutzerdefinierte Logik deiner Webanwendung, um Änderungen an deiner Web-App vorzunehmen.

Auf dieser Seite wird die Verwendung von HtmlResponse in der Auftragsausführung sowie allgemeine Richtlinien für die Verwendung dieses Antworttyps erläutert.

HTML-Antworten

Wenn Sie Informationen zu Ihrer Webanwendung an Assistant weiterleiten möchten, müssen Sie in der Intent-spezifischen Auftragsausführung ein HtmlResponse einfügen. Ein HtmlResponse kann die URL der Webanwendung und Daten enthalten, mit denen die Webanwendung aktualisiert wird. Wenn Sie ein HtmlResponse senden, werden folgende Schritte ausgeführt:

  1. Die Auftragsausführung des zugeordneten Intents sendet ein HtmlResponse an das Gerät.
  2. Das Gerät verwendet die URL aus HtmlResponse, um die Web-App zu laden.
  3. Die JSON-Nutzlast data wird in einem Callback an die Webanwendung übergeben.
  4. Die konversationelle Aktion sendet eine neue HtmlResponse, um Aktualisierungen zu senden oder neue Status zu laden.

Beispielausführung

Der folgende Auszug aus dem Beispiel für den Auftragsausführungscode zeigt, wie HtmlResponse implementiert wird:

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

Im Snippet oben sendet die Auftragsausführung für den Intent welcome eine HtmlResponse mit der URL für die Web-App. Assistant empfängt diese und lädt den HTML- und JavaScript-Code unter dieser 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',
  }));
});
...

Andere Intents

Der HtmlResponse in der Auftragsausführung für andere Intents übergibt Variablenwerte (im Beispiel tint oder spin) an die Webanwendung. Die benutzerdefinierte Logik für die Webanwendung verwendet diese Werte, um Elemente (Animationen, Farbe usw.) zu aktualisieren:

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

Richtlinien und Einschränkungen

Beachten Sie beim Erstellen der Auftragsausführung die folgenden Richtlinien und Einschränkungen für HtmlResponse:

  • Jeder Intent in der Auftragsausführung muss ein HtmlResponse enthalten. Wenn ein Intent kein HtmlResponse enthält, wird Ihre Webanwendung geschlossen.
  • Sie müssen die URL Ihrer Webanwendung nur im ersten Intent angeben, den Sie an den Nutzer senden (normalerweise der Intent Welcome).
  • HtmlResponse darf maximal 50 KB groß sein.