1. Übersicht
Mit der Google Assistant-Entwicklerplattform können Sie Software erstellen, um die Funktionalität von Google Assistant, einem virtuellen persönlichen Assistenten, auf über 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 mit der Assistant-Entwicklerplattform ganz einfach ansprechende und effektive Unterhaltungen zwischen Nutzern und Ihrem eigenen Drittanbieter-Fulfillment-Dienst erstellen und verwalten.
In diesem Codelab werden Konzepte für die Entwicklung mit Google Assistant für Fortgeschrittene behandelt. Es baut auf der Action auf, die im Codelab Actions für Google Assistant mit dem Actions SDK erstellen (Level 1) erstellt wurde. Wir empfehlen Ihnen dringend, das Codelab für Stufe 1 zu absolvieren, bevor Sie mit diesem Codelab beginnen.
Die Aktion, die Sie in diesem Codelab erstellen, sagt Nutzern ihr Glück für ihre Quest im sagenhaften Land Gryffinberg voraus, basierend auf der Hilfe, die sie auswählen.
Aufgaben
In diesem Codelab erstellen Sie eine anspruchsvolle Conversational Action mit den folgenden Funktionen:
- Erhebt Daten vom Nutzer und ändert je nach Wert die Gesprächsanregungen.
- Stellt Folgefragen, um die Unterhaltung fortzusetzen.
- Erstellt eine Spielschleife, damit ein Nutzer nach Erhalt einer Vorhersage noch einmal mit der Action interagieren kann.
Bevor Sie mit der Entwicklung beginnen, können Sie mit der aktiven Aktion auf Ihrem Google Assistant-fähigen Gerät interagieren, indem Sie „Hey Google, sprich mit Fate and Fortune“ sagen. 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
Die Voraussetzungen für dieses Codelab sind:
- Eine IDE oder ein Texteditor Ihrer Wahl.
- Ein Terminal zum Ausführen von Shell-Befehlen mit NodeJS, npm und git.
- Ein Webbrowser, z. B. Google Chrome.
- Ein abgeschlossenes Actions-Projekt für Codelab Level 1.
Kenntnisse von JavaScript (ES6) sind zwar nicht erforderlich, werden aber dringend empfohlen, um den Fulfillment-Code für dieses Codelab zu verstehen.
Optional: Beispielcode abrufen
Optional können Sie den vollständigen Projektcode für Level 1 aus dem GitHub-Repository für das Actions Builder-Codelab für Level 1 abrufen, um dieser Anleitung zu folgen. Den vollständigen Projektcode für Level 2 finden Sie auch in diesem GitHub-Repository.
2. Dialogorientierte Benutzeroberfläche weiterentwickeln
Im ersten Codelab haben Sie eine einfache Conversational Action mit einer einzelnen Szene, Start, erstellt.
In diesem Codelab erweitern Sie die Unterhaltung Ihrer Aktion. In den folgenden Abschnitten konfigurieren Sie Ihre Aktion für Folgendes:
- Wechsle zu einer neuen
Fortune-Szene, wenn der Nutzer sein Horoskop hören möchte. - Fragen Sie den Nutzer, welche Hilfe er für seine Reise auswählen möchte.
- Eine personalisierte Vorhersage basierend auf der Auswahl des Nutzers erstellen
Übergang zur Fortune-Szene und Erstellung der Szene
In diesem Abschnitt tun Sie Folgendes:
- Entfernen Sie den vorhandenen Prompt aus der
Start-Szene, der auf den Nutzer reagiert und das Gespräch beendet. - Übergang von Szene
Startzu SzeneFortunedefinieren - Szene
Fortuneerstellen
So bearbeiten Sie die Start-Szene und fügen der Fortune-Szene eine Übergangssequenz hinzu:
- Öffnen Sie Ihr Actions-Projekt aus dem Codelab für Anfänger in einem Texteditor.
- Öffnen Sie die Datei
custom/scenes/Start.yaml. - Aktualisieren Sie die
handlerfür die Intentionyes, damit Ihr Code mit dem Snippet unten übereinstimmt:
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:
- Wechseln Sie im Terminal zu Ihrem Codelab-Projekt „Level 1 Actions“.
- Erstellen Sie im Verzeichnis
sceneseine neue Datei mit dem NamenFortune.yaml:
touch custom/scenes/Fortune.yaml
Sie bearbeiten diese Datei im nächsten Abschnitt.
Gesprächslogik für die Szene Fortune definieren
In diesem Codelab konfigurieren Sie die Fortune-Szene so, dass der Nutzer gefragt wird: Was wählst du, um dich auf deiner Suche zu unterstützen: einen Drachen, einen Übersetzer oder einen Kompass? Mit der Funktion Slot-Füllung können Sie die erforderlichen Informationen vom Nutzer erfassen, bevor Sie fortfahren.
Ihre Aktion bietet Vorhersagen für drei Hilfsmittel: einen Drachen, einen Übersetzer und einen Kompass. Damit Ihre Action diese drei Optionen in der Eingabe eines Nutzers erkennen kann, müssen Sie einen neuen Typ erstellen.
Sie können Typen in der Phase der Slot-Füllung einer Szene verwenden, um die Informationen zu definieren, die Sie vom Nutzer erhalten möchten. Wenn die NLU-Engine eine Slot-Übereinstimmung in der Nutzereingabe erkennt, wird der Slot als typisierter Parameter extrahiert, sodass Sie damit in einer Szene Logik ausführen können.
available_options-Typ erstellen
In diesem Abschnitt erstellen Sie einen neuen Typ namens available_options, der die drei Optionen angibt, die Nutzer als Antwort auf den Prompt auswählen können (Drache, Übersetzer und Kompass). Außerdem definieren Sie einige Synonyme für diese Optionen, falls ein Nutzer etwas Ähnliches sagt. In einem späteren Abschnitt fügen Sie den Typ available_options einem Slot hinzu, um anzugeben, dass Sie die Auswahl des Nutzers abrufen 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
typeseine neue Datei mit dem Namenavailable_options.yaml:
touch custom/types/available_options.yaml
- Öffnen Sie
custom/types/available_options.yamlin einem Texteditor.
Typen werden als Schlüssel/Wert-Paare 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. Im 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 der Datei
available_options.yamlFolgendes hinzu:entitiesundsynonyms.
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.
Ihre Aktion versteht jetzt, dass available_options Drache, Übersetzer und Kompass sind, und kann auch einige entsprechende Synonyme erkennen.
Slot-Filling konfigurieren
Als Nächstes müssen Sie die Slot-Ausfüllung in der Szene Fortune konfigurieren. So konfigurieren Sie die Logik zum Ausfüllen von Slots:
- Öffnen Sie
custom/scenes/Fortune.yamlin einem Texteditor. - Fügen Sie der Datei
Fortune.yamldie 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.
Sie haben dem Slot jetzt den Typ available_options hinzugefügt. Dadurch wird Ihrer Action mitgeteilt, welche Informationen Sie vom Nutzer erfassen müssen (die Auswahl der Hilfe), bevor Sie fortfahren können. Sie haben auch einen Prompt im Slot konfiguriert, der der Prompt-Warteschlange hinzugefügt wird, wenn der Nutzer die Slot-Ausfüllphase der Szene erreicht.
Wenn Sie den Slot chosenOptions nennen, wird das Feld writeSessionsParam mit demselben Namen ($session.params.chosenOptions) aktualisiert. Sie können über die Clientbibliothek im Prompt und in Ihrem Fulfillment auf diesen Parameter zugreifen.
Bedingung hinzufügen
Nachdem Sie einen Slot hinzugefügt haben, für den die Auswahl einer Hilfe durch den Nutzer erforderlich ist, können Sie eine Bedingung hinzufügen, um zu prüfen, ob die Slot-Daten abgerufen wurden, bevor der Nutzer die Unterhaltung fortsetzen kann.
In diesem Abschnitt fügen Sie die Bedingung scene.slots.status == "FINAL" hinzu, mit der geprüft wird, ob alle Slots ausgefüllt sind. Sobald alle Slots gefüllt sind, wird der Prompt-Warteschlange durch die Bedingung ein Prompt (You picked $session.params.chosenOptions.) hinzugefügt.
So konfigurieren Sie die Bedingung scene.slots.status == "FINAL":
- Öffnen Sie
custom/scenes/Fortune.yamlin einem Texteditor. - Fügen Sie oben in der Datei
Fortune.yamldieconditionalEvents-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.
Action im Simulator testen
An diesem Punkt haben Sie festgelegt, welche Optionen der Nutzer auswählen soll, um den Slot auszufüllen. Nachdem Sie diese Informationen vom Nutzer erhalten haben, sollte Ihre Aktion einen Prompt mit der vom Nutzer ausgewählten Option ausgeben.
So testen Sie Ihre Action:
- 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 im Feld Eingabe auf
Talk to my test appoder geben SieTalk to my test appein und drücken Sie die Eingabetaste. - Geben Sie
Yesin das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auch auf den Vorschlag-Chip Ja klicken.

