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

1. Omówienie

Platforma dla deweloperów Asystenta Google umożliwia tworzenie oprogramowania rozszerzającego funkcje Asystenta Google – wirtualnego osobistego asystenta – działa na ponad miliardzie urządzeń, w tym inteligentnych głośnikach, telefonach, samochodach, telewizorach, słuchawkach i nie tylko. Użytkownicy angażują się w rozmowę z Asystentem, aby wykonać różne czynności, na przykład kupić produkty spożywcze lub zamówić przejazd. Jako deweloper możesz korzystać z platformy dla deweloperów Asystenta, aby łatwo tworzyć ciekawe i skuteczne rozmowy między użytkownikami i zewnętrzną usługą realizacji zamówień oraz nimi zarządzać.

Te ćwiczenia w programowaniu obejmują zagadnienia na poziomie średnio zaawansowanym dotyczące programowania za pomocą Asystenta Google i uzupełniają działanie utworzone w ramach ćwiczenia z programowania w ramach Build Actions for Google Assistant with Actions SDK (poziom 1). Przed rozpoczęciem tego zdecydowanie zalecamy ukończenie ćwiczenia z programowania na poziomie 1.

Akcja, którą tworzysz w ramach tego ćwiczenia z programowania, opowiada użytkownikom o tym, że wyprawią się z mitycznej krainy Gryffinberg, na podstawie wybranej pomocy.

Co utworzysz

W ramach tego ćwiczenia w Codelabs utworzysz zaawansowaną akcję konwersacyjną, która wykorzystuje te funkcje:

  • Zbiera dane od użytkownika i, w zależności od wartości, modyfikuje prompty konwersacyjne.
  • Odpowiedzieliśmy na kolejne pytania, aby pogłębić rozmowę.
  • Tworzy pętlę gry, w której użytkownik może ponownie wejść w interakcję z akcją po otrzymaniu wróżby.

Zanim zaczniesz tworzyć, możesz wejść w interakcję z na żywo akcją na urządzeniu z Asystentem Google. Wystarczy, że powiesz „OK Google, porozmawiaj z Fate and Fortune”. Domyślna ścieżka tego działania w przypadku powracającego użytkownika wygląda tak:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

Czego się nauczysz

  • Jak używać przedziałów do zbierania danych o użytkownikach
  • Jak korzystać z warunków, aby dodać elementy logiczne do sceny
  • Jak dodać pętlę gry
  • Jak dodać ścieżkę pomocniczą

Czego potrzebujesz

Wymagania wstępne tego ćwiczenia w Codelabs to m.in.:

Do zrozumienia kodu realizacji w ramach tego ćwiczenia z programowania zdecydowanie zalecamy znajomość JavaScript (ES6) – choć nie jest to wymagane.

Opcjonalnie: pobieranie przykładowego kodu

Opcjonalnie możesz pobrać pełny kod projektu na poziomie 1 z repozytorium GitHub dla Actions Builder na poziomie 1, co pozwoli Ci wykonywać poniższe ćwiczenia. Pełny kod projektu poziomu 2 możesz też wyświetlić w tym repozytorium GitHub.

2. Kontynuuj tworzenie interfejsu konwersacyjnego

W ramach pierwszego ćwiczenia w programie udało Ci się utworzyć prostą akcję konwersacyjną z jedną scenieą: Start.

W ramach tego ćwiczenia w programie wydłużysz rozmowę z akcją. W poniższych sekcjach skonfigurujesz akcje w taki sposób:

  • Przełącz się na nową scenę Fortune, gdy użytkownik chce poznać wróżby
  • Zapytaj użytkownika, którą pomoc chce wybrać.
  • Stwórz własną wróżbę na podstawie wyboru użytkownika

Przejdź do sceny Fortune i utwórz ją

W tej sekcji:

  • Usuń istniejący prompt ze sceny Start, która odpowiada użytkownikowi i kończy rozmowę
  • Określ przejście ze sceny Start do sceny Fortune
  • Utwórz scenę Fortune

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

  1. Otwórz projekt w Actions z poziomu 1 ćwiczenia z programowania w edytorze tekstu.
  2. Otwórz plik custom/scenes/Start.yaml.
  3. Zaktualizuj handler dla intencji yes, aby Twój kod pasował do tego fragmentu:

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 przejdź do projektu Actions (poziom 1) w ćwiczeniach z programowania.
  2. Utwórz nowy plik o nazwie Fortune.yaml w katalogu scenes:
touch custom/scenes/Fortune.yaml

W następnej sekcji zmodyfikujesz ten plik.

