Tindakan Percakapan tidak akan digunakan lagi pada 13 Juni 2023. Untuk mengetahui informasi selengkapnya, lihat Penghentian Action Percakapan.

Membuat fulfillment dengan library klien Node.js Actions on Google (Dialogflow)

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Library klien Actions on Google Node.js adalah cara yang direkomendasikan untuk mengakses dan berinteraksi dengan platform Actions on Google jika Anda membuat webhook pemenuhan di JavaScript.

Pengantar

Library klien Node.js adalah library fulfillment untuk Actions on Google yang menyediakan fitur-fitur berikut:

  • Mendukung semua fitur Actions on Google, termasuk respons multimedia dan teks, login akun, penyimpanan data, transaksi, dan lainnya.
  • Menyediakan lapisan abstraksi idiomatis dalam JavaScript yang menggabungkan API webhook HTTP/JSON percakapan.
  • Menangani detail komunikasi tingkat rendah antara fulfillment Anda dan platform Actions on Google.
  • Dapat diinstal menggunakan alat pengelolaan paket yang sudah dikenal, seperti npm atau yarn.
  • Memungkinkan Anda dengan mudah men-deploy webhook fulfillment Anda di platform komputasi tanpa server, seperti Cloud Functions for Firebase atau AWS Lambda. Anda juga dapat menghosting webhook fulfillment Anda di penyedia layanan cloud atau di lingkungan yang dihosting sendiri dan dikelola sendiri.
  • Kompatibel dengan Node.js v6.0.0 dan yang lebih tinggi.

Anda dapat menggunakan library klien bersama dengan integrasi Dialogflow untuk Actions on Google atau dengan Actions SDK.

Untuk melihat contoh kode lengkap dalam menggunakan library klien, Anda dapat mengunjungi halaman contoh.

Melihat referensi API

Referensi API dihosting di halaman GitHub library klien Actions on Google Node.js.

Anda juga dapat membuat salinan lokal referensi dengan menjalankan perintah berikut dari direktori tempat Anda mendownload kode library klien:

yarn docs

Dokumen yang dihasilkan akan tersedia di folder docs direktori tempat Anda mendownload kode library klien.

Memahami cara kerjanya

Sebelum menggunakan library klien, sebaiknya Anda memahami cara webhook fulfillment Anda menggunakan library klien untuk memproses permintaan pengguna yang dikirim ke Actions on Google ke fulfillment Anda.

Saat Anda membuat webhook fulfillment di JavaScript, Anda dapat men-deploy dan menghosting kode Anda di lingkungan komputasi tanpa server seperti Cloud Functions for Firebase atau AWS Lambda dari Google. Anda juga dapat menghosting kode sendiri tanpa perlu pekerjaan tambahan menggunakan Framework web Express.

Dalam lingkungan runtime, webhook fulfillment dapat memanggil fungsi di library klien untuk memproses permintaan pengguna dan mengirim respons kembali ke Actions on Google untuk dirender menjadi output pengguna.

Tugas utama yang ditangani webhook fulfillment Anda dengan bantuan library klien dirangkum secara singkat di bawah:

