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:


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ą:
- Wybrane IDE lub edytor tekstu.
- Terminal do uruchamiania poleceń powłoki z zainstalowanymi NodeJS, npm i git.
- przeglądarka internetowa, np. Google Chrome;
- ukończony projekt Actions codelab na poziomie 1;
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
Startistniejący prompt, który odpowiada użytkownikowi i kończy rozmowę. - Określ przejście ze sceny
Startdo scenyFortune. - Tworzenie sceny
Fortune
Aby zmodyfikować scenę Start i dodać przejście do sceny Fortune, wykonaj te czynności:
- Otwórz projekt Actions z poziomu 1 samouczka w edytorze tekstu.
- Otwórz plik
custom/scenes/Start.yaml. - Zaktualizuj
handlerw przypadku intencjiyes, 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
- Zapisz plik.
Aby utworzyć nową scenę o nazwie Fortune, wykonaj te czynności:
- W terminalu otwórz projekt działań z poziomu 1 w codelabie.
- Utwórz w katalogu
scenesnowy plik o nazwieFortune.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:
- Utwórz nowy katalog o nazwie
types:
mkdir custom/types
- Utwórz w katalogu
typesnowy plik o nazwieavailable_options.yaml:
touch custom/types/available_options.yaml
- Otwórz
custom/types/available_options.yamlw 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:
- Dodaj do pliku
available_options.yamlte elementyentitiesisynonyms:
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.
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:
- 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.
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:
- 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.
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:
- 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
- Skopiuj podany adres URL i wklej go do przeglądarki.
- Kliknij lub wpisz
Talk to my test appw polu Input (Dane wejściowe) i naciśnij Enter. - Wpisz
Yesw polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.

- 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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Zastąp dane
conditionalEventstym fragmentem kodu 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ś podobnego, Twoja akcja poda wróżbę na podstawie tego wyboru. Następnie dodaj pozostałe 2 wybory.
Dostosowywanie wróżb translator i compass
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:
- W pliku
custom/scenes/Fortune.yamldodaj pozostałe 2 warunki w sekcji warunkudragon:
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.
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:
- 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
- Skopiuj podany adres URL i wklej go do przeglądarki.
- Wpisz
Talk to my test appw polu Input (Dane wejściowe) i naciśnij Enter. - Wpisz „Yes” w polu Input i naciśnij Enter. Możesz też kliknąć element z sugestią Tak.
- Kliknij, wpisz lub powiedz
Translator.

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 yes i no 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:
- Utwórz w katalogu
scenesnowy plik o nazwieAgain.yaml:
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.
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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Dodaj
transitionToScene: Againdo 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
- 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:
- 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
- Skopiuj podany adres URL i wklej go do przeglądarki.
- Wpisz
Talk to my test appw polu Input (Dane wejściowe) i naciśnij Enter. - Wpisz
Yesw polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Kliknij, wpisz lub powiedz
dragon.

Powinieneś(-aś) otrzymać wróżbę dla opcji smoka i prompt Again.
Dodaj intencje i przejście do sceny Again
W tej sekcji dodasz intencje yes i no do sceny Again, aby Twoja czynność wiedziała, czy użytkownik chce wybrać nową opcję. Dodajesz też odpowiednie przejścia dla intencji yes i no. 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:
- Otwórz
custom/scenes/Again.yamlw edytorze tekstu. - Dodaj dane
intentEventsu góry plikuAgain.yaml, nadOnEnter:
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.
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:
- 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
- Skopiuj podany adres URL i wklej go do przeglądarki.
- Wpisz
Talk to my test appw polu Input (Dane wejściowe) i naciśnij Enter. - Wpisz
Yesw polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Kliknij, wpisz lub powiedz jedną z opcji.
- Wpisz
Yesw polu do wprowadzania danych i naciśnij Enter.

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:
- Kliknij, wpisz lub powiedz jedną z opcji.
- Wpisz
Now 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:
- Utwórz w katalogu
typesnowy plik o nazwieunavailable_options.yaml:
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.
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:
- Utwórz w katalogu
intentsnowy plik o nazwieother_option.yaml:
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)
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.
- 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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Dodaj te dane
intentEventsmiędzy danymiconditionalEventsa danymislots:
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 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:
- 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
- Skopiuj podany adres URL i wklej go do przeglądarki.
- Wpisz
Talk to my test appw polu Input (Dane wejściowe) i naciśnij Enter. - Wpisz
Yesw polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Wpisz
magicw polu Input (Dane wejściowe) i naciśnij Enter.

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:
- Otwórz
custom/scenes/Fortune.yamlw edytorze tekstu. - Zaktualizuj plik
Fortune.yamltymiintentEventsdanymi:
Fortune.yaml
intentEvents:
- handler:
webhookHandler: unavailable_options
intent: other_option
- 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:
- Otwórz
webhooks/ActionsOnGoogleFulfillment/index.jsw edytorze tekstu. - Dodaj ten kod do pliku
index.jspod modułem obsługigreeting:
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 ten kod pod elementem
const app = conversation({debug:true});:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- Zapisz plik.
Zrozumienie kodu
Procedura obsługi unavailable_options wykonuje te czynności:
- Pobiera dane
optionz obiektuconvi przypisuje je do właściwościoriginal, która jest surowym wejściem od użytkownika.option - Przypisuje wartość
optionKeydo właściwościresolved, która jest kluczem typuunavailable_options. - Sprawdza, czy
optionKeyjest 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.
- Dodaj nazwę modułu obsługi
unavailable_optionsdo plikuActionsOnGoogleFulfillment.yaml:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- 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:
- 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
- Skopiuj podany adres URL i wklej go do przeglądarki.
- Kliknij lub wpisz
Talk to my test appw polu Input (Dane wejściowe) i naciśnij Enter. - Wpisz
Yesw polu Input (Dane wejściowe) i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Wpisz
magicw polu Input (Dane wejściowe) i naciśnij Enter. Następnie wpiszhorsew polu Input (Dane wejściowe) i naciśnij Enter.

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

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:
- Aby usunąć projekt Cloud i zasoby, 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, 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:
- Dokumentacja dotycząca tworzenia działań dla Asystenta Google
- Strona Actions on Google w GitHubie z przykładowym kodem i bibliotekami
- Oficjalna społeczność na Reddicie dla deweloperów korzystających z Asystenta Google
- Wskazówki dotyczące projektowania konwersacji, które zawierają sprawdzone metody i wskazówki dotyczące działań konwersacyjnych.
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ń.