Tworzenie działań dla Asystenta Google za pomocą pakietu Actions SDK (poziom 2)

1. Przegląd

Platforma dla deweloperów Asystenta Google umożliwia tworzenie oprogramowania, które rozszerza funkcjonalność Asystenta Google, wirtualnego asystenta osobistego, na ponad miliardzie urządzeń, w tym na inteligentnych głośnikach, telefonach, samochodach, telewizorach, słuchawkach i innych. Użytkownicy rozmawiają z Asystentem, aby wykonywać różne czynności, np. kupować produkty spożywcze lub zamawiać przejazdy. Jako deweloper możesz używać platformy deweloperskiej Asystenta, aby łatwo tworzyć i zarządzać atrakcyjnymi i skutecznymi interakcjami głosowymi między użytkownikami a własną usługą realizacji zamówień.

Ten przewodnik obejmuje koncepcje na poziomie średniozaawansowanym dotyczące tworzenia aplikacji na Asystenta Google i bazuje na działaniu utworzonym w przewodniku Tworzenie działań dla Asystenta Google za pomocą pakietu Actions SDK (poziom 1). Zdecydowanie zalecamy ukończenie codelabu na poziomie 1 przed rozpoczęciem tego.

Działanie, które utworzysz w tym samouczku, będzie informować użytkowników o ich losie w mitycznej krainie Gryffinberg na podstawie wybranej przez nich pomocy.

Co utworzysz

W tym ćwiczeniu z programowania utworzysz zaawansowane działanie konwersacyjne z tymi funkcjami:

  • Zbiera dane od użytkownika i w zależności od ich wartości modyfikuje prompty konwersacyjne.
  • Odpowiada dodatkowymi pytaniami, aby kontynuować rozmowę.
  • Tworzy pętlę gry, dzięki czemu użytkownik może ponownie wejść w interakcję z Action po otrzymaniu wróżby.

Zanim zaczniesz tworzyć akcję, możesz wejść w interakcję z akcją na żywo na urządzeniu z Asystentem Google, mówiąc „OK Google, porozmawiaj z Wróżbą i Fortuną”. Domyślna ścieżka działania w przypadku powracającego użytkownika wygląda tak:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

Czego się nauczysz

  • Jak używać slotów do zbierania danych od użytkowników
  • Jak używać warunków, aby dodać logikę do sceny
  • Jak dodać pętlę gry
  • Jak dodać ścieżkę wsparcia

Czego potrzebujesz

Wymagania wstępne dotyczące tego laboratorium obejmują:

Aby zrozumieć kod realizacji w tych ćwiczeniach z programowania, zalecamy (ale nie wymagamy) znajomość JavaScript (ES6).

Opcjonalnie: pobieranie przykładowego kodu

Możesz też pobrać pełny kod projektu poziomu 1 z repozytorium GitHub ćwiczenia z Actions Buildera na poziomie 1, aby móc wykonywać czynności opisane w tym ćwiczeniu. Pełny kod projektu na poziomie 2 możesz też wyświetlić w tym repozytorium GitHub.

2. Kontynuowanie tworzenia interfejsu konwersacyjnego

W pierwszych ćwiczeniach z programowania utworzyliśmy prostą akcję konwersacyjną z jedną sceną Start.

W tym ćwiczeniu z programowania rozszerzysz konwersację działania. W kolejnych sekcjach skonfigurujesz działanie w taki sposób, aby:

  • Przejście do nowej sceny Fortune, gdy użytkownik chce poznać swoją przyszłość
  • Zapytaj użytkownika, z jakiej pomocy chce skorzystać podczas podróży.
  • Wyświetlanie spersonalizowanych wróżb na podstawie wyboru użytkownika

Przejście do sceny Fortune i jej utworzenie

W tej sekcji wykonasz te czynności:

  • Usuń z sceny Start istniejący prompt, który odpowiada użytkownikowi i kończy rozmowę.
  • Określ przejście ze sceny Start do sceny Fortune.
  • Tworzenie sceny Fortune