Gambar 1. Arsitektur tingkat tinggi dari library klien Node.js
  1. Menerima permintaan pengguna: Saat pengguna membuat kueri ke Asisten Google, platform Actions on Google akan mengirimkan permintaan HTTP ke webhook fulfillment Anda; permintaan tersebut menyertakan payload JSON yang berisi intent dan data lainnya, seperti teks mentah input pengguna, dan kemampuan platform perangkat pengguna. Untuk contoh konten payload JSON lainnya, lihat panduan Format webhook Dialogflow dan format webhook percakapan.
  2. Deteksi format panggilan framework: Untuk framework yang didukung, library klien akan secara otomatis mendeteksi format panggilan framework (misalnya, jika permintaan tersebut berasal dari framework web Express atau dari AWS Lambda) dan mengetahui cara menangani komunikasi dengan platform Actions on Google dengan lancar.
  3. Pemrosesan pengendali layanan: Library klien mewakili API webhook HTTP/JSON percakapan untuk Dialogflow dan SDK Tindakan sebagai fungsi layanan. Webhook fulfillment Anda menggunakan layanan yang sesuai untuk membuat instance app global. Instance app bertindak sebagai pengendali untuk permintaan HTTP dan memahami protokol khusus layanan.
  4. Pemrosesan percakapan: Library klien menampilkan informasi per percakapan sebagai objek Conversation yang disertakan ke instance app. Webhook fulfillment Anda dapat menggunakan objek Conversation untuk mengambil data tersimpan atau informasi status lintas percakapan, mengirim respons kepada pengguna, atau menutup mikrofon.
  5. Pemroses tengah: Library klien memungkinkan Anda membuat middleware layanan percakapan Anda sendiri, yang terdiri dari satu atau beberapa fungsi yang Anda tentukan bahwa library klien otomatis berjalan sebelum memanggil pengendali intent. Webhook fulfillment Anda dapat menggunakan middleware untuk menambahkan properti atau class helper ke objek Conversation.
  6. Pemroses pengendali intent: Library klien memungkinkan Anda menentukan pengendali untuk intent yang dipahami webhook fulfillment Anda. Untuk Dialogflow, library klien merutekan permintaan ke pengendali intent yang benar dengan memetakan ke string yang tepat dari nama intent yang ditentukan di konsol Dialogflow. Untuk Actions SDK, URL tersebut dirutekan berdasarkan properti intent yang dikirim dari Actions on Google.
  7. Mengirim respons kepada pengguna: Untuk membuat respons, webhook fulfillment Anda memanggil fungsi Conversation#ask(). Fungsi ask() dapat dipanggil beberapa kali untuk membuat respons secara bertahap. Library klien akan membuat serialisasi respons menjadi permintaan HTTP dengan payload JSON dan mengirimkannya ke Actions on Google. Fungsi close() memiliki perilaku yang serupa dengan ask(), tetapi menutup percakapan.

Menyiapkan lingkungan pengembangan lokal

Sebelum Anda menerapkan webhook fulfillment, pastikan untuk menginstal library klien terlebih dahulu.

Menginstal library klien

Cara termudah untuk menginstal library klien ke lingkungan pengembangan lokal Anda adalah dengan menggunakan pengelola paket, seperti npm atau yarn.

Untuk menginstal, jalankan salah satu perintah ini dari terminal:

  • Jika menggunakan npm: npm install actions-on-google
  • Jika menggunakan benang: yarn add actions-on-google

Menyiapkan folder project

Bergantung pada tempat Anda berencana men-deploy webhook fulfillment (Cloud Functions Google untuk Firebase, AWS Lambda, atau Express yang dihosting sendiri), Anda mungkin perlu membuat struktur folder project tertentu untuk menyimpan file Anda.

Misalnya, jika menggunakan Cloud Functions for Firebase, Anda dapat menyiapkan folder project yang diperlukan dengan melakukan langkah-langkah yang dijelaskan dalam Menyiapkan Node.js dan Firebase CLI serta Melakukan inisialisasi Firebase untuk Cloud Functions. Untuk Cloud Functions for Firebase, Anda biasanya menulis webhook pemenuhan di file /functions/index.js.

Membuat instance aplikasi

Actions on Google menggunakan format pesan tertentu untuk bertukar permintaan dan respons dengan webhook fulfillment Anda, bergantung pada apakah Anda membuat Action percakapan menggunakan Dialogflow atau Actions SDK atau membuat Action smart home.

Untuk merepresentasikan protokol permintaan dan respons yang berbeda ini, library klien menyediakan tiga fungsi layanan:

Protokol webhook percakapan digunakan oleh kedua layanan percakapan (Dialogflow dan Actions SDK), tetapi setiap layanan menggabungkan pesan secara berbeda.

Anda menggunakan layanan untuk membuat instance app. Instance app mengenkapsulasi status global dan logika fulfillment untuk webhook Anda dan menangani komunikasi antara Actions on Google dan fulfillment Anda menggunakan protokol khusus layanan.

Anda dapat mengonfigurasi properti instance app dan memanggil metodenya untuk mengarahkan perilaku webhook fulfillment. Anda juga dapat dengan mudah mencolokkan instance app ke lingkungan komputasi tanpa server, seperti Cloud Functions for Firebase, yang menerima fungsi JavaScript sebagai pengendali untuk permintaan HTTP.

