Membuat agen RBM yang didukung Dialogflow (Lanjutan)

Dalam codelab ini, Anda akan mempelajari cara menggunakan Dialogflow untuk membuat antarmuka percakapan guna memberdayakan agen RBM.

Apa yang akan Anda buat dalam codelab ini?

  • Agen Dialogflow yang mendukung percakapan agen RBM
  • Antarmuka percakapan untuk toko sepeda fiktif yang memungkinkan pengguna mengetahui informasi tentang toko sepeda dan menetapkan janji temu untuk memperbaiki atau memperbaiki sepeda mereka

Yang dipelajari

  • Cara menggunakan tiga konstruksi utama Dialogflow (intent, entity, dan konteks) untuk membuat antarmuka percakapan
  • Cara menghubungkan antarmuka percakapan ke layanan dan API Anda sendiri menggunakan fulfillment Dialogflow dan editor langsung (dengan teknologi Cloud Functions for Firebase)
  • Cara membuat jenis respons RBM dari Dialogflow guna menciptakan pengalaman RBM yang kaya bagi pengguna

Yang dibutuhkan

  • Akun Google

Membuat dan mengkueri agen pertama

Durasi: 10.00

Membuat agen Dialogflow pertama Anda

Untuk membuat agen Dialogflow:

  1. Buka tab baru dan login ke Dialogflow.
  2. Klik Buat agen di navigasi sebelah kiri.

  3. Masukkan "CodelabRBMBikeShop" untuk nama agen Anda, "Inggris" sebagai bahasa default, dan tetapkan zona waktu default ke zona waktu Anda. Lalu klik Buat.

Konsol Dialogflow

Sekarang Anda akan melihat konsol Dialogflow. Jika Anda bekerja di layar yang lebih kecil dan navigasi sebelah kiri disembunyikan, klik tombol navigasi di pojok kiri atas. Tombol setelan akan mengarahkan Anda ke setelan agen saat ini.

Bagian tengah halaman menampilkan daftar intent untuk agen. Secara default, agen Dialogflow dimulai dengan dua intent. Agen Anda cocok dengan Intent Penggantian Default jika tidak memahami ucapan pengguna. Default Welcome Intent menyapa pengguna Anda. Anda dapat mengubah intent ini untuk menyesuaikan pengalaman.

Di sebelah kanan adalah simulator Dialogflow. Hal ini memungkinkan Anda mencoba agen dengan mengucapkan atau mengetik pesan.

Membuat kueri terkait agen Anda

Agen Dialogflow sebaiknya dideskripsikan sebagai modul NLU (Natural Language Definition). Ini dapat disertakan dalam aplikasi, produk, atau layanan Anda untuk mengubah permintaan pengguna alami menjadi data yang dapat ditindaklanjuti.

Saatnya mencoba agen Anda. Pada simulator di sebelah kanan, klik kolom teks yang bertuliskan Cobalah sekarang, ketik "Hi", lalu tekan Enter.

Dialogflow mengidentifikasi kueri, cocok dengan Default Welcome Intent, dan merespons dengan salam generik. Ini berfungsi karena Dialogflow secara otomatis melatih Intent Selamat Datang Default dengan beberapa contoh salam.

Membuat agen RBM

Login ke Business Communications Developer Console, lalu klik Create agent.

Di kolom Nama, masukkan "Toko Sepeda Nama Anda" (seperti "Agen Sepeda Sean"), pilih Region, lalu klik Buat agen.

Menghubungkan agen RBM ke Dialogflow

Setelah agen RBM dibuat, klik agen untuk melihat halaman Ringkasan agen. Klik link Integrasi di navigasi sebelah kiri.

Secara default, agen RBM menggunakan Google Cloud Pub/Sub untuk menangani pesan pengguna. Untuk menghubungkan agen RBM ke agen Dialogflow yang Anda buat sebelumnya, klik integrasi Dialogflow.

Pada dialog, klik Connect existing model. Ikuti petunjuk untuk memberikan izin kepada agen RBM Anda untuk memanggil agen Dialogflow, lalu klik Next.

Terakhir, Anda harus memberikan project ID Dialogflow. Di tab browser yang berbeda dengan Business Communications Developer Console, buka Dialogflow, lalu buka agen CodelabRBMBikeShop yang Anda buat sebelumnya. Klik ikon roda gigi di dekat nama project di navigasi sebelah kiri.

