Membuat Action untuk Asisten Google menggunakan Actions SDK (Level 2)

Platform developer Asisten Google memungkinkan Anda membuat software untuk memperluas fungsi Asisten Google (asisten pribadi virtual) di lebih dari 1 miliar perangkat, termasuk smart speaker, ponsel, mobil, TV, headphone, dan lainnya. Pengguna berinteraksi dengan Asisten melalui percakapan untuk menyelesaikan berbagai hal, seperti membeli bahan makanan atau memesan transportasi online. Sebagai developer, Anda dapat menggunakan platform developer Asisten untuk dengan mudah membuat dan mengelola pengalaman percakapan yang menyenangkan dan efektif antara pengguna dan layanan fulfillment pihak ketiga Anda sendiri.

Codelab ini mencakup konsep tingkat menengah pengembangan dengan Asisten Google dan build dari Action yang dibuat di codelab Level 1. Kami sangat menyarankan agar Anda menyelesaikan codelab Level 1 sebelum memulai codelab ini.

Action yang Anda buat dalam codelab ini memberi tahu pengguna tentang ramalan (Fortune) dari perjalanan mereka di sebuah dunia dongeng, Gryffinberg, berdasarkan bantuan yang mereka pilih.

Yang akan Anda buat

Dalam codelab ini, Anda membuat Action Percakapan canggih dengan fungsi berikut:

  • Mengumpulkan data dari pengguna dan, tergantung nilainya, mengubah pesan percakapan.
  • Menanggapi dengan pertanyaan lanjutan untuk melanjutkan percakapan.
  • Membuat game loop sehingga pengguna dapat kembali berinteraksi dengan Action setelah menerima sebuah ramalan.

Sebelum mulai membuat, Anda dapat berinteraksi dengan Action versi live di perangkat Anda yang dilengkapi Asisten Google dengan mengucapkan "Ok Google, bicara dengan Fate dan Fortune". Untuk pengguna yang kembali, jalur default melalui Action ini terlihat seperti interaksi berikut:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

Yang akan Anda pelajari

  • Cara menggunakan slot untuk mengumpulkan data dari pengguna
  • Cara menggunakan kondisi untuk menambahkan logika ke sebuah scene
  • Cara menambahkan game loop
  • Cara menambahkan jalur pendukung

Yang akan Anda butuhkan

Prasyarat untuk codelab ini meliputi yang berikut:

  • IDE/editor teks pilihan Anda.
  • Terminal untuk menjalankan perintah shell dengan NodeJS, npm, dan git sudah terinstal.
  • Browser web, seperti Google Chrome.
  • Project Action codelab Level 1 yang sudah selesai.

Untuk memahami kode fulfillment code lab ini, pemahaman tentang JavaScript (ES6) sangat direkomendasikan, meskipun tidak diwajibkan.

Opsional: Dapatkan kode contoh

Anda juga dapat memperoleh kode project level 1 lengkap dari repositori GitHub ini atau kode project level 2 lengkap dari repositori GitHub ini.

Di codelab pertama, Anda membuat Action Percakapan sederhana dengan satu scene, Start.

Di codelab ini, Anda akan memperluas percakapan Action Anda. Di bagian berikut, Anda akan mengonfigurasi Action untuk melakukan hal berikut:

  • Melakukan transisi ke scene Fortune baru saat pengguna ingin mendengar ramalan mereka
  • Bertanya kepada pengguna bantuan mana yang ingin mereka pilih untuk perjalanan mereka
  • Memberikan ramalan yang disesuaikan berdasarkan pilihan pengguna

Membuat dan melakukan transisi ke scene Fortune

Di bagian ini, Anda akan melakukan hal berikut:

  • Menghapus pesan yang ada dari scene Start, yang merespons pengguna dan mengakhiri percakapan
  • Menentukan transisi dari scene Start ke scene Fortune
  • Membuat scene Fortune

Untuk mengubah scene Start dan menambahkan transisi ke scene Fortune, ikuti langkah-langkah berikut:

  1. Buka project Action Anda dari codelab Level 1 di editor teks.
  2. Buka file custom/scenes/Start.yaml.
  3. Perbarui handler untuk intent yes sehingga kode Anda cocok dengan cuplikan di bawah:

Start.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: I understand, stranger. Best of luck on your quest! Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Simpan file tersebut.