Untuk membuat instance app di webhook fulfillment, ikuti langkah-langkah berikut:

  1. Panggil fungsi require() untuk mengimpor modul 'actions-on-google' dan muat layanan yang Anda inginkan. Misalnya, cuplikan berikut menunjukkan cara memuat layanan dialogflow dan beberapa elemen yang digunakan untuk mem-build respons, dan menetapkannya ke konstanta bernama dialogflow:

    // Import the service function and various response classes
    const {
      dialogflow,
      actionssdk,
      Image,
      Table,
      Carousel,
    } = require('actions-on-google');

    Di sini, actions-on-google mengacu pada dependensi yang ditentukan dalam file package.json dalam folder project Anda (Anda dapat melihat contoh file package.json ini untuk mengetahui contohnya).

    Saat mendapatkan instance app, Anda dapat secara opsional menentukan class yang mewakili respons lengkap, intent bantuan, dan fungsi Actions on Google lainnya yang ingin Anda gunakan. Untuk daftar lengkap class valid yang dapat Anda muat, lihat dokumentasi referensi untuk modul respons percakapan dan intent bantuan.

  2. Buat instance app dengan memanggil layanan yang Anda muat. Misalnya:

    const app = dialogflow();

  3. Untuk mengonfigurasi instance app saat inisialisasi, Anda dapat memberikan objek options sebagai argumen pertama saat memanggil layanan. (Lihat DialogflowOptions untuk detail selengkapnya.) Misalnya, cuplikan berikut menunjukkan cara mencatat payload JSON mentah ke dalam permintaan atau respons pengguna dengan menetapkan flag { debug: true }:

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

Menetapkan pengendali untuk peristiwa

Untuk memproses peristiwa terkait Actions on Google yang dibuat oleh library klien selama siklus proses interaksi pengguna dengan Action Anda, gunakan library klien untuk membuat pengendali guna memproses permintaan pengguna dan mengirim kembali respons.

Anda dapat membuat fungsi yang bertindak sebagai pengendali untuk jenis peristiwa utama ini yang dikenali library klien:

  • Peristiwa intent: Intent adalah ID unik yang dikirimkan Actions on Google ke fulfillment Anda setiap kali pengguna meminta beberapa fungsi tertentu. Jika Anda menggunakan Dialogflow, ini sesuai dengan Dialogflow yang mencocokkan kueri pengguna dengan intent di agen Dialogflow Anda.
  • Peristiwa error: Saat terjadi error JavaScript atau library klien, Anda dapat menggunakan fungsi catch instance app untuk memproses pengecualian error dengan tepat. Anda harus mengimplementasikan satu fungsi catch untuk menangani semua error yang penting bagi fulfillment Anda.
  • Peristiwa penggantian: Peristiwa penggantian terjadi saat pengguna mengirim kueri yang tidak dapat dikenali Actions on Google. Anda dapat menggunakan fungsi fallback instance app untuk mendaftarkan pengendali penggantian generik yang akan dipicu jika tidak ada pengendali intent yang cocok untuk permintaan pemenuhan yang masuk. Anda harus mengimplementasikan fungsi fallback tunggal untuk menangani semua peristiwa penggantian. Jika Anda menggunakan Dialogflow, Dialogflow dapat memicu intent penggantian tertentu jika tidak ada intent lain yang cocok. Anda harus membuat pengendali intent yang sesuai untuk intent penggantian tersebut.

Setiap kali pengguna mengirim permintaan ke Action Anda, instance app akan membuat objek Conversation yang mewakili sesi percakapan tersebut. Objek ini diakses melalui nama variabel conv yang diteruskan dalam fungsi pengendali intent sebagai argumen fungsi pertama. Biasanya, Anda akan menggunakan objek conv di pengendali untuk mengirim respons kepada pengguna.

Kueri pengguna juga dapat menyertakan parameter yang dapat diekstrak dan digunakan oleh Action untuk menyaring respons.

  • Jika menggunakan Actions SDK, Anda dapat menentukan parameter di Action package. Untuk melihat contoh cara mengekstrak parameter dari intent, lihat contoh kode Eliza.
  • Jika menggunakan Dialogflow, Anda dapat mengakses parameter value melalui variabel params. Untuk melihat contoh penanganan intent dengan parameter di Dialogflow, lihat Mengakses parameter dan konteks.

Menetapkan pengendali untuk intent

Untuk menyetel pengendali untuk intent, panggil fungsi intent() dari instance app Anda. Misalnya, jika Anda menggunakan Dialogflow, ini adalah fungsi DialogflowApp#intent(). Dalam argumen, tentukan nama intent dan berikan fungsi pengendali.

Jika menggunakan Dialogflow, Anda tidak perlu menetapkan pengendali untuk setiap intent di agen Anda. Sebagai gantinya, Anda dapat memanfaatkan pengendali respons bawaan Dialogflow untuk menangani intent secara otomatis tanpa menerapkan fungsi pengendali Anda sendiri. Misalnya, intent sambutan default dapat didelegasikan ke Dialogflow dengan cara ini.

