1. Sebelum memulai
Dalam codelab ini, Anda akan mempelajari cara membangun chatbot retail dengan Dialogflow CX, Platform AI Percakapan (CAIP) untuk membangun UI percakapan. Dialogflow CX dapat menerapkan agen virtual, seperti: chatbot, bot suara, gateway telepon, dan dapat mendukung beberapa saluran dalam lebih dari 50 bahasa yang berbeda.
Codelab ini akan memandu Anda cara membuat chatbot situs untuk retail. Bisnis fiktif yang kami buat chatbot-nya bernama: G-Records. G-Records adalah label rekaman rock yang berbasis di California. Label ini memiliki 4 band rock yang dikontrak; Alice Googler, G's N' Roses, The Goo Fighters, dan The Google Dolls. G-Records menjual merchandise band kepada semua penggemar musik rock.
Di akhir codelab ini, Anda dapat menggunakan chatbot untuk memesan kaus atau musik atau Anda dapat bertanya tentang pesanan Anda.

Yang akan Anda pelajari
Anda akan mempelajari manfaat Dialogflow CX dibandingkan dengan Dialogflow ES dengan melakukannya. Isinya adalah konsep berikut:
- Cara membuat agen virtual Dialogflow CX dalam Google Cloud
 - Pelajari cara membuat alur
 - Pelajari cara membuat entitas
 - Mempelajari cara membuat maksud (intent)
 - Pelajari cara membuat halaman dan halaman transisi dengan pengendali status
 - Mempelajari cara mentransisikan halaman dengan rute maksud
 - Mempelajari cara melakukan transisi halaman dengan parameter & rute kondisi
 - Pelajari cara menampilkan respons bersyarat dengan fungsi sistem
 - Pelajari cara membuat pesan pengganti
 - Mempelajari cara menggunakan simulator
 - Pelajari cara membuat kasus pengujian & cakupan pengujian
 
Desain akhir agen Dialogflow CX akan terlihat seperti ini:

Yang Anda butuhkan
- Anda memerlukan alamat Gmail / Identitas Google untuk membuat agen Dialogflow CX.
 - Akses ke Google Cloud.
 
2. Penyiapan Lingkungan
Membuat project Google Cloud
Karena Dialogflow CX berjalan di Google Cloud, Anda harus membuat project Google Cloud. Project menyusun semua resource Google Cloud Anda. Project terdiri dari sekumpulan kolaborator, API yang diaktifkan (dan resource lainnya), alat pemantauan, informasi penagihan, serta kontrol akses dan autentikasi.
Saat membuat project baru, Anda harus memasukkan Nama Project. Selain itu, Anda harus menautkannya ke Akun Penagihan dan Organisasi yang sudah ada.
Akun penagihan digunakan untuk menentukan siapa yang membayar serangkaian resource tertentu, dan dapat ditautkan ke satu atau beberapa project. Penggunaan project ditagihkan ke akun penagihan tertaut. Dalam sebagian besar kasus, Anda mengonfigurasi penagihan saat membuat project. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Penagihan. Pastikan penagihan diaktifkan untuk project Cloud Anda.

Mengaktifkan Dialogflow API
Untuk menggunakan Dialogflow, Anda harus mengaktifkan Dialogflow API untuk project Anda.
- Pilih project yang ingin Anda aktifkan API-nya, lalu klik Lanjutkan.
 - Ciutkan menu API & Layanan, lalu klik Create Credentials
 - Klik Data Aplikasi
 - Ucapkan Tidak, saya tidak menggunakannya karena Anda tidak menggunakan Kubernetes Engine, App Engine, atau Cloud Functions untuk saat ini.
 - Klik Selesai
 

Buat agen Dialogflow CX baru
Untuk membuat agen Dialogflow CX baru, buka terlebih dahulu Konsol Dialogflow CX:
- Pilih project Google Cloud yang dibuat sebelumnya.
 - Klik Buat agen.
 
Isi formulir untuk setelan agen dasar:
- Anda dapat memilih nama tampilan apa pun.
 - Sebagai lokasi, pilih: us-central1
 - Pilih zona waktu pilihan Anda.
 - Pilih en - English sebagai bahasa default
 
Klik Buat.

Baiklah, kita sudah siap. Akhirnya kita dapat mulai memodelkan agen virtual.
3. Flows
Dialog kompleks sering kali melibatkan beberapa topik percakapan. Dalam kasus chatbot yang kami buat untuk G-Records, untuk menjual merchandise band, kami akan memiliki dialog tentang katalog produk, pembayaran, status pesanan, dan pertanyaan layanan pelanggan. Kita dapat membagi topik percakapan ini menjadi alur.

Alur memungkinkan tim mengerjakan jalur percakapan masing-masing. Praktik yang baik adalah menyederhanakan alur, sehingga mudah ditampilkan di layar dan lebih modular.
Alur adalah konsep baru di Dialogflow CX. Dialogflow Essentials memiliki konsep Mega Agent, yang agak mirip dengan Flows. Namun, Anda akan lebih sering menggunakan Alur.
Nanti di lab ini, kita akan menggunakan state handler yang dapat mengakhiri alur (sehingga akan kembali ke alur berikutnya atau sebelumnya), atau Anda dapat mengakhiri sesi agen sepenuhnya.
Mari kita buat beberapa alur.
Membuat Alur
- Di Dialogflow CX, klik ikon + > Create flow.
 - Tentukan nama: 
Catalog, lalu tekan enter. 

Alur pertama Anda Katalog telah dibuat. Sekarang buat alur lainnya:
Order ProcessMy OrderCustomer Care

Nanti dalam lab ini, kita akan menetapkan pengendali status halaman. Hal ini akan memastikan bahwa pada akhirnya visualisasi akan terlihat seperti ini:

Simulator
Di sisi kanan Konsol Dialogflow CX, Anda dapat menguji agen virtual dengan simulator bawaan. Anda dapat menguji percakapan dari awal percakapan, atau dari alur tertentu.
- Klik tombol Test Agent di kanan atas layar.
 - Di kolom bicara dengan agen, tulis: 
HelloAgen virtual akan merespons dengan teks sambutan default: Salam! Ada yang bisa kami bantu? 

Mari kita ubah teks sambutan default ini.
Alur Mulai Default
Mari kita mulai dengan membuat Intent Route yang akan dipicu setelah Anda menyapa agen virtual.
- Di sidebar Build > Flows di sebelah kiri, klik Default Start Flow, lalu pilih node pohon Start.
 
Tindakan ini akan membuka halaman Mulai. Secara otomatis, halaman Start dipilih di bagian sidebar Build > Pages.
- Di Start > Routes, klik Default Welcome Intent.
 
Maksud mengategorikan niat pengguna akhir untuk satu giliran percakapan. Di Dialogflow CX, intent dapat menjadi bagian dari pengendali status untuk merutekan halaman atau pemenuhan aktif berikutnya
- Hapus semua entri Agen berkata, lalu tambahkan teks baru ini:
 
Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?
Untuk menyederhanakan percakapan, kita juga memerlukan beberapa tombol balasan cepat / chip saran.
- Klik Add dialogue option > Custom payload dan gunakan cuplikan kode di bawah.
 - Gunakan cuplikan kode di bawah sebagai Payload kustom, lalu klik Simpan.
 
Untuk membaca selengkapnya tentang Payload kustom, lihat dokumentasi.
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }

- Lanjutkan dan uji intent sambutan di simulator.
 
Anda mungkin bertanya-tanya mengapa Anda tidak dapat melihat konten multimedia. Hal ini karena konten multimedia seperti chip saran bergantung pada integrasi. Langkah-langkah berikut memerlukan akun penagihan, tetapi Anda dapat melewatinya jika tidak memilikinya.
- Di sidebar kiri, klik Kelola > Integrasi.
 - Pilih Dialogflow Messenger, lalu klik Connect.
 - Di jendela pop-up, klik Aktifkan.
 

Pop-up lain akan ditampilkan, kali ini dengan kode JavaScript integrasi yang dapat Anda tempelkan di situs untuk mengintegrasikan komponen Dialogflow Messenger di situs Anda. Karena belum memiliki situs, kita akan menguji agen virtual secara langsung di alat ini.

- Klik link Coba Sekarang.
 - Klik ikon chatbot di kanan bawah untuk membuka jendela chat. Tulis 
Hellountuk memulai percakapan. 

Untuk saat ini, saat Anda mengklik chip saran, agen virtual tidak akan memahami maksud Anda. Hal ini karena agen virtual kita belum beralih antar-status. Kita dapat melakukannya di Dialogflow CX dengan Halaman. Lanjutkan lab, kita akan membuat beberapa Entitas dan Maksud (Intent) terlebih dahulu.
4. Jenis Entity
Jenis entity digunakan untuk mengontrol cara data dari input pengguna akhir diekstrak. Jenis entity Dialogflow CX sangat mirip dengan jenis entity Dialogflow ES. Dialogflow menyediakan entity sistem standar yang dapat mencocokkan banyak jenis data umum. Misalnya, ada entity sistem untuk mencocokkan tanggal, waktu, warna, alamat email, dan sebagainya. Anda juga dapat membuat entitas kustom sendiri untuk mencocokkan data kustom.
Mari kita mulai dengan menyiapkan semua entity kustom sebelum kita dapat mendesain halaman dalam alur. Kita akan membuat entity berikut:

Membuat Entity
Mari buat entity Artist.
- Klik Manage > Entity Types
 - Klik + Buat
 
- Nama Tampilan: 
Artist - Entitas:
 The Google Dolls(dengan sinonim:Google Dolls)The Goo Fighters(dengan sinonim:Goo Fighters)G's N' Roses(dengan sinonim:Gs and Roses)Alice Googler- Klik Opsi lanjutan, lalu centang Pencocokan Fuzzy. (Jika Anda salah mengeja nama band, nama tersebut mungkin masih cocok dengan entitas yang benar.)
 - Di Opsi lanjutan, centang juga Samarkan dalam log. (Jika Anda salah mengeja nama band, nama tersebut akan dikoreksi dalam log.)
 
- Klik Simpan
 
Kita juga memerlukan entity untuk item Merch:
- Klik Manage > Entity Types
 - Klik + Buat
 
- Nama Tampilan: 
Merch - Entitas:
 T-shirtLongsleeve(dengan sinonim:Longsleeve shirt)Tour MovieDigital Album(dengan sinonim:MP3 Album,MP3)CD(dengan sinonimDisc,Physical CD)
- Klik Simpan
 
Kita juga akan memerlukan entity untuk Album:
- Klik Manage > Entity Types
 - Klik + Buat
 
- Nama Tampilan: 
Album - Entitas:
 LiveGreatest Hits(dengan sinonim:Hits)
- Klik Simpan
 
Kita juga memerlukan entity untuk ukuran pakaian:
- Klik Manage > Entity Types
 - Klik + Buat
 
- Nama Tampilan: 
ShirtSize - Entitas:
 XS(dengan sinonim:Extra Small)S(dengan sinonim:Small)M(dengan sinonim:Medium)L(dengan sinonim:Large)XL(dengan sinonim:Extra Large)2XL(dengan sinonim:Extra Extra Large)3XL
- Klik Simpan
 
Dan entity untuk nomor pesanan, yang biasanya terdiri dari 4 alfanumerik dan 3 angka. (seperti ABCD123)
- Klik Manage > Entity Types
 - Klik + Buat
 
- Nama Tampilan: 
OrderNumber - Entity Regexp
 - Entitas: [A-Z]{4}[0-9]{3}
 
- Klik Simpan
 
Konfigurasi entitas Anda akan terlihat seperti berikut:
@Artis: 
@Merch: 
@Album: 
@ShirtSize: 
@OrderNumber: 
Setelah entity kustom disiapkan, kita dapat menyiapkan maksud. Mari kita lanjutkan labnya.
5. Intent
Intent mengategorikan maksud pengguna akhir untuk satu giliran percakapan. Fitur ini telah disederhanakan secara signifikan di Dialogflow CX, dan tidak lagi menjadi elemen penyusun untuk kontrol percakapan. Dialogflow CX hanya menggunakan maksud (intent) untuk mencocokkan ucapan pengguna. Di Dialogflow ES, Anda harus mengikat semuanya ke intent (parameter, peristiwa, pemenuhan, dll.). Intent di Dialogflow CX hanya berisi frasa pelatihan dan oleh karena itu dapat digunakan kembali. Gemini tidak lagi mengontrol percakapan. Jadi, proses pembuatan intent akan mudah:
Frasa pelatihan dalam maksud dapat menggunakan Entitas untuk mengekstrak input'variabel'. Oleh karena itu, sebaiknya buat jenis entitas Anda terlebih dahulu, seperti yang kita lakukan di halaman langkah-langkah lab sebelumnya.
Membuat Intent
Mari kita mulai dengan menyiapkan semua maksud sebelum kita dapat mendesain halaman dalam alur.
- Klik Manage > Intents.
 - Klik + Buat.
 
Gunakan detail berikut:
- Nama tampilan 
redirect.artists.overview - Deskripsi 
Artists overview: The bands supported by the label 

Scroll ke bawah dan buat frasa pelatihan berikut:
Which bands are signed?Which bandsWhich artistsWhich artists are part of the record labelWho is part of the labelFrom which bands can I buy merchandiseBand merchandiseWhich music do you have?I would like to know who are signed to the labelWho are supported by the labelFrom who can I buy shirtsWhat music can I orderCan I get an overview of all the artists

- Klik Simpan.
 
- Sekarang, lanjutkan dan buat semua maksud lainnya. Gunakan imajinasi Anda sendiri untuk membuat lebih banyak frasa pelatihan. Praktik terbaiknya adalah memiliki setidaknya 10 frasa pelatihan per maksud untuk mencakup berbagai cara pengguna dapat memicu maksud tersebut. Untuk tujuan lab ini, memiliki lebih sedikit juga tidak masalah.
 
Beberapa hal yang perlu diperhatikan:
- Perhatikan bahwa saat Anda memasukkan frasa pelatihan, Dialogflow CX akan otomatis membuat anotasi entity Anda. Jika tidak, Anda mungkin perlu memperbarui entitas (dengan menambahkan sinonim) atau dengan membuat anotasi frasa pelatihan secara manual.
 - Frasa pelatihan yang lebih pendek: Sistem NLU Dialogflow juga dapat bekerja dengan frasa pelatihan yang lebih pendek dan kami telah memberikan beberapa contoh di sini.
 - Pelatihan berlebihan: Terlalu banyak frasa pelatihan untuk maksud (intent) dapat menyebabkan pelatihan berlebihan dan hasil yang kurang diinginkan. Sebaiknya gunakan pengujian iteratif dan inkremental serta tambahkan frasa pelatihan jika tidak ada maksud yang cocok.
 
Nama tampilan  | Frasa pelatihan  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
Setelah elemen yang dapat digunakan kembali (alur, entitas, dan maksud) disiapkan, kita dapat menggabungkannya dengan membuat Halaman dan Handler Status.
6. Halaman & Pengendali Status
Percakapan Dialogflow CX (sesi) dapat dideskripsikan dan divisualisasikan sebagai mesin status terbatas. Ambil contoh mesin penjual otomatis, mesin ini dapat dimodelkan sebagai mesin status terbatas. Game ini memiliki status berikut: Menunggu Koin, Pilih Permen, Beri Permen, dan dengan serangkaian input, game ini akan berpindah antar-status tersebut. Misalnya, memasukkan koin akan memindahkan mesin penjual otomatis dari Menunggu koin ke Pilih Permen. Halaman adalah cara kita dapat memodelkan status ini untuk agen virtual Dialogflow CX.
Saat pengguna akhir berinteraksi dengan Dialogflow CX dalam percakapan, percakapan berpindah dari halaman ke halaman sehingga pada saat tertentu, hanya ada satu halaman yang merupakan halaman saat ini, halaman saat ini dianggap aktif, dan alur yang terkait dengan halaman tersebut juga dianggap aktif.
Untuk setiap Flow, Anda menentukan banyak halaman, tempat gabungan halaman Anda dapat menangani percakapan lengkap tentang topik yang dirancang untuk alur tersebut. Setiap alur memiliki halaman awal khusus. Saat alur awalnya menjadi aktif, halaman awal akan menjadi halaman saat ini. Untuk setiap giliran percakapan, halaman saat ini akan tetap sama atau bertransisi ke halaman lain. Konsep ini akan memungkinkan Anda membuat agen yang lebih besar dengan banyak halaman dan beberapa giliran percakapan.
Halaman berisi pemenuhan (dialog entri statis dan/atau webhook), parameter, dan penangan status. Kontrol percakapan terjadi melalui pengendali status, yang memungkinkan Anda membuat berbagai rute transisi untuk bertransisi ke halaman Dialogflow CX lain, termasuk membuatnya bersyarat (untuk percabangan percakapan).
Status percakapan dikontrol dengan menangani transisi antarhalaman dengan tiga jenis rute yang berbeda:
- Rute intent: Kapan intent harus dicocokkan (misalnya, mengubah halaman berdasarkan apa yang dikatakan pengguna akhir). (Garis biru dalam diagram visual.)
 - Rute kondisi: Saat kondisi harus diperiksa (misalnya, mengubah halaman berdasarkan parameter tertentu yang disimpan dalam sesi) (Garis oranye dalam diagram visual.)
 - Pengendali peristiwa: Saat peristiwa penggantian tertentu harus ditangani (misalnya, menangani tidak ada input, tidak ada kecocokan, untuk membedakan pengguna akhir ke rute maksud atau kondisi) (Garis hijau dalam diagram visual.)
 
Ucapan percakapan (yaitu konten atau respons kembali kepada pengguna) ditentukan oleh pemenuhan, yang dapat berupa statis atau dinamis:
- Pemenuhan statis: Saat respons pemenuhan statis diberikan
 - Pemenuhan dinamis: Saat webhook pemenuhan dipanggil untuk respons dinamis
 
Untuk bot retail, kita akan membuat beberapa rute intent dan memberikan beberapa respons pemenuhan entri statis, yang akan ditampilkan kepada pengguna segera setelah halaman diaktifkan. Selanjutnya, kita akan membuat parameter dengan rute kondisi untuk mengumpulkan informasi yang Anda perlukan untuk membuat pesanan merchandise.
Rute Intent Halaman
Membuat halaman di Alur Mulai Default
Berikut adalah diagram alur dari alur mulai default:

Mari kita klik bersama:
- Klik Build > Default Start Flow
 - Klik Halaman Mulai
 - Klik ikon + di samping Rute
 - Menambahkan redirect.artists.overview
 - Scroll ke bawah ke Transisi, lalu lakukan transisi ke alur Katalog.
 - Klik Simpan.
 - Ulangi langkah-langkah di atas untuk 
redirect.product.overviewdan 11 baris lainnya dari tabel ini: 
Halaman (Dalam Alur)  | Routes > Intent  | Rute > Beralih Ke  | 
Mulai  | 
  | -  | 
Mulai  | 
  | Flow: Katalog  | 
Mulai  | 
  | Flow: Katalog  | 
Mulai  | 
  | Flow: Katalog  | 
Mulai  | 
  | Flow: Katalog  | 
Mulai  | 
  | Flow: Katalog  | 
Mulai  | 
  | Flow: Katalog  | 
Mulai  | 
  | Alur: Layanan Pelanggan  | 
Mulai  | 
  | Alur: Layanan Pelanggan  | 
Mulai  | 
  | Alur: Layanan Pelanggan  | 
Mulai  | 
  | Alur: Pesanan Saya  | 
Mulai  | 
  | Alur: Pesanan Saya  | 
Mulai  | 
  | Alur: Pesanan Saya  | 
Mulai  | 
  | Halaman: Akhiri Sesi  | 

Alur Mulai Default akan berfungsi seperti menu opsi saat memanggil pusat panggilan. Namun, di agen virtual ini, agen dilatih dengan Natural Language, dengan frasa pelatihan dalam maksud (intent). Oleh karena itu, interaksi didorong oleh percakapan, bukan oleh opsi DTMF, dan lebih natural serta menyerupai manusia.

Membuat halaman di Alur Katalog
Transkrip chat berikut termasuk dalam alur Katalog:
> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!
We sell shirts, music or the tour movie.
Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.
Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"
Dialog akan berbeda saat Anda memilih Musik atau Film Tur: Untuk Musik, dialog akan terlihat seperti ini:
 > "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"
Untuk Film Tur, dialognya akan terlihat seperti ini:
 > "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?
Berikut diagram alir semua halaman dalam alur Katalog:

Perhatikan kompleksitas alur ini:
- Saya dapat melewati pertanyaan Artis mana dan langsung bertanya "Item merchandise mana yang tersedia".
 - Dari Alur Mulai Default, saya dapat bertanya: "Saya ingin membeli t-shirt The Google Dolls", atau "Saya ingin membeli sesuatu". Artinya, agen virtual akan mengajukan pertanyaan lanjutan untuk mengisi slot parameter yang diperlukan ini. Link ini akan langsung membuka Halaman Produk.
 - Dialog Harga berasal dari halaman Harga yang akan digunakan kembali.
 - Meskipun dialog untuk Tour Movie terlihat seperti dialog yang paling sederhana, kita akan melakukan sesuatu yang istimewa dengannya. Kami akan menggunakan kembali bagian dialog ini, sehingga pengguna akhir juga dapat memasukkannya secara langsung untuk salah satu produk lainnya, jika mereka mengkhususkan semua informasi sekaligus:
 
 > "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"
Pertama, mari kita mulai dengan menghubungkan halaman.
- Klik Build > Catalog
 - Klik Halaman Mulai
 - Klik ikon + di samping Rute
 - Menambahkan redirect.artists.overview
 - Scroll ke bawah ke Transisi, pilih Halaman, lalu pilih: + Halaman baru
 - Gunakan nama halaman: 
Artist Overview, lalu klik Simpan 
Sekarang, mari selesaikan alur lainnya:
- Langkah-langkah sebelumnya dapat diulangi dengan halaman, maksud (intent), dan pemenuhan (fulfillment) berikutnya. Mengambil alih tabel ini. Halaman adalah Halaman yang akan Anda pilih dalam alur, Rute > Beralih Ke adalah alur atau halaman baru yang akan Anda buat dan tuju.
 
Halaman (Dalam Alur)  | Routes > Intent  | Rute > Beralih Ke  | 
Mulai Katalog  | 
  | Ringkasan Artis  | 
Mulai Katalog  | 
  | Produk  | 
Mulai Katalog  | 
  | Ringkasan Produk  | 
Mulai Katalog  | 
  | Ringkasan Produk  | 
Mulai Katalog  | 
  | Kaus  | 
Mulai Katalog  | 
  | Musik  | 
Mulai Katalog  | 
  | Akhiri Sesi  | 
Mulai Katalog  | 
  | Akhiri Flow  | 
Ringkasan Artis  | 
  | Ringkasan Produk  | 
Sekarang, lanjutkan dan tambahkan pemenuhan statis lainnya.
- Di alur Katalog, klik halaman Ringkasan Artis.
 - Klik Edit pemenuhan di bagian Pemenuhan entri.
 - Gunakan pemenuhan statis berikut (Agent says):
 
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- Klik Simpan
 - Di alur Katalog, klik halaman Ringkasan Produk.
 - Klik Edit pemenuhan di bagian Pemenuhan entri.
 - Gunakan pemenuhan statis berikut (Agent says):
 
We sell shirts, music or the tour movie.
- Tekan Simpan.
 
Parameter Halaman
Parameter digunakan untuk merekam dan mereferensikan nilai yang telah diberikan oleh pengguna akhir selama sesi. Setiap parameter memiliki nama dan jenis entity. @Artist dan @Merch adalah parameter minimum yang perlu kita kumpulkan untuk membuat pesanan merchandise. Untuk T-shirt atau Longsleeve, Anda juga ingin mengumpulkan @ShirtSize dan jika ingin memesan musik, Anda juga memerlukan nama @Carrier dan @Album.
Parameter tersebut harus ditandai sebagai wajib diisi. Setelah diperlukan, Anda harus memberikan perintah kustom untuk mengingat pengguna akhir Anda, untuk memberikan jawaban yang benar sehingga parameter ini dapat dikumpulkan. Ada beberapa mekanisme di Dialogflow CX yang dapat membantu Anda dalam hal ini.
Misalnya, Anda dapat memberikan pesan pemenuhan statis kustom di bagian Parameter. Jika parameter wajib diisi, maka pemenuhan parameter ini akan ditampilkan. Pesan respons ini akan ditambahkan ke antrean respons. Selama giliran agen, beberapa pemenuhan dapat dipanggil (dan terkadang diinginkan), yang masing-masing dapat menghasilkan pesan respons. Dialogflow menyimpan respons ini dalam antrean respons. Untuk membaca lebih lanjut siklus proses halaman, dan urutan pemenuhan ini akan ditambahkan ke antrean respons, baca Dokumen Halaman Dialogflow CX.
Membuat parameter di halaman Ringkasan Artis
Mari kita tentukan beberapa parameter halaman:
- Di Alur Katalog, klik halaman Ringkasan Artis.
 - Klik + di blok Parameter. Tambahkan parameter artist:
 
- Nama Tampilan: 
artist - Jenis Entitas: 
@Artist - Wajib: Periksa
 - Samarkan di log: Periksa
 
- Sekarang kita akan menambahkan beberapa pesan pemenuhan parameter kustom. Jika parameter artist belum dikumpulkan oleh agen virtual, pengguna akhir akan mendapatkan respons agen ini yang ditambahkan ke antrean respons:
 
From which of these artists would you like to order merchandise?
- Tambahkan opsi dialog kedua yang menyediakan chip saran lengkap. Klik Tambahkan opsi dialog dan gunakan kode ini (dalam JSON):
 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
Anda dapat menangani berbagai perintah pemenuhan penggantian berdasarkan jumlah percobaan yang dilakukan pengguna akhir untuk menjawabnya. Anda dapat melakukannya dengan pemroses peristiwa parameter. Ada berbagai handler peristiwa bawaan yang dapat dipilih seperti Parameter Tidak Valid, Ucapan terlalu panjang, Tidak ada input, Tidak ada input pada percobaan pertama, Percobaan ke-2, atau Tidak Ada Kecocokan. Perbedaan antara tidak ada input dan tidak ada kecocokan adalah bahwa dengan tidak ada input, pengguna tidak pernah memberikan jawaban, sedangkan dengan tidak ada kecocokan, pengguna memberikan jawaban, tetapi Dialogflow CX tidak dapat mencocokkan maksud ini dengan halaman.
- Scroll ke bawah ke bagian Reprompt event handlers.
 - Klik Tambahkan pengendali peristiwa, lalu pilih peristiwa: 
No-match default - Gunakan pengisian teks statis text fulfillment peristiwa berikut:
 
I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Klik Simpan
 - Klik Tambahkan pengendali peristiwa, lalu pilih peristiwa: 
No-input default - Gunakan pengisian teks statis text fulfillment peristiwa berikut:
 
I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Klik Simpan
 
Rute Kondisi Halaman
Parameter sangat efektif jika dikombinasikan dengan Rute Bersyarat Halaman. Saat kondisi bernilai benar (true), rute halaman terkait akan dipanggil. Kondisinya bisa berupa Parameter sama dengan nilai tertentu, atau Parameter tidak boleh tidak ada, atau Formulir yang telah diisi, dan banyak lagi. Anda dapat menemukan informasi selengkapnya tentang Parameter dan Kondisi di Dokumentasi Dialogflow CX.
Untuk agen virtual retail kami, kami perlu mengumpulkan serangkaian parameter, sehingga kami perlu membuat kondisi, untuk memeriksa apakah 'formulir' telah diisi. Formulir adalah daftar parameter yang harus dikumpulkan dari pengguna akhir untuk halaman. Agen virtual berinteraksi dengan pengguna akhir untuk beberapa giliran percakapan, hingga mengumpulkan semua parameter formulir yang diperlukan, yang juga dikenal sebagai parameter halaman.
Dialogflow CX secara otomatis menetapkan nilai parameter yang diberikan oleh pengguna akhir selama pengisian formulir. Untuk memeriksa apakah formulir lengkap halaman saat ini telah diisi, gunakan kondisi berikut: $page.params.status = "FINAL"
Membuat rute bersyarat di halaman Ringkasan Artis
Mari kita buat rute bersyarat, yang akan bertransisi ke halaman berikutnya, setelah artis diketahui:
- Di halaman Ringkasan Artis, klik ikon + di bagian Rute.
 - Scroll ke bawah ke bagian Kondisi.
 - Pilih Setidaknya satu (OR)
 - Selanjutnya, kita akan menulis ekspresi yang
 
- Parameter: 
$page.params.status - Operator: 
= - Nilai: 
"FINAL" 
- Sekarang, kita akan membuat pesan pemenuhan statis tertentu di rute, yang mengonfirmasi pilihan pengguna akhir. Scroll ke bawah ke blok Pemenuhan dan tulis pesan pemenuhan berikut:
 
$session.params.artist, great choice! Rock on!You want to rock with $session.params.artist merchandise. Awesome!
- Jika kondisinya benar, Anda harus beralih ke halaman Product Overview. Scroll ke bawah ke bagian Transisi dan gunakan halaman berikut: 
Product Overview - Tekan Simpan.
 

Membuat rute di halaman Ringkasan Produk
Sekarang, setelah kita mengetahui cara membuat parameter dan rute bersyarat, mari kita buat lebih banyak parameter untuk halaman berikut:
Ringkasan Produk
- Buat parameter 
artistdi Halaman Ringkasan Produk: 
- Nama Tampilan: 
artist - Jenis Entitas: 
@Artist - Wajib: Periksa
 - Samarkan di log: Periksa
 - Pemenuhan perintah awal: 
From which of these artists would you like to order merchandise? 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
- Event Handler > 
No-match default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from? - Payload kustom:
 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
- Event Handler > 
No-input default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention? - Payload kustom:
 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
- Buat parameter 
merch: 
- Nama Tampilan: 
merch - Jenis Entitas: 
@Merch - Wajib: Periksa
 - Samarkan di log: Periksa
 - Pemenuhan: 
Which merchandise item do you want? - Klik: Tambahkan opsi dialog > Payload kustom:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
- Event Handler > 
No-match default - Pemenuhan Handler Peristiwa: 
We sell Shirts, Music or the Tour movie. Which of these items do you want? - Payload kustom:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
- Event Handler > 
No-input default - Pemenuhan Handler Peristiwa: 
I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want? - Payload kustom:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
- Buat rute yang akan bertransisi ke halaman Produk saat 
artistdiberikan dan itemmerchdiberikan. 
- Kondisi:
 - Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$session.params.artist != null - Ekspresi: 
$session.params.merch != null - Pemenuhan: 
Alright! $session.params.merch of $session.params.artist, let's go! - Transisi: Halaman: 
Product 
- Buat rute saat pengguna mengatakan "Kemeja"
 
- Intent: redirect.shirts
 - Transisi: Halaman: 
Shirts 
- Buat rute saat pengguna mengucapkan "Musik"
 
- Intent: redirect.music
 - Transisi: Halaman: 
Music 
- Buat rute saat pengguna meminta informasi harga
 
- Intent: redirect.price
 - Transisi: Buat Halaman baru: 
Price 
Setelah menetapkan konfigurasi di atas, Anda akan melihat visualisasi yang mirip dengan gambar di bawah. Perhatikan bahwa rute maksud berwarna biru dalam diagram, dan rute kondisi berwarna oranye. Meskipun tidak digambarkan, pengendali peristiwa berwarna hijau, dan saat beberapa jenis rute bertransisi ke halaman, garis akan berwarna abu-abu.

Sekarang, Anda telah mempelajari cara membuat Flow, Entitas, Intent, dan Halaman dengan Penangan Status seperti: Rute Intent dan Rute Bersyarat berdasarkan Parameter. Nanti di lab ini, kita akan menggunakan percabangan bersyarat dalam pemenuhan, untuk memberikan dialog yang berbeda berdasarkan input.
Anda dapat menggunakan konfigurasi berikut untuk menyelesaikan agen virtual kami.
Halaman Kaus:
- Buat konfigurasi berikut di Halaman Shirts:
 
- Pemenuhan entri: 
Do you want a longsleeve or a t-shirt? - Payload kustom pemenuhan entri:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
- Buat Rute Intent: 
redirect.pricedengan transisi ke HalamanPrice - Buat parameter berikut:
 
- Parameter: 
merch- Jenis Entitas:@Merch,Required, danRedact in log - Parameter > Event Handler > 
No-match default - Parameter > Pemenuhan Handler Peristiwa: 
You can choose between a t-shirt or a longsleeve. Which of these do you want? - Parameter > Payload Kustom Pemenuhan Handler Peristiwa:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
- Parameter > Event Handler > 
No-input default - Parameter > Pemenuhan Handler Peristiwa: 
I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want? - Parameter > Payload Kustom Pemenuhan Handler Peristiwa:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
- Klik pemenuhan entri dan scroll ke bawah ke Preset parameter, setiap kali halaman Kemeja aktif, parameter kategori akan disetel ke kemeja:
 
Parameter  | Nilai  | 
  | 
  | 
- Menambahkan Rute Bersyarat:
 
- Cocokkan Minimal Satu Aturan (ATAU)
 - Ekspresi: 
$session.params.merch = "T-shirt" - Ekspresi: 
$session.params.merch = "Longsleeve" - Transisi ke halaman baru: 
Shirt Size 
Halaman Harga:
Karena pesan untuk harga akan bergantung pada item atau kategori merchandise yang dipilih (musik atau kemeja), kita akan memperbaiki bagian ini nanti di lab. Untuk saat ini, cukup masukkan placeholder.
- Buat konfigurasi berikut di Halaman Harga:
 
- Pemenuhan entri: 
PRICE TODO 
Karena Anda dapat meminta harga dari berbagai tempat dalam percakapan, Gemini akan selalu memberikan jawaban dan mengalihkan Anda kembali ke bagian dialog sebelumnya untuk melanjutkan pesanan. Ada 5 tempat di pohon dialog tempat Anda dapat bercabang untuk mendapatkan informasi harga. (Kemeja, Ukuran Kemeja, Musik, Ekspedisi, dan juga langsung melalui Rute Intent), jadi kita akan memerlukan beberapa rute bersyarat untuk kembali:
- Tambahkan Rute bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$session.params.category = "shirts" - Ekspresi: 
$session.params.merch = "null" - Transisi ke halaman baru: 
Shirts 
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$session.params.category = "shirts" - Ekspresi: 
$session.params.size = "null" - Transisi ke halaman baru: 
Shirt Size 
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$session.params.category = "music" - Ekspresi: 
$session.params.album = "null" - Transisi ke halaman baru: 
Music 
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$session.params.category = "music" - Ekspresi: 
$session.params.merch = "null" - Transisi ke halaman baru: 
Carrier 
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$session.params.category = "null" - Transisi ke halaman baru: 
Product Overview 
Halaman Ukuran Kaus:
- Buat konfigurasi berikut di Halaman Ukuran Baju:
 
- Pemenuhan entri: 
What shirt size do you want? - Payload kustom pemenuhan entri:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
- Buat Rute intent: 
redirect.pricedengan transisi ke HalamanPrice. - Buat parameter berikut:
 
- Parameter: 
shirtsize- Jenis Entitas:@ShirtSize-Required,Redact In Log - Parameter > Event Handler > 
No-match default - Parameter > Pemenuhan Handler Peristiwa: 
Please tell me the shirt size, such as XL. - Parameter > Payload Kustom Pemenuhan Handler Peristiwa:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
- Parameter > Event Handler > 
No-input default - Parameter > Pemenuhan Handler Peristiwa: 
I couldn't understand the shirt size. What size do you want? - Parameter > Payload Kustom Pemenuhan Handler Peristiwa:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$page.params.shirtsize != "null" - Transisi ke Halaman: 
Product 
Halaman Musik:
- Buat konfigurasi berikut di Halaman Musik:
 
- Pemenuhan entri: 
We have a Greatest Hits Album or the Live Album. Which one do you want? - Payload kustom pemenuhan entri:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
- Buat Rute Intent: 
redirect.pricedengan transisi ke Halaman:Price. - Buat parameter berikut:
 
- Parameter: 
album- Jenis Entitas:@Album-Required,Redact In Log - Parameter > Event Handler > 
No-match default - Parameter > Pemenuhan Handler Peristiwa: 
You can choose between Greatest Hits and Live Album. Which of these do you want? - Parameter > Payload Kustom Pemenuhan Handler Peristiwa:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
- Parameter > Event Handler > 
No-input default - Parameter > Pemenuhan Handler Peristiwa: 
I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want? - Parameter > Payload Kustom Pemenuhan Handler Peristiwa:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
- Klik pemenuhan entri dan scroll ke bawah ke Preset parameter. Setiap kali halaman Musik aktif, parameter kategori akan disetel ke musik:
 
Parameter  | Nilai  | 
  | 
  | 
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$page.params.album != "null" - Transisi ke Halaman: 
Carrier 
Halaman Operator:
- Buat konfigurasi berikut di Halaman Operator:
 
- Pemenuhan entri: 
Do you want this album on CD or MP3? - Payload kustom pemenuhan entri:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
- Buat Rute intent: 
redirect.priceyang bertransisi ke HalamanPrice. - Buat parameter berikut:
 
- Parameter: 
merch- Jenis Entitas:@Merch-Required,Redact In Log - Parameter > Event Handler > 
No-match default - Parameter > Pemenuhan Handler Peristiwa: 
Do you want a physical CD or the digital album? - Parameter > Pemenuhan Pengendali Peristiwa: Payload kustom:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "Digital Album"
            }
          ]
        }
      ]
    ]
  }
- Parameter > Event Handler > 
No-input default - Parameter > Pemenuhan Handler Peristiwa: 
I couldn't understand if you mean CD or MP3. Which one do you want? - Parameter > Pemenuhan Pengendali Peristiwa: Payload kustom:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            }
          ]
        }
      ]
    ]
  }
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$page.params.merch != "null" - Transisi ke Halaman: 
Product 
Halaman Produk:
- Buat parameter berikut:
 
Parameter Displayname  | Jenis Entitas Parameter  | Pemeriksaan  | 
  | 
  | Wajib, Samarkan dalam log  | 
  | 
  | Wajib, Samarkan dalam log  | 
- Parameter artist memerlukan pemenuhan perintah awal berikut, yang akan ditampilkan saat artis tidak diketahui. 
You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help? 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Which artists?"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
- Tambahkan juga pengendali peristiwa 
No-input defaultdengan pemenuhan:I couldn't understand what you just said. Ask me which artists are signed. - Dan pengendali peristiwa 
No-match defaultdengan pemenuhan:I missed that. Please ask me which artists are signed. 
- Parameter merch juga memerlukan handler peristiwa reprompt.
 
- Tambahkan pengendali peristiwa 
No-input defaultdengan pemenuhan:I couldn't understand what you just said. Which merchandise item do you want? - Dan pengendali peristiwa 
No-match defaultdengan pemenuhan:I missed that. Which merchandise item do you want? 
Rute berikutnya akan bertransisi ke halaman konfirmasi saat artis diketahui dan pengguna memilih "Film Tur".
- Menambahkan Rute Bersyarat:
 
- Cocokkan Setiap aturan (DAN)
 - Ekspresi: 
$session.params.artist != null - Ekspresi: 
$session.params.merch = "Tour Movie" - Preset Parameter Tambahkan Parameter > 
price = 25 - Transisi ke halaman baru: 
Confirmation 
Rute berikutnya akan bertransisi ke halaman konfirmasi saat artis diketahui dan pengguna memilih "T-shirt" serta ukuran kaus dipilih.
- Menambahkan Rute Bersyarat:
 
- Ekspresi Kustom: 
$session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null - Preset Parameter Tambahkan Parameter > 
price = 25 - Transisi ke halaman: 
Confirmation 
Rute berikutnya akan bertransisi ke halaman konfirmasi saat artis diketahui dan pengguna memilih "Longsleeve" serta ukuran kemeja dipilih.
- Menambahkan Rute Bersyarat:
 
- Ekspresi Kustom: 
$session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null - Preset Parameter Tambahkan Parameter > 
price = 30 - Transisi ke halaman: 
Confirmation 
Rute berikutnya akan bertransisi ke halaman konfirmasi saat artis diketahui dan pengguna memilih "CD" serta nama album dipilih.
- Menambahkan Rute Bersyarat:
 
- Ekspresi Kustom: 
$session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null - Preset Parameter Tambahkan Parameter > 
price = 15 - Transisi ke halaman: 
Confirmation 
Rute berikutnya akan bertransisi ke halaman konfirmasi saat artis diketahui dan pengguna memilih "Album Digital" serta nama album dipilih.
- Menambahkan Rute Bersyarat:
 
- Ekspresi Kustom: 
$session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null - Preset Parameter Tambahkan Parameter > 
price = 10 - Transisi ke halaman: 
Confirmation 
Selanjutnya, kita akan membuat beberapa kondisi lanjutan dengan perintah yang mendeteksi informasi yang hilang. Rute berikutnya akan bertransisi kembali ke halaman musik saat artis diketahui dan pengguna memilih "CD" atau "Album Digital", tetapi nama album tidak dipilih.
- Menambahkan Rute Bersyarat:
 
- Ekspresi Kustom: 
$session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null - Pemenuhan: 
I would also need to know which album you would like to buy! - Transisi ke halaman: 
Music 
Rute terakhir akan bertransisi ke halaman konfirmasi saat artis diketahui dan pengguna memilih "T-shirt" atau "Longsleeve", tetapi saat ukuran t-shirt tidak dipilih.
- Tambahkan Rute bersyarat:
 
- Ekspresi Kustom: 
$session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null - Pemenuhan: 
I would also need to know which shirt size you need! - Transisi ke halaman: 
Shirt Size 
Di bagian selanjutnya dari lab ini, kita akan menggunakan pemenuhan bersyarat untuk memberikan pesan pemenuhan yang berbeda-beda, bergantung pada inputnya.
7. Respons Bersyarat
Beberapa respons akan menampilkan dialog yang berbeda berdasarkan input. Dialog akan bercabang, dan kami menyebutnya respons bersyarat. Hal ini bisa menjadi menarik, saat Anda tidak menggunakan pemenuhan webhook, yang mana respons bersyarat ditentukan di backend. Contohnya dapat terlihat seperti:
if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif
- Contoh [condition] adalah: 
$session.params.user-age >= 21. Kode ini menggunakan format yang serupa dengan kondisi dalam rute. - [response] mengambil respons teks statis
 - Respons bersyarat selalu dimulai dengan 
if - Blok 
elifdanelsebersifat opsional 
Dialogflow CX juga dapat memanfaatkan fungsi sistem bawaan. Misalnya, untuk memformat tanggal atau waktu, atau untuk menampilkan waktu saat ini ($sys.func.NOW())
Mari selesaikan alur Catalog dengan memperbaiki Halaman Confirmation dan Price.
Halaman Konfirmasi:
Sekarang kita akan membuat halaman konfirmasi. Persyaratannya adalah sebagai berikut:
- Jika merchandise adalah CD atau Album Digital. Kami akan menampilkan kolom berikut dalam konfirmasi: artist, merch, album, dan price.
 - Jika merchandise adalah T-shirt atau Longsleeve. Kami akan menampilkan kolom berikut dalam konfirmasi: artis, merchandise, ukuran, dan harga.
 - Else (dan dengan demikian jika merch adalah Tour Movie). Kami akan menampilkan kolom berikut dalam konfirmasi: artist, merch, dan price.
 
- Klik Halaman Konfirmasi.
 - Klik Edit Pemenuhan > Respons Agen > opsi Tambahkan dialog > Respons Bersyarat:
 
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
  The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
  A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
  The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
  It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
- Create the following Custom payload:
 
- Custom payload:
 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Yes, confirm"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
Next, create two intent routes:
confirm.proceed.ordertransitions to:Order ProcessFlow.decline.proceed.ordertransitions toEnd Flow
When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.
- In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:
 
Parameter  | Value  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
Notice that we have created an additional parameter called restart. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.
- Click on the Default Start Flow, Start Page, and create another Conditional Route:
 
$session.params.restart = "true"- Fulfillment: 
"Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?" - Custom payload:
 
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }
- Select the Start Page and click on the 
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day! 
Price Page:
Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:
- Delete the Agent Says entry fulfillment.
 - Create a new Conditional Response:
 
if $session.params.category = "shirts"
  A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
  A CD costs $15. The digital album on MP3 costs $10.
else
  A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif

Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:
8. Wrapping up the agent
We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.
Creating the My Order Flow
- Go to the My Order Flow, and create the following intent transitions:
 
Page (In Flow)  | Routes > Intent  | Routes > Transition To  | 
My Order Start  | 
  | My Order  | 
My Order Start  | 
  | My Order Status  | 
My Order Start  | 
  | My Order Cancellation  | 
My Order Start  | 
  | End Session  | 
My Order Start  | 
  | End Flow  | 
My Order  | 
  | My Order Status  | 
My Order  | 
  | My Order Cancellation  | 
Default Start Flow  | 
  | Flow: My Order  | 
Default Start Flow  | 
  | Flow: My Order  | 
- Let's create the following entry fulfillment for the My Order Page:
 
- Entry fulfillment: 
I can look up the status of your order, or I can cancel an order. 
- In the My Order Page create the following parameter:
 
- Displayname: 
ordernumber - Entity Type: 
@OrderNumber - Required: checked
 - Initial prompt fulfillment:  
What's the order number? For example ABCD123. - Event Handler: 
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler: 
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? 
- Create the following conditional route:
 
- Customize Expression: 
$page.params.status = "FINAL" - Fulfillment: 
And do you want to Cancel your order, or should I look up the status? 
- Click on Add state handler > Event Handlers and create the Event Handler: 
No-input default 
- Fulfillment:  
I'm sorry, what was that? Would you like me to cancel an order or look up the status? - Custom payload:
 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
- Create the Event Handler: 
No-match default 
- Fulfillment:  
Would you like me to cancel an order or lookup the status? - Custom payload:
 
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
- In the My Order Status Page create the following parameter:
 
- Displayname: 
ordernumber - Entity Type: 
@OrderNumber - Required checked
 - Initial prompt fulfillment:  
What's the order number? For example ABCD123. - Event Handler: 
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler: 
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? 
- In the My Order Status Page create the following conditional route:
 
- Customize Expression: 
$session.params.ordernumber != null - Fulfillment: 
Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items. - Add dialogue option > Text: 
Is there anything else I can help you with? 
- In the My Order Cancelation Page create the following parameter:
 
- Displayname: 
ordernumber - Entity Type: 
@OrderNumber - Required checked
 - Initial prompt fulfillment:  
What's the order number? For example ABCD123. - Event Handler: 
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler: 
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? 
- In the My Order Cancelation Page create the following conditional route:
 
- Customize Expression: 
$session.params.ordernumber != null - Fulfillment: 
Your order $session.params.ordernumber has been canceled. - Add dialogue option > Text: 
Is there anything else I can help you with? 
- Test the flow and create the following two test scenarios:
 
>"About my order"
>"ABCD123"
>"Status"
And:
>"What's the status of order DEFG222"
- Select the Start Page and click on the 
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day! - Select the Start Page and click on the 
redirect.homeintent. Create the following parameter preset:restart = true 
Default Negative intents (Fallback)
When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.
- Try in the simulator: 
I don't like Alice Googler. 
You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.
- Go to Manage > Intents and select the Default Negative Intent.
 - Add the following training phrases that will trigger the No-match event.
 
I don't like Alice GooglerI am not a fan of G's N' RosesI can't stand the music of the Google Dolls
- Hit Save and test the following sentence in the simulator: 
I am really not a fan of the Goo Fighters 
This time the No-match event was triggered, you stayed on the Start Page.
Default Fallback Messages
- Click the Default Start Flow, select the 
sys.no-input-defaultevent handler. 
The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:
- Remove all answers, and add these text dialogues:
 
I'm sorry, I didn't receive an answer. Can you say it again?I missed your answer, can you say it again?Sorry, I didn't hear anything. Can you say it again?I couldn't hear what you were saying, what was that?I'm sorry, I missed your answer. What were you trying to say?
Don't forget to click Save.
- Click the Default Start Flow, select the 
sys.no-match-defaultevent handler. 
The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.
- Remove all answers, and add these text dialogues:
 
Sorry, I didn't get that. Can you please rephrase?I'm sorry, I don't understand. Can you please rephrase?I don't understand, please rephrase.Sorry, I didn't get that. What was that?I didn't get that, can you please rephrase?
Don't forget to click Save.
- It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.
 
Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.
Creating the Order Process Flow
- Go to the Order Process Flow, and create the following intent transitions:
 
Page (In Flow)  | Routes > Intent  | Routes > Transition To  | 
Order Process Start  | 
  | End Session  | 
Order Process Start  | 
  | End Flow  | 
Order Process Start  | 
  | New Page: Shipping Details  | 
- Let's create the following entry fulfillment for the Shipping Details Page:
 
- Entry fulfillment: 
To complete your order I will first need to collect your shipping details. 
- Create the following parameters:
 
These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.
Parameter Display name  | Entity  | Required?  | Initial prompt fulfillment  | No-match default  | No-input default  | 
  | @sys.person  | Required  | 
  | 
  | 
  | 
  | @sys.person  | Required  | 
  | 
  | 
  | 
  | @sys.address  | Required  | 
  | 
  | 
  | 
  | @sys.any  | Required  | 
  | 
  | 
  | 
  | @sys.geo-city  | Required  | 
  | 
  | 
  | 
  | @sys.geo-country  | Required  | 
  | 
  | 
  | 
  | @sys.email  | Required  | 
  | 
  | 
  | 
- Create the following conditional route:
 
- Customize Expression: 
$page.params.status = "FINAL" - Transition to new Page: 
Payment Details 
- Create the following entry fulfillment.
 
Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:
- Agent Says:
 
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
- Conditional Response
 
if $session.params.merch != "Digital Album"
  Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
  Your merchandise will be shipped to:
  $session.params.firstname $session.params.lastname
  $session.params.address
  $session.params.zipcode $session.params.city
  $session.params.country
  To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
  The total costs will be: $$session.params.price.
  After purchasing the digital album, you will receive an email with the download link.
  To continue the order process please explicitly say "I confirm".
  Do you want to confirm your $session.params.artist $session.params.merch order?
endif
- Buat Rute Intent berikut
 
- Intent: 
confirm.proceed.order - Agen Berkata: 
Thank you for your order! Your merchandise will be shipped today! - Tambahkan Opsi Dialog > Teks: 
Here's the order number: ABCD123. - Tambahkan Opsi Dialog > Teks: 
Have a good day! - Transisi: 
End Session 
- Pilih Halaman Mulai, lalu klik intent 
redirect.end. Buat pemenuhan berikut:Thank you for contacting G-Records! Have a nice day! - Pilih Halaman Mulai, lalu klik intent 
redirect.home. Buat preset parameter berikut:restart = true 
Keren! Sekarang kita memiliki chatbot retailer dunia nyata yang berfungsi penuh. Di lab berikutnya, kita akan menguji seberapa baik performa agen virtual.
9. Menguji agen virtual Anda
Anda dapat menggunakan simulator bawaan untuk menguji dialog agen virtual Anda. Keuntungan menguji alur di simulator adalah Anda akan melihat ringkasan alur, halaman, parameter, dan peristiwa (DTMF) yang dikumpulkan simulator saat menelusuri alur Anda. Hal ini membuat pengujian lebih mudah daripada mengujinya secara langsung dalam integrasi, karena jenis informasi tersebut akan disembunyikan dari pengguna akhir. Anda bahkan dapat membuat kasus pengujian, menyimpan, dan menggunakan kembali kasus pengujian tersebut. Hal ini sangat masuk akal, karena saat Anda memelihara atau mengedit alur dari waktu ke waktu, Anda ingin memastikan bahwa tidak ada perubahan yang merusak pekerjaan Anda sebelumnya.
Anda juga dapat mengekspor dan mengimpor kasus pengujian yang dibuat sebelumnya, dengan menyimpan pengujian di Google Cloud Storage atau secara lokal. Mengekspor pengujian akan mendownload file blob. Untuk mempelajari simulator dan kasus pengujian lebih lanjut, lihat Dokumen Simulator / Kasus Pengujian.
Sebelum membuat beberapa kasus pengujian, mari selesaikan terlebih dahulu bagian lainnya dari agen virtual kita:
Membuat Alur Customer Care
- Buka Alur Customer Care, lalu buat transisi maksud berikut:
 
Halaman (Dalam Alur)  | Routes > Intent  | Rute > Beralih Ke  | 
Mulai Layanan Pelanggan  | 
  | Pengiriman  | 
Mulai Layanan Pelanggan  | 
  | Pengembalian Dana  | 
Mulai Layanan Pelanggan  | 
  | Menukar  | 
Mulai Layanan Pelanggan  | 
  | Akhiri Flow  | 
Mulai Layanan Pelanggan  | 
  | Akhiri Sesi  | 

- Buat pemenuhan entri berikut untuk Halaman Pengiriman:
 
Shipping physical merchandise items can take up to 2 weeks.Is there anything else I can help you with?
- Buat pemenuhan entri berikut untuk Halaman Pengembalian Dana:
 
We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- Buat pemenuhan entri berikut untuk Halaman Pertukaran:
 
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- Pilih Halaman Mulai, lalu klik intent 
redirect.end. Buat pemenuhan berikut:Thank you for contacting G-Records! Have a nice day! - Pilih Halaman Mulai, lalu klik intent 
redirect.home. Buat preset parameter berikut:restart = true 
Membuat kasus pengujian
- Klik tombol Test Agent di sisi kanan layar.
 
Saat pertama kali membuka simulator, Anda perlu memilih lingkungan agen dan alur aktif. Dalam sebagian besar kasus, Anda harus menggunakan lingkungan draf dan alur mulai default.
- Jenis: 
Hi 

- Tanya: 
Which artists are signed with your label? - Ucapkan: 
The Google Dolls - Ucapkan: 
I am interested in buying a shirt - Ucapkan: 
A t-shirt - Ucapkan: 
Medium - Sekarang, klik tombol simpan kasus pengujian. Anda dapat menemukannya di bagian atas simulator (di samping panah ulangi, dan ikon reset tempat sampah)
 

- Berikan detail berikut:
 
- Nama kasus pengujian: 
Buy Google Dolls t-shirt size M - Tag: #katalog, #kaus, #t-shirt, #TheGoogleDolls
 
- Klik Simpan
 
Mari buat kasus pengujian lainnya.
- Pertama, hapus percakapan saat ini dengan mengklik ikon Reset (tempat sampah).
 - Buat kasus pengujian berikut:
 
Beli kaos Alice Googler:
>"Buy the Alice Googler t-shirt."
>"XL"
- Nama kasus pengujian: 
Buy the Alice Googler t-shirt - Tag: 
#catalog, #shirts, #t-shirt, #AliceGoogler 
Beli kaus ukuran M: (Perhatikan bahwa nama Artis belum disebutkan, tetapi Anda ingin melewati halaman ringkasan band, ringkasan produk, kaus, dan ukuran kaus)
>"Buy a t-shirt size M"
>"The Google Fighters"
- Nama kasus pengujian: 
Buy a t-shirt size M - Tag: 
#catalog, #shirts, #t-shirt, #TheGoogleFighters - Deskripsi: (Perhatikan bahwa nama Artis belum disebutkan, tetapi Anda ingin melewati halaman ringkasan band, ringkasan produk, kaus, dan ukuran kaus)
 
Beli Musik G's N' Roses (Perhatikan bahwa tindakan ini akan melewati halaman ringkasan band dan ringkasan produk)
>"Purchase music of G's N' Roses"
>"Live"
>"CD"
- Nama kasus pengujian: 
Purchase music of G's N' Roses - Tag: 
#catalog, #music, #CD, #GsNRoses, #live - Deskripsi: (Perhatikan bahwa tindakan ini akan melewati halaman ringkasan grup dan ringkasan produk)
 
Periksa informasi harga:
>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
- Nama kasus pengujian: 
Price info - Tag: 
#catalog, #music, #tourmovie, #shirts - Deskripsi: Menguji info harga di berbagai titik dalam dialog
 
Menguji kasus uji yang direkam sebelumnya
- Pilih Kelola > Test Case di menu utama Dialogflow di sebelah kiri.
 - Pilih semua kasus pengujian dan tekan tombol Jalankan di atas tabel.
 
Dialogflow CX akan menjalankan semua kasus pengujian yang dipilih terhadap rekaman yang disimpan sebagai "Kasus Pengujian Emas". Jika hasilnya sama dengan cara Anda menyimpannya, pengujian akan lulus. - Jika ada perubahan dalam alur seperti Halaman yang tidak dikonfigurasi dengan benar, atau maksud (intent) yang mengarahkan Anda ke halaman yang salah, maka pengujian akan gagal.

- Di simulator, ajukan pertanyaan berikut: 
How long will shipping take? - Catat hasilnya, dan simpan kasus pengujian sebagai 
Shippingdengan tag:#shipping. - Buka panel Kelola > Kasus Pengujian, lalu tekan tombol Jalankan di kanan atas petak, untuk menjalankan kasus pengujian 
Shippingsaja. 
Pengujian ini akan berhasil.
- Kembali ke Alur Customer Care, pilih Halaman Mulai, lalu klik header Rute.
 
Tindakan ini akan menampilkan layar dengan petak yang menampilkan semua rute.
- Hapus 
redirect.shipping.info route - Buka panel Kelola > Kasus Pengujian, lalu tekan tombol Jalankan di kanan atas petak, untuk menjalankan kasus pengujian 
Shippingsaja. 
Pengujian ini akan gagal.
- Anda dapat mengklik pengujian yang gagal untuk melihat detail kegagalan.
 
Dalam hal ini, pengujian gagal dengan pesan error di bawah:
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
Alasannya adalah karena halaman tersebut tidak ada lagi dalam alur. Kami mengharapkan Halaman Shipping, tetapi kami tidak pernah keluar dari Halaman Start. (atau pengguna akhir Anda akan menerima pesan pengganti.)
Dengan kata lain, ini adalah permintaan yang terlewat, hasil Pengujian Negatif Palsu. Pengujian gagal. Kami mengharapkan Halaman Pengiriman, tetapi tidak ada yang terjadi, atau pesan penggantian ditampilkan.
- Kembali ke Alur Layanan Pelanggan, dan tambahkan 
redirect.shipping.infosebagai rute maksud, ke Halaman Mulai. Jangan lupa untuk beralih ke Halaman Pengiriman dan klik Simpan. - Di simulator, rekam kasus pengujian berikut: 
I want to swap my item, simpan kasus pengujian ini sebagaiSwapping#swapping. - Buka Manage >Intents > redirect.refund.info dan tambahkan frasa pelatihan berikut: 
I want to swap this item for a refund 
Tanpa frasa pelatihan tersebut, saat pengguna meminta untuk menukar item agar mendapatkan pengembalian dana, maksudnya akan cocok dengan maksud redirect.swapping.info, tetapi kita tidak ingin memberikan informasi tentang penukaran item, kita ingin memberikan informasi tentang pengembalian dana.
- Buat kasus pengujian standar berikut: 
I want to swap this item for a refunddi simulator, lalu simpan kasus pengujian ini sebagaiSwap for Refund#refund - Kembali ke maksud Manage >Intents > redirect.refund.info, lalu hapus baris 
I want to swap this item for a refund. - Kembali ke Kelola > Kasus Pengujian, pilih kasus pengujian Tukar dengan Pengembalian Dana, lalu Jalankan.
 
Pengujian terbaru Anda gagal, dengan pesan error di bawah:
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
 Page: Page mismatch:
Expected: Refund
Actual: Swapping
Dengan kata lain, ini adalah permintaan yang salah dipahami, hasil pengujian Positif Palsu. Pengujian gagal. Kami mengharapkan Halaman Pengembalian Dana, tetapi Halaman Penukaran menjadi aktif.
Cakupan
Di Dialogflow CX, cakupan pengujian adalah ukuran yang digunakan untuk mendeskripsikan tingkat pelaksanaan dialog agen virtual (Halaman dan Maksud) saat rangkaian pengujian tertentu dijalankan. Agen virtual dengan cakupan pengujian yang tinggi, yang diukur sebagai persentase, telah menjalankan lebih banyak dialognya selama pengujian, yang menunjukkan bahwa agen tersebut memiliki peluang lebih rendah untuk berisi bug yang tidak terdeteksi (seperti permintaan yang salah dipahami) dibandingkan dengan agen virtual dengan cakupan pengujian yang rendah.
- Untuk melihat laporan cakupan pengujian untuk semua kasus pengujian, klik Cakupan.
 - Klik tab Transisi.
 
Tindakan ini akan menampilkan cakupan pengujian untuk semua transisi halaman.

- Klik tab Intents.
 
Tindakan ini akan menampilkan cakupan pengujian untuk semua maksud.

Selamat, sekarang Anda telah membuat dan menguji contoh bot retailer lengkap di dunia nyata. Buka halaman lab berikutnya untuk membaca kesimpulan dan menemukan beberapa referensi berguna.
10. Kesimpulan
Dialogflow CX adalah Platform AI Percakapan (CAIP) untuk membuat agen virtual seperti bot chat atau suara. Dialogflow CX memungkinkan tim Anda mempercepat pembuatan pengalaman percakapan tingkat perusahaan melalui builder bot visual, intent yang dapat digunakan kembali, dan kemampuan untuk menangani percakapan multi-turn.
Dalam codelab ini, Anda telah mempelajari cara membuat agen virtual retail dunia nyata. Kami membahas konsep berikut:
- Flows
 - Parameter, Entity Kustom & Sistem
 - Halaman
 - State Handler seperti Rute Maksud dan Rute Kondisi
 - Pesan Pemenuhan Statis dan Respons Bersyarat
 - Intent pengganti
 - Simulator, Kasus Pengujian, dan Cakupan
 

Referensi
Untuk mempelajari lebih lanjut Dialogflow CX, lihat blog dan dokumentasi berikut.