Dengan mengklik ini, Anda akan diarahkan ke setelan model. Di bagian GOOGLE PROJECT, temukan dan salin Project ID.

Kembali ke tab Anda dengan Konsol Business Communications Developer yang terbuka, tempel project ID ke dalam dialog, lalu klik Start integration.

Proses ini membutuhkan waktu sekitar dua menit. Setelah selesai, Anda akan melihat opsi integrasi Dialogflow ditandai dan link Lihat agen tersedia.

Semua pesan ke dan dari agen Anda kini ditangani oleh agen Dialogflow CodelabRBMBikeShop.

Mengundang perangkat pengujian dan mengirim pesan

Sebelum menyelami Dialogflow, mari kita siapkan perangkat pengujian Anda. Jika Anda belum memiliki perangkat yang dapat menerima pesan RBM, ikuti panduan ini untuk menyiapkan perangkat Anda.

Dari Konsol Komunikasi Bisnis, klik Perangkat di navigasi sebelah kiri. Dalam formulir, masukkan nomor telepon lengkap perangkat Anda dalam format E.164 (misalnya, +12223334444) dan klik Tambahkan.

Di perangkat, Anda menerima undangan pengujian. Ketuk Jadikan saya sebagai penguji.

Di browser, temukan perangkat Anda dalam daftar Perangkat dan kirim pesan pengujian ke perangkat Anda. Jika menerima pesan di perangkat dari agen RBM, Anda siap melanjutkan codelab ini.

Membuat intent sambutan

Biasanya dengan agen RBM yang didukung Dialogflow, untuk memulai percakapan, Anda membuat panggilan API yang menentukan nomor telepon pengguna dan intent Dialogflow yang memulai percakapan (biasanya intent selamat datang agen). Untuk codelab ini, kita akan melewati langkah ini dan sebagai gantinya, menggunakan thread percakapan yang telah kita buat pada langkah sebelumnya dengan perangkat uji dari Business Communications Developer Console. Namun, jika Anda ingin membaca selengkapnya tentang fitur API ini, lihat panduan ini.

Mari kita mulai dengan menambahkan respons RBM ke Intent Selamat Datang Default sehingga Dialogflow dapat menggunakannya dengan agen RBM Anda. Pertama, buka tab browser yang membuka Dialogflow. Klik Default Welcome Intent, scroll ke bawah ke bagian Respons, klik + di daftar jenis respons, lalu pilih RCS Business Messaging (RBM).

Klik Tambahkan Respons, lalu pilih Respons Sederhana. Di kolom teks untuk Simple Response, masukkan "Hai, selamat datang di toko sepeda Hogarth'. Ada yang bisa saya bantu? (ganti Hogarth dengan nama Anda), lalu klik Simpan.

Memulai percakapan

Setelah mengonfigurasi intent selamat datang, kembali ke perangkat pengujian Anda dan kirim pesan "Hi". Pesan ini memicu Default Welcome Intent, dan Anda akan melihat tampilan seperti gambar di bawah.

Perbarui intent selamat datang Anda

Setelah Anda mengirimkan Dialogflow pesan sederhana, mari kita perbarui pesan agar sedikit lebih berguna. Kami tidak hanya ingin menyapa pengguna, tetapi juga memandu tindakan yang mereka lakukan.

Agen yang kami buat perlu mendukung dua fitur utama: memeriksa jam buka bisnis, dan menjadwalkan janji temu. Mari kita ganti pesan selamat datang respons sederhana dengan kartu yang memberikan balasan yang disarankan untuk melakukan interaksi ini.

Di bagian Default Welcome Intent, Responses, pilih tab RCS Business Messaging (RBM). Hapus Respons Sederhana yang ada dengan mengklik ikon tempat sampah. Selanjutnya, klik Add Responses, lalu pilih standalone Rich Card.

Dalam formulir Kartu Informasi Mandiri, masukkan informasi berikut:

  • Judul Kartu: Halo, selamat datang di toko sepeda Hogarth.
  • Deskripsi Kartu: Ada yang bisa saya bantu? Pilih dari opsi di bawah:
  • Pilih Orientasi Kartu: Vertikal
  • URL Gambar/Video: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Pilih Tinggi Media: Sedang