Contoh berikut menunjukkan pengendali intent untuk intent 'sapaan' dan 'selamat tinggal'. Fungsi pengendali anonimnya menggunakan argumen conv dan mengirim kembali respons string sederhana kepada pengguna melalui fungsi conv.ask():

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('How are you?');
});

app.intent('bye', (conv) => {
  conv.close('See you later!');
});

Perhatikan bahwa fungsi close() mirip dengan ask(), tetapi fungsi ini menutup mikrofon dan percakapan berakhir.

Untuk mempelajari lebih lanjut cara mem-build pengendali untuk intent, lihat Mem-build pengendali intent Anda.

Menetapkan pengendali untuk peristiwa error

Untuk menyetel pengendali error, panggil fungsi catch() instance app Anda. (Misalnya, jika Anda menggunakan Dialogflow, ini adalah fungsi DialogflowApp#catch().)

Contoh berikut menunjukkan pengendali error catch sederhana yang mengirim error ke output konsol dan mengirimkan kembali respons string sederhana untuk meminta pengguna melalui fungsi conv.ask():

app.catch((conv, error) => {
  console.error(error);
  conv.ask('I encountered a glitch. Can you say that again?');
});

Menetapkan pengendali untuk peristiwa penggantian

Untuk menetapkan pengendali penggantian umum jika tidak ada intent yang cocok untuk permintaan masuk untuk fulfillment, panggil fungsi fallback() instance app Anda. (Misalnya, jika Anda menggunakan Dialogflow, ini adalah fungsi DialogflowApp#fallback().)

Contoh berikut menunjukkan pengendali penggantian sederhana yang mengirimkan kembali respons string sederhana untuk meminta pengguna melalui fungsi conv.ask():

app.fallback((conv) => {
  conv.ask(`I couldn't understand. Can you say that again?`);
});

Membuat pengendali intent Anda

Bagian ini membahas beberapa kasus penggunaan umum saat Anda menerapkan pengendali intent dengan library klien. Untuk melihat cara library klien mencocokkan intent, lihat bagian 'Pemrosesan pengendali intent' di Memahami cara kerjanya.

Mengakses parameter dan konteks

Jika menggunakan Dialogflow, Anda dapat menentukan parameter dan konteks dalam agen Dialogflow untuk mempertahankan informasi status dan mengontrol alur percakapan.

Parameter berguna untuk menangkap kata, frasa, atau nilai penting dalam kueri pengguna. Dialogflow mengekstrak parameter yang sesuai dari kueri pengguna pada waktu proses, dan Anda dapat memproses parameter value ini di webhook fulfillment Anda untuk menentukan cara merespons pengguna.

Setiap kali pengguna mengirim permintaan ke Action Anda, instance DialogflowApp akan membuat objek parameters yang mewakili parameter value yang diekstrak Dialogflow dari permintaan tersebut. Objek ini diakses melalui nama variabel params.

Cuplikan berikut menunjukkan cara mengakses properti name dari objek params saat pengguna mengirim permintaan:

app.intent('Default Welcome Intent', (conv, params) => {
  conv.ask(`How are you, ${params.name}?`);
});

Berikut cuplikan alternatif yang melakukan hal yang sama. Kurung kurawal ({}) menjalankan destrukturisasi JavaScript untuk mengambil properti name dari objek parameters dan menggunakannya sebagai variabel lokal:

app.intent('Default Welcome Intent', (conv, {name}) => {
  conv.ask(`How are you, ${name}?`);
});

Dalam cuplikan berikut, nama parameternya adalah full-name, tetapi didestrukturisasi dan ditetapkan ke variabel lokal yang disebut name:

app.intent('Default Welcome Intent', (conv, {'full-name': name}) => {
  conv.ask(`How are you, ${name}?`);
});

Konteks adalah fitur lanjutan dari Dialogflow. Anda dapat menggunakan konteks untuk mengelola status percakapan, alur, dan cabang. Library klien memberikan akses ke konteks melalui objek DialogflowConversation#contexts. Cuplikan berikut menunjukkan cara menetapkan konteks secara terprogram di webhook fulfillment Anda dan cara mengambil objek konteks:

app.intent('intent1', (conv) => {
  const lifespan = 5;
  const contextParameters = {
    color: 'red',
  };
  conv.contexts.set('context1', lifespan, contextParameters);
  // ...
  conv.ask('...');
});

app.intent('intent2', (conv) => {
  const context1 = conv.contexts.get('context1');
  const contextParameters = context1.parameters;
  // ...
  conv.ask('...');
});

app.intent('intent3', (conv) => {
  conv.contexts.delete('context1');
  // ...
  conv.ask('...');
});

Mengakses hasil intent helper

Untuk memudahkan, library klien menyediakan class intent bantuan yang menggabungkan jenis data pengguna umum yang sering diminta Action. Hal ini mencakup class yang merepresentasikan hasil untuk berbagai intent bantuan Actions on Google. Anda menggunakan intent helper saat ingin Asisten Google menangani bagian percakapan di mana pengguna harus memberikan input untuk melanjutkan percakapan.

Contoh: Hasil bantuan konfirmasi

Intent helper konfirmasi memungkinkan Anda meminta konfirmasi ya/tidak dari pengguna dan mendapatkan jawaban yang dihasilkan. Cuplikan berikut menunjukkan cara webhook Anda dapat menyesuaikan responsnya berdasarkan hasil yang ditampilkan oleh intent bantuan konfirmasi. Untuk contoh yang lebih lengkap, lihat dokumentasi referensi class Confirmation.

// Create Dialogflow intent with `actions_intent_CONFIRMATION` event
app.intent('get_confirmation', (conv, input, confirmation) => {
  if (confirmation) {
    conv.close(`Great! I'm glad you want to do it!`);
  } else {
    conv.close(`That's okay. Let's not do it now.`);
  }
});

Cuplikan berikut menunjukkan cara webhook fulfillment Anda dapat menyesuaikan responsnya berdasarkan input pengguna untuk carousel. Komponen carousel memungkinkan Action Anda menampilkan pilihan opsi yang dapat dipilih pengguna. Untuk contoh yang lebih lengkap, lihat dokumentasi referensi class Carousel.

app.intent('carousel', (conv) => {
  conv.ask('Which of these looks good?');
  conv.ask(new Carousel({
    items: {
      car: {
        title: 'Car',
        description: 'A four wheel vehicle',
        synonyms: ['automobile', 'vehicle'],
      },
      plane: {
        title: 'Plane',
        description: 'A flying machine',
        synonyms: ['aeroplane', 'jet'],
      }
    }
  }));
});

// Create Dialogflow intent with `actions_intent_OPTION` event
app.intent('get_carousel_option', (conv, input, option) => {
  if (option === 'one') {
    conv.close(`Number one is a great choice!`);
  } else {
    conv.close(`Number ${option} is a great choice!`);
  }
});

Mengonfigurasi objek respons percakapan

Library klien menyediakan class respons percakapan yang mewakili respons lengkap atau elemen multimedia yang dapat dikirim oleh Action Anda. Anda biasanya mengirim respons atau elemen ini saat pengguna tidak perlu memberikan input apa pun untuk melanjutkan percakapan.

Contoh: Gambar

Cuplikan berikut menunjukkan cara webhook fulfillment Anda dapat mengirim Image dalam respons yang akan otomatis dilampirkan ke respons BasicCard oleh library:

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('Hi, how is it going?');
  conv.ask(`Here's a picture of a cat`);
  conv.ask(new Image({
    url: '/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg',
    alt: 'A cat',
  }));
});