Untuk membuat scene baru bernama Fortune, ikuti langkah berikut:

  1. Arahkan ke project Action codelab Level 1 Anda di terminal.
  2. Buat file baru bernama Fortune.yaml di direktori scenes:
touch custom/scenes/Fortune.yaml

Anda akan mengedit file ini di bagian berikutnya.

Menentukan logika percakapan untuk scene Fortune

Dalam codelab ini, Anda akan mengonfigurasi scene Fortune untuk bertanya kepada pengguna, "What do you choose to help you on your quest, a dragon, a translator, or a compass?"("Apa yang akan Anda pilih untuk membantu misi Anda, naga, penerjemah, atau kompas?") Anda dapat menggunakan fitur yang disebut pengisian slot untuk mengumpulkan informasi yang diperlukan dari pengguna sebelum melanjutkan.

Action Anda memberikan ramalan untuk tiga bantuan: naga, penerjemah, dan kompas. Untuk mengonfigurasi Action guna mengidentifikasi ketiga opsi ini di input pengguna, Anda harus membuat tipe baru.

Anda dapat menggunakan type dalam sebuah tahapan slot filling scene untuk menentukan informasi yang Anda inginkan dari pengguna. Ketika mesin NLU mendeteksi kecocokan slot dalam input pengguna, mesin akan mengekstrak slot sebagai parameter yang diketik, sehingga Anda dapat menjalankan logika dengannya dalam sebuah scene.

Membuat tipe available_options

Pada bagian ini, Anda akan membuat tipe baru yang disebut available_options, yang menentukan ketiga opsi yang bisa dipilih pengguna (naga, penerjemah, dan kompas) sebagai tanggapan terhadap pesannya. Anda juga dapat menentukan beberapa sinonim untuk opsi-opsi ini jika pengguna mengatakan sesuatu yang serupa. Di bagian selanjutnya, Anda akan menambahkan tipe available_options ke slot untuk menentukan bahwa Anda ingin memperoleh pilihan pengguna.

Untuk membuat tipe available_options, ikuti langkah-langkah berikut:

  1. Buat direktori baru bernama types:
mkdir custom/types
  1. Buat file baru bernama available_options.yaml di direktori types:
touch custom/types/available_options.yaml
  1. Buka custom/types/available_options.yaml di editor teks Anda.

Tipe dikonfigurasikan sebagai informasi key-value pair: kunci adalah nama tipe dan nilai adalah sinonim kunci tersebut. Setelah menentukan kunci, kunci akan otomatis ditambahkan sebagai sebuah nilai. Dengan Actions SDK, Anda menampilkan kunci sebagai entities, dan nilai sebagai synonyms.

Untuk menambahkan ketiga opsi yang dapat dipilih pengguna, ikuti langkah-langkah berikut:

  1. Tambahkan entities dan synonyms berikut dalam file available_options.yaml:

available_options.yaml

synonym:
  entities:
    dragon:
      synonyms:
      - dragon
      - hydra
      - lizard
    translator:
      synonyms:
      - translator
      - communicator
      - machine
      - decoder
      - translate
    compass:
      synonyms:
      - compass
      - direction
      - guide
      - navigator
  matchType: EXACT_MATCH
  1. Simpan file tersebut.

Action Anda sekarang memahami bahwa available_options adalah naga, penerjemah, dan kompas, serta dapat mengenali beberapa sinonim yang sesuai.

Mengonfigurasi pengisian slot

Selanjutnya, Anda perlu mengonfigurasi pengisian slot di scene Fortune. Untuk mengonfigurasi logika pengisian slot, ikuti langkah-langkah berikut:

  1. Buka custom/scenes/Fortune.yaml di editor teks Anda.
  2. Tambahkan data slots berikut ke file Fortune.yaml:

Fortune.yaml

slots:
- commitBehavior:
    writeSessionParam: chosenOptions
  name: chosenOptions
  promptSettings:
    initialPrompt:
      staticPrompt:
        candidates:
        - promptResponse:
            firstSimple:
              variants:
              - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass?
            suggestions:
            - title: Dragon
            - title: Translator
            - title: Compass
  required: true
  type:
    name: available_options
  1. Simpan file tersebut.

Sekarang Anda telah menambahkan tipe available_options ke slot, yang memberi tahu Action Anda informasi yang perlu dikumpulkan dari pengguna (yaitu pilihan bantuan) sebelum melanjutkan. Anda juga telah mengonfigurasi pesan dalam slot, yang ditambahkan ke antrean pesan saat pengguna mencapai tahap pengisian slot dalam scene.

