Fulfillment build (Dialogflow)

Fulfillment menentukan antarmuka percakapan bagi Action Anda untuk mendapatkan input pengguna dan logika untuk memproses input dan akhirnya memenuhi Action.

Menentukan percakapan

Setelah menentukan Actions, Anda dapat membuat percakapan yang sesuai untuk Action tersebut. Anda melakukan ini dengan membuat intent Dialogflow yang menentukan tata bahasa atau apa yang dibutuhkan pengguna untuk memicu intent dan fulfillment yang sesuai untuk diproses intent saat terpicu.

Anda bisa membuat intent sebanyak yang diinginkan untuk mendefinisikan seluruh tata bahasa.

Membuat intent

Klik tanda + pada item menu Intent pada dialog navigasi kiri. Intent Editor akan muncul tempat Anda dapat memasukkan informasi berikut:

  • Nama intent adalah nama intent yang ditampilkan dalam IDE.
  • Konteks memungkinkan Anda menentukan cakupan pemicu intent pada kasus tertentu. Baca dokumentasi Dialogflow tentang Contexts untuk informasi selengkapnya.
  • Peristiwa memicu intent tanpa perlu pengguna mengatakan apa pun. paket Premium AI contoh peristiwa adalah peristiwa GOOGLE_ASSISTANT_WELCOME, yang memungkinkan Google Asisten untuk memanggil Action Anda. Peristiwa ini digunakan untuk Tindakan default. Lihat dokumentasi kami untuk informasi selengkapnya tentang intent bantuan bawaan.
  • Frasa pelatihan menentukan apa yang harus dikatakan pengguna (tata bahasa) yang akan dipicu intent. Ketik beberapa frasa di sini (5-10) berisi hal yang dapat diucapkan pengguna untuk memicu intent. Dialogflow secara otomatis menangani variasi alami dari contoh frasa yang Anda berikan.
  • Tindakan dan parameter menentukan data yang akan diteruskan ke fulfillment, jika fulfillment akan diaktifkan untuk intent ini. Ini mencakup data yang diuraikan dari input pengguna dan nama yang bisa Anda gunakan dalam fulfillment Anda untuk mendeteksi dipicu. Anda akan menggunakan nama ini nanti untuk memetakan intent ke logika fulfillment yang sesuai. Lihat Tindakan dan parameter dalam dokumentasi Dialogflow untuk informasi selengkapnya tentang cara menentukan Tindakan.

  • Responses adalah Dialogflow Response Builder, tempat Anda dapat menentukan terhadap intent ini secara langsung di dalam Dialogflow, tanpa memanggil pemenuhan pesanan. Fitur ini berguna untuk respons statis yang tidak memerlukan pemenuhan pesanan. Anda juga dapat menggunakannya untuk memberikan pesan selamat datang atau selamat tinggal yang sederhana. Namun, Anda mungkin akan menggunakan fulfillment untuk merespons pengguna Anda untuk sebagian besar intent.

  • Fulfillment menentukan apakah Anda ingin memanggil fulfillment Anda atau tidak saat intent ini dipicu. Kemungkinan besar Anda akan mengaktifkan fungsi ini pada sebagian besar di agen Dialogflow Anda. Untuk melihat item ini dalam intent, Anda harus mengaktifkan fulfillment untuk agen di menu Fulfillment.

Membuat respons di Dialogflow

Untuk beberapa intent, Anda mungkin tidak perlu meminta fulfillment menampilkan respons. Dalam hal ini, Anda dapat menggunakan builder respons di Dialogflow untuk membuat yang dihasilkan.

Di area Responses, berikan respons tekstual yang ingin Anda kembalikan pelanggan. Respons teks default adalah respons teks TTS sederhana yang dapat berfungsi di berbagai beberapa integrasi Dialogflow. Respons untuk Asisten Google dijelaskan di halaman Responses.

Membuat respons pemenuhan pesanan

Kode fulfillment Anda dihosting di logika fulfillment webhook untuk Action. Misalnya, dalam contoh Silly Name Maker, logika ini ditemukan di index.js untuk Cloud Function for Firebase.

Saat sebuah intent yang menggunakan fulfillment dipicu, Anda akan menerima permintaan dari Dialogflow yang berisi informasi tentang intent. Anda kemudian menanggapi dengan memproses intent dan menampilkan respons. Permintaan ini dan respons ditentukan oleh web webhook Dialogflow.

Kami sangat menyarankan Anda menggunakan library klien Node.js untuk memproses permintaan dan menampilkan respons. Berikut adalah proses umum untuk menggunakan library klien:

  1. Lakukan inisialisasi objek Dialogflow. Objek ini secara otomatis menangani pemrosesan permintaan dan mengurainya sehingga yang bisa Anda proses dalam fulfillment Anda.
  2. Buat fungsi untuk menangani permintaan. Fungsi ini memproses input pengguna dan komponen lain dari intent tersebut dan membangun respons untuk kembali ke Dialogflow.

Melakukan inisialisasi objek Dialogflow

Kode berikut membuat instance Dialogflow dan melakukan beberapa boilerplate Penyiapan Node.js untuk Google Cloud Functions:

Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
Java
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

Membuat fungsi untuk menangani permintaan

Saat pengguna mengucapkan frasa yang memicu intent, Anda menerima permintaan dari Dialogflow yang Anda tangani dengan fungsi dalam fulfillment. Di sini , Anda biasanya akan melakukan hal-hal berikut:

  1. Melakukan logika apa pun yang diperlukan untuk memproses input pengguna.
  2. Bangun respons Anda untuk merespons intent yang dipicu. Pertimbangkan platform yang digunakan pengguna untuk menyusun respons yang tepat. Lihat kemampuan platform untuk informasi selengkapnya tentang cara melayani respons untuk berbagai platform.
  3. Panggil fungsi ask() dengan respons Anda.