Melakukan panggilan fungsi asinkron

Library klien Node.js Actions on Google dirancang untuk pemrograman asinkron. Pengendali intent Anda dapat menampilkan promise yang di-resolve saat webhook pemenuhan selesai menghasilkan respons.

Cuplikan berikut menunjukkan cara melakukan panggilan fungsi asinkron untuk menampilkan objek promise, lalu merespons dengan pesan jika webhook fulfillment Anda menerima intent 'sapaan'. Dalam cuplikan ini, promise memastikan bahwa webhook fulfillment Anda menampilkan respons percakapan hanya setelah promise untuk panggilan API eksternal selesai.

Dalam contoh ini, kami menggunakan API palsu untuk mendapatkan data cuaca.

/**
 * Make an external API call to get weather data.
 * @return {Promise<string>}
 */
const forecast = () => {
  // ...
};

app.intent('Default Welcome Intent', (conv) => {
  return forecast().then((weather) => {
    conv.ask('How are you?');
    conv.ask(`Today's weather is ${weather}.`);
  });
});

Cuplikan kode yang disederhanakan berikut memiliki efek yang sama, tetapi menggunakan fitur async await yang diperkenalkan di ECMA 2017 (Node.js versi 8). Untuk menggunakan kode ini dengan Cloud Functions for Firebase, pastikan Anda menggunakan versi firebase-tools yang benar dan memiliki konfigurasi yang benar.