- Klicken, tippen oder sagen Sie
dragon. Sie sollten den Prompt „You picked dragon.“ (Du hast Drache ausgewählt) erhalten.
Im nächsten Abschnitt passen Sie die Prompts für jede Hilfe an, die der Nutzer auswählen kann.
Aufforderungen mit Bedingungen anpassen
In diesem Abschnitt fügen Sie für jede Option, die der Nutzer auswählen kann, Bedingungen und für jede Bedingung einen benutzerdefinierten Prompt hinzu.
dragon-Glückskeksspruch anpassen
So aktualisieren Sie die Bedingung und passen den Prompt an, wenn ein Nutzer „dragon“ auswählt:
- Öffnen Sie
custom/scenes/Fortune.yamlin einem Texteditor. - Ersetzen Sie die
conditionalEvents-Daten in der DateiFortune.yamldurch das folgende Snippet:
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 ein Nutzer jetzt Drache oder etwas Ähnliches sagt, gibt Ihre Action ein Horoskop basierend auf dieser Auswahl aus. Als Nächstes fügen Sie die verbleibenden zwei Auswahlen hinzu.
translator- und compass-Glückskekse anpassen
So fügen Sie die Bedingungen hinzu und passen die Aufforderungen an, wenn ein Nutzer „Übersetzer“ oder „Kompass“ sagt:
- Fügen Sie in der Datei
custom/scenes/Fortune.yamldie beiden anderen Bedingungen unter der Bedingungdragonhinzu:
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.
Action im Simulator testen
An diesem Punkt sollte Ihre Aktion dem Nutzer basierend auf der ausgewählten Option eine personalisierte Vorhersage liefern.
So testen Sie Ihre Action:
- 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 appin das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie „Yes“ in das Feld Input ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlagschip Ja klicken.
- Klicken, tippen oder sagen Sie
Translator.