Kode berikut menunjukkan cara membuat dua respons TTS yang menangani intent pemanggilan (input.welcome) dan intent dialog (input.number) yang menyambut pengguna ke Action Anda dan menggemakan angka yang telah diucapkan pengguna intent Dialogflow dengan nama:

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
Java
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

Input Number intent kustom, yang menyertai kode di atas, menggunakan Entitas @sys.number untuk mengekstrak angka dari ucapan pengguna. Intent-nya kemudian mengirimkan parameter num, yang berisi nomor dari pengguna, ke dalam fulfillment.

Daripada memiliki pengendali individual untuk setiap intent, Anda dapat menambahkan fungsi fallback. Di dalam fungsi penggantian, periksa intent mana yang dipicu dan melakukan hal yang sesuai.

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
Java
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

Permintaan ulang tidak cocok

Ketika Dialogflow tidak dapat cocok dengan tata bahasa input apa pun yang ditentukan dalam intent' Melatih frasa, tindakan ini akan memicu intent penggantian. Intent penggantian biasanya minta kembali pengguna untuk memberikan input yang diperlukan bagi Action Anda. Anda dapat menyediakan frasa perintah ulang dengan menentukannya di area Response atau Anda dapat menggunakan webhook untuk memberikan respons.

Ketika respons pengguna tidak cocok dengan frasa pelatihan Action Anda, Google Asisten mencoba menangani input tersebut. Perilaku ini memudahkan pengguna untuk mengubah Tindakan di tengah percakapan. Misalnya, pengguna bertanya, "Film apa yang akan diputar minggu ini?" lalu mengubah konteks di tengah percakapan: "Apa cuaca besok?" Dalam contoh ini, karena "Bagaimana cuaca besok?" bukan respons yang valid untuk percakapan yang dipicu oleh perintah awal, Asisten secara otomatis mencoba menangani kecocokan dan memindahkan pengguna ke yang sesuai.

Jika Asisten tidak bisa menemukan Action yang sesuai dengan input pengguna, pengguna dikembalikan ke konteks Action Anda.

Karena Asisten dapat mengganggu Action Anda untuk merespons ketidakcocokan yang valid jangan gunakan intent penggantian sebagai cara untuk memenuhi kueri pengguna. Anda hanya boleh menggunakan intent penggantian untuk meminta input yang valid dari pengguna.

Untuk membuat intent penggantian:

  1. Klik Intent di menu navigasi Dialogflow.
  2. Klik ⋮ di samping Buat Intent, lalu pilih Buat Intent Penggantian. (Atau, klik tombol Penggantian Default Bermaksud untuk mengeditnya.)
  3. Tentukan frasa perintah ulang untuk diucapkan kepada pengguna. Frasa-frasa ini harus percakapan dan berguna sebaik mungkin untuk konteks pengguna saat ini.

    Untuk melakukan ini tanpa fulfillment: Tentukan frasa di area Respons intent. Dialogflow secara acak memilih frasa dari daftar ini untuk diucapkan kembali ke pengguna sampai ada maksud yang lebih spesifik dipicu.

    Untuk melakukannya dengan fulfillment:

    1. Alihkan tombol Enable webhook call for this intent di bagian Fulfillment intent.
    2. Dalam logika fulfillment Anda, tangani intent penggantian seperti yang lainnya seperti yang dijelaskan dalam Membuat fungsi untuk menangani permintaan bagian.

    Misalnya, fungsi berikut menggunakan objek conv.data (sebuah {i>payload<i} data apa pun yang dapat Anda gunakan untuk mempertahankan status) dari Library klien Node.js untuk menyimpan yang melacak berapa kali intent penggantian dipicu. Jika ya dipicu lebih dari sekali, Action akan berhenti. Meskipun tidak ditampilkan dalam kode, Anda harus membuat intent lain mereset penghitung ini ke 0 saat intent non-penggantian dipicu. (Lihat Contoh Jin Nomor untuk detail tentang cara menerapkannya.)

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    Java
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

Menggunakan konteks

Gunakan konteks jika Anda ingin Dialogflow memicu intent penggantian hanya dalam situasi. Ini berguna jika Anda ingin memiliki intent penggantian yang berbeda untuk skenario ketidakcocokan yang berbeda.

  • Jika Anda tidak menetapkan konteks pada intent fallback, hal itu dianggap sebagai intent penggantian global yang dipicu Dialogflow saat tidak ada intent lain yang cocok. Anda hanya boleh memiliki salah satunya jika Anda memilih untuk menggunakannya.
  • Jika Anda menetapkan konteks input pada intent penggantian, Dialogflow akan memicu intent penggantian jika hal berikut berlaku:

    • Konteks pengguna saat ini adalah superset konteks yang didefinisikan dalam intent.
    • Tidak ada intent lain yang cocok.

    Hal ini memungkinkan Anda menggunakan beberapa intent penggantian dengan konteks input yang berbeda untuk menyesuaikan perintah ulang yang tidak cocok untuk skenario tertentu.

  • Jika Anda menetapkan konteks output pada intent penggantian, Anda menyimpan pengguna di konteks yang sama setelah intent penggantian dipicu dan diproses.

Lihat Konteks Dialogflow untuk informasi selengkapnya.

Pengaktifan ulang tanpa input

Lihat halaman Permintaan ulang untuk mengetahui detail tentang cara ditangani ketika pengguna tidak menyediakan input lebih lanjut pada perangkat suara seperti Google Home yang memerlukan interaksi berkelanjutan.