Zdefiniuj logikę konwersacyjną na potrzeby sceny Fortune

W ramach tego ćwiczenia w programie skonfigurujesz scenę w Fortune w taki sposób, aby pytała użytkownika: „Co wybierasz, aby pomóc Ci w tej misji: smok, tłumacz czy kompas?”. Zanim przejdziesz dalej, możesz użyć funkcji wypełniania przedziałów, aby zebrać od użytkownika niezbędne informacje.

Akcja zapewnia szczęście dla trzech pomocy: smoka, tłumacza i kompasu. Aby skonfigurować Akcję tak, aby rozpoznawała te 3 opcje w danych wejściowych użytkownika, musisz utworzyć nowy typ.

Za pomocą typów na etapie wypełniania boksu sceny możesz określić informacje, których chcesz od użytkownika żądać. Gdy mechanizm NLU wykryje dopasowanie boksu w danych wejściowych użytkownika, wyodrębnia je jako wpisywany parametr, dzięki czemu można przeprowadzić logikę tego przedziału.

Utwórz typ available_options

W tej sekcji utworzysz nowy typ o nazwie available_options. Określa on 3 opcje, które użytkownicy mogą wybrać (smok, tłumacz i kompas) w odpowiedzi na prompt. Możesz też zdefiniować kilka synonimów tych opcji, na wypadek gdyby użytkownik powiedział coś podobnego. W dalszej sekcji dodasz do boksu typ available_options, aby wskazać, ż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 nowy plik o nazwie available_options.yaml w katalogu types:
touch custom/types/available_options.yaml
  1. Otwórz custom/types/available_options.yaml w edytorze tekstu.

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

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

  1. Dodaj w pliku available_options.yaml te entities i 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. Zapisz plik.

Akcja rozpoznaje teraz, że available_options to smok, tłumacz i kompas, i może także rozpoznać kilka powiązanych synonimów.

Skonfiguruj wypełnianie przedziałów

Następnie musisz skonfigurować wypełnianie przedziałów w scenie Fortune. Aby skonfigurować logikę wypełniania przedziałó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.

Dodano typ available_options do boksu. Dzięki temu akcja informuje Akcję, jakie informacje musi uzyskać od użytkownika (wybrany przez niego rodzaj pomocy), zanim przejdziesz dalej. Skonfigurowano także prompt w przedziale, który jest dodawany do kolejki promptów, gdy użytkownik osiągnie etap wypełniania boksu w scenie.

Gdy nadasz boksowi nazwę chosenOptions, pole writeSessionsParam otrzyma taką samą nazwę ($session.params.chosenOptions). Możesz uzyskać dostęp do tego parametru po tej nazwie w prompcie i w swojej realizacji z poziomu biblioteki klienta.

Dodaj warunek

Po dodaniu przedziału, który wymaga od użytkownika pomocy wybranej przez użytkownika, możesz dodać warunek pozwalający na sprawdzenie, czy dane przedziału zostały uzyskane, zanim użytkownik będzie mógł kontynuować rozmowę.

W tej sekcji dodasz warunek scene.slots.status == "FINAL", który będzie sprawdzać, czy wypełnianie przedziałów zostało ukończone. Gdy wszystkie boksy zostaną wypełnione, warunek dodaje 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.

Przetestuj działanie w symulatorze

Na tym etapie zostały określone opcje, które użytkownik powinien wybrać, aby wypełnić boks. Po uzyskaniu tych informacji od użytkownika akcja powinna wyświetlić komunikat z informacją o wybranej przez niego opcji.

Aby przetestować akcję, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Zostaną wyświetlone dane wyjściowe, które będą wyglądały mniej więcej tak:

✔ 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 w przeglądarce.
  2. Kliknij lub wpisz Talk to my test app w polu Wejście i naciśnij Enter.
  3. Wpisz Yes w polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.

a899d45c542668f6.png

  1. Kliknij, wpisz lub powiedz dragon. Powinno wyświetlić się komunikat „Wybrano smoka”.

W następnej sekcji możesz dostosować komunikaty dotyczące każdej pomocy, którą użytkownik może wybrać.

Dostosuj prompty za pomocą warunków

W tej sekcji dodasz warunki dla każdej opcji, którą może wybrać użytkownik, i do każdego z nich dodasz niestandardowy prompt.

Dostosuj wróżbę dragon