Saat Anda memberi nama slot chosenOptions, kolom writeSessionsParam akan diperbarui dengan nama yang sama ($session.params.chosenOptions). Anda dapat mengakses parameter ini dengan nama tersebut dalam perintah dan fulfillment Anda melalui library klien.

Tambahkan kondisi

Setelah menambahkan slot yang memerlukan pilihan bantuan pengguna, Anda dapat menambahkan condition untuk memeriksa apakah data slot telah diperoleh sebelum pengguna dapat melanjutkan percakapan.

Di bagian ini, Anda menambahkan kondisi scene.slots.status == "FINAL", yang memeriksa pengisian slot agar selesai. Setelah semua slot diisi, kondisi menambahkan pesan (You picked $session.params.chosenOptions.) ke antrean pesan.

Untuk mengonfigurasi kondisi scene.slots.status == "FINAL", ikuti langkah-langkah berikut:

  1. Buka custom/scenes/Fortune.yaml di editor teks Anda.
  2. Tambahkan data conditionalEvents ke bagian atas file Fortune.yaml:

Fortune.yaml

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

Menguji Action Anda di simulator

Pada tahap ini, Anda telah menentukan opsi mana yang harus dipilih pengguna untuk mengisi slot. Setelah mendapatkan informasi ini dari pengguna, Action Anda seharusnya akan memberikan pesan yang merujuk pada opsi yang telah mereka pilih.

Untuk menguji Action Anda, ikuti langkah-langkah berikut:

  1. Di terminal, jalankan perintah berikut:
gactions deploy preview

Anda akan menerima output yang tampak seperti berikut ini:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Salin URL yang diberikan dan tempelkan ke browser.
  2. Klik atau ketik Talk to my test app di kolom Input dan tekan Enter.
  3. Ketik Yes di kolom Input, lalu tekan Enter. Atau, Anda dapat mengklik chip saran Ya.

a899d45c542668f6.png

  1. Klik, ketik, atau ucapkan dragon. Anda akan menerima perintah "You picked dragon" ("Anda telah memilih naga").

Di bagian berikutnya, Anda akan menyesuaikan perintah untuk setiap bantuan yang bisa dipilih pengguna.

Menyesuaikan perintah menggunakan condition

Di bagian ini, Anda akan menambahkan kondisi untuk setiap opsi yang dapat dipilih pengguna dan menambahkan pesan kustom untuk setiap kondisi.

Menyesuaikan fortune dragon

Untuk memperbarui kondisi dan menyesuaikan pesan saat pengguna memilih "naga", ikuti langkah berikut:

  1. Buka custom/scenes/Fortune.yaml di editor teks Anda.
  2. Ganti data conditionalEvents dengan cuplikan berikut di file Fortune.yaml:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  1. Simpan file tersebut.

Sekarang, saat pengguna mengatakan "naga" atau sesuatu yang terdengar mirip, Action Anda memberikan ramalan berdasarkan pilihan tersebut. Selanjutnya, Anda akan menambahkan dua pilihan yang tersisa.

Sesuaikan ramalan translator dan compass

Untuk menambahkan kondisi dan menyesuaikan pesan saat pengguna mengucapkan "penerjemah" atau "kompas", ikuti langkah berikut:

  1. Di file custom/scenes/Fortune.yaml, tambahkan dua kondisi lainnya ke kondisi dragon:

Fortune.yaml

- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  1. Simpan file tersebut.

Menguji Action Anda di simulator

Pada tahap ini, Action Anda akan memberikan ramalan yang disesuaikan untuk pengguna berdasarkan opsi yang mereka pilih.

Untuk menguji Action Anda, ikuti langkah-langkah berikut:

  1. Di terminal, jalankan perintah berikut:
gactions deploy preview

Anda akan menerima output yang tampak seperti berikut ini:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Salin URL yang diberikan dan tempelkan ke browser.
  2. Ketik Talk to my test app di kolom Input, lalu tekan Enter.
  3. Ketik Yes di kolom Input, lalu tekan Enter. Atau, klik chip saran Yes.
  4. Klik, ketik, atau ucapkan Translator.

29e17f950bd0dd71.png

Anda akan menerima ramalan yang sesuai untuk opsi "penerjemah".

