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:
- Die Auftragsausführung des zugeordneten Intents sendet ein
HtmlResponse
an das Gerät. - Das Gerät verwendet die URL aus
HtmlResponse
, um die Web-App zu laden. - Die JSON-Nutzlast
data
wird in einem Callback an die Webanwendung übergeben. 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 keinHtmlResponse
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.