Aby zmodyfikować scenę Start i dodać przejście do sceny Fortune, wykonaj te czynności:

  1. Otwórz projekt Actions z poziomu 1 samouczka w edytorze tekstu.
  2. Otwórz plik custom/scenes/Start.yaml.
  3. Zaktualizuj handler w przypadku intencji yes, aby Twój kod był zgodny z poniższym fragmentem:

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. Zapisz plik.

Aby utworzyć nową scenę o nazwie Fortune, wykonaj te czynności:

  1. W terminalu otwórz projekt działań z poziomu 1 w codelabie.
  2. Utwórz w katalogu scenes nowy plik o nazwie Fortune.yaml:
touch custom/scenes/Fortune.yaml

W kolejnej sekcji zmodyfikujesz ten plik.

Zdefiniuj logikę konwersacji dla sceny Fortune

W tym ćwiczeniu w Codelabs skonfigurujesz scenę Fortune, aby zadać użytkownikowi pytanie: „Co wybierasz, aby pomóc Ci w wyprawie: smoka, tłumacz czy kompas?”. Aby zebrać od użytkownika niezbędne informacje przed kontynuowaniem, możesz użyć funkcji wypełniania slotów.

Twoje działanie podaje przepowiednie dla 3 pomocników: smoka, tłumacza i kompasu. Aby skonfigurować działanie tak, aby rozpoznawało te 3 opcje w danych wejściowych użytkownika, musisz utworzyć nowy typ.

Podczas wypełniania slotów w scenie możesz używać typów, aby określić informacje, które chcesz uzyskać od użytkownika. Gdy silnik NLU wykryje w danych wejściowych użytkownika dopasowanie do gniazda, wyodrębnia je jako parametr wpisany, dzięki czemu możesz używać go w scenie.

Tworzenie typu available_options

W tej sekcji utworzysz nowy typ o nazwie available_options, który określa 3 opcje, jakie użytkownicy mogą wybrać w odpowiedzi na prompta (smok, tłumacz i kompas). Możesz też zdefiniować kilka synonimów tych opcji na wypadek, gdyby użytkownik powiedział coś podobnego. W dalszej części dodasz do slotu typ available_options, aby określić, że chcesz uzyskać wybór użytkownika.

Aby utworzyć typ available_options, wykonaj te czynności:

  1. Utwórz nowy katalog o nazwie types:
mkdir custom/types
  1. Utwórz w katalogu types nowy plik o nazwie available_options.yaml:
touch custom/types/available_options.yaml
  1. Otwórz custom/types/available_options.yaml w edytorze tekstu.

Typy są konfigurowane jako pary klucz-wartość, gdzie klucz to nazwa typu, a wartości to synonimy tego klucza. Gdy zdefiniujesz klucz, zostanie on automatycznie dodany jako wartość. W pakiecie SDK Actions klucze są reprezentowane jako entities, a wartości jako synonyms.

Aby dodać 3 opcje, które użytkownik może wybrać, wykonaj te czynności:

  1. Dodaj do pliku available_options.yaml te elementy entitiessynonyms:

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. Zapisz plik.

Działanie rozumie teraz, że available_options to smok, tłumacz i kompas, i rozpoznaje też kilka odpowiednich synonimów.

Konfigurowanie wypełniania slotów

Następnie musisz skonfigurować wypełnianie slotów w scenie Fortune. Aby skonfigurować logikę wypełniania slotów, wykonaj te czynności:

  1. Otwórz custom/scenes/Fortune.yaml w edytorze tekstu.
  2. Dodaj do pliku Fortune.yaml te dane slots:

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. Zapisz plik.

Do slotu został dodany typ available_options, który informuje działanie, jakie informacje (wybór pomocy) należy zebrać od użytkownika przed kontynuowaniem. W slocie skonfigurowano też prompt, który jest dodawany do kolejki promptów, gdy użytkownik osiągnie etap wypełniania slotu w scenie.

