Callback

Anda dapat menerapkan callback berikut di Tindakan Canvas Interaktif:

onUpdate()

Callback onUpdate() meneruskan data dari webhook ke aplikasi web Anda untuk memperbarui aplikasi web dengan tepat. Anda hanya boleh menggunakan callback ini dengan model fulfillment sisi server pengembangan Canvas Interaktif.

Untuk mengetahui informasi selengkapnya tentang onUpdate(), lihat Meneruskan data untuk memperbarui aplikasi web.

onTtsMark()

Callback onTtsMark() dipanggil saat tag <mark> kustom yang disertakan dalam Bahasa Markup Sintesis Ucapan (SSML) respons Anda dibacakan kepada pengguna selama Text to Speech (TTS). Anda dapat menggunakan onTtsMark() dalam model pengembangan fulfillment sisi server dan sisi klien.

Dalam cuplikan berikut, onTtsMark() menyinkronkan animasi aplikasi web dengan output TTS yang sesuai. Saat Action berkata kepada pengguna, "Maaf, Anda kalah", aplikasi web akan mengeja kata yang benar dan menampilkan huruf tersebut kepada pengguna.

Pada contoh berikut, pengendali webhook revealWord menyertakan tanda khusus dalam respons kepada pengguna saat mereka kalah dalam game:

JavaScript

…
app.handle('revealWord', conv => {
  conv.add(new Simple(`<speak>Sorry, you lost.<mark name="REVEAL_WORD"/> The word is ${conv.session.params.word}.</speak>`));
  conv.add(new Canvas());
});
…
    

Cuplikan kode berikut kemudian mendaftarkan callback onTtsMark(), memeriksa nama tanda, dan menjalankan fungsi revealCorrectWord(), yang mengupdate aplikasi web:

JavaScript

…
setCallbacks() {
    // declare Assistant Canvas Action callbacks
    const callbacks = {
        onTtsMark(markName) {
            if (markName === 'REVEAL_WORD') {
                // display the correct word to the user
                that.revealCorrectWord();
            }
        },
    }
    callbacks.onUpdate.bind(this);
}
…
    

onInputStatusChanged()

Callback onInputStatusChanged() memberi tahu Anda saat status input berubah dalam Action Canvas Interaktif Anda. Perubahan status input menunjukkan kapan mikrofon terbuka dan menutup, atau saat Asisten sedang memproses kueri. Peristiwa berikut dapat menyebabkan status input berubah:

  • Pengguna yang berbicara dengan Action Anda
  • Pengguna memasukkan teks di Aplikasi Google Penelusuran Android (AGSA)
  • Aplikasi web yang menggunakan sendTextQuery() API untuk mengirim kueri teks ke Action
  • Action menulis ke penyimpanan rumah dan peristiwa Asisten lainnya

Kasus penggunaan utama untuk callback ini adalah menyinkronkan Action Anda dengan interaksi suara pengguna. Misalnya, jika pengguna memainkan game Canvas Interaktif dan membuka mikrofon, Anda dapat menjeda game saat pengguna berbicara. Anda juga dapat menunggu hingga mikrofon terbuka untuk mengirim kueri teks ke Asisten untuk memastikannya diterima.

API ini melaporkan status berikut:

  • LISTENING - Menunjukkan bahwa mikrofon terbuka.
  • IDLE - Menunjukkan bahwa mikrofon ditutup.
  • PROCESSING - Menunjukkan bahwa Asisten sedang menjalankan kueri, dan mikrofon ditutup.

API melaporkan status input ke Action Anda setiap kali status berubah.

Meskipun transisi antarstatus dimungkinkan, alur berikut bersifat umum:

  • IDLE>LISTENING>PROCESSING>IDLE - Pengguna mengucapkan kueri, kueri diproses, dan mikrofon ditutup.
  • IDLE>PROCESSING>IDLE - Aplikasi web menggunakan sendTextQuery() API untuk mengirim kueri teks ke Action.
  • IDLE>LISTENING>IDLE - Pengguna membuka mikrofon, tetapi tidak mengucapkan kueri.

Untuk menggunakan fitur ini di Action Anda, tambahkan onInputStatusChanged() ke kode aplikasi web Anda, seperti yang ditunjukkan dalam cuplikan berikut:

onInputStatusChanged(inputStatus) {
   console.log("The new input status is: ", inputStatus);
}

Callback onInputStatusChanged() meneruskan kembali satu parameter enum, inputStatus. Anda dapat memeriksa nilai ini untuk melihat status input saat ini. inputStatus dapat berupa LISTENING, PROCESSING, atau IDLE.

Selanjutnya, tambahkan onInputStatusChanged() ke objek callbacks untuk mendaftarkannya, seperti yang ditunjukkan dalam cuplikan berikut:

 /**
  * Register all callbacks used by the Interactive Canvas Action
  * executed during game creation time.
  */
 setCallbacks() {
   const that = this;
   // Declare the Interactive Canvas action callbacks.
   const callbacks = {
     onUpdate(data) {
       console.log('Received data', data);
     },
     onInputStatusChanged(inputStatus) {
       console.log("The new input status is: ", inputStatus);
     },
   };
   // Called by the Interactive Canvas web app once web app has loaded to
   // register callbacks.
   this.canvas.ready(callbacks);
 }
}