Klik Tambahkan Saran, lalu masukkan info berikut:

  • Teks saran: Jam berapa bukanya?
  • Postback Saran: reply_hours

Tambahkan saran lain dengan mengklik Tambahkan Saran, lalu masukkan info berikut:

  • Teks saran: Buat janji temu
  • Postback Saran: reply_appointment

Klik Simpan.

Cobalah.

Setelah model mengucapkan "Pelatihan agen selesai", kembali ke perangkat Anda dan kirim pesan "Halo" ke agen Anda. Sekarang Anda akan melihat Kartu Rich mandiri yang baru saja Anda desain.

Coba ketuk Jam berapa bukanya?. Perhatikan bahwa Default Fallback Intent dipicu. Hal ini dikarenakan agen Dialogflow Anda tidak tahu cara menangani data postback yang Anda konfigurasikan untuk saran ini, "reply_hours".

Mari kita perbaiki.

Membuat intent Hours

Dialogflow menggunakan intent untuk mengategorikan niat pengguna. Intent memiliki Frasa Pelatihan, yang merupakan contoh hal yang mungkin dikatakan pengguna kepada agen Anda. Misalnya, seseorang yang ingin mengetahui jam buka toko sepeda kami mungkin bertanya, "Kapan Anda membuka|quot;, "Berapa jam buka Anda" di akhir jam;

Semua kueri ini bersifat unik, tetapi memiliki tujuan yang sama: mendapatkan informasi saat toko sepeda kami buka.

Untuk mencakup kueri ini, buat intent "Jam"

  1. Di navigasi sebelah kiri, klik + di samping Intent.
  2. Untuk Intent name, masukkan "Hours".
  3. Di bagian Frasa Pelatihan, klik Tambahkan ekspresi pengguna, lalu masukkan frasa berikut, tekan enter setelah setiap entri:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours.

    Frasa pelatihan terakhir ini digunakan untuk memetakan data postback yang Anda konfigurasikan di bagian sebelumnya dengan intent ini.

  4. Di bagian Respons, klik +, lalu pilih RCS Business Messaging (RBM).

  5. Klik Tambahkan Respons dan pilih Respons Sederhana.

  6. Di kolom teks untuk Tanggapan Sederhana, masukkan "Kami buka setiap hari kerja mulai pukul 9 pagi hingga 5.30 sore."

  7. Klik Simpan.

Cobalah.

Sekarang coba tanyakan jam buka agen Anda. Di perangkat, pada percakapan untuk agen RBM Anda, masukkan "Kapan Anda membuka|quot; dan kirimkan pesan tersebut kepada agen Anda.

Agen Anda sekarang merespons kueri dengan benar. Perhatikan bahwa meskipun kueri Anda sedikit berbeda dari frasa pelatihan ("Kapan Anda membuka|quot; versus "Kapan Anda membuka|quot;), Dialogflow masih mencocokkan kueri dengan intent yang tepat. Anda juga dapat mencoba mengetuk Jam berapa? di kartu informasi.

Dialogflow menggunakan frasa pelatihan sebagai contoh untuk model machine learning agar cocok dengan kueri pengguna ke intent yang benar. Model machine learning memeriksa kueri terhadap setiap intent dalam agen, memberi setiap intent skor, dan intent dengan skor tertinggi akan dicocokkan. Jika intent penskoran tertinggi memiliki skor yang sangat rendah, intent fallback akan dicocokkan.

Menambahkan pemenuhan pesanan

Meskipun berhasil, agen yang kita buat berperilaku sedikit tidak wajar. Saat pengguna menanyakan sesuatu seperti "Apakah Anda tetap bukaquot;, agen akan merespons dengan "Kami buka setiap hari kerja mulai pukul 09.00 hingga 17.30". Itu akan jauh lebih alami—dan membantu—jika agen memberi tahu kami secara langsung apakah toko sedang buka.

Untuk melakukannya, agen kami perlu memeriksa apakah toko saat ini buka dan menghasilkan respons yang berbeda. Di Dialogflow, jenis logika kompleks ini harus diimplementasikan di webhook fulfillment.

Webhook fulfillment adalah server HTTP yang dipanggil oleh Dialogflow dengan informasi tentang status percakapan saat ini. Kode pemenuhan melakukan setiap tindakan yang diperlukan, lalu menghasilkan respons yang ditampilkan Dialogflow kepada pengguna.