Sie sollten das entsprechende Fortune für die Option „translator“ erhalten.
3. Game-Loop hinzufügen
In diesem Abschnitt konfigurieren Sie Ihre Aktion so, dass der Nutzer eine andere Option auswählen und nach der Auswahl ein anderes Horoskop hören kann. Diese Änderung ähnelt der Meldung Möchtest du noch einmal spielen? am Ende eines Spiels. Um diese Schleife zu erstellen, können Sie die zuvor erstellten Intents yes und no wiederverwenden und sie 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 Again-Szene:
- Erstellen Sie im Verzeichnis
sceneseine neue Datei mit dem NamenAgain.yaml:
touch custom/scenes/Again.yaml
- Öffnen Sie
custom/scenes/Again.yamlin einem Texteditor. - Fügen Sie
Again.yamldie folgendenonEnter-Daten 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 Szene Fortune zu Szene Again hinzufügen
Nachdem der Nutzer sein Horoskop erhalten hat, muss das Gespräch zur neuen Again-Szene übergehen.
So fügen Sie einen Übergang von der Szene Fortune zur Szene Again hinzu:
- Öffnen Sie
custom/scenes/Fortune.yamlin einem Texteditor. - Fügen Sie jeder Bedingung
transitionToScene: Againhinzu, 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.
Action im Simulator testen
An diesem Punkt sollte Ihre Action dem Nutzer nach der Vorhersage den folgenden Prompt anzeigen: „Das ist es, was ich für dich sehe. Möchten Sie eine andere Option auswählen und eine andere Zukunft erkunden?“
So testen Sie Ihre Action:
- 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 appin das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie
Yesin das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlagschip Ja klicken. - Klicken, tippen oder sagen Sie
dragon.