Aby zaktualizować warunek i dostosować prompt, który pojawi się, gdy użytkownik wybierze „smok”, wykonaj te czynności:

  1. Otwórz custom/scenes/Fortune.yaml w edytorze tekstu.
  2. Zastąp dane conditionalEvents tym fragmentem 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ś, co brzmi podobnie, akcja zapewni Ci wróżbę na podstawie tego wyboru. Następnie dodaj 2 pozostałe opcje.

Dostosuj wróżby translator i compass

Aby dodać warunki i dostosować komunikaty, które mają się pojawiać, gdy użytkownik mówi „tłumacz” lub „kompas”, wykonaj te czynności:

  1. W pliku custom/scenes/Fortune.yaml dodaj pozostałe 2 warunki z warunkiem 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.

Przetestuj działanie w symulatorze

W tym momencie akcja powinna zapewniać użytkownikowi dostosowane wróżby na podstawie wybranej przez niego opcji.

Aby przetestować akcję, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Zostaną wyświetlone dane wyjściowe, które będą wyglądały mniej więcej tak:

✔ 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 w przeglądarce.
  2. Wpisz Talk to my test app w polu Wejście i naciśnij Enter.
  3. Wpisz „Tak” w polu Dane wejściowe i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Kliknij, wpisz lub powiedz Translator.

29e17f950bd0dd71.png

„Tłumacz” powinien dostać odpowiednią wróżbę .

3. Dodaj pętlę gry

W tej sekcji skonfigurujesz Akcję tak, aby użytkownik mógł wybrać inną opcję i poznać inne wróżby po dokonaniu wyboru. Ta zmiana jest podobna do komunikatu „Chcesz zagrać ponownie?” po zakończeniu gry. Aby utworzyć tę pętlę, możesz ponownie użyć wcześniej utworzonych intencji yes i no, a potem dodać je do nowej sceny o nazwie Again.

Utwórz scenę: Again

W tej sekcji utworzysz nową scenę Again i dodasz pytanie do użytkownika, czy chce wybrać inną opcję.

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

  1. Utwórz nowy plik o nazwie Again.yaml w katalogu scenes:
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.

Dodaj przejście ze sceny Fortune do Again

Gdy użytkownik otrzyma wróżbę, 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. Do każdego warunku dodaj transitionToScene: Again, tak jak 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.

Przetestuj działanie w symulatorze

W tym momencie akcja powinna wyświetlić użytkownikowi taki komunikat, gdy otrzyma on wróżbę: „To właśnie widzę. Czy chcesz wybrać inną opcję i poznać inną przyszłość?”

Aby przetestować akcję, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Zostaną wyświetlone dane wyjściowe, które będą wyglądały mniej więcej tak:

✔ 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 w przeglądarce.
  2. Wpisz Talk to my test app w polu Wejście i naciśnij Enter.
  3. Wpisz Yes w polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Kliknij, wpisz lub powiedz dragon.

b299e9fed9aedb69.png

Otrzymasz wróżbę dla smoka i komunikat Again.

Dodaj intencje i przejdź do sceny Again

W tej sekcji dodasz intencje yes i no do sceny Again, aby akcja wiedziała, czy użytkownik chce wybrać nową opcję. Dodajesz też odpowiednie przejścia dla intencji yes i no. Intencja yes przejdzie do sceny Fortune, a intencja no 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 na górze pliku Again.yaml, powyżej 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.

Przetestuj działanie w symulatorze

Akcja powinna 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

Zostaną wyświetlone dane wyjściowe, które będą wyglądały mniej więcej tak:

✔ 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 w przeglądarce.
  2. Wpisz Talk to my test app w polu Wejście i naciśnij Enter.
  3. Wpisz Yes w polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Kliknij, wpisz lub powiedz jedną z opcji.
  5. W polu do wprowadzania danych wpisz Yes i naciśnij Enter.

5d0690332efe2e29.png

Powinien wyświetlić się komunikat: „Co wybierasz, aby pomóc Ci w tej misji: smok, tłumacz 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 wyświetlić się komunikat End conversation: „Cieszymy się, że jesteś zadowolony(-a) ze swojego wyboru. Powodzenia w drodze. Do widzenia”.

4. Dodaj ścieżkę pomocniczą

Masz już główną ścieżkę, którą większość użytkowników podąża w akcji. Użytkownik może jednak zareagować na prompt ze sceny w Fortune: „Co wybierasz, aby pomóc Ci w tej misji: smok, tłumacz czy kompas?”, wybierając odpowiedź, która nie należy do żadnej z dostępnych opcji.

