1. Übersicht
Mit der Google Assistant-Entwicklerplattform können Sie Software erstellen, um die Funktionen von Google Assistant, einem virtuellen persönlichen Assistenten, auf mehr als einer Milliarde Geräten zu erweitern, darunter intelligente Lautsprecher, Smartphones, Autos, Fernseher und Kopfhörer. Nutzer interagieren mit Assistant, um Dinge zu erledigen, z. B. Lebensmittel zu kaufen oder eine Fahrt zu buchen. Als Entwickler können Sie die Assistant-Entwicklerplattform nutzen, um unkompliziert ansprechende und effektive Unterhaltungen zwischen Nutzern und Ihrem eigenen Drittanbieterdienst für die Auftragsausführung zu erstellen und zu verwalten.
Dieses Codelab behandelt Konzepte für Fortgeschrittene zum Entwickeln mit Google Assistant und baut auf der Aktion auf, die im Codelab Build Actions for Google Assistant with Actions SDK (Level 1) (Aktionen für Google Assistant mit dem Actions SDK erstellen (Level 1)) erstellt wurde. Wir empfehlen dir dringend, das Codelab zu Level 1 abzuschließen, bevor du mit diesem beginnst.
Die Aktion, die du in diesem Codelab erstellst, teilt Nutzern anhand der von ihnen gewählten Hilfsmittel ihr Glück für ihre Mission in dem mythischen Land Gryffinberg.
Aufgaben
In diesem Codelab erstellen Sie eine komplexe Konversationsaktion mit den folgenden Funktionen:
- Erfasst Daten vom Nutzer und ändert je nach Wert die Dialogaufforderungen.
- Antwortet mit Folgefragen, um das Gespräch voranzutreiben.
- Erstellt eine Spielschleife, damit der Nutzer nach Erhalt einer Glücksmeldung noch einmal mit der Aktion interagieren kann.
Bevor Sie mit dem Bauen beginnen, können Sie auf Ihrem Gerät mit integriertem Assistant mit der Live-Action interagieren. Sagen Sie dazu „Hey Google, sprich mit Fate and Fortune“. Der Standardpfad durch diese Aktion für einen wiederkehrenden Nutzer sieht so aus:
Lerninhalte
- Slots verwenden, um Daten vom Nutzer zu erheben
- Bedingungen verwenden, um einer Szene Logik hinzuzufügen
- Spielschleife hinzufügen
- Unterstützenden Pfad hinzufügen
Voraussetzungen
Für dieses Codelab müssen folgende Voraussetzungen erfüllt sein:
- Eine IDE/ein Texteditor Ihrer Wahl
- Ein Terminal zum Ausführen von Shell-Befehlen, bei denen NodeJS, npm und git installiert sind.
- Ein Webbrowser, z. B. Google Chrome.
- Ein abgeschlossenes Codelab Level 1-Projekt zu Aktionen.
Sie sollten mit JavaScript (ES6) vertraut sein, um den Auftragsausführungscode für dieses Codelab zu verstehen. Sie sind jedoch nicht zwingend erforderlich.
Optional: Beispielcode abrufen
Optional können Sie den vollständigen Projektcode der Stufe 1 aus dem GitHub-Repository zu Actions Builder-Codelab zu Stufe 1 abrufen und so diesem Codelab folgen. Den vollständigen Projektcode der Stufe 2 finden Sie auch in diesem GitHub-Repository.
2. Dialogorientierte Benutzeroberfläche erstellen
Im ersten Codelab haben Sie eine einfache Konversationsaktion mit einer einzelnen Szene erstellt: Start
.
In diesem Codelab erweiterst du die Unterhaltung mit deiner Aktion. In den folgenden Abschnitten konfigurieren Sie Ihre Aktion für Folgendes:
- Übergang zu einer neuen
Fortune
-Szene, wenn der Nutzer seine Zukunft hören möchte - Fragen Sie die Nutzenden, welches Hilfsmittel sie für ihre User Journey wählen möchten.
- Basierend auf der Auswahl des Nutzers ein individuelles Vermögen liefern
Zu einer Fortune
-Szene wechseln und diese erstellen
In diesem Abschnitt tun Sie Folgendes:
- Entfernen Sie den vorhandenen Prompt aus der Szene
Start
, die dem Nutzer antwortet und die Unterhaltung beendet - Übergang von der Szene
Start
zur SzeneFortune
definieren Fortune
-Szene erstellen
So ändern Sie die Szene Start
und fügen einen Übergang zur Szene Fortune
hinzu:
- Öffnen Sie Ihr Actions-Projekt im Codelab zu Level 1 in Ihrem Texteditor.
- Öffnen Sie die Datei
custom/scenes/Start.yaml
. - Aktualisieren Sie
handler
für den Intentyes
, sodass Ihr Code dem Snippet unten entspricht:
Start.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I understand, stranger. Best of luck on your quest! Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- Speichern Sie die Datei.
So erstellen Sie eine neue Szene mit dem Namen Fortune
:
- Rufen Sie im Terminal Ihr Codelab-Projekt zu Level 1-Aktionen auf.
- Erstellen Sie im Verzeichnis
scenes
eine neue Datei mit dem NamenFortune.yaml
:
touch custom/scenes/Fortune.yaml
Diese Datei bearbeiten Sie im nächsten Abschnitt.
Unterhaltungslogik für Fortune
-Szene definieren
In diesem Codelab konfigurierst du deine Fortune
-Szene so, dass du den Nutzer fragst: „Wofür hilfst du dir bei deiner Mission? Ein Drache, ein Übersetzer oder ein Kompass?“ Sie können die Funktion Slot-Füllung verwenden, um die erforderlichen Informationen vom Nutzer zu erfassen, bevor Sie fortfahren.
Deine Aktion stellt für drei Hilfen Vermögenswerte bereit: einen Drachen, einen Übersetzer und einen Kompass. Wenn du deine Aktion so konfigurieren möchtest, dass diese drei Optionen in der Eingabe eines Nutzers identifiziert werden, musst du einen neuen Typ erstellen.
Sie können Typen innerhalb der Slot-Füllungsphase einer Szene verwenden, um die vom Nutzer gewünschten Informationen zu definieren. Wenn die NLU-Engine eine Slotübereinstimmung in der Nutzereingabe erkennt, wird der Slot als typisierter Parameter extrahiert, damit Sie in einer Szene die Logik damit ausführen können.
Typ available_options
erstellen
In diesem Abschnitt erstellen Sie einen neuen Typ namens available_options
, der die drei Optionen angibt, die der Nutzer als Reaktion auf die Aufforderung auswählen kann (Drache, Übersetzer und Kompass). Sie definieren auch einige Synonyme für diese Optionen für den Fall, dass Nutzende etwas Ähnliches sagen. In einem späteren Abschnitt fügen Sie einer Anzeigenfläche den Typ available_options
hinzu, um anzugeben, dass Sie die Auswahl des Nutzers erhalten möchten.
So erstellen Sie den Typ available_options
:
- Erstellen Sie ein neues Verzeichnis mit dem Namen
types
:
mkdir custom/types
- Erstellen Sie im Verzeichnis
types
eine neue Datei mit dem Namenavailable_options.yaml
:
touch custom/types/available_options.yaml
- Öffnen Sie
custom/types/available_options.yaml
in Ihrem Texteditor.
Typen werden als Informationsschlüsselpaare konfiguriert, wobei der Schlüssel der Name des Typs und die Werte Synonyme für diesen Schlüssel sind. Wenn Sie den Schlüssel definieren, wird er automatisch als Wert hinzugefügt. Mit dem Actions SDK werden Schlüssel als entities
und Werte als synonyms
dargestellt.
So fügen Sie die drei Optionen hinzu, die der Nutzer auswählen kann:
- Fügen Sie die folgenden
entities
undsynonyms
in die Dateiavailable_options.yaml
ein:
available_options.yaml
synonym: entities: dragon: synonyms: - dragon - hydra - lizard translator: synonyms: - translator - communicator - machine - decoder - translate compass: synonyms: - compass - direction - guide - navigator matchType: EXACT_MATCH
- Speichern Sie die Datei.
Deine Aktion erkennt jetzt, dass die available_options
ein Drache, ein Übersetzer und ein Kompass sind, und kann auch einige entsprechende Synonyme erkennen.
Slot-Füllung konfigurieren
Als Nächstes müssen Sie die Slot-Füllung in der Fortune
-Szene konfigurieren. So konfigurieren Sie die Slot-Fülllogik:
- Öffnen Sie
custom/scenes/Fortune.yaml
in Ihrem Texteditor. - Fügen Sie der Datei
Fortune.yaml
die folgendenslots
-Daten hinzu:
Fortune.yaml
slots: - commitBehavior: writeSessionParam: chosenOptions name: chosenOptions promptSettings: initialPrompt: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass? suggestions: - title: Dragon - title: Translator - title: Compass required: true type: name: available_options
- Speichern Sie die Datei.
Du hast dem Slot nun den Typ available_options
hinzugefügt, der deiner Aktion die Informationen teilt, die du vom Nutzer (seine Auswahl der Hilfe) abrufen musst, bevor du fortfährst. Sie haben außerdem eine Aufforderung innerhalb des Slots konfiguriert, die der Aufforderungswarteschlange hinzugefügt wird, wenn der Nutzer die Slot-Füllungsphase der Szene erreicht.
Wenn Sie den Slot chosenOptions
nennen, wird das Feld writeSessionsParam
mit demselben Namen ($session.params.chosenOptions
) aktualisiert. Sie können über diesen Namen in der Eingabeaufforderung und in der Auftragsausführung über die Clientbibliothek auf diesen Parameter zugreifen.
Bedingung hinzufügen
Nachdem Sie einen Slot hinzugefügt haben, für den der Nutzer die Hilfe auswählen muss, können Sie eine Bedingung hinzufügen, um zu prüfen, ob die Daten zum Slot abgerufen wurden, bevor der Nutzer die Unterhaltung fortsetzen kann.
In diesem Abschnitt fügen Sie die Bedingung scene.slots.status == "FINAL"
hinzu, die prüft, ob die Slot-Füllung abgeschlossen ist. Sobald alle Slots gefüllt sind, wird der Prompt-Warteschlange eine Aufforderung (You picked $session.params.chosenOptions.
) hinzugefügt.
So konfigurieren Sie die Bedingung scene.slots.status == "FINAL"
:
- Öffnen Sie
custom/scenes/Fortune.yaml
in Ihrem Texteditor. - Fügen Sie am Anfang der Datei
Fortune.yaml
conditionalEvents
-Daten hinzu:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: You picked $session.params.chosenOptions.
- Speichern Sie die Datei.
Aktion im Simulator testen
Jetzt haben Sie definiert, welche Optionen der Nutzer auswählen soll, um die Anzeigenfläche zu füllen. Nachdem du diese Informationen vom Benutzer erhalten hast, sollte deine Aktion eine Aufforderung enthalten, die auf die von ihm gewählte Option verweist.
So testest du deine Aktion:
- Führen Sie im Terminal den folgenden Befehl aus:
gactions deploy preview
Die Ausgabe sollte in etwa so aussehen:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
- Klicken Sie in das Feld Eingabe oder geben Sie
Talk to my test app
ein und drücken Sie die Eingabetaste. - Geben Sie
Yes
in das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlags-Chip Ja klicken.
- Klicken, tippen oder „
dragon
“ sagen. Es sollte die Meldung Du hast einen Drachen ausgewählt angezeigt.
Im nächsten Abschnitt passen Sie die Aufforderungen für jede Hilfe an, die der Nutzer auswählen könnte.
Prompts mithilfe von Bedingungen anpassen
In diesem Abschnitt fügen Sie Bedingungen für jede Option hinzu, die der Nutzer auswählen kann, und fügen für jede Bedingung eine benutzerdefinierte Aufforderung hinzu.
dragon
-Glückskekse anpassen
So aktualisieren Sie die Bedingung und passen die Aufforderung an, wenn ein Nutzer „Drache“ auswählt:
- Öffnen Sie
custom/scenes/Fortune.yaml
in Ihrem Texteditor. - Ersetzen Sie die
conditionalEvents
-Daten durch das folgende Snippet in der DateiFortune.yaml
:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon.
- Speichern Sie die Datei.
Wenn jetzt ein Nutzer „Drache“ oder etwas, das ähnlich klingt, sagt, liefert deine Aktion auf der Grundlage dieser Auswahl eine Vermögenswerte. Als Nächstes fügen Sie die beiden restlichen Optionen hinzu.
translator
und compass
-Chancen anpassen
So fügen Sie die Bedingungen hinzu und passen die Eingabeaufforderungen an, wenn ein Nutzer "Übersetzer" oder "Kompass" sagt:
- Fügen Sie in der Datei
custom/scenes/Fortune.yaml
die beiden anderen Bedingungen unter der Bedingungdragon
hinzu:
Fortune.yaml
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success.
- Speichern Sie die Datei.
Aktion im Simulator testen
An dieser Stelle sollte deine Aktion basierend auf der von ihnen gewählten Option eine benutzerdefinierte Vermögenswiese für den Benutzer bereitstellen.
So testest du deine Aktion:
- Führen Sie im Terminal den folgenden Befehl aus:
gactions deploy preview
Die Ausgabe sollte in etwa so aussehen:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
- Geben Sie
Talk to my test app
in das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie in das Feld Eingabe „Ja“ ein und drücken Sie die Eingabetaste. Alternativ können Sie auch auf den Vorschlags-Chip Ja klicken.
- Klicken, tippen oder „
Translator
“ sagen.
Sie sollten die passende Weissagung für den „Übersetzer“ erhalten. Option.
3. Spielschleife hinzufügen
In diesem Abschnitt konfigurierst du deine Aktion so, dass der Benutzer eine andere Option auswählen und eine andere Zukunft hören kann, nachdem er eine Auswahl getroffen hat. Diese Änderung ähnelt der Meldung Möchten Sie noch einmal spielen? am Ende eines Spiels. Um diese Schleife zu erstellen, können Sie die zuvor erstellten Intents yes
und no
wiederverwenden und einer neuen Szene namens Again
hinzufügen.
Again
-Szene erstellen
In diesem Abschnitt erstellen Sie eine neue Again
-Szene und fügen einen Prompt hinzu, in dem der Nutzer gefragt wird, ob er eine andere Option auswählen möchte.
So erstellen und konfigurieren Sie die Szene Again
:
- Erstellen Sie im Verzeichnis
scenes
eine neue Datei mit dem NamenAgain.yaml
:
touch custom/scenes/Again.yaml
- Öffnen Sie
custom/scenes/Again.yaml
in Ihrem Texteditor. - Fügen Sie die folgenden
onEnter
-Daten zuAgain.yaml
hinzu:
Again.yaml
onEnter: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: That is what I see for you. Would you like to choose a different option and explore another future? suggestions: - title: "Yes" - title: "No"
- Speichern Sie die Datei.
Übergang von Fortune
zu Again
hinzufügen
Nachdem der Nutzer sein Glücksgefühl erhalten hat, muss die Unterhaltung in die neue Again
-Szene übergehen.
So fügen Sie einen Übergang von der Szene Fortune
zur Szene Again
hinzu:
- Öffnen Sie
custom/scenes/Fortune.yaml
in Ihrem Texteditor. - Fügen Sie jeder Bedingung
transitionToScene: Again
hinzu, wie im folgenden Snippet gezeigt:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success. transitionToScene: Again
- Speichern Sie die Datei.
Aktion im Simulator testen
An diesem Punkt sollte deine Aktion dem Nutzer, nachdem er sein Glücksgefühl erhalten hat, die folgende Aufforderung anzeigen: „Das sehe ich für dich. Möchtest du eine andere Option wählen und eine andere Zukunft erkunden?“
So testest du deine Aktion:
- Führen Sie im Terminal den folgenden Befehl aus:
gactions deploy preview
Die Ausgabe sollte in etwa so aussehen:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
- Geben Sie
Talk to my test app
in das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie
Yes
in das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auch auf den Vorschlags-Chip Ja klicken. - Klicken, tippen oder „
dragon
“ sagen.
Sie sollten die Weissagung für die Drachenoption und die Aufforderung Again
erhalten.
Intents und Übergang zur Szene Again
hinzufügen
In diesem Abschnitt fügen Sie der Again
-Szene die Intents yes
und no
hinzu, damit Ihre Aktion erkennt, ob der Nutzer eine neue Option auswählen möchte. Fügen Sie außerdem die entsprechenden Übergänge für die Intents yes
und no
hinzu. Der Intent yes
geht in die Szene Fortune
über, während der Intent no
in die Systemszene End conversation
übergeht.
So fügen Sie der Szene Again
Intents und Übergänge hinzu:
- Öffnen Sie
custom/scenes/Again.yaml
in Ihrem Texteditor. - Fügen Sie oben in der Datei
Again.yaml
oberhalb vonOnEnter
intentEvents
-Daten hinzu:
Again.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- Speichern Sie die Datei.
Aktion im Simulator testen
Deine Aktion sollte jetzt verstehen, ob der Nutzer eine neue Option auswählen oder die Unterhaltung beenden möchte.
So testen Sie den Intent yes
:
- Führen Sie im Terminal den folgenden Befehl aus:
gactions deploy preview
Die Ausgabe sollte in etwa so aussehen:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
- Geben Sie
Talk to my test app
in das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie
Yes
in das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auch auf den Vorschlags-Chip Ja klicken. - Klicken Sie auf eine der Optionen, geben Sie sie ein oder sagen Sie sie ein.
- Geben Sie
Yes
in das Eingabefeld ein und drücken Sie die Eingabetaste.
Sie sollten die Frage „Womit hilft Ihnen ein Drache, ein Übersetzer oder ein Kompass bei Ihrer Suche helfen?“ erhalten.
So testen Sie den Intent no
:
- Klicken Sie auf eine der Optionen, geben Sie sie ein oder sagen Sie sie ein.
- Geben Sie
No
in das Eingabefeld ein und drücken Sie die Eingabetaste.
Sie sollten die End conversation
-Aufforderung sehen: „Es freut mich, dass Sie mit Ihrer Wahl zufrieden sind. Viel Glück bei der Mission! Mach's gut.“
4. Unterstützenden Pfad hinzufügen
Du hast jetzt den Hauptpfad erstellt, den die meisten Nutzer bei deiner Aktion verwenden. Der Nutzer könnte jedoch auf die Aufforderung in der Fortune
-Szene antworten: „What do you choose to help you on your quest, a Dragon, a translator, or a compass?“ (Womit hilfst du dir bei deiner Mission?)
In diesem Abschnitt konfigurierst du deine Aktion so, dass sie versteht, wenn ein Nutzer "Magie", "Geld", "Pferd" oder "Telefon" sagt, und den Nutzer erneut aufzufordern, eine der drei ursprünglichen Optionen auszuwählen, wenn er eine dieser Optionen auswählt. Zum Konfigurieren dieser Logik müssen Sie eine neue type
erstellen, die diese anderen Auswahlmöglichkeiten und den neuen Intent other_option
enthält, der zugeordnet wird, wenn ein Nutzer eine dieser Optionen sagt. Außerdem müssen Sie Trainingsformulierungen im other_option
-Intent mit Annotationen versehen, um Intent-Parameter zu identifizieren und zu extrahieren.
Wenn die Natural Language Processing-Engine von Assistant eine Parameterübereinstimmung in der Nutzereingabe erkennt, wird der Wert als typisierter Parameter extrahiert, damit Sie in einer Szene die Logik damit ausführen können. In diesem Codelab konfigurierst du deine Aktion so, dass die vom Nutzer ausgewählte Unterstützung extrahiert und in einem Prompt darauf verwiesen wird.
Typ unavailable_options
erstellen
Sie können jetzt einen unavailable_options
-Typ erstellen, der eine Vielzahl verschiedener Optionen enthält, damit Ihre Aktion diese Daten in der Eingabe eines Nutzers identifizieren kann.
So erstellen Sie den Typ unavailable_options
:
- Erstellen Sie im Verzeichnis
types
eine neue Datei mit dem Namenunavailable_options.yaml
:
touch custom/types/unavailable_options.yaml
- Öffnen Sie
custom/types/unavailable_options.yaml
in Ihrem Texteditor. - Fügen Sie der Datei
unavailable_options.yaml
die folgendensynonyms
-Daten hinzu:
unavailable_options.yaml
synonym: entities: money: synonyms: - money - cash - gold horse: synonyms: - horse - stallion - steed magic: synonyms: - magic - enchanted - spells phone: synonyms: - phone - cell - apps matchType: EXACT_MATCH
- Speichern Sie die Datei.
Intent other_option
erstellen
Als Nächstes erstellen Sie einen Intent mit dem Namen other_option
und fügen Trainingsformulierungen hinzu, die die Optionen im Typ unavailable_options
enthalten. Dieser Intent wird zugeordnet, wenn der Nutzer eine Auswahl im Typ unavailable_options
auswählt.
So erstellen und konfigurieren Sie den Intent other_option
:
- Erstellen Sie im Verzeichnis
intents
eine neue Datei mit dem Namenother_option.yaml
:
touch custom/intents/other_option.yaml
- Öffnen Sie
custom/intents/other_option.yaml
in Ihrem Texteditor. - Fügen Sie der Datei
other_option.yaml
die folgendenparameters
- undtrainingPhrases
-Daten hinzu:
other_option.yaml
parameters: - name: chosenUnavailableOption type: name: unavailable_options trainingPhrases: - I want to use ($chosenUnavailableOption 'spells' auto=true) - I really really want to use a ($chosenUnavailableOption 'phone' auto=true) - ($chosenUnavailableOption 'magic' auto=true)! - ($chosenUnavailableOption 'cash' auto=true) - I want to ride a ($chosenUnavailableOption 'horse' auto=true)
Hier annotieren Sie die Trainingsformulierungen manuell mit den nicht verfügbaren Optionen, die Sie im vorherigen Abschnitt angegeben haben. Mit dem Intent-Parameter chosenUnavailableOption
können Sie den Namen der Option extrahieren und in einer Eingabeaufforderung verwenden. Dies ist im nächsten Abschnitt der Fall.
- Speichern Sie die Datei.
Intent other_option
zur Szene Fortune
hinzufügen
Sie haben jetzt den Intent other_option
, mit dem ein Nutzer verarbeitet werden kann, der eine Option angibt, die nicht zu den ursprünglichen Optionen gehört. In diesem Abschnitt fügen Sie der Szene Fortune
den Intent other_option
hinzu. Mit dem Intent-Parameter können Sie die Aufforderung basierend auf der Nutzereingabe anpassen.
So fügen Sie der Szene Fortune
den Intent other_option
hinzu:
- Öffnen Sie
custom/scenes/Fortune.yaml
in Ihrem Texteditor. - Fügen Sie die folgenden
intentEvents
-Daten zwischen denconditionalEvents
- undslots
-Daten ein:
Fortune.yaml
intentEvents: - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey. intent: other_option
- Speichern Sie die Datei.
Der Ausdruck $intent.params.chosenUnavailableOption
verweist auf das Intent-Parameterobjekt und $intent.params.chosenUnavailableOption.original
auf den Wert dieses Objekts. Das Attribut original
bezieht sich auf die Roheingabe, die der Nutzer angibt.
Wenn ein Nutzer während der Szene Fortune
eine Option aus dem Typ unavailable_options
sagt, wird der Intent other_option
zugeordnet und der Aufforderungswarteschlange eine Aufforderung hinzugefügt. Da kein Übergang angegeben ist, wird die Szenenausführungsschleife fortgesetzt, indem die Bedingungsphase neu bewertet wird. Der Slot chosenOptions
fügt seine Aufforderung dann der Warteschlange für Aufforderungen hinzu und diese wird an den Nutzer gesendet.
Aktion im Simulator testen
Deine Aktion sollte jetzt korrekt reagieren, wenn ein Nutzer eine der im Typ unavailable_options
aufgeführten Optionen auswählt und angibt, welche Hilfe der Nutzer ausgewählt hat. Deine Aktion sollte den Nutzer dann wieder auffordern, eine der ursprünglichen Optionen auszuwählen (Drache, Übersetzer oder Kompass).
So testen Sie Ihre Aktion im Simulator:
- Führen Sie im Terminal den folgenden Befehl aus:
gactions deploy preview
Die Ausgabe sollte in etwa so aussehen:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
- Geben Sie
Talk to my test app
in das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie
Yes
in das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auch auf den Vorschlags-Chip Ja klicken. - Geben Sie
magic
in das Feld Eingabe ein und drücken Sie die Eingabetaste.
Sie werden möglicherweise feststellen, dass die Aufforderung nicht korrekt klingt, wenn der Nutzer „Magie“ auswählt, weil das „a“ Artikel davor platziert werden. In den folgenden Abschnitten werden Sie auf dieses Problem eingehen.
unavailable_options
-Handler hinzufügen
Um das „a“ zu platzieren, vor der entsprechenden Auswahl aus dem unavailable_options
-Typ angelangt ist, kannst du einen Event-Handler in deiner Auftragsausführungslogik konfigurieren, um zu prüfen, ob die vom Nutzer gewählte Option ein „a“ benötigt. davor. Zuerst musst du deine Aktion so konfigurieren, dass der Handler aus der Fortune
-Szene aufgerufen wird.
So fügen Sie der Fortune
-Szene den Handler unavailable_options
hinzu:
- Öffnen Sie
custom/scenes/Fortune.yaml
in Ihrem Texteditor. - Aktualisieren Sie die Datei
Fortune.yaml
mit den folgendenintentEvents
-Daten:
Fortune.yaml
intentEvents: - handler: webhookHandler: unavailable_options intent: other_option
- Speichern Sie die Datei.
Auftragsausführung aktualisieren und bereitstellen
Nachdem du die Aktion so konfiguriert hast, dass der unavailable_options
-Event-Handler aufgerufen wird, kannst du den Handler in der Auftragsausführung aktualisieren und bereitstellen.
So aktualisieren Sie die Auftragsausführung:
- Öffnen Sie
webhooks/ActionsOnGoogleFulfillment/index.js
in Ihrem Texteditor. - Fügen Sie in
index.js
unter dem Handlergreeting
den folgenden Code hinzu:
index.js
app.handle('unavailable_options', conv => {
const option = conv.intent.params.chosenUnavailableOption.original;
const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
let message = 'I have seen the future and ';
if(optionsNeedA.has(optionKey)){
message = message + 'a ';
}
message = message + `${option} will not aid you on your journey. `;
conv.add(message);
});
- Fügen Sie unter
const app = conversation({debug:true});
den folgenden Code hinzu:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- Speichern Sie die Datei.
Code verstehen
Der unavailable_options
-Handler führt Folgendes aus:
- Ruft
option
-Daten vomconv
-Objekt ab und weistoption
dem Attributoriginal
zu, bei dem es sich um die Roheingabe des Nutzers handelt. - Weist dem
resolved
-AttributoptionKey
zu, dem Schlüssel für denunavailable_options
-Typ - Prüft, ob
optionKey
eine der Optionen ist, für die ein „a“ erforderlich ist. Ist dies der Fall, wird die Nachricht mit einem hinzugefügten „a“ erstellt. - Fügt die Nachricht über
conv.add(message)
hinzu
Handler aktualisieren
Damit die Aktion unavailable_options
verwenden kann, musst du den unavailable_options
-Handler zu webhooks/ActionsOnGoogleFulfillment.yaml
hinzufügen.
- Fügen Sie den Handler-Namen
unavailable_options
zuActionsOnGoogleFulfillment.yaml
hinzu:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- Speichern Sie die Datei.
Aktion im Simulator testen
Deine Aktion sollte jetzt die Aufforderung basierend darauf anpassen, ob die Auswahl des Nutzers aus dem Typ unavailable_options
ein „a“ erfordert Artikel davor.
So testest du deine Aktion:
- Führen Sie im Terminal den folgenden Befehl aus:
gactions deploy preview
Die Ausgabe sollte in etwa so aussehen:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
- Klicken Sie in das Feld Eingabe oder geben Sie
Talk to my test app
ein und drücken Sie die Eingabetaste. - Geben Sie
Yes
in das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auch auf den Vorschlags-Chip Ja klicken. - Geben Sie
magic
in das Feld Eingabe ein und drücken Sie die Eingabetaste. Geben Sie dannhorse
in das Feld Eingabe ein und drücken Sie die Eingabetaste.
Deine Aktion sollte das „a“ hinzufügen vor dem „Pferd“ steht, und die Aufforderung ohne das „ein“ Artikel für die „Magie“ eine große Auswahl.
5. Aktion in der Actions Console visualisieren
Das Actions SDK ist mit der webbasierten IDE Actions Builder kompatibel, die in die Actions Console integriert ist. Mit dem Befehl gactions push
kannst du dein lokales Dateisystem per Push in den Aktionsentwurf in der Konsole übertragen. In der Actions Console findest du eine visuelle Darstellung der Konfiguration deiner Aktion. Die visuelle Darstellung deiner Aktion kann bei der Entwicklung nützlich sein und hat keinen Einfluss auf die Version deiner Aktion, die zum Testen bereitgestellt wird.
So übertragen Sie Ihr Actions-Projekt per Push und rufen es in der Actions Console auf:
- Führen Sie im Terminal den folgenden Befehl aus, um Ihr Projekt an die Actions Console zu übertragen:
gactions push
Die Ausgabe sollte in etwa so aussehen:
✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
- Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
- Klicken Sie in der Actions Console in der oberen Navigationsleiste auf Develop.
- Klicken Sie auf den Drop-down-Pfeil neben Szenen und dann auf Starten. Du solltest eine visuelle Darstellung der
Start
-Szene deiner Aktion sehen, wie im folgenden Screenshot zu sehen:
Projekt bereinigen [empfohlen]
Um mögliche Kosten zu vermeiden, sollten Sie Projekte entfernen, die Sie nicht verwenden möchten. So löschen Sie die Projekte, die Sie in diesem Codelab erstellt haben:
- Führen Sie die im Abschnitt Projekte beenden (löschen) aufgeführten Schritte aus, um das Cloud-Projekt und die Ressourcen zu löschen.
- Optional: Wenn Sie Ihr Projekt sofort aus der Actions Console entfernen möchten, führen Sie die Schritte im Abschnitt Projekt löschen aus. Wenn Sie diesen Schritt nicht ausführen, wird Ihr Projekt nach etwa 30 Tagen automatisch entfernt.
6. Glückwunsch!
Du kennst jetzt die nötigen Vorkenntnisse, um mit dem Actions SDK Aktionen für Google Assistant zu erstellen.
Behandelte Themen
- Konversationsaktionen mit der Node.js-Auftragsausführungsbibliothek entwickeln
- Slots verwenden, um Daten vom Nutzer zu erheben
- So fügen Sie der Szene mithilfe von Bedingungen Logik hinzu
- Spielschleife hinzufügen
- Unterstützenden Pfad hinzufügen
Weitere Informationen
Sie können sich diese Ressourcen ansehen, um mehr über die Erstellung von Actions for Google Assistant zu erfahren:
- Dokumentation für die Entwicklung von Aktionen für Google Assistant
- GitHub-Seite zu Actions on Google mit Beispielcode und -bibliotheken
- Die offizielle Reddit-Community für Entwickler, die mit Google Assistant arbeiten
- Richtlinien zur Gestaltung von Unterhaltungen mit Best Practices und Richtlinien für Konversationsaktionen
Folge uns auf Twitter unter @ActionsOnGoogle, um dich über unsere neuesten Ankündigungen zu informieren, und twittere unter #AoGDevs, um deine Arbeit mit anderen zu teilen.
Feedback-Umfrage
Bevor Sie uns verlassen, möchten wir Sie bitten, an einer kurzen Umfrage zu Ihren Erfahrungen teilzunehmen.