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:


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 między innymi:
- Wybrany edytor IDE/edytor tekstu.
- Terminal do uruchamiania poleceń powłoki z zainstalowanymi pakietami NodeJS, npm i git.
- Przeglądarka, na przykład Google Chrome.
- Ukończony projekt Actions w ramach ćwiczeń z programowania na poziomie 1.
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
Startdo scenyFortune - Utwórz scenę
Fortune
Aby zmodyfikować scenę Start i dodać do niej przejście, wykonaj te czynności:Fortune
- Otwórz projekt w Actions z poziomu 1 ćwiczenia z programowania w edytorze tekstu.
- Otwórz plik
custom/scenes/Start.yaml. - Zaktualizuj
handlerdla intencjiyes, 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
- Zapisz plik.
Aby utworzyć nową scenę o nazwie Fortune, wykonaj te czynności:
- W terminalu przejdź do projektu Actions (poziom 1) w ćwiczeniach z programowania.
- Utwórz nowy plik o nazwie
Fortune.yamlw kataloguscenes:
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:
- Utwórz nowy katalog o nazwie
types:
mkdir custom/types
- Utwórz nowy plik o nazwie
available_options.yamlw katalogutypes:
touch custom/types/available_options.yaml
- Otwórz
custom/types/available_options.yamlw 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:
- Dodaj w pliku
available_options.yamlteentitiesisynonyms:
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
- 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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Dodaj do pliku
Fortune.yamlte daneslots:
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
- 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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Dodaj dane
conditionalEventsna początku plikuFortune.yaml:
Fortune.yaml
conditionalEvents:
- condition: scene.slots.status == "FINAL"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: You picked $session.params.chosenOptions.
- 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:
- 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
- Skopiuj podany adres URL i wklej go w przeglądarce.
- Kliknij lub wpisz
Talk to my test appw polu Wejście i naciśnij Enter. - Wpisz
Yesw polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.

- 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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Zastąp dane
conditionalEventstym fragmentem w plikuFortune.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.
- 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:
- W pliku
custom/scenes/Fortune.yamldodaj pozostałe 2 warunki z warunkiemdragon:
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.
- 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:
- 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
- Skopiuj podany adres URL i wklej go w przeglądarce.
- Wpisz
Talk to my test appw polu Wejście i naciśnij Enter. - Wpisz „Tak” w polu Dane wejściowe i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
- Kliknij, wpisz lub powiedz
Translator.

„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:
- Utwórz nowy plik o nazwie
Again.yamlw kataloguscenes:
touch custom/scenes/Again.yaml
- Otwórz
custom/scenes/Again.yamlw edytorze tekstu. - Dodaj do
Again.yamlte daneonEnter:
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"
- 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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - 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
- 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:
- 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
- Skopiuj podany adres URL i wklej go w przeglądarce.
- Wpisz
Talk to my test appw polu Wejście i naciśnij Enter. - Wpisz
Yesw polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Kliknij, wpisz lub powiedz
dragon.

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:
- Otwórz
custom/scenes/Again.yamlw edytorze tekstu. - Dodaj dane
intentEventsna górze plikuAgain.yaml, powyżejOnEnter:
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
- 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:
- 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
- Skopiuj podany adres URL i wklej go w przeglądarce.
- Wpisz
Talk to my test appw polu Wejście i naciśnij Enter. - Wpisz
Yesw polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Kliknij, wpisz lub powiedz jedną z opcji.
- W polu do wprowadzania danych wpisz
Yesi naciśnij Enter.

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:
- Kliknij, wpisz lub powiedz jedną z opcji.
- Wpisz
Now 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:
- Utwórz nowy plik o nazwie
unavailable_options.yamlw katalogutypes:
touch custom/types/unavailable_options.yaml
- Otwórz
custom/types/unavailable_options.yamlw edytorze tekstu. - Dodaj do pliku
unavailable_options.yamlte danesynonyms:
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
- 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:
- Utwórz nowy plik o nazwie
other_option.yamlw kataloguintents:
touch custom/intents/other_option.yaml
- Otwórz
custom/intents/other_option.yamlw edytorze tekstu. - Dodaj do pliku
other_option.yamlte daneparametersitrainingPhrases:
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.
- 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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Dodaj te dane
intentEventsz danychconditionalEventsislots:
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
- 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:
- 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
- Skopiuj podany adres URL i wklej go w przeglądarce.
- Wpisz
Talk to my test appw polu Wejście i naciśnij Enter. - Wpisz
Yesw polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Wpisz
magicw polu Wejście i naciśnij Enter.

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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Zaktualizuj plik
Fortune.yaml, dodając do niego te dane z kategoriiintentEvents:
Fortune.yaml
intentEvents:
- handler:
webhookHandler: unavailable_options
intent: other_option
- 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:
- Otwórz
webhooks/ActionsOnGoogleFulfillment/index.jsw edytorze tekstu. - Dodaj ten kod do
index.jsw ramach modułu obsługigreeting:
plik 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);
});
- Dodaj w polu
const app = conversation({debug:true});ten kod:
plik index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- Zapisz plik.
Zrozumienie kodu
Moduł obsługi unavailable_options wykonuje te działania:
- Pobiera dane
optionz obiektuconvi przypisujeoptiondo właściwościoriginal, która jest nieprzetworzonymi danymi wejściowymi użytkownika - Przypisuje
optionKeydo właściwościresolved, która jest kluczem typuunavailable_options - Sprawdza, czy
optionKeyjest 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.
- Dodaj nazwę modułu obsługi
unavailable_optionsdo aplikacjiActionsOnGoogleFulfillment.yaml:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- 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:
- 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
- Skopiuj podany adres URL i wklej go w przeglądarce.
- Kliknij lub wpisz
Talk to my test appw polu Wejście i naciśnij Enter. - Wpisz
Yesw polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Wpisz
magicw polu Wejście i naciśnij Enter. Następnie wpiszhorsew polu Wejście i naciśnij Enter.

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

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:
- Aby usunąć projekt i zasoby Cloud, wykonaj czynności opisane w sekcji Wyłączanie (usuwanie) projektów.
- 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:
- Dokumentacja dotycząca programowania Actions for Google Assistant
- Strona Actions on Google GitHub z przykładowym kodem i bibliotekami
- Oficjalna społeczność na Reddicie dla deweloperów pracujących z Asystentem Google
- Sprawdzone metody i wytyczne dotyczące akcji związanych z rozmowami znajdziesz w wytycznych dotyczących projektowania rozmów.
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ń.