W tej sekcji skonfigurujesz akcje tak, aby rozpoznawała, kiedy użytkownik mówi „magia”, „pieniądze”, „koń” lub „telefon”, oraz ponownie przypominać użytkownikowi o wybraniu jednej z 3 pierwotnych opcji, gdy wybierze jedną z tych opcji. Aby skonfigurować tę logikę, musisz utworzyć nowy element type zawierający te inne opcje i nową intencję (other_option), która jest dopasowywana, gdy użytkownik wypowie jedną z tych opcji. Musisz też dodać adnotacje do wyrażeń na potrzeby trenowania w intencji other_option, aby identyfikować i wyodrębniać parametry intencji.

Gdy mechanizm przetwarzania języka naturalnego w Asystencie wykryje dopasowanie parametru w danych wejściowych użytkownika, wyodrębnia wartość jako wpisywany parametr, dzięki czemu można z nim przeprowadzić logikę na scenie. W ramach tego ćwiczenia w programie skonfigurujesz akcje tak, aby wyodrębniać pomoc wybraną przez użytkownika i odwoływać się do tej opcji w prompcie.

Utwórz typ unavailable_options

Możesz teraz utworzyć typ unavailable_options zawierający wiele różnych opcji, dzięki którym akcja będzie mogła identyfikować te dane w danych wejściowych użytkownika.

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

  1. Utwórz nowy plik o nazwie unavailable_options.yaml w katalogu types:
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.

Utwórz intencję other_option

Następnie utwórz intencję o nazwie other_option i dodaj wyrażenia na potrzeby trenowania zawierające opcje w typie unavailable_options. Ta intencja zostanie dopasowana, gdy użytkownik wybierze opcję znajdującą się w typie unavailable_options.

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

  1. Utwórz nowy plik o nazwie other_option.yaml w katalogu intents:
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 parameters i trainingPhrases:

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)

Tutaj możesz ręcznie dodać adnotacje do wyrażeń na potrzeby trenowania, korzystając z niedostępnych opcji określonych w poprzedniej sekcji. Parametr intencji chosenUnavailableOption umożliwia pobranie nazwy opcji i użycie jej w prompcie. Zrobisz to w następnej sekcji.

  1. Zapisz plik.

Dodaj intencję other_option do Fortune scen

Masz teraz intencję other_option, która może obsłużyć użytkownika określającego opcję, która nie jest jedną z pierwotnych opcji. W tej sekcji dodasz intencję other_option do sceny Fortune. Parametr intencji służy do dostosowywania promptu 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 z danych conditionalEvents i 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 nieprzetworzonych danych wejściowych określonych przez użytkownika.

Gdy użytkownik wypowiada opcję wymienioną w typie unavailable_options w scenie Fortune, intencja other_option jest dopasowywana i dodaje prompt do kolejki promptów. Nie określono przejścia, dlatego pętla wykonania sceny jest kontynuowana, ponownie sprawdzając etap warunków. Następnie przedział chosenOptions dodaje swój prompt do kolejki promptów, a kolejka jest dostarczana użytkownikowi.

Przetestuj działanie w symulatorze

Akcja powinna teraz reagować prawidłowo, gdy użytkownik wybierze jedną z opcji wymienionych w typie unavailable_options i określi, którą pomoc wybrał. Akcja powinna ponownie zachęcić użytkownika do wybrania jednej z pierwotnych opcji (smoka, tłumaczenia lub kompasu).

Aby przetestować akcję w symulatorze, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Zostaną wyświetlone dane wyjściowe, które będą wyglądały mniej więcej tak:

✔ 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 w przeglądarce.
  2. Wpisz Talk to my test app w polu Wejście i naciśnij Enter.
  3. Wpisz Yes w polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Wpisz magic w polu Wejście i naciśnij Enter.

3a42c33eca435f32.png

Możesz zauważyć, że prośba nie brzmi poprawnie, gdy użytkownik wybierze „magic” z powodu „a” przed artykułem. Ten problem omawiamy w sekcjach poniżej.

Dodaj moduł obsługi unavailable_options

Aby umieścić symbol „a” przed odpowiednimi opcjami z typu unavailable_options możesz skonfigurować moduł obsługi zdarzeń w logice realizacji, aby sprawdzić, czy wybrana opcja wymaga oznaczenia „a” wcześniej. Najpierw musisz skonfigurować akcję tak, aby wywoływała moduł 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, dodając do niego te dane z kategorii intentEvents:

Fortune.yaml

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

Aktualizowanie i wdrażanie realizacji

Po skonfigurowaniu akcji tak, aby wywoływała moduł obsługi zdarzeń unavailable_options, możesz zaktualizować go w realizacji i wdrożyć.

