Aktionen für Google Assistant mit dem Actions SDK erstellen (Level 2)

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:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

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 Szene Fortune definieren
  • Fortune-Szene erstellen

So ändern Sie die Szene Start und fügen einen Übergang zur Szene Fortune hinzu:

  1. Öffnen Sie Ihr Actions-Projekt im Codelab zu Level 1 in Ihrem Texteditor.
  2. Öffnen Sie die Datei custom/scenes/Start.yaml.
  3. Aktualisieren Sie handler für den Intent yes, 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
  1. Speichern Sie die Datei.

So erstellen Sie eine neue Szene mit dem Namen Fortune:

  1. Rufen Sie im Terminal Ihr Codelab-Projekt zu Level 1-Aktionen auf.
  2. Erstellen Sie im Verzeichnis scenes eine neue Datei mit dem Namen Fortune.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:

  1. Erstellen Sie ein neues Verzeichnis mit dem Namen types:
mkdir custom/types
  1. Erstellen Sie im Verzeichnis types eine neue Datei mit dem Namen available_options.yaml:
touch custom/types/available_options.yaml
  1. Ö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:

  1. Fügen Sie die folgenden entities und synonyms in die Datei available_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
  1. 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:

  1. Öffnen Sie custom/scenes/Fortune.yaml in Ihrem Texteditor.
  2. Fügen Sie der Datei Fortune.yaml die folgenden slots-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
  1. 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":

  1. Öffnen Sie custom/scenes/Fortune.yaml in Ihrem Texteditor.
  2. 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.
  1. 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:

  1. 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
  1. Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
  2. Klicken Sie in das Feld Eingabe oder geben Sie Talk to my test app ein und drücken Sie die Eingabetaste.
  3. Geben Sie Yes in das Feld Eingabe ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlags-Chip Ja klicken.

a899d45c542668f6.png

  1. 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:

  1. Öffnen Sie custom/scenes/Fortune.yaml in Ihrem Texteditor.
  2. Ersetzen Sie die conditionalEvents-Daten durch das folgende Snippet in der Datei Fortune.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.
  1. 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:

  1. Fügen Sie in der Datei custom/scenes/Fortune.yaml die beiden anderen Bedingungen unter der Bedingung dragon 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.
  1. 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:

  1. 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
  1. Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
  2. Geben Sie Talk to my test app in das Feld Eingabe ein und drücken Sie die Eingabetaste.
  3. 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.
  4. Klicken, tippen oder „Translator“ sagen.

29e17f950bd0dd71.png

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:

  1. Erstellen Sie im Verzeichnis scenes eine neue Datei mit dem Namen Again.yaml:
touch custom/scenes/Again.yaml
  1. Öffnen Sie custom/scenes/Again.yaml in Ihrem Texteditor.
  2. Fügen Sie die folgenden onEnter-Daten zu Again.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"
  1. 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:

  1. Öffnen Sie custom/scenes/Fortune.yaml in Ihrem Texteditor.
  2. 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
  1. 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:

  1. 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
  1. Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
  2. Geben Sie Talk to my test app in das Feld Eingabe ein und drücken Sie die Eingabetaste.
  3. 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.
  4. Klicken, tippen oder „dragon“ sagen.

b299e9fed9aedb69.png

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:

  1. Öffnen Sie custom/scenes/Again.yaml in Ihrem Texteditor.
  2. Fügen Sie oben in der Datei Again.yaml oberhalb von OnEnter 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
  1. 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:

  1. 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
  1. Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
  2. Geben Sie Talk to my test app in das Feld Eingabe ein und drücken Sie die Eingabetaste.
  3. 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.
  4. Klicken Sie auf eine der Optionen, geben Sie sie ein oder sagen Sie sie ein.
  5. Geben Sie Yes in das Eingabefeld ein und drücken Sie die Eingabetaste.

5d0690332efe2e29.png

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:

  1. Klicken Sie auf eine der Optionen, geben Sie sie ein oder sagen Sie sie ein.
  2. 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:

  1. Erstellen Sie im Verzeichnis types eine neue Datei mit dem Namen unavailable_options.yaml:
touch custom/types/unavailable_options.yaml
  1. Öffnen Sie custom/types/unavailable_options.yaml in Ihrem Texteditor.
  2. Fügen Sie der Datei unavailable_options.yaml die folgenden synonyms-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
  1. 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:

  1. Erstellen Sie im Verzeichnis intents eine neue Datei mit dem Namen other_option.yaml:
touch custom/intents/other_option.yaml
  1. Öffnen Sie custom/intents/other_option.yaml in Ihrem Texteditor.
  2. Fügen Sie der Datei other_option.yaml die folgenden parameters- und trainingPhrases-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.

  1. 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:

  1. Öffnen Sie custom/scenes/Fortune.yaml in Ihrem Texteditor.
  2. Fügen Sie die folgenden intentEvents-Daten zwischen den conditionalEvents- und slots-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
  1. 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:

  1. 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
  1. Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
  2. Geben Sie Talk to my test app in das Feld Eingabe ein und drücken Sie die Eingabetaste.
  3. 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.
  4. Geben Sie magic in das Feld Eingabe ein und drücken Sie die Eingabetaste.

5a42c33eca435f32.png

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:

  1. Öffnen Sie custom/scenes/Fortune.yaml in Ihrem Texteditor.
  2. Aktualisieren Sie die Datei Fortune.yaml mit den folgenden intentEvents-Daten:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. 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:

  1. Öffnen Sie webhooks/ActionsOnGoogleFulfillment/index.js in Ihrem Texteditor.
  2. Fügen Sie in index.js unter dem Handler greeting 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);
});
  1. Fügen Sie unter const app = conversation({debug:true}); den folgenden Code hinzu:

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Speichern Sie die Datei.

Code verstehen

Der unavailable_options-Handler führt Folgendes aus:

  • Ruft option-Daten vom conv-Objekt ab und weist option dem Attribut original zu, bei dem es sich um die Roheingabe des Nutzers handelt.
  • Weist dem resolved-Attribut optionKey zu, dem Schlüssel für den unavailable_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.

  1. Fügen Sie den Handler-Namen unavailable_options zu ActionsOnGoogleFulfillment.yaml hinzu:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. 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:

  1. 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
  1. Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
  2. Klicken Sie in das Feld Eingabe oder geben Sie Talk to my test app ein und drücken Sie die Eingabetaste.
  3. 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.
  4. Geben Sie magic in das Feld Eingabe ein und drücken Sie die Eingabetaste. Geben Sie dann horse in das Feld Eingabe ein und drücken Sie die Eingabetaste.

54ee24c5c3c56e.png

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:

  1. 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.
  1. Kopieren Sie die angegebene URL und fügen Sie sie in einen Browser ein.
  2. Klicken Sie in der Actions Console in der oberen Navigationsleiste auf Develop.
  3. 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:

cae526c647f8d40f.png

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:

  1. Führen Sie die im Abschnitt Projekte beenden (löschen) aufgeführten Schritte aus, um das Cloud-Projekt und die Ressourcen zu löschen.
  1. 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:

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.