app.intent('Default Welcome Intent', async (conv) => {
  const weather = await forecast();
  conv.ask('How are you?');
  conv.ask(`Today's weather is ${weather}.`);
});

Menyimpan data percakapan

Library klien memungkinkan webhook fulfillment Anda menyimpan data dalam percakapan untuk digunakan di masa mendatang. Objek utama yang dapat Anda gunakan untuk penyimpanan data meliputi:

Cuplikan berikut menunjukkan cara webhook fulfillment Anda dapat menyimpan data di properti arbitrer yang Anda tentukan (someProperty) dan melampirkannya ke objek Conversation#user.storage. Untuk contoh yang lebih lengkap, lihat dokumentasi referensi class Conversation#user.storage.

app.intent('Default Welcome Intent', (conv) => {
  conv.user.storage.someProperty = 'someValue';
  conv.ask('...');
});

Anda dapat menggunakan objek Conversation#user untuk memperoleh informasi tentang pengguna, termasuk ID string dan informasi pribadi. Kolom tertentu seperti conv.user.name.display dan conv.user.email masing-masing memerlukan permintaan conv.ask(new Permission) untuk NAME dan conv.ask(new SignIn) untuk Login dengan Google.

const {Permission} = require('actions-on-google');
app.intent('Default Welcome Intent', (conv) => {
  if (conv.user.last.seen) {
    conv.ask('Welcome back! How are you?');
  } else {
    conv.ask('Nice to meet you! How are you doing?');
  }
});

app.intent('permission', (conv) => {
  conv.ask(new Permission({
    context: 'To greet you personally',
    permissions: 'NAME',
  }));
});

// Create Dialogflow intent with `actions_intent_PERMISSION` event
app.intent('get_permission', (conv, input, granted) => {
  if (granted) {
    conv.close(`Hi ${conv.user.name.display}!`);
  } else {
    // User did not grant permission
    conv.close(`Hello!`);
  }
});

Penskalaan dengan middleware

Anda dapat memperluas library klien melalui middleware.

Lapisan middleware terdiri dari satu atau beberapa fungsi yang Anda tentukan, yang dijalankan secara otomatis oleh library klien sebelum memanggil pengendali intent. Dengan menggunakan lapisan middleware, Anda dapat mengubah instance Conversation dan menambahkan fungsi tambahan.

Layanan Dialogflow dan Actions SDK mengekspos fungsi app.middleware() yang memungkinkan Anda menambahkan properti atau class helper ke instance Conversation.

Cuplikan berikut menunjukkan contoh cara menggunakan middleware:

class Helper {
  constructor(conv) {
    this.conv = conv;
  }

  func1() {
    this.conv.ask(`What's up?`);
  }
}

app.middleware((conv) => {
  conv.helper = new Helper(conv);
});

app.intent('Default Welcome Intent', (conv) => {
  conv.helper.func1();
});

Mengekspor aplikasi

Guna mengekspos webhook fulfillment Anda untuk framework web atau platform komputasi tanpa server, Anda harus mengekspor objek app sebagai webhook yang dapat diakses secara publik. Library klien mendukung deployment ke sejumlah lingkungan secara langsung.

Cuplikan berikut menunjukkan cara mengekspor app dalam berbagai runtime:

Contoh: Cloud Functions for Firebase

const functions = require('firebase-functions');
// ... app code here
exports.fulfillment = functions.https.onRequest(app);

Contoh: Editor inline Dialogflow

const functions = require('firebase-functions');

// ... app code here

// Exported function name must be 'dialogflowFirebaseFulfillment'
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

Contoh: Server Express yang dihosting sendiri (sederhana)

const express = require('express');
const bodyParser = require('body-parser');  

// ... app code here

express().use(bodyParser.json(), app).listen(3000);

Contoh: Server Express yang dihosting sendiri (beberapa rute)

const express = require('express');
const bodyParser = require('body-parser');

// ... app code here

const expressApp = express().use(bodyParser.json());

expressApp.post('/fulfillment', app);

expressApp.listen(3000);

Contoh: Gateway AWS Lambda API

// ... app code here

exports.fulfillment = app;