Gdy nazwiesz slot chosenOptions, pole writeSessionsParam zostanie zaktualizowane o tę samą nazwę ($session.params.chosenOptions). Możesz uzyskać dostęp do tego parametru pod tą nazwą w prompcie i w realizacji za pomocą biblioteki klienta.

Dodaj warunek

Po dodaniu slotu, który wymaga wyboru przez użytkownika, możesz dodać warunek, aby sprawdzić, czy dane slotu zostały uzyskane, zanim użytkownik będzie mógł kontynuować rozmowę.

W tej sekcji dodasz warunek scene.slots.status == "FINAL", który sprawdza, czy wypełnianie slotów zostało zakończone. Gdy wszystkie miejsca zostaną wypełnione, warunek doda prompt (You picked $session.params.chosenOptions.) do kolejki promptów.

Aby skonfigurować warunek scene.slots.status == "FINAL", wykonaj te czynności:

  1. Otwórz custom/scenes/Fortune.yaml w edytorze tekstu.
  2. Dodaj dane conditionalEvents na początku pliku Fortune.yaml:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. Zapisz plik.

Testowanie działania w symulatorze

Na tym etapie określasz, które opcje użytkownik powinien wybrać, aby wypełnić miejsce. Po uzyskaniu tych informacji od użytkownika działanie powinno wyświetlić prompta odwołującego się do wybranej przez niego opcji.

Aby przetestować działanie, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Powinny się wyświetlić dane wyjściowe podobne do tych:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Skopiuj podany adres URL i wklej go do przeglądarki.
  2. Kliknij lub wpisz Talk to my test app w polu Input (Dane wejściowe) i naciśnij Enter.
  3. Wpisz Yes w polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.

a899d45c542668f6.png

  1. Kliknij, wpisz lub powiedz dragon. Powinien wyświetlić się komunikat „You picked dragon.” (Wybrano smoka).

W następnej sekcji dostosujesz prompty dla każdego narzędzia, które użytkownik może wybrać.

Dostosowywanie promptów za pomocą warunków

W tej sekcji dodajesz warunki dla każdej opcji, którą użytkownik może wybrać, oraz niestandardowy prompt dla każdego warunku.

Dostosowywanie wróżby dragon

Aby zaktualizować warunek i dostosować prompt, który będzie wyświetlany, gdy użytkownik wybierze „smoka”, wykonaj te czynności:

  1. Otwórz custom/scenes/Fortune.yaml w edytorze tekstu.
  2. Zastąp dane conditionalEvents tym fragmentem kodu w pliku 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. Zapisz plik.

Teraz, gdy użytkownik powie „smok” lub coś podobnego, Twoja akcja poda wróżbę na podstawie tego wyboru. Następnie dodaj pozostałe 2 wybory.

Dostosowywanie wróżb translatorcompass

Aby dodać warunki i dostosować prompty, które będą się wyświetlać, gdy użytkownik powie „tłumacz” lub „kompas”, wykonaj te czynności:

  1. W pliku custom/scenes/Fortune.yaml dodaj pozostałe 2 warunki w sekcji warunku dragon:

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. Zapisz plik.

Testowanie działania w symulatorze

Na tym etapie Twoja akcja powinna wyświetlić użytkownikowi spersonalizowaną wróżbę na podstawie wybranej przez niego opcji.

Aby przetestować działanie, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Powinny się wyświetlić dane wyjściowe podobne do tych:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Skopiuj podany adres URL i wklej go do przeglądarki.
  2. Wpisz Talk to my test app w polu Input (Dane wejściowe) i naciśnij Enter.
  3. Wpisz „Yes” w polu Input i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Kliknij, wpisz lub powiedz Translator.

29e17f950bd0dd71.png

Powinna się wyświetlić odpowiednia wróżba dla opcji „tłumacz”.

