Callback

Anda dapat menerapkan callback berikut di Action Canvas Interaktif:

onUpdate()

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

Untuk informasi selengkapnya tentang onUpdate(), lihat Teruskan data untuk mengupdate aplikasi web.

onTtsMark()

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

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

Pada contoh berikut, pengendali webhook revealWord mencakup objek kustom sebagai respons kepada pengguna jika 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 mengeksekusi fungsi revealCorrectWord(), yang memperbarui 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 di Action Canvas Interaktif Anda. Perubahan status input menunjukkan kapan mikrofon terbuka dan tertutup, atau saat Asisten memproses kueri. Tujuan peristiwa berikut dapat menyebabkan status input berubah:

  • Pengguna 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
  • Tindakan 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 Game Canvas dan membuka mikrofon, Anda dapat menjeda game saat pengguna berbicara. Anda juga dapat menunggu hingga mikrofon terbuka untuk mengirim kueri teks ke Asisten untuk memastikan data sudah diterima.

API ini melaporkan status berikut:

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

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

Meskipun transisi antarstatus dapat dilakukan, alur berikut biasa terjadi:

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

Untuk menggunakan fitur ini di Action, tambahkan onInputStatusChanged() ke 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. Tujuan inputStatus dapat berupa LISTENING, PROCESSING, atau IDLE.

Selanjutnya, tambahkan onInputStatusChanged() ke objek callbacks untuk mendaftarkannya, sebagai yang ditampilkan 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);
 }
}