Aby zaktualizować informacje o realizacji, wykonaj te czynności:

  1. Otwórz webhooks/ActionsOnGoogleFulfillment/index.js w edytorze tekstu.
  2. Dodaj ten kod do index.js w ramach modułu 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 w polu const app = conversation({debug:true}); ten kod:

index.js

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

Zrozumienie kodu

Moduł obsługi unavailable_options wykonuje te działania:

  • Pobiera dane option z obiektu conv i przypisuje option do właściwości original, która jest nieprzetworzonymi danymi wejściowymi użytkownika
  • Przypisuje optionKey do właściwości resolved, która jest kluczem typu unavailable_options
  • Sprawdza, czy optionKey jest jedną z opcji, które wymagają znaku „a”. jeśli tak, tworzy wiadomość z dodanym „a”
  • Dodaje wiadomość w: conv.add(message)

Aktualizowanie modułów obsługi

Aby umożliwić akcjom korzystanie z elementu unavailable_options, dodaj do webhooks/ActionsOnGoogleFulfillment.yaml moduł obsługi unavailable_options.

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

ActionsOnGoogleFulfillment.yaml

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

Przetestuj działanie w symulatorze

Akcja powinna teraz dostosować prompt w zależności od tego, czy wybór użytkownika z typu unavailable_options wymaga oznaczenia „a” wcześniej.

Aby przetestować akcję, wykonaj te czynności:

  1. W terminalu uruchom to polecenie:
gactions deploy preview

Zostaną wyświetlone dane wyjściowe, które będą wyglądały mniej więcej tak:

✔ 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 w przeglądarce.
  2. Kliknij lub wpisz Talk to my test app w polu Wejście i naciśnij Enter.
  3. Wpisz Yes w polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
  4. Wpisz magic w polu Wejście i naciśnij Enter. Następnie wpisz horse w polu Wejście i naciśnij Enter.

54ee24c5c3c56e.png

Akcja powinna dodawać „a” artykuł przed słowem „koń” i tworzą prompt bez „a” o „magii” wyboru.

5. Wizualizacja działania w Konsoli Actions

Pakiet Actions SDK jest kompatybilny z internetowym środowiskiem IDE o nazwie Actions Builder, które jest zintegrowane z konsolą Actions. Możesz przekazać lokalny system plików do wersji roboczej akcji w konsoli za pomocą polecenia gactions push. Konsola Actions to wizualna reprezentacja konfiguracji akcji. Wizualizacja akcji może być przydatna w trakcie programowania i nie ma wpływu na wersję akcji obsługiwaną do testów.

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

  1. W terminalu uruchom to polecenie, aby przekazać projekt do Konsoli Actions:
gactions push

Zostaną wyświetlone dane wyjściowe, które będą wyglądały mniej więcej tak:

✔ 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 w przeglądarce.
  2. W konsoli działań na pasku nawigacyjnym u góry kliknij Programowanie.
  3. Kliknij strzałkę w dół obok opcji Sceny i wybierz Rozpocznij. Powinna pojawić się wizualna reprezentacja sceny Start z akcji, tak jak na tym zrzucie ekranu:

cae526c647f8d40f.png

Czyszczenie projektu [zalecane]

Aby uniknąć ewentualnych opłat, zalecamy usunięcie projektów, których nie chcesz używać. Aby usunąć projekty utworzone w ramach tego ćwiczenia z programowania, wykonaj te czynności:

  1. Aby usunąć projekt i zasoby Cloud, 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, po około 30 dniach Twój projekt zostanie automatycznie usunięty.

6. Gratulacje!

Znasz już umiejętności średniozaawansowane niezbędne do tworzenia akcji w Asystencie Google za pomocą pakietu SDK Actions.

Co zostało omówione

  • Jak tworzyć działania związane z rozmowami za pomocą biblioteki realizacji Node.js
  • Jak używać przedziałów do zbierania danych od użytkownika
  • Jak za pomocą warunków dodać logikę do sceny
  • Jak dodać pętlę gry
  • Jak dodać ścieżkę pomocniczą

Więcej informacji

Z tych materiałów dowiesz się, jak tworzyć Akcje dla Asystenta Google:

Obserwuj nas na Twitterze @ActionsOnGoogle, aby być na bieżąco z najnowszymi informacjami. Aby poinformować o swoich dokonaniach, napisz na Twitterze #AoGDevs.

Ankieta dotycząca opinii

Zanim opuścisz tę stronę, wypełnij krótką ankietę na temat swoich wrażeń.