3. Dodawanie pętli gry

W tej sekcji skonfigurujesz działanie tak, aby użytkownik mógł wybrać inną opcję i po dokonaniu wyboru usłyszeć inną przepowiednię. Ta zmiana jest podobna do komunikatu „Czy chcesz zagrać jeszcze raz?” na końcu gry. Aby utworzyć tę pętlę, możesz ponownie wykorzystać utworzone wcześniej intencje yesno i dodać je do nowej sceny o nazwie Again.

Tworzenie sceny Again

W tej sekcji utworzysz nową Againscenę i dodasz prompt, który zapyta użytkownika, czy chce wybrać inną opcję.

Aby utworzyć i skonfigurować scenę Again, wykonaj te czynności:

  1. Utwórz w katalogu scenes nowy plik o nazwie Again.yaml:
touch custom/scenes/Again.yaml
  1. Otwórz custom/scenes/Again.yaml w edytorze tekstu.
  2. Dodaj do Again.yaml te dane onEnter:

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. Zapisz plik.

Dodawanie przejścia ze sceny Fortune do sceny Again

Po otrzymaniu wróżby przez użytkownika rozmowa musi przejść do nowej sceny Again.

Aby dodać przejście ze sceny Fortune do sceny Again, wykonaj te czynności:

  1. Otwórz custom/scenes/Fortune.yaml w edytorze tekstu.
  2. Dodaj transitionToScene: Again do każdego warunku, jak pokazano w tym fragmencie kodu:

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. Zapisz plik.

Testowanie działania w symulatorze

W tym momencie Twoja akcja powinna wyświetlić użytkownikowi po otrzymaniu wróżby ten prompt: „To jest to, co widzę w Twojej przyszłości. Czy chcesz wybrać inną opcję i poznać inną przyszłość?

Aby przetestować działanie, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Powinny się wyświetlić dane wyjściowe podobne do tych:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Skopiuj podany adres URL i wklej go do przeglądarki.
  2. Wpisz Talk to my test app w polu Input (Dane wejściowe) i naciśnij Enter.
  3. Wpisz Yes w polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Kliknij, wpisz lub powiedz dragon.

b299e9fed9aedb69.png

Powinieneś(-aś) otrzymać wróżbę dla opcji smoka i prompt Again.

Dodaj intencje i przejście do sceny Again

W tej sekcji dodasz intencje yesno do sceny Again, aby Twoja czynność wiedziała, czy użytkownik chce wybrać nową opcję. Dodajesz też odpowiednie przejścia dla intencji yesno. Intencja yes przechodzi do sceny Fortune, a intencja no przechodzi do sceny systemowej End conversation.

Aby dodać intencje i przejścia do sceny Again, wykonaj te czynności:

  1. Otwórz custom/scenes/Again.yaml w edytorze tekstu.
  2. Dodaj dane intentEvents u góry pliku Again.yaml, nad OnEnter:

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. Zapisz plik.

Testowanie działania w symulatorze

Działanie powinno teraz wiedzieć, czy użytkownik chce wybrać nową opcję, czy zakończyć rozmowę.

Aby przetestować intencję yes, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Powinny się wyświetlić dane wyjściowe podobne do tych:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Skopiuj podany adres URL i wklej go do przeglądarki.
  2. Wpisz Talk to my test app w polu Input (Dane wejściowe) i naciśnij Enter.
  3. Wpisz Yes w polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Kliknij, wpisz lub powiedz jedną z opcji.
  5. Wpisz Yes w polu do wprowadzania danych i naciśnij Enter.

5d0690332efe2e29.png

Powinien pojawić się prompt „Co wybierasz, aby pomóc sobie w wyprawie: smoka, tłumacza czy kompas?”

Aby przetestować intencję no, wykonaj te czynności:

  1. Kliknij, wpisz lub powiedz jedną z opcji.
  2. Wpisz No w polu do wprowadzania danych i naciśnij Enter.