Sekarang kita akan membahas proses deployment fulfillment webhook yang membuat agen kita merespons dengan lebih bermanfaat.

Penyiapan: Men-deploy dan mengaktifkan fulfillment

Dialogflow memiliki editor Cloud Functions for Firebase bawaan yang memungkinkan Anda menulis dan men-deploy kode JavaScript yang akan menangani fulfillment Anda.

Di navigasi kiri Dialogflow, klik Fulfillment untuk membuka halaman pemenuhan. Klik tombol di samping Inline Editor untuk mengaktifkan editor Cloud Functions for Firebase.

Anda akan melihat editor berisi dua file: "index.js", yang berisi kode utama untuk fulfillment, dan "package.json", yang memerinci dependensi yang diperlukan.

Sekarang kita akan mengimpor beberapa kode contoh yang akan mendukung fulfillment Anda.

Salin dan tempel teks file ini ke "index.js" dengan mengganti semua kontennya saat ini:

https://storage.googleapis.com/df-rbm-codelab/index.js

Sekarang, scroll ke bagian bawah halaman dan klik DEPLOY. Setelah sekitar satu menit, kode Anda akan di-deploy ke Cloud Functions for Firebase.

Setelah fungsi di-deploy, Anda akan melihat tanggal dan waktu deployment di bagian bawah halaman:

Lihat kode pemenuhan pesanan. Fungsi hoursHandler memanggil currentlyOpen untuk menentukan apakah toko saat ini buka, dan menambahkan respons RBM yang berbeda, bergantung pada kondisi.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

Baris intentMap.set('Hours', hoursHandler); memberi tahu library pemenuhan bahwa fungsi hoursHandler harus dijalankan saat intent "Jam" cocok. Namun, kita juga perlu memberi tahu Dialogflow untuk mengaktifkan fulfillment untuk intent "Jam" .

Di navigasi sebelah kiri, klik Intent dan buka intent "Jam". Buka bagian Fulfillment di bawah, lalu pilih Enable webhook call for this intent, agar opsi tersebut diaktifkan.

Setelah menyimpan intent, Anda dapat mencobanya. Pada simulator di sebelah kanan, masukkan "Apakah Anda membuka«quot; Jika Anda mengklik Info Diagnostik dan memeriksa respons API, Anda akan melihat respons pemenuhan. Perhatikan bahwa zona waktu yang digunakan oleh server Cloud Functions for Firebase akan UTC, sehingga responsnya mungkin tidak benar untuk waktu lokal Anda saat ini.

Jika ada error dalam fulfillment Anda, Dialogflow akan menggunakan respons apa pun yang ditentukan di bagian Respons di halaman Intent, sehingga agen Anda dapat pulih dengan baik.

Selanjutnya, kita akan menggunakan entitas untuk mengekstrak bagian yang relevan dari kueri pengguna. Hal ini memungkinkan pengguna menyiapkan janji temu dengan toko sepeda kami untuk memperbaiki atau memperbaiki sepeda mereka.

Mengekstrak data dengan entity

Durasi: 12.00

Di bagian ini, kita akan membahas cara mengekstrak data dari kueri pengguna agar pengguna dapat membuat janji temu dengan bengkel sepeda untuk memperbaiki atau memperbaiki sepedanya.

Menambahkan parameter ke intent

Parameter adalah kata atau frasa yang relevan dalam kueri pengguna yang diekstrak oleh Dialogflow, sehingga agen Anda dapat memberikan respons yang tepat. Anda akan membuat intent baru dengan parameter dan mempelajari cara menyertakan nilainya dalam respons.

  1. Klik + di samping Intent di navigasi sebelah kiri untuk membuat intent baru.
  2. Untuk nama intent, masukkan "Buat Janji Temu" di bagian atas halaman.
  3. Tambahkan berikut ini sebagai Frasa Pelatihan:
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed, I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

Dialogflow secara otomatis mendeteksi parameter yang diketahui dalam Frasa Pelatihan Anda dan membuatnya untuk Anda.