Di bagian ini, Anda akan mengonfigurasi Action Anda sehingga pengguna dapat memilih opsi lain dan mendengar ramalan yang berbeda setelah membuat pilihan. Perubahan ini mirip dengan pesan "Do you want to play again?" ("Apakah Anda ingin bermain lagi?") di akhir sebuah game. Untuk membuat loop ini, Anda dapat menggunakan kembali intent yes dan no yang dibuat sebelumnya, lalu menambahkannya ke scene baru yang disebut Again.

Membuat scene Again

Di bagian ini, Anda akan membuat scene Again baru dan menambahkan perintah yang menanyakan pengguna apakah mereka ingin memilih opsi yang berbeda.

Untuk membuat dan mengonfigurasi scene Again, ikuti langkah-langkah berikut:

  1. Buat file baru bernama Again.yaml di direktori scenes:
touch custom/scenes/Again.yaml
  1. Buka custom/scenes/Again.yaml di editor teks Anda.
  2. Tambahkan data onEnter berikut ke Again.yaml:

Again.yaml

onEnter:
  staticPrompt:
    candidates:
    - promptResponse:
        firstSimple:
          variants:
          - speech: That is what I see for you. Would you like to choose a different option and explore another future?
        suggestions:
        - title: "Yes"
        - title: "No"
  1. Simpan file tersebut.

Tambahkan transisi dari scene Fortune ke Again

Setelah pengguna menerima ramalannya, percakapan perlu bertransisi ke scene Again yang baru.

Untuk menambahkan transisi dari scene Fortune ke scene Again, ikuti langkah-langkah berikut:

  1. Buka custom/scenes/Fortune.yaml di editor teks Anda.
  2. Tambahkan transitionToScene: Again ke setiap kondisi, seperti yang ditunjukkan dalam cuplikan berikut:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  transitionToScene: Again
  1. Simpan file tersebut.

Menguji Action Anda di simulator

Pada tahap ini, Action Anda akan memberikan pesan berikut kepada pengguna setelah mereka menerima ramalannya: "That is what I see for you. Would you like to choose a different option and explore another future?"("Itu yang saya lihat untuk Anda. Apa Anda ingin memilih opsi lain dan menjelajahi masa depan yang berbeda?")

Untuk menguji Action Anda, ikuti langkah-langkah berikut:

  1. Di terminal, jalankan perintah berikut:
gactions deploy preview

Anda akan menerima output yang tampak seperti berikut ini:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Salin URL yang diberikan dan tempelkan ke browser.
  2. Ketik Talk to my test app di kolom Input, lalu tekan Enter.
  3. Ketik Yes di kolom Input, lalu tekan Enter. Atau, klik chip saran Yes.
  4. Klik, ketik, atau ucapkan dragon.

b299e9fed9aedb69.png

Anda akan menerima ramalan untuk opsi naga dan perintah Again.

Tambahkan intent dan transisi ke scene Again

Di bagian ini, Anda akan menambahkan intent yes dan no ke scene Again sehingga Action Anda memahami apakah pengguna ingin memilih opsi baru atau tidak. Anda juga akan menambahkan transisi yang sesuai untuk intent yes dan no. Intent yes bertransisi ke scene Fortune, sementara intent no bertransisi ke scene sistem End conversation.

Untuk menambahkan intent dan transisi ke scene Again, ikuti langkah-langkah berikut:

  1. Buka custom/scenes/Again.yaml di editor teks Anda.
  2. Tambahkan data intentEvents di bagian atas file Again.yaml, di atas OnEnter:

Again.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: It pleases me that you are satisfied with your choice. Best
                of luck on your quest. Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Simpan file tersebut.

Menguji Action Anda di simulator

Action Anda sekarang akan memahami apakah pengguna ingin memilih opsi baru atau mengakhiri percakapan.

Untuk menguji intent yes, ikuti langkah-langkah berikut:

  1. Di terminal, jalankan perintah berikut:
gactions deploy preview

Anda akan menerima output yang tampak seperti berikut ini:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Salin URL yang diberikan dan tempelkan ke browser.
  2. Ketik Talk to my test app di kolom Input, lalu tekan Enter.
  3. Ketik Yes di kolom Input, lalu tekan Enter. Atau, klik chip saran Yes.
  4. Klik, ketik, atau ucapkan salah satu opsi.
  5. Ketik Yes di kolom Input dan tekan Enter.

