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

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

Die Voraussetzungen für dieses Codelab sind:

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

So bearbeiten Sie die Start-Szene und fügen der Fortune-Szene eine Übergangssequenz hinzu:

  1. Öffnen Sie Ihr Actions-Projekt aus dem Codelab für Anfänger in einem Texteditor.
  2. Öffnen Sie die Datei custom/scenes/Start.yaml.
  3. Aktualisieren Sie die handler für die Intention yes, 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
  1. Speichern Sie die Datei.

So erstellen Sie eine neue Szene mit dem Namen Fortune:

  1. Wechseln Sie im Terminal zu Ihrem Codelab-Projekt „Level 1 Actions“.
  2. Erstellen Sie im Verzeichnis scenes eine neue Datei mit dem Namen Fortune.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:

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

  1. Fügen Sie der Datei available_options.yaml Folgendes hinzu: entities und synonyms.

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.

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:

  1. Öffnen Sie custom/scenes/Fortune.yaml in einem 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.

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":

  1. Öffnen Sie custom/scenes/Fortune.yaml in einem Texteditor.
  2. Fügen Sie oben in der Datei Fortune.yaml die 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.

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:

  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 im Feld Eingabe auf Talk to my test app 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 Vorschlag-Chip Ja klicken.

a899d45c542668f6.png

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

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

  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.

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:

  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 Input ein und drücken Sie die Eingabetaste. Alternativ können Sie auf den Vorschlagschip Ja klicken.
  4. Klicken, tippen oder sagen Sie Translator.

29e17f950bd0dd71.png

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:

  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 einem Texteditor.
  2. Fügen Sie Again.yaml die folgenden onEnter-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"
  1. 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:

  1. Öffnen Sie custom/scenes/Fortune.yaml in einem 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.

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:

  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 auf den Vorschlagschip Ja klicken.
  4. Klicken, tippen oder sagen Sie dragon.

b299e9fed9aedb69.png

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:

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

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:

  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 auf den Vorschlagschip Ja klicken.
  4. Klicken Sie auf eine der Optionen, geben Sie sie ein oder sprechen Sie sie aus.
  5. Geben Sie Yes in das Eingabefeld ein und drücken Sie die Eingabetaste.

5d0690332efe2e29.png

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:

  1. Klicken Sie auf eine der Optionen, geben Sie sie ein oder sprechen Sie sie aus.
  2. Geben Sie No in 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:

  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 einem 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.

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:

  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 einem 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 einem Prompt verwenden. Das machen Sie im nächsten Abschnitt.

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

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

  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 auf den Vorschlagschip Ja klicken.
  4. Geben Sie magic in das Feld Eingabe ein und drücken Sie die Eingabetaste.

3a42c33eca435f32.png

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:

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

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

index.js

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

Code verstehen

Der unavailable_options-Handler führt folgende Schritte aus:

  • Ruft option-Daten aus dem conv-Objekt ab und weist option der original-Property zu, die die Rohdaten der Nutzereingabe enthält.
  • Weist optionKey dem Attribut resolved zu, dem Schlüssel für den Typ unavailable_options.
  • Prüft, ob optionKey eine 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.

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

ActionsOnGoogleFulfillment.yaml

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

  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 im Feld Eingabe auf Talk to my test app 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 Vorschlagschip 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

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:

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

cae526c647f8d40f.png

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:

  1. Führen Sie die Schritte im Abschnitt Projekte beenden (löschen) 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!

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:

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.