Powinien pojawić się prompt End conversation: „Cieszę się, że jesteś zadowolony(-a) ze swojego wyboru. Powodzenia w poszukiwaniach. Żegnaj”.

4. Dodawanie ścieżki wspierającej

Główna ścieżka, którą podąża większość użytkowników Twojej akcji, została już utworzona. Użytkownik może jednak odpowiedzieć na pytanie z Fortune sceny: „Co wybierzesz, aby pomóc sobie w wyprawie: smoka, tłumacza czy kompas?”, wybierając opcję, która nie jest jedną z podanych.

W tej sekcji skonfigurujesz działanie, które będzie rozpoznawać, kiedy użytkownik powie „magia”, „pieniądze”, „koń” lub „telefon”, i ponownie wyświetlać użytkownikowi pierwotne 3 opcje, gdy wybierze jedną z tych opcji. Aby skonfigurować tę logikę, musisz utworzyć nowy type, który zawiera te inne opcje, oraz nowy zamiar other_option, który jest dopasowywany, gdy użytkownik wybierze jedną z tych opcji. Musisz też dodawać adnotacje do wyrażeń na potrzeby trenowania w ramach intencji other_option, aby identyfikować i wyodrębniać parametry intencji.

Gdy silnik przetwarzania języka naturalnego Asystenta wykryje w danych wejściowych użytkownika dopasowanie parametru, wyodrębnia wartość jako parametr wpisany, dzięki czemu możesz używać go w logice sceny. W tym laboratorium kodowania skonfigurujesz działanie tak, aby wyodrębniało pomoc wybraną przez użytkownika i odwoływało się do tego wyboru w prompcie.

Tworzenie typu unavailable_options

Możesz teraz utworzyć typ unavailable_options, który zawiera różne opcje, aby Twoja czynność mogła identyfikować te dane w danych wejściowych użytkownika.

Aby utworzyć typ unavailable_options, wykonaj te czynności:

  1. Utwórz w katalogu types nowy plik o nazwie unavailable_options.yaml:
touch custom/types/unavailable_options.yaml
  1. Otwórz custom/types/unavailable_options.yaml w edytorze tekstu.
  2. Dodaj do pliku unavailable_options.yaml te dane synonyms:

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. Zapisz plik.

Tworzenie intencji other_option

Następnie tworzysz intencję o nazwie other_option i dodajesz frazy treningowe, które zawierają opcje typu unavailable_options. Ten zamiar jest dopasowywany, gdy użytkownik wybierze opcję zawartą w typie unavailable_options.

Aby utworzyć i skonfigurować intencję other_option, wykonaj te czynności:

  1. Utwórz w katalogu intents nowy plik o nazwie other_option.yaml:
touch custom/intents/other_option.yaml
  1. Otwórz custom/intents/other_option.yaml w edytorze tekstu.
  2. Dodaj do pliku other_option.yaml te dane parameterstrainingPhrases:

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)

W tym miejscu ręcznie dodajesz adnotacje do fraz treningowych z użyciem niedostępnych opcji określonych w poprzedniej sekcji. Parametr intencji chosenUnavailableOption umożliwia wyodrębnienie nazwy opcji i użycie jej w prompcie, co zrobisz w następnej sekcji.

  1. Zapisz plik.

Dodawanie intencji other_option do sceny Fortune

Masz teraz intencję other_option, która może obsługiwać opcję określoną przez użytkownika, a nie należącą do pierwotnych opcji. W tej sekcji dodasz intencję other_option do sceny Fortune. Parametr intent służy do dostosowywania prompta na podstawie danych wejściowych użytkownika.

Aby dodać intencję other_option do sceny Fortune, wykonaj te czynności:

  1. Otwórz custom/scenes/Fortune.yaml w edytorze tekstu.
  2. Dodaj te dane intentEvents między danymi conditionalEvents a danymi slots:

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. Zapisz plik.