5d0690332efe2e29.png

Anda akan menerima pesan, "What do you choose to help you on your quest, a dragon, a translator, or a compass?"("Apa yang akan Anda pilih untuk membantu misi Anda, naga, penerjemah, atau kompas?")

Untuk menguji intent no, ikuti langkah-langkah berikut:

  1. Klik, ketik, atau ucapkan salah satu opsi.
  2. Ketik No di kolom input dan tekan Enter.

Anda akan menerima pesan End conversation: "It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell. ("Saya senang mengetahui Anda puas dengan pilihan Anda. Semoga sukses dalam misi Anda. Selamat tinggal")

Anda kini telah membuat jalur utama yang sebagian besar pengguna akan lakukan dalam Action Anda. Akan tetapi, pengguna bisa saja merespons perintah dari sceneFortune, "Apa yang akan Anda pilih untuk membantu misi Anda, naga, penerjemah, atau kompas?", dengan pilihan yang bukan salah satu dari opsi yang disediakan.

Di bagian ini, Anda akan mengonfigurasi Action untuk memahami saat pengguna mengucapkan "ajaib", "uang", "kuda", atau "telepon", dan meminta ulang pengguna untuk memilih salah satu dari tiga pilihan asli saat mereka memilih salah satu dari opsi di atas. Untuk mengonfigurasi logika ini, Anda perlu membuat type baru yang berisi pilihan lain ini dan intent baru, other_option, yang cocok saat pengguna mengucapkan salah satu dari opsi ini. Anda juga perlu menganotasi frasa pelatihan di dalam intent other_option untuk mengidentifikasi dan mengekstrak parameter intent.

Saat mesin Natural Language Processing Asisten mendeteksi kecocokan parameter dalam input pengguna, mesin ini mengekstrak nilai sebagai parameter yang diketik sehingga Anda dapat menjalankan logika dengan parameter tersebut dalam sebuah scene. Dalam codelab ini, Anda mengonfigurasi Action untuk mengekstrak bantuan yang dipilih pengguna dan merujuk ke pilihan tersebut dalam perintah.

Membuat tipe unavailable_options

Anda sekarang dapat membuat tipe unavailable_options yang berisi berbagai opsi, sehingga Action Anda dapat mengidentifikasi data tersebut dalam input pengguna.

Untuk membuat tipe unavailable_options, ikuti langkah-langkah berikut:

  1. Buat file baru bernama unavailable_options.yaml di direktori types:
touch custom/types/unavailable_options.yaml
  1. Buka custom/types/unavailable_options.yaml di editor teks Anda.
  2. Tambahkan data synonyms berikut ke file unavailable_options.yaml:

unavailable_options.yaml

synonym:
  entities:
    money:
      synonyms:
      - money
      - cash
      - gold
    horse:
      synonyms:
      - horse
      - stallion
      - steed
    magic:
      synonyms:
      - magic
      - enchanted
      - spells
    phone:
      synonyms:
      - phone
      - cell
      - apps
  matchType: EXACT_MATCH
  1. Simpan file tersebut.

Membuat intent other_option

Selanjutnya, Anda akan membuat intent yang disebut other_option dan menambahkan frasa pelatihan yang menyertakan opsi tersebut dalam tipe unavailable_options. Intent ini akan dicocokkan saat pengguna memilih pilihan yang ada dalam type unavailable_options.

Untuk membuat dan mengonfigurasi intent other_option, ikuti langkah-langkah berikut:

  1. Buat file baru bernama other_option.yaml di direktori intents:
touch custom/intents/other_option.yaml
  1. Buka custom/intents/other_option.yaml di editor teks Anda.
  2. Tambahkan data parameters dan trainingPhrases berikut ke file other_option.yaml:

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)

Di sini, Anda menganotasi frasa pelatihan secara manual dengan opsi tidak tersedia yang Anda tetapkan di bagian sebelumnya. Parameter intent, chosenUnavailableOption, memungkinkan Anda mengekstrak nama opsi dan menggunakan opsi tersebut dalam pesan, yang akan Anda lakukan di bagian berikut.

  1. Simpan file tersebut.

Tambahkan intent other_option ke scene Fortune