Sie sollten das Ergebnis für die Drachenoption und den Prompt Again erhalten.
Intents hinzufügen und zur Szene Again wechseln
In diesem Abschnitt fügen Sie der Again-Szene yes- und no-Intents hinzu, damit Ihre Action versteht, ob der Nutzer eine neue Option auswählen möchte oder nicht. Außerdem fügen Sie die entsprechenden Übergänge für die Intents yes und no hinzu. Der Intent yes wechselt zur Szene Fortune, während der Intent no zur Systemszene End conversation wechselt.
So fügen Sie der Szene Again Intents und Übergänge hinzu:
- Öffnen Sie
custom/scenes/Again.yamlin einem Texteditor. - Fügen Sie oben in der Datei
Again.yamlüberOnEnterdieintentEvents-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.
Action im Simulator testen
Ihre Aktion sollte jetzt erkennen, 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 appin das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie
Yesin das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlagschip Ja klicken. - Klicken Sie auf eine der Optionen, geben Sie sie ein oder sprechen Sie sie aus.
- Geben Sie
Yesin das Eingabefeld ein und drücken Sie die Eingabetaste.

Sie sollten den Prompt „Was wählst du, um dich auf deiner Suche zu unterstützen: einen Drachen, einen Übersetzer oder einen Kompass?“ erhalten.
So testen Sie den Intent no:
- Klicken Sie auf eine der Optionen, geben Sie sie ein oder sprechen Sie sie aus.
- Geben Sie
Noin das Eingabefeld ein und drücken Sie die Eingabetaste.
Sie sollten den Prompt End conversation erhalten: „Es freut mich, dass Sie mit Ihrer Wahl zufrieden sind. Viel Glück bei der Suche. Auf Wiedersehen.“
4. Unterstützenden Pfad hinzufügen
Sie haben jetzt den Hauptpfad erstellt, den die meisten Nutzer in Ihrer Aktion durchlaufen. Der Nutzer könnte jedoch auf die Aufforderung in der Fortune-Szene Was wählst du, um dich auf deiner Suche zu unterstützen: einen Drachen, einen Übersetzer oder einen Kompass? mit einer Antwort reagieren, die nicht zu den angegebenen Optionen gehört.
In diesem Abschnitt konfigurieren Sie Ihre Aktion so, dass sie erkennt, wenn ein Nutzer magic, money, horse oder phone sagt, und den Nutzer auffordert, eine der ursprünglichen drei Optionen auszuwählen, wenn er eine dieser Optionen auswählt. Um diese Logik zu konfigurieren, müssen Sie eine neue type erstellen, die diese anderen Optionen enthält, sowie einen neuen Intent, other_option, der abgeglichen wird, wenn ein Nutzer eine dieser Optionen nennt. Außerdem müssen Sie Trainingsformulierungen im Intent other_option annotieren, 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, sodass Sie damit in einer Szene Logik ausführen können. In diesem Codelab konfigurieren Sie Ihre Action so, dass die vom Nutzer ausgewählte Hilfe extrahiert und in einem Prompt darauf verwiesen wird.
unavailable_options-Typ erstellen
Sie können jetzt einen unavailable_options-Typ erstellen, der verschiedene Optionen enthält, damit Ihre Action diese Daten in der Eingabe eines Nutzers erkennen kann.
So erstellen Sie den Typ unavailable_options:
- Erstellen Sie im Verzeichnis
typeseine neue Datei mit dem Namenunavailable_options.yaml:
touch custom/types/unavailable_options.yaml
- Öffnen Sie
custom/types/unavailable_options.yamlin einem Texteditor. - Fügen Sie der Datei
unavailable_options.yamldie 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.
other_option-Intent erstellen
Als Nächstes erstellen Sie einen Intent mit dem Namen other_option und fügen Trainingsformulierungen hinzu, die die Optionen vom Typ unavailable_options enthalten. Dieser Intent wird abgeglichen, wenn der Nutzer eine Option vom Typ unavailable_options auswählt.
So erstellen und konfigurieren Sie den Intent other_option:
- Erstellen Sie im Verzeichnis
intentseine neue Datei mit dem Namenother_option.yaml:
touch custom/intents/other_option.yaml
- Öffnen Sie
custom/intents/other_option.yamlin einem Texteditor. - Fügen Sie der Datei
other_option.yamldie 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 einem Prompt verwenden. Das machen Sie im nächsten Abschnitt.
- Speichern Sie die Datei.
Füge der Szene Fortune die Absicht other_option hinzu.
Sie haben jetzt eine Intention, other_option, die eine Option verarbeiten kann, die nicht zu den ursprünglichen Optionen gehört. In diesem Abschnitt fügen Sie der Szene Fortune die Intention other_option hinzu. Mit dem Parameter „intent“ können Sie den Prompt basierend auf der Eingabe des Nutzers anpassen.
So fügen Sie der Szene Fortune den Intent other_option hinzu:
- Öffnen Sie
custom/scenes/Fortune.yamlin einem 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 bezieht sich auf das Intent-Parameterobjekt und $intent.params.chosenUnavailableOption.original auf den Wert dieses Objekts. Die Property original bezieht sich auf die Rohdaten, die der Nutzer angibt.
Wenn ein Nutzer während der Fortune-Szene eine Option auswählt, die im Typ unavailable_options aufgeführt ist, wird der Intent other_option zugeordnet und ein Prompt wird der Prompt-Warteschlange hinzugefügt. Da kein Übergang angegeben ist, wird die Ausführungsschleife der Szene fortgesetzt, indem die Bedingungen noch einmal ausgewertet werden. Der chosenOptions-Slot fügt dann seinen Prompt der Prompt-Warteschlange hinzu und die Prompt-Warteschlange wird an den Nutzer gesendet.
Action im Simulator testen
Ihre Action sollte nun angemessen reagieren, wenn ein Nutzer eine der im Typ unavailable_options aufgeführten Optionen auswählt, und angeben, welche Hilfe der Nutzer ausgewählt hat. Ihre Aktion sollte den Nutzer dann noch einmal auffordern, eine der ursprünglichen Optionen auszuwählen (Drache, Übersetzer oder Kompass).
So testen Sie Ihre Action 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 appin das Feld Eingabe ein und drücken Sie die Eingabetaste. - Geben Sie
Yesin das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlagschip Ja klicken. - Geben Sie
magicin das Feld Eingabe ein und drücken Sie die Eingabetaste.