Wyrażenie $intent.params.chosenUnavailableOption odnosi się do obiektu parametru intencji, a $intent.params.chosenUnavailableOption.original – do wartości tego obiektu. Właściwość original odnosi się do surowych danych wejściowych określonych przez użytkownika.

Gdy użytkownik wypowie opcję wymienioną w unavailable_options podczas sceny Fortune, zostanie dopasowany zamiar other_option i do kolejki promptów zostanie dodany prompt. Ponieważ nie określono przejścia, pętla wykonania sceny jest kontynuowana przez ponowną ocenę etapu warunków. Miejsce na reklamę chosenOptions dodaje wtedy swój prompt do kolejki promptów, która jest dostarczana użytkownikowi.

Testowanie działania w symulatorze

Twoja czynność powinna teraz odpowiednio reagować, gdy użytkownik wybierze jedną z opcji wymienionych w unavailable_options type, i określać, które urządzenie pomocnicze zostało wybrane. Działanie powinno ponownie poprosić użytkownika o wybranie jednej z pierwotnych opcji (smoka, tłumacza lub kompasu).

Aby przetestować działanie w symulatorze, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Powinny się wyświetlić dane wyjściowe podobne do tych:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Skopiuj podany adres URL i wklej go do przeglądarki.
  2. Wpisz Talk to my test app w polu Input (Dane wejściowe) i naciśnij Enter.
  3. Wpisz Yes w polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Wpisz magic w polu Input (Dane wejściowe) i naciśnij Enter.

3a42c33eca435f32.png

Możesz zauważyć, że gdy użytkownik wybierze opcję „magia”, prompt nie brzmi poprawnie ze względu na umieszczony przed nim rodzajnik „a”. Rozwiążesz ten problem w kolejnych sekcjach.

Dodaj moduł obsługi unavailable_options

Aby umieścić przedimek „a” przed odpowiednimi wyborami z typu unavailable_options, możesz skonfigurować w logice realizacji procedurę obsługi zdarzeń, która sprawdzi, czy wybrana przez użytkownika opcja wymaga przedimka „a”. Najpierw musisz skonfigurować działanie tak, aby wywoływało procedurę obsługi ze sceny Fortune.

Aby dodać moduł obsługi unavailable_options do sceny Fortune, wykonaj te czynności:

  1. Otwórz custom/scenes/Fortune.yaml w edytorze tekstu.
  2. Zaktualizuj plik Fortune.yaml tymi intentEvents danymi:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Zapisz plik.

Aktualizowanie i wdrażanie realizacji

Po skonfigurowaniu działania tak, aby wywoływało moduł obsługi zdarzeń unavailable_options możesz zaktualizować moduł obsługi w usłudze realizacji i wdrożyć go.

Aby zaktualizować realizację zamówienia, wykonaj te czynności:

  1. Otwórz webhooks/ActionsOnGoogleFulfillment/index.js w edytorze tekstu.
  2. Dodaj ten kod do pliku index.js pod modułem obsługi greeting:

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. Dodaj ten kod pod elementem const app = conversation({debug:true});:

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Zapisz plik.

Zrozumienie kodu

Procedura obsługi unavailable_options wykonuje te czynności:

  • Pobiera dane option z obiektu conv i przypisuje je do właściwości original, która jest surowym wejściem od użytkownika.option
  • Przypisuje wartość optionKey do właściwości resolved, która jest kluczem typu unavailable_options.
  • Sprawdza, czy optionKey jest jedną z opcji, które wymagają przedimka „a”; jeśli tak, tworzy komunikat z dodanym przedimkiem „a”.
  • Dodaje wiadomość przez conv.add(message)

Aktualizowanie modułów obsługi

Aby zezwolić działaniu na używanie unavailable_options, dodaj moduł obsługi unavailable_options do webhooks/ActionsOnGoogleFulfillment.yaml.

  1. Dodaj nazwę modułu obsługi unavailable_options do pliku ActionsOnGoogleFulfillment.yaml:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Zapisz plik.