Anda sekarang memiliki intent, other_option, yang dapat menangani pengguna yang menentukan opsi yang bukan salah satu dari opsi asli. Di bagian ini, Anda akan menambahkan intent other_option ke scene Fortune. Anda menggunakan parameter intent untuk menyesuaikan pesan berdasarkan input pengguna.

Untuk menambahkan intent other_option ke scene Fortune, ikuti langkah-langkah berikut:

  1. Buka custom/scenes/Fortune.yaml di editor teks Anda.
  2. Tambahkan data intentEvents berikut di antara data conditionalEvents dan data slots:

Fortune.yaml

intentEvents:
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech:  I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey.
  intent: other_option
  1. Simpan file tersebut.

Ekspresi $intent.params.chosenUnavailableOption mengacu pada objek parameter intent, dan $intent.params.chosenUnavailableOption.original mengacu pada nilai objek tersebut. Properti original merujuk pada input mentah yang ditentukan pengguna.

Saat pengguna mengatakan opsi yang tercantum dalam tipe unavailable_options selama scene Fortune, intent other_option akan dicocokkan dan menambahkan pesan ke antrean pesan. Karena tidak ada transisi yang ditetapkan, loop eksekusi scene berlanjut dengan mengevaluasi ulang tahapan kondisi. Slot chosenOptions kemudian menambahkan permintaannya ke antrean pesan, dan antrean pesan dikirimkan ke pengguna.

Menguji Action Anda di simulator

Action Anda sekarang seharusnya merespons secara tepat ketika pengguna memilih salah satu opsi yang tercantum dalam tipe unavailable_options dan menentukan bantuan yang dipilih pengguna. Kemudian, Action Anda akan meminta ulang pengguna untuk memilih salah satu pilihan asli (naga, penerjemah, atau kompas).

Untuk menguji Action Anda di simulator, ikuti langkah-langkah berikut:

  1. Di terminal, jalankan perintah berikut:
gactions deploy preview

Anda akan menerima output yang tampak seperti berikut ini:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Salin URL yang diberikan dan tempelkan ke browser.
  2. Ketik Talk to my test app di kolom Input, lalu tekan Enter.
  3. Ketik Yes di kolom Input, lalu tekan Enter. Atau, klik chip saran Yes.
  4. Ketik magic di kolom Input, lalu tekan Enter.

3a42c33eca435f32.png

Anda mungkin melihat bahwa pesan tidak terdengar benar saat pengguna memilih "ajaib" karena artikel "a" yang ditempatkan sebelumnya. Anda mengatasi masalah ini di bagian berikutnya.

Menambahkan pengendali unavailable_options

Untuk menempatkan artikel "a" sebelum pilihan yang sesuai dari tipe unavailable_options, Anda dapat mengonfigurasi pengendali peristiwa dalam logika fulfillment Anda untuk memeriksa apakah opsi yang dipilih pengguna memerlukan "a" sebelumnya. Pertama, Anda perlu mengonfigurasi Action untuk memanggil pengendali dari scene Fortune.

Untuk menambahkan pengendali unavailable_options ke scene Fortune, ikuti langkah berikut:

  1. Buka custom/scenes/Fortune.yaml di editor teks Anda.
  2. Perbarui file Fortune.yaml dengan data intentEvents berikut:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Simpan file tersebut.

Memperbarui dan men-deploy fulfillment

Setelah mengonfigurasi Action untuk memanggil pengendali peristiwa unavailable_options, Anda dapat memperbarui pengendali di fulfillment Anda dan melakukan deployment.

Untuk memperbarui fulfillment Anda, ikuti langkah-langkah berikut:

  1. Buka webhooks/ActionsOnGoogleFulfillment/index.js di editor teks Anda.
  2. Tambahkan kode berikut ke index.js di bagian pengendali greeting:

index.js

app.handle('unavailable_options', conv => {
  const option = conv.intent.params.chosenUnavailableOption.original;
  const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
  let message = 'I have seen the future and ';
  if(optionsNeedA.has(optionKey)){
    message = message + 'a ';
  }
  message = message + `${option} will not aid you on your journey. `;
  conv.add(message);
});
  1. Tambahkan kode berikut di bagian const app = conversation({debug:true});:

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Simpan file tersebut.

Memahami kode

