Wenn Sie Informationen an Ihre Web-App weiterleiten möchten, müssen Sie eine Canvas
-Antwort senden
aus Ihrer Konversationslogik. Eine Canvas
-Antwort kann eine der folgenden Aktionen ausführen:
- Vollbild-Web-App auf dem Gerät des Nutzers rendern
- Daten übergeben, um die Web-App zu aktualisieren
In den folgenden Abschnitten wird beschrieben, wie Sie für jede Szenario.
Interaktiven Canvas aktivieren
Sie müssen Ihre Aktion auf eine bestimmte Weise konfigurieren, um den interaktiven Canvas verwenden zu können.
Zum Erstellen einer Aktion, die Interactive Canvas verwendet, sind zusätzliche
Konfiguration in der Actions Console (und für das Actions SDK)
Ihre settings.yaml
-Datei). Um das vollständige Verfahren zum Erstellen und
Konfigurieren einer interaktiven Canvas-Aktion mit dem Actions SDK, siehe
Projekt erstellen
Wenn Sie Actions Builder verwenden, führen Sie die folgenden zusätzlichen Schritte aus, um die interaktive Funktion zu aktivieren Leinwand:
- Wenn du die Karte Spiel auf der Seite Welche Art von Aktion nicht ausgewählt hast, Wollen Sie erstellen? klicken Sie im oberen Navigationsbereich auf Bereitstellen. Wählen Sie unter Weitere Informationen die Option Spiele und in der Kategorie „Spaß“. Klicken Sie auf Speichern.
- Klicken Sie im oberen Navigationsbereich der Actions Console auf Develop.
- Klicken Sie im linken Navigationsbereich auf Interaktiver Canvas.
- Wählen Sie unter Möchten Sie, dass Ihre Aktion den interaktiven Canvas verwendet? eine der folgenden Optionen aus:
Folgendes:
<ph type="x-smartling-placeholder">
- </ph>
- Interaktiven Canvas mit Server-Webhook-Ausführung aktivieren. Diese Option
benötigt den Webhook, um auf bestimmte Funktionen zuzugreifen, und verwendet häufig
onUpdate()
, um Daten an die Web-App zu übergeben. Wenn diese Option aktiviert ist, werden Intent-Übereinstimmungen Sie können den Webhook vor der Umstellung aufrufen, in eine andere Szene verschieben oder das Gespräch beenden. - Aktivieren Sie Interactive Canvas mit Clientausführung. Mit dieser Option können
die Logik für die Auftragsausführung von Webhooks in die Webanwendung verschieben,
Webhook nur die
Conversational-Features aufruft,
etwa die Kontoverknüpfung. Wenn diese Option aktiviert ist, kannst du
expect()
für Folgendes verwenden: Registrierung von Intent-Handlern auf Clientseite.
- Interaktiven Canvas mit Server-Webhook-Ausführung aktivieren. Diese Option
benötigt den Webhook, um auf bestimmte Funktionen zuzugreifen, und verwendet häufig
- Optional: Geben Sie die URL Ihrer Web-App in das Feld Standardmäßige Web-App-URL festlegen ein.
ein. Durch diese Aktion wird eine
Canvas
-Standardantwort mit dem URL-Feld hinzugefügt deinen Hauptaufruf. - Klicken Sie auf Speichern.
Wenn Sie das Actions SDK verwenden, führen Sie diese zusätzlichen Schritte aus, um Interactive Leinwand:
- Legen Sie das Feld
category
in der Dateisettings.yaml
aufGAMES_AND_TRIVIA
fest. um deine Aktion am besten zu beschreiben und Nutzern zu helfen, deine Aktion zu finden. - Legen Sie das Feld
usesInteractiveCanvas
in der Dateisettings.yaml
auftrue
fest.
Oberflächenkapazität prüfen
Das Interactive Canvas-Framework läuft nur auf Assistant-Geräten mit
eine visuelle Oberfläche, sodass deine Aktion prüfen muss, ob INTERACTIVE_CANVAS
Funktion auf dem Gerät des Nutzers aktivieren. Wenn Sie Prompts in Actions Builder definieren,
können Sie im Feld selector
des
candidates
-Objekt. Mit der Prompt-Auswahl wird der Vorschlag ausgewählt, der am besten
die für die Gerätefunktionen des Nutzers geeignet sind.
Um eine Canvas
-Antwort zurückzugeben, sollte die Logik deiner Aktion folgende Schritte ausführen:
- Prüfe, ob das Gerät des Nutzers die Funktion
INTERACTIVE_CANVAS
unterstützt. Wenn wird dem Nutzer eineCanvas
-Antwort gesendet. - Wenn die Funktion „Interactive Canvas“ nicht verfügbar ist, prüfen Sie, ob die Funktion
Gerät die Funktion
RICH_RESPONSE
unterstützt. Falls ja, senden Sie dem Nutzer eine Rich-Media-Antwort. - Wenn die Rich-Response-Funktion nicht verfügbar ist, senden Sie dem Nutzer eine einfache Antwort.
Die folgenden Snippets geben basierend auf den Funktionen die entsprechende Antwort zurück. des Nutzergeräts:
YAML
candidates: - selector: surface_capabilities: capabilities: - INTERACTIVE_CANVAS canvas: url: 'https://example.web.app' - selector: surface_capabilities: capabilities: - RICH_RESPONSE content: card: title: Card title text: Card Content image: url: 'https://example.com/image.png' alt: Alt text button: name: Link name open: url: 'https://example.com/' - first_simple: variants: - speech: Example simple response.
JSON
{ "candidates": [ { "selector": { "surface_capabilities": { "capabilities": [ "INTERACTIVE_CANVAS" ] } }, "canvas": { "url": "https://example.web.app" } }, { "selector": { "surface_capabilities": { "capabilities": [ "RICH_RESPONSE" ] } }, "content": { "card": { "title": "Card title", "text": "Card Content", "image": { "url": "https://example.com/image.png", "alt": "Alt text" }, "button": { "name": "Link name", "open": { "url": "https://example.com/" } } } } }, { "first_simple": { "variants": [ { "speech": "Example simple response." } ] } } ] }
Node.js
const supportsRichResponse = conv.device.capabilities.includes("RICH_RESPONSE"); const supportsInteractiveCanvas = conv.device.capabilities.includes("INTERACTIVE_CANVAS"); if (supportsInteractiveCanvas) { // Respond with a Canvas response conv.add(new Canvas({ url: 'https://example.web.app', })); } else if (supportsRichResponse) { // Respond with a rich response conv.add(new Card({ title: 'Card title', image: new Image({ url: 'https://example.com/image.png', alt: 'Alt text', }), button: new Link({ name: 'Link name', open: { url: 'https://example.com/', }, }), })); } else { // Respond with a simple response conv.add('Example simple response.'); }
Webanwendung rendern
Eine Aktion, die den interaktiven Canvas verwendet, enthält eine Web-App mit benutzerdefinierten visuelle Elemente, die Sie als Antwort an Nutzende senden. Sobald die Webanwendung gerendert wird, so lange per Sprach-, Text- oder Berührungseingabe mit ihr interagieren, bis das ist das Gespräch beendet.
Ihre erste Canvas
-Antwort muss die URL der Webanwendung enthalten. Diese Art von
Canvas
-Antwort weist Google Assistant an, die Web-App unter dieser Adresse zu rendern
auf dem Gerät der Nutzenden. In der Regel senden Sie die erste Canvas
-Antwort
direkt nachdem der Nutzer deine Aktion aufgerufen hat. Wenn die Webanwendung geladen wird,
Die interaktive Canvas-Bibliothek wird geladen und die Webanwendung registriert einen Callback-Handler.
mit der Interactive Canvas API.
Sie können die URL Ihrer Webanwendung in Actions Builder angeben, wie in der folgenden Screenshot:
Wenn Sie einen Prompt erstellen, der eine Canvas
-Antwort enthält, nachdem Sie den Parameter
Web-App-URL füllt Actions Builder das URL-Feld der Canvas
-Antwort automatisch aus. Weitere Informationen
Informationen zum Festlegen der Web-App-URL in der Konsole finden Sie in der
Bereich Interaktiven Canvas aktivieren.
Die folgenden Snippets zeigen, wie Canvas
-Antworten erstellt werden, die
die Webanwendung sowohl in Actions Builder als auch im Webhook verwenden:
YAML
candidates: - first_simple: variants: - speech: >- Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later. canvas: url: 'https://your-web-app.com'
JSON
{ "candidates": [ { "first_simple": { "variants": [ { "speech": "Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later." } ] }, "canvas": { "url": "https://your-web-app.com" } } ] }
Node.js
app.handle('welcome', (conv) => { conv.add('Welcome! Do you want me to change color or pause spinning? ' + 'You can also tell me to ask you later.'); conv.add(new Canvas({ url: `https://your-web-app.com`, })); });
JSON
{ "session": { "id": "session_id", "params": {} }, "prompt": { "override": false, "firstSimple": { "speech": "Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later.", "text": "Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later." }, "canvas": { "data": [], "suppressMic": false, "url": "https://your-web-app.com" } } }
Daten übergeben, um die Web-App zu aktualisieren
Nachdem Sie die erste Canvas
-Antwort gesendet haben, können Sie zusätzliche Canvas
verwenden
Antworten, um Updates für data
bereitzustellen, die von der benutzerdefinierten Logik Ihrer Webanwendung verwendet werden
um Änderungen an Ihrer Webanwendung vorzunehmen. Wenn Sie eine bestandene Canvas
-Antwort senden
an die Web-App senden, werden die folgenden Schritte durchgeführt:
- Wird der Intent in einer Szene zugeordnet, wird ein Ereignis und die Antwort
Canvas
ausgelöst. der eindata
-Feld mit einer JSON-Nutzlast enthält, wird dann als Antwort zurückgesendet. - Das Feld
data
wird an einenonUpdate
-Callback übergeben und zur Aktualisierung des Web-App. Deine Unterhaltungsaktion kann eine neue
Canvas
-Antwort senden und Informationen in Das Felddata
, um neue Aktualisierungen zu senden oder neue Status zu laden.
Sie haben zwei Möglichkeiten, Daten an Ihre Webanwendung zu übergeben:
- Mit Actions Builder Actions Builder füllt das Feld
data
in DieCanvas
-Antwort mit den erforderlichen Metadaten zum Aktualisieren der Webanwendung. - Mit einem Webhook. Wenn Sie einen Webhook haben, können Sie benutzerdefinierte Daten
Nutzlast, um die Webanwendung in der
Canvas
-Antwort zu aktualisieren.
In den folgenden Abschnitten wird beschrieben, wie Sie Daten über Actions Builder und über einen Webhook.
Mit Actions Builder Daten übergeben
Mit Actions Builder müssen Sie keinen Webhook definieren, um die Metadaten zu verwalten.
der an Ihre Webanwendung gesendet wird. Wenn Sie Ihren Intent-Handler stattdessen in
Actions Builder-Benutzeroberfläche können Sie eine Canvas
-Antwort einfügen. A
Das Feld data
wird automatisch mit den erforderlichen Metadaten für die Aktualisierung gefüllt
wie der Intent-Name, alle von der Nutzereingabe erfassten Parameter,
und die aktuelle Szene.
Der folgende Guess
-Intent-Handler gibt beispielsweise an, dass du einen Canvas
-Wert einschließen möchtest
Antwort:
YAML
candidates: - canvas: send_state_data_to_canvas_app: true
JSON
{ "candidates": [ { "canvas": { "send_state_data_to_canvas_app": true } } ] }
Optional können Sie das folgende Snippet an den Intent-Handler anhängen, um eine Text-in-Sprache-Nachricht:
...
- first_simple:
variants:
- speech: Optional message.
Actions Builder erweitert die Canvas
-Antwort automatisch mit Metadaten auf
die Web-App aktualisieren, wie in den folgenden Snippets gezeigt. In diesem Fall hat die nutzende Person
hat den Buchstaben „a“ erraten in einem Worträtselspiel:
YAML
candidates: - canvas: data: - google: intent: params: letter: resolved: a original: a name: guess scene: Game sendStateDataToCanvasApp: true
JSON
{ "candidates": [ { "canvas": { "data": [ { "google": { "intent": { "params": { "letter": { "resolved": "a", "original": "a" } }, "name": "guess" }, "scene": "Game" } } ], "sendStateDataToCanvasApp": true } } ] }
Diese Antwort aktualisiert Ihre Webanwendung mit der Antwort des Nutzers und geht zur in der richtigen Szene zu finden.
Daten mit dem Webhook übergeben
Sie können das Feld data
von Canvas
-Antworten im Webhook manuell konfigurieren
mit den erforderlichen Statusinformationen,
um Ihre Webanwendung zu aktualisieren. Dieser Ansatz ist
empfohlen, wenn Sie eine benutzerdefinierte data
-Nutzlast in eine Canvas
-Antwort einfügen müssen
anstatt nur die typischen Metadaten weiterzugeben, die zum Aktualisieren der Webanwendung erforderlich sind.
Die folgenden Snippets zeigen, wie Daten in einer Canvas
-Antwort in Ihrem
Webhook:
Node.js
app.handle('start_spin', (conv) => { conv.add(`Ok, I'm spinning. What else?`); conv.add(new Canvas({ data: { command: 'SPIN', spin: true, }, })); });
JSON
{ "session": { "id": "session_id", "params": {} }, "prompt": { "override": false, "firstSimple": { "speech": "Ok, I'm spinning. What else?", "text": "Ok, I'm spinning. What else?" }, "canvas": { "data": { "command": "SPIN", "spin": true }, "suppressMic": false, "url": "" } } }
Richtlinien und Einschränkungen
Beachte die folgenden Richtlinien und Einschränkungen für Antworten auf Canvas
beim Erstellen einer Aktion:
- Jeder Webhook-Handler in der Auftragsausführung muss
Canvas
enthalten. Wenn der Webhook Antwort nichtCanvas
enthält, wird die Webanwendung geschlossen. - Sie müssen in der ersten
Canvas
-Antwort nur die URL Ihrer Web-App angeben. die Sie an den Nutzer senden. - Die
Canvas
-Antwort-URL muss gültig und das dazugehörige HTTPS-Protokoll sein. - Die Antwort
Canvas
darf maximal 50 KB groß sein.