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 m.in.:
- 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
Start
do 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
handler
dla 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.yaml
w 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.yaml
w katalogutypes
:
touch custom/types/available_options.yaml
- 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:
- Dodaj w pliku
available_options.yaml
teentities
isynonyms
:
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.yaml
w edytorze tekstu. - Dodaj do pliku
Fortune.yaml
te 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.yaml
w edytorze tekstu. - Dodaj dane
conditionalEvents
na 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 app
w polu Wejście i naciśnij Enter. - Wpisz
Yes
w 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.yaml
w edytorze tekstu. - Zastąp dane
conditionalEvents
tym 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.yaml
dodaj 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 app
w 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.yaml
w kataloguscenes
:
touch custom/scenes/Again.yaml
- Otwórz
custom/scenes/Again.yaml
w edytorze tekstu. - Dodaj do
Again.yaml
te 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.yaml
w 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 app
w polu Wejście i naciśnij Enter. - Wpisz
Yes
w 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.yaml
w edytorze tekstu. - Dodaj dane
intentEvents
na 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 app
w polu Wejście i naciśnij Enter. - Wpisz
Yes
w 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
Yes
i 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
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:
- Utwórz nowy plik o nazwie
unavailable_options.yaml
w katalogutypes
:
touch custom/types/unavailable_options.yaml
- Otwórz
custom/types/unavailable_options.yaml
w edytorze tekstu. - Dodaj do pliku
unavailable_options.yaml
te 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.yaml
w kataloguintents
:
touch custom/intents/other_option.yaml
- Otwórz
custom/intents/other_option.yaml
w edytorze tekstu. - Dodaj do pliku
other_option.yaml
te daneparameters
itrainingPhrases
:
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.yaml
w edytorze tekstu. - Dodaj te dane
intentEvents
z danychconditionalEvents
islots
:
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 app
w polu Wejście i naciśnij Enter. - Wpisz
Yes
w polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Wpisz
magic
w 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.yaml
w 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.js
w edytorze tekstu. - Dodaj ten kod do
index.js
w ramach modułu 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 w polu
const app = conversation({debug:true});
ten kod:
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
option
z obiektuconv
i przypisujeoption
do właściwościoriginal
, która jest nieprzetworzonymi danymi wejściowymi użytkownika - Przypisuje
optionKey
do właściwościresolved
, która jest kluczem typuunavailable_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
.
- Dodaj nazwę modułu obsługi
unavailable_options
do 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 app
w polu Wejście i naciśnij Enter. - Wpisz
Yes
w polu Wejście i naciśnij Enter. Możesz też kliknąć element z sugestią Tak. - Wpisz
magic
w polu Wejście i naciśnij Enter. Następnie wpiszhorse
w 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
Start
z 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ń.