Pengendali unavailable_options melakukan hal berikut:

  • Mengambil data option dari objek conv dan menetapkan option ke properti original, yang merupakan input mentah dari pengguna
  • Menetapkan optionKey ke properti resolved, yang merupakan kunci untuk type unavailable_options
  • Memeriksa apakah optionKey merupakan salah satu opsi yang memerlukan "a"; Jika ya, maka akan membuat pesan dengan tambahan "a"
  • Menambahkan pesan melalui conv.add(message)

Memperbarui pengendali

Untuk mengizinkan Action menggunakan unavailable_options, tambahkan pengendali unavailable_options ke webhooks/ActionsOnGoogleFulfillment.yaml.

  1. Tambahkan nama pengendali unavailable_options ke ActionsOnGoogleFulfillment.yaml:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Simpan file tersebut.

Menguji Action Anda di simulator

Action Anda sekarang harus menyesuaikan perintah berdasarkan apakah pilihan pengguna dari tipe unavailable_options memerlukan artikel "a" sebelumnya.

Untuk menguji Action Anda, ikuti langkah-langkah berikut:

  1. Di terminal, jalankan perintah berikut:
gactions deploy preview

Anda akan menerima output yang tampak seperti berikut ini:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Salin URL yang diberikan dan tempelkan ke browser.
  2. Klik atau ketik Talk to my test app di kolom Input dan tekan Enter.
  3. Ketik Yes di kolom Input, lalu tekan Enter. Atau, klik chip saran Yes.
  4. Ketik magic di kolom Input, lalu tekan Enter. Lalu, ketik horse di kolom Input dan tekan Enter.

54ee24c5c3c56e.png

Action Anda harus menambahkan artikel "a" sebelum pilihan "kuda", sambil menyusun perintah tanpa artikel "a" untuk pilihan "ajaib".

Actions SDK memiliki interoperabilitas dengan IDE berbasis web yang disebut Actions Builder yang terintegrasi ke dalam konsol Actions. Anda dapat mengirim sistem file lokal ke draf Action di konsol dengan perintah gactions push. Konsol Actions menyediakan representasi visual dari konfigurasi Action Anda. Melihat Action Anda dipetakan secara visual bisa berguna selama pengembangan, dan tidak memengaruhi versi Action yang disajikan untuk pengujian.

Untuk mendorong project Action Anda dan melihatnya di konsol Actions, ikuti langkah-langkah berikut:

  1. Di terminal, jalankan perintah berikut untuk mendorong project Anda ke konsol Actions:
gactions push

Anda akan menerima output yang tampak seperti berikut ini:

✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
  1. Salin URL yang diberikan dan tempelkan ke browser.
  2. Di konsol Actions, klik Kembangkan di bagian atas menu navigasi.
  3. Klik panah drop-down di samping Scene, lalu klik Start. Anda akan melihat representasi visual scene Start Action, seperti yang ditunjukkan di screenshot berikut:

cae526c647f8d40f.png

Selamat!

Sekarang Anda telah mempelajari keterampilan menengah yang diperlukan untuk membuat Action untuk Asisten Google dengan Action SDK.

Yang telah Anda pelajari

  • Cara mengembangkan Action Percakapan menggunakan library fulfillment Node.js
  • Cara menggunakan slot untuk mengumpulkan data dari pengguna
  • Cara menggunakan kondisi untuk menambahkan logika ke scene
  • Cara menambahkan game loop
  • Cara menambahkan jalur pendukung

Referensi pembelajaran tambahan

Anda dapat menjelajahi referensi berikut untuk mempelajari pembuatan Action untuk Asisten Google:

Ikuti kami di Twitter @ActionsOnGoogle untuk terus mengikuti pengumuman terbaru kami, dan kirim tweet ke #AoGDevs untuk membagikan yang telah Anda buat!

Membersihkan project [disarankan]

Untuk menghindari biaya yang mungkin dikenakan, sebaiknya hapus project yang tidak ingin Anda gunakan. Untuk menghapus project yang Anda buat di codelab ini, ikuti langkah-langkah berikut:

  1. Untuk menghapus Project Cloud dan resource, selesaikan langkah-langkah yang tercantum di bagian Shutting down (deleting) projects.
  1. Opsional: Untuk segera menghapus project Anda dari Konsol Actions, selesaikan langkah-langkah yang tercantum di bagian Deleting a project. Jika Anda tidak menyelesaikan langkah ini, project Anda akan dihapus secara otomatis setelah sekitar 30 hari.

Survei masukan

Sebelum pergi, isi survei singkat tentang pengalaman Anda.