Möglicherweise klingt der Prompt nicht richtig, wenn der Nutzer „magisch“ auswählt, da der Artikel „ein“ davor steht. Dieses Problem wird in den folgenden Abschnitten behandelt.
unavailable_options-Alias hinzufügen
Wenn Sie den Artikel „a“ vor den entsprechenden Optionen vom Typ unavailable_options platzieren möchten, können Sie in Ihrer Fulfillment-Logik einen Ereignishandler konfigurieren, um zu prüfen, ob die vom Nutzer ausgewählte Option ein „a“ davor benötigt. Zuerst müssen Sie Ihre Aktion so konfigurieren, dass der Handler über die Szene Fortune aufgerufen wird.
So fügen Sie der Fortune-Szene den unavailable_options-Handler hinzu:
- Öffnen Sie
custom/scenes/Fortune.yamlin einem Texteditor. - Aktualisieren Sie die Datei
Fortune.yamlmit den folgendenintentEvents-Daten:
Fortune.yaml
intentEvents:
- handler:
webhookHandler: unavailable_options
intent: other_option
- Speichern Sie die Datei.
Auftragsausführung aktualisieren und bereitstellen
Nachdem Sie Ihre Aktion so konfiguriert haben, dass der unavailable_options-Ereignishandler aufgerufen wird, können Sie den Handler in Ihrer Auftragsausführung aktualisieren und bereitstellen.
So aktualisieren Sie die Auftragsausführung:
- Öffnen Sie
webhooks/ActionsOnGoogleFulfillment/index.jsin einem Texteditor. - Fügen Sie den folgenden Code in
index.jsunter demgreeting-Handler ein:
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 den folgenden Code unter
const app = conversation({debug:true});ein:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- Speichern Sie die Datei.
Code verstehen
Der unavailable_options-Handler führt folgende Schritte aus:
- Ruft
option-Daten aus demconv-Objekt ab und weistoptionderoriginal-Property zu, die die Rohdaten der Nutzereingabe enthält. - Weist
optionKeydem Attributresolvedzu, dem Schlüssel für den Typunavailable_options. - Prüft, ob
optionKeyeine der Optionen ist, die ein „a“ erfordern. Wenn dies der Fall ist, wird die Nachricht mit einem zusätzlichen „a“ erstellt. - Fügt die Nachricht über
conv.add(message)hinzu
Handler aktualisieren
Damit die Aktion unavailable_options verwenden kann, fügen Sie den unavailable_options-Handler zu webhooks/ActionsOnGoogleFulfillment.yaml hinzu.
- Fügen Sie den
unavailable_options-Handler-Namen zuActionsOnGoogleFulfillment.yamlhinzu:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- Speichern Sie die Datei.
Action im Simulator testen
Ihre Action sollte den Prompt jetzt anpassen, je nachdem, ob für die Auswahl des Nutzers aus dem Typ unavailable_options ein Artikel („a“) erforderlich ist.
So testen Sie Ihre Action:
- 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 im Feld Eingabe auf
Talk to my test appoder geben SieTalk to my test appein und drücken Sie die Eingabetaste. - Geben Sie
Yesin das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlagschip Ja klicken. - Geben Sie
magicin das Feld Eingabe ein und drücken Sie die Eingabetaste. Geben Sie dannhorsein das Feld Eingabe ein und drücken Sie die Eingabetaste.

Ihre Aktion sollte den Artikel „a“ vor der Auswahl „horse“ einfügen, während der Prompt für die Auswahl „magic“ ohne den Artikel „a“ erstellt wird.
5. Aktion in der Actions Console visualisieren
Das Actions SDK ist mit einer webbasierten IDE namens Actions Builder kompatibel, die in die Actions Console integriert ist. Mit dem Befehl gactions push können Sie Ihr lokales Dateisystem in den Entwurf Ihrer Action in der Console übertragen. In der Actions Console wird die Konfiguration Ihrer Aktion visuell dargestellt. Es kann hilfreich sein, sich Ihre Aktion während der Entwicklung visuell darstellen zu lassen. Das hat keine Auswirkungen auf die Version Ihrer Aktion, die für Tests bereitgestellt wird.
So übertragen Sie Ihr Actions-Projekt und rufen es in der Actions Console auf:
- Führen Sie im Terminal den folgenden Befehl aus, um Ihr Projekt in 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 Entwickeln.
- Klicken Sie auf den Drop-down-Pfeil neben Szenen und dann auf Starten. Sie sollten eine visuelle Darstellung der
Start-Szene Ihrer Action sehen, wie im folgenden Screenshot dargestellt:

Projekt bereinigen [empfohlen]
Um mögliche Gebühren 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 Schritte im Abschnitt Projekte beenden (löschen) 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!
Sie haben jetzt die erforderlichen Kenntnisse, um mit dem Actions SDK Aktionen für Google Assistant zu erstellen.
Behandelte Themen
- Konversationale Aktionen mit der Node.js-Auftragsausführungsbibliothek entwickeln
- Slots verwenden, um Daten vom Nutzer zu erheben
- Bedingungen verwenden, um der Szene Logik hinzuzufügen
- Spielschleife hinzufügen
- Unterstützenden Pfad hinzufügen
Weitere Informationen
In diesen Ressourcen finden Sie Informationen zum Erstellen von Aktionen für Google Assistant:
- Dokumentation für die Entwicklung von Actions für Google Assistant
- Actions on Google-GitHub-Seite mit Beispielcode und Bibliotheken
- Die offizielle Reddit-Community für Entwickler, die mit Google Assistant arbeiten
- Richtlinien für das Konversationsdesign mit Best Practices und Richtlinien für Conversational Actions
Folgen Sie uns auf Twitter unter @ActionsOnGoogle, um über unsere neuesten Ankündigungen auf dem Laufenden zu bleiben, und twittern Sie unter #AoGDevs, um zu teilen, was Sie entwickelt haben.
Feedback-Umfrage
Bevor Sie gehen, füllen Sie bitte eine kurze Umfrage zu Ihren Erfahrungen aus.