Testowanie działania w symulatorze

Działanie powinno teraz dostosować prompt na podstawie tego, czy wybór użytkownika z typu unavailable_options wymaga przedimka „a”.

Aby przetestować działanie, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Powinny się wyświetlić dane wyjściowe podobne do tych:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Skopiuj podany adres URL i wklej go do przeglądarki.
  2. Kliknij lub wpisz Talk to my test app w polu Input (Dane wejściowe) i naciśnij Enter.
  3. Wpisz Yes w polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Wpisz magic w polu Input (Dane wejściowe) i naciśnij Enter. Następnie wpisz horse w polu Input (Dane wejściowe) i naciśnij Enter.

54ee24c5c3c56e.png

Działanie powinno dodać przedimek „a” przed wyborem „horse”, tworząc prompt bez przedimka „a” w przypadku wyboru „magic”.

5. Wyświetlanie działania w konsoli Actions

Pakiet Actions SDK jest interoperacyjny z internetowym środowiskiem IDE o nazwie Actions Builder, które jest zintegrowane z Konsolą Actions. Możesz przesłać lokalny system plików do wersji roboczej działania w konsoli za pomocą polecenia gactions push. Konsola Actions udostępnia wizualizację konfiguracji akcji. Wizualizacja działania może być przydatna podczas tworzenia i nie wpływa na wersję działania, która jest używana do testowania.

Aby przesłać projekt Actions i wyświetlić go w Konsoli Actions, wykonaj te czynności:

  1. Aby przesłać projekt do konsoli Actions, uruchom w terminalu to polecenie:
gactions push

Powinny się wyświetlić dane wyjściowe podobne do tych:

✔ 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. Skopiuj podany adres URL i wklej go do przeglądarki.
  2. W Konsoli Actions kliknij Rozwijaj na górnym pasku nawigacyjnym.
  3. Kliknij strzałkę w dół obok opcji Sceny i kliknij Start. Powinna się wyświetlić wizualizacja sceny Start akcji, jak na tym zrzucie ekranu:

cae526c647f8d40f.png

Zwolnij miejsce w projekcie [zalecane]

Aby uniknąć ewentualnych opłat, zalecamy usunięcie projektów, których nie zamierzasz używać. Aby usunąć projekty utworzone w tym laboratorium, wykonaj te czynności:

  1. Aby usunąć projekt Cloud i zasoby, wykonaj czynności opisane w sekcji Wyłączanie (usuwanie) projektów.
  1. Opcjonalnie: aby natychmiast usunąć projekt z Konsoli Actions, wykonaj czynności opisane w sekcji Usuwanie projektu. Jeśli nie wykonasz tego kroku, Twój projekt zostanie automatycznie usunięty po około 30 dniach.

6. Gratulacje!

Znasz już umiejętności średnio zaawansowane, które są potrzebne do tworzenia akcji dla Asystenta Google za pomocą pakietu Actions SDK.

Omówione kwestie

  • Jak tworzyć działania konwersacyjne za pomocą biblioteki realizacji w Node.js
  • Jak używać slotów do zbierania danych od użytkownika
  • Jak używać warunków do dodawania logiki do sceny
  • Jak dodać pętlę gry
  • Jak dodać ścieżkę wsparcia

Więcej informacji

Aby dowiedzieć się więcej o tworzeniu działań dla Asystenta Google, zapoznaj się z tymi materiałami:

Obserwuj nas na Twitterze @ActionsOnGoogle, aby być na bieżąco z najnowszymi ogłoszeniami, i publikuj tweety z hasztagiem #AoGDevs, aby dzielić się tym, co udało Ci się stworzyć.

Ankieta dotycząca opinii

Zanim wyjdziesz, wypełnij krótką ankietę dotyczącą Twoich wrażeń.