Di bawah Frasa Pelatihan, Dialogflow secara otomatis mengisi tabel parameter dengan informasi yang dikumpulkan:

  • parameter opsional (tidak wajib)
  • bernama date dan time
  • sesuai dengan jenis entitas sistem @sys.date dan @sys.time**
  • memiliki nilai $date dan $time
  • bukan daftar

Menggunakan data parameter

Anda dapat menggunakan nilai parameter dalam respons. Dalam hal ini, Anda dapat menggunakan $date dan $time dalam respons dan keduanya akan diganti dengan tanggal dan waktu yang ditentukan dalam kueri untuk agen Anda.

Di Responses, tambahkan tab RCS Business Messaging, tambahkan hal berikut ke Simple Response, lalu klik Save:

Great! I've set up your appointment for $date at $time.  See you then!

Cobalah.

Sekarang, ajukan pertanyaan kepada agen Anda dengan "Dapatkah saya membuat janji untuk besok jam 2 siang|quot; di simulator di panel kanan.

Anda dapat melihat di bagian bawah output simulator bahwa Dialogflow telah mengekstrak parameter dengan benar "besok" dan "2pm" dari kueri dan mengurainya dengan benar sebagai tanggal dan waktu. Sekarang, coba hal yang sama dari perangkat pengujian Anda dan lihat bagaimana respons menyertakan tanggal dan waktu yang diurai dengan benar.

Membuat parameter diperlukan

Untuk toko sepeda, kami perlu mengetahui nilai tanggal dan waktu sebelum kami dapat menjadwalkan janji temu. Secara default, semua parameter Dialogflow bersifat opsional. Untuk membuatnya wajib, kita harus mencentang kotak di samping setiap parameter yang ingin dibuat. Centang kotak di samping setiap parameter di intent "Buat Janji Temu"

Setelah masing-masing parameter diperlukan, kita harus membuat permintaan untuk setiap parameter. Permintaan akan meminta pengguna memberikan nilai untuk parameter apa pun yang tidak disediakan saat pengguna menunjukkan niatnya (dalam hal ini, untuk membuat janji temu). Klik Tentukan permintaan untuk membuat permintaan parameter dan memasukkan perintah berikut untuk setiap parameter:

Parameter Perintah
date Anda mau masuk hari apa?
waktu Jam berapa Anda bisa melakukannya?

Setelah memasukkan perintah, klik Simpan.

Cobalah.

Di perangkat, ketuk saran Buat janji temu atau ketik "Saya ingin memperbaiki sepeda." Anda mendapatkan tanggapan "Pada hari apa Anda ingin masuk&; Tentukan tanggal ("besok") dan Anda akan mendapatkan respons yang menanyakan waktu pada tanggal tersebut. Tanggapi hal tersebut dan Anda akan melihat bahwa janji temu telah ditetapkan.

Kueri yang berisi beberapa informasi dalam permintaan awal (yaitu "Saya ingin menyiapkan janji temu untuk besok") mengisi parameter yang benar (tanggal), melewati permintaan tanggal ("Hari apa Anda ingin masuk|quot;), dan berpindah ke permintaan waktu ("Pukul berapa yang berhasil untuk Anda|quot;).

Kami baru saja menggunakan entitas dan parameter Dialogflow untuk membuat percakapan yang benar-benar unik tanpa kode dan penyiapan yang sangat sedikit. Selanjutnya, kita akan membahas cara menggunakan pemenuhan untuk membantu memandu jawaban pengguna terhadap pertanyaan seperti "Tanggal berapa Anda ingin menjadwalkan janji temu|quot;.

Penyiapan: Mengaktifkan pemenuhan pesanan

Di navigasi sebelah kiri, klik Intent dan buka intent "Buat Janji Temu& . Buka Fulfillment, pilih Enable webhook call for this intent dan Aktifkan webhook call untuk pengisian slot agar keduanya aktif, lalu klik Save.

Jika keduanya diaktifkan, saat intent ini dipicu, Dialogflow akan menggunakan fulfillment untuk menghasilkan respons bagi parameter yang diperlukan, jika diperlukan, serta respons RBM untuk intent tersebut.

Menerapkan fulfillment

Di navigasi kiri Dialogflow, klik Fulfillment untuk membuka halaman pemenuhan. Scroll ke bawah ke baris

intentMap.set('Hours', hoursHandler);

Dan tambahkan baris berikut sebagai baris berikutnya:

intentMap.set('Make Appointment', makeAppointment);

Fungsi ini akan memberi tahu library fulfillment bahwa fungsi makeAppointment harus dijalankan saat intent "Buat Janji Temu" cocok.

Selanjutnya, salin kode di bawah dan tempelkan di bawah fungsi currentlyOpen. Kedua fungsi tersebut, getSuggestedTimes dan getSuggestedDates, membuat daftar chip yang berguna untuk memfasilitasi respons pengguna.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

Berikutnya, di bawah hoursHandler, salin dan tempel kode di bawah, lalu klik Deploy.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Luangkan waktu untuk memeriksa kode. Perhatikan bahwa parameter yang diperlukan sedang diperiksa untuk nilai dan jika tidak ditetapkan, akan meminta pengguna dengan pesan dan kumpulan saran yang sesuai.

Cobalah.

Di perangkat, ketuk saran Buat janji temu atau ketik "Saya ingin memperbaiki sepeda." Anda akan mendapatkan tanggapan "Hari apa Anda ingin masuk{7/}quot; bersama dengan beberapa saran bermanfaat: "Besok", "Seminggu dari sekarang", dan "Dua minggu dari sekarang". Tentukan tanggal ("besok") dan Anda akan mendapatkan kembali respons yang meminta waktu. Tanggapi hal tersebut dan Anda akan melihat bahwa janji temu telah ditetapkan.

Mengelola status dengan konteks

Durasi: 7.00

Menambahkan konteks ke status percakapan

Setelah pengguna berhasil menyiapkan janji temu, kami mungkin ingin mengumpulkan beberapa informasi lebih lanjut dari mereka. Bayangkan toko sepeda kami menawarkan dua jenis janji temu: perbaikan, atau penyetelan. Kami ingin mengetahui manakah dari kebutuhan pengguna tersebut.

Untuk memulai, mari perbarui respons untuk "Buat Janji Temu" untuk menanyakan jenis janji temu yang diinginkan oleh pengguna. Ganti respons sukses di fungsi pemenuhan makeAppointment Anda dengan teks di bawah, lalu klik Deploy.

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

Untuk mengumpulkan jawaban pertanyaan ini, kita perlu membuat intent lain. Namun, sebaiknya intent baru ini hanya cocok setelah pertanyaan ini dijawab. Untuk menegakkannya, kita dapat mendefinisikannya sebagai intent tindak lanjut.

Intent tindak lanjut adalah intent yang hanya dapat dicocokkan setelah intent "induk" , (dalam hal ini intent "Buat Janji Temu") telah dicocokkan. Klik Intent di navigasi sebelah kiri (jika menu disembunyikan, klik tombol menu ☰ di pojok kiri atas). Kemudian, arahkan mouse ke &intent "Buat" lalu klik Tambahkan intent tindak lanjut , yang muncul di sebelah kanan nama intent:

Selanjutnya, klik kustom dari menu dropdown.

Dialogflow secara otomatis memberi nama intent lanjutan "Buat Janji Temu - kustom," dan panah menunjukkan hubungan antara intent tersebut.

Intent tindak lanjut hanya dapat dicocokkan setelah intent induk dicocokkan. Karena intent ini hanya akan dicocokkan setelah "Buat Janji Temu", kita dapat berasumsi bahwa pengguna baru saja diberi pertanyaan "Apakah Anda perlu melakukan perbaikan atau hanya sekadar memperbarui*.

Untuk menangkap jawaban pertanyaan ini, pertama-tama kita harus menentukan beberapa entitas.

Membuat entity pertama Anda

Dialogflow memungkinkan Anda menentukan entity developer, yang fungsinya mirip dengan entity sistem Dialogflow. Mari kita mulai dengan membuat jenis entitas. Karena kita ingin pengguna dapat memilih jenis janji temu yang ingin dibuat dengan toko kami, mari kita panggil jenis entitas AppointmentType. Kita akan menambahkan dua entity dalam jenis entity AppointmentType untuk dua jenis janji temu yang berbeda: service dan fix.

Untuk membuat jenis entitas:

  1. Klik + di samping Entity di navigasi sebelah kiri.
  2. Untuk nama jenis entitas, masukkan "AppointmentType".
  3. Klik kolom teks, lalu tambahkan entri berikut:
    • layanan
    • perbaiki
  4. Saat Anda memasukkan entri, menekan tab akan memindahkan kursor ke kolom sinonim. Tambahkan sinonim berikut untuk setiap entri. Pastikan untuk menambahkan setiap kata secara individual, bukan menyalin dan menempelkan seluruh string:
Masuk Sinonim
layanan
  • layanan
  • merombak
  • pemeliharaan
  • penyesuaian
  • CANNOT TRANSLATE
perbaiki
  • perbaiki
  • reparasi
  • mend
  • rusak
  • ban kempes
  • tetap
  1. Klik Simpan.

Setiap jenis entitas harus memiliki hal berikut:

  • nama untuk menentukan kategori ("AppointmentType")
  • satu atau beberapa entri ("service", "fix")
  • satu atau beberapa sinonim ("maintenance", "tune up", dll)

Dialogflow menangani hal-hal sederhana seperti bentuk jamak dan huruf besar, tetapi pastikan untuk menambahkan semua kemungkinan sinonim. Semakin banyak jumlah yang Anda tambahkan, semakin baik agen Anda dapat menentukan entity.

Menambahkan entitas baru

Setelah menentukan jenis entitas untuk janji temu, kita dapat menggunakannya dalam Frasa pelatihan dalam intent "Buat Janji Temu - kustom"

  1. Klik Intent di navigasi sebelah kiri, lalu klik tanda panah di samping intent "Make Appointment" untuk menampilkan intent tindak lanjutnya. Klik intent "Buat Janji Temu - kustom".
  2. Tambahkan hal berikut sebagai Frasa pelatihan:

    • Bisa tolong servis sepeda saya?
    • Saya perlu perbaikan.

  3. Anda akan melihat jenis entitas janji temu yang otomatis dianotasikan dalam Frasa pelatihan yang Anda masukkan. Tindakan ini akan menambahkan parameter AppointmentType ke tabel, yang berada di bawah bagian Frasa pelatihan. Klik kotak centang untuk menandai parameter ini sebagai REQUIRED.

  4. Klik Tentukan perintah dan masukkan "Kami dapat memperbaiki atau memperbaiki sepeda Anda. Mau yang mana;

  5. Di Responses, ubah respons menjadi "Oke, kita akan menjadwalkan $AppointmentType." lalu klik Save.

Cobalah.

Di perangkat, ketuk saran Buat janji temu atau ketik "Saya ingin memperbaiki sepeda." Anda akan mendapatkan tanggapan "Hari apa Anda ingin masuk{7/}quot; bersama dengan beberapa saran bermanfaat: "Besok", "Seminggu dari sekarang", dan "Dua minggu dari sekarang". Tentukan tanggal ("besok") dan Anda akan mendapatkan kembali respons yang meminta waktu pada tanggal tersebut.

Pilih waktu, dan Anda akan melihat respons baru yang dibuat untuk mengetahui apakah ini untuk layanan atau penyesuaian.

Berikutnya, masukkan "Saya perlu perbaikan". Anda akan melihat respons "Oke, kami akan menjadwalkan perbaikan." yang menunjukkan bahwa Dialogflow mengekstrak AppointmentType yang benar sebagai entity.

Saat ini, respons untuk intent ini ("Oke, kami akan menjadwalkan perbaikan.") cukup tidak membantu. Akan sangat menyenangkan jika respons tersebut mengonfirmasi tanggal dan waktu janji temu dijadwalkan. Untuk melakukannya, kita memerlukan tanggal dan waktu, tetapi parameter tanggal dan waktu hanya ada di intent "Buat Janji Temu" dan bukan dalam intent "Buat Janji Temu - kustom".

Intent dan konteks

Untuk merespons dengan parameter yang dikumpulkan dari intent "Buat Janji Temu", Anda perlu mengetahui cara kerja intent tindak lanjut. Intent tindak lanjut menggunakan konteks untuk melacak apakah intent induk telah dipicu. Jika Anda memeriksa intent "Buat Janji Temu", Anda akan melihat "Buat Janji Temu-mengikuti" tercantum sebagai konteks Output, diawali dengan angka 2:

Setelah intent "Buat Janji Temu" cocok, Dialogflow melampirkan konteks "Membuat Janji Temu" ke percakapan selama dua belokan. Oleh karena itu, jika pengguna merespons pertanyaan ("Apakah Anda perlu perbaikan atau hanya perlu penyesuaian{0/}); konteks "Buat Janji Temu-melanjutkan" akan aktif. Intent apa pun yang memiliki konteks Input yang sama sangat disukai saat Dialogflow cocok dengan intent.

Klik Intent di navigasi sebelah kiri, lalu klik intent "Buat Janji Temu - kustom".

Anda dapat melihat bahwa intent memiliki konteks input yang sama ("Buat Janji Temu- ikuti") seperti konteks output dari "Buat Janji Temu". Oleh karena itu, "Buat Janji Temu - khusus" hanya cocok setelah "Buat Janji Temu" yang cocok.

Konteks dan parameter

Konteks menyimpan parameter value, yang berarti Anda dapat mengakses nilai parameter yang ditentukan dalam intent "Buat Janji Temu" dalam intent lain seperti "Buat Janji Temu - kustom".

Tambahkan respons berikut ke intent "Buat Janji Temu - kustom" dan klik Simpan: "Oke, kami akan menjadwalkan $AppointmentType, #MakeAppointment- followup.date, di #MakeAppointment-followup.time. Sampai jumpa."

Sekarang Anda dapat mengkueri agen lagi dan mendapatkan respons yang tepat. Pertama, masukkan "Dapatkah saya menjadwalkan janji temu untuk memperbaiki sepeda saya pukul 11.00 besok«quot; lalu menjawab pertanyaan dengan "Saya perlu perbaikan".

Dalam respons yang mengonfirmasi janji temu, Anda akan melihat bahwa parameter value tanggal dan waktu telah diambil dari konteks.

Meningkatkan format respons

Durasi: 5:00

Menggunakan fulfillment untuk memformat tanggal dan waktu

Seperti yang mungkin telah Anda lihat, tanggal dan waktu yang ditampilkan dalam pesan sukses tidak sangat mudah digunakan. Untuk memperbaikinya, kita perlu menggunakan fulfillment lagi sehingga kita dapat menggunakan JavaScript untuk memformat parameter tanggal dan waktu sedemikian rupa sehingga dapat dibaca dengan mudah oleh pengguna.

Buka intent "Buat Janji Temu - kustom" dengan mengklik Intent di navigasi sebelah kiri, lalu klik intent "Buat Janji Temu - kustom". Scroll ke bagian bawah halaman dan aktifkan Aktifkan panggilan webhook untuk intent ini, lalu klik Save.

Buka fulfillment dengan mengklik link Fulfillment di navigasi sebelah kiri. Salin kode di bawah dan tempelkan di bawah fungsi makeAppointment.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Di bawah fungsi ini, temukan baris intentMap.set('Make appointment', makeAppointment); dan tambahkan intentMap.set('Make appointment - custom', makeAppointmentFollowUp);. Saat intent lanjutan dipanggil, fungsi yang Anda tempelkan sebelumnya akan dipanggil.

Lihat kode makeAppointmentFollowUp dan lihat bagaimana parameter diekstrak dari konteks yang masuk dan intent ini. Sebelum responseText dibuat, kode kini memformat tanggal dan waktu agar dapat dibaca manusia.

Cobalah.

Di perangkat, ketuk saran Buat janji temu atau ketik "Saya ingin memperbaiki sepeda." Anda akan mendapatkan tanggapan "Hari apa Anda ingin masuk{7/}quot; bersama dengan beberapa saran bermanfaat: "Besok", "Seminggu dari sekarang", dan "Dua minggu dari sekarang". Tentukan tanggal ("besok") dan Anda akan mendapatkan kembali respons yang meminta waktu pada tanggal tersebut.

Pilih waktu, dan Anda akan melihat respons baru yang dibuat untuk mengetahui apakah ini untuk layanan atau penyesuaian.

Berikutnya, masukkan "Saya perlu perbaikan". Anda akan melihat respons yang mengonfirmasi janji temu dengan jenis, tanggal, dan waktu janji temu dalam format yang dapat dibaca.

Selesai!

Durasi: 1:00

Bagus!

Sekarang Anda telah melalui semua tahapan pembuatan agen RBM yang didukung oleh Dialogflow.

Selamat mengembangkan aplikasi untuk platform baru yang menarik ini.