โค้ดเรียกกลับ

คุณใช้ Callback ต่อไปนี้ได้ใน Interactive Canvas Action

onUpdate()

onUpdate()ข้อมูล Callback Pass จากเว็บฮุคไปยังเว็บแอปเพื่ออัปเดต เว็บแอปให้เหมาะสม คุณควรใช้ Callback นี้กับฝั่งเซิร์ฟเวอร์เท่านั้น โมเดลการดำเนินการตามคำสั่งซื้อของการพัฒนา Interactive Canvas

ดูข้อมูลเพิ่มเติมเกี่ยวกับ onUpdate() ได้ที่ ส่งข้อมูลเพื่ออัปเดตเว็บแอป

onTtsMark()

ระบบจะเรียก Callback onTtsMark() เมื่อมีแท็ก <mark> ที่กำหนดเองรวมอยู่ในแท็ก ภาษามาร์กอัปการสังเคราะห์เสียง (SSML) ของการตอบกลับจะอ่านออกเสียงให้ผู้ใช้ทราบในระหว่างการอ่านออกเสียงข้อความ (TTS) คุณสามารถ ใช้ onTtsMark() ในการพัฒนาการดำเนินการตามคำสั่งซื้อทั้งฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์

ในข้อมูลโค้ดต่อไปนี้ onTtsMark() จะซิงค์ข้อมูลภาพเคลื่อนไหวของเว็บแอป ด้วยเอาต์พุต TTS ที่เกี่ยวข้อง เมื่อการดำเนินการพูดกับผู้ใช้ว่า "ขออภัย คุณแพ้" เว็บแอปสะกดคำที่ถูกต้องและแสดงตัวอักษรที่ ผู้ใช้รายนั้น

ในตัวอย่างต่อไปนี้ ตัวแฮนเดิลเว็บฮุค revealWord มี ทำเครื่องหมายในการตอบกลับผู้ใช้ในกรณีที่ชนะเกม:

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());
});
…
    

จากนั้นข้อมูลโค้ดต่อไปนี้จะบันทึกการติดต่อกลับของ onTtsMark() โปรดตรวจสอบ ของเครื่องหมาย และใช้ฟังก์ชัน revealCorrectWord() ซึ่งจะอัปเดต เว็บแอป:

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() จะแจ้งให้ทราบเมื่อสถานะอินพุตมีการเปลี่ยนแปลง ในการทำงานของ Interactive Canvas การเปลี่ยนแปลงสถานะอินพุตจะแสดงเมื่อ ไมโครโฟนจะเปิดและปิด หรือเมื่อ Assistant กำลังประมวลผลคำถาม เหตุการณ์ต่อไปนี้อาจทำให้สถานะอินพุตเปลี่ยนแปลงได้

  • ผู้ใช้พูดกับการดำเนินการของคุณ
  • ผู้ใช้ป้อนข้อความในแอป Google Search ของ Android (AGSA)
  • เว็บแอปที่ใช้ sendTextQuery() API เพื่อส่งคำค้นหาไปยังการดำเนินการ
  • การดำเนินการเขียนไปยังพื้นที่เก็บข้อมูลในบ้านและเหตุการณ์อื่นๆ ของ Assistant

กรณีการใช้งานหลักสำหรับ Callback นี้คือซิงค์ข้อมูลการดำเนินการของคุณกับ การโต้ตอบด้วยเสียงของผู้ใช้ เช่น หากผู้ใช้กำลังเล่นโฆษณาอินเทอร์แอกทีฟ เกม Canvas และเปิดไมโครโฟน คุณสามารถหยุดเกมชั่วคราวในขณะที่ผู้ใช้ พูด นอกจากนี้ คุณยังรอจนกว่าไมโครโฟนจะเปิดเพื่อส่งข้อความค้นหาไปยัง Assistant ตรวจดูว่าได้รับข้อความแล้ว

API นี้จะรายงานสถานะต่อไปนี้

  • LISTENING - บ่งบอกว่าไมโครโฟนเปิดอยู่
  • IDLE - บ่งบอกว่าไมโครโฟนปิดอยู่
  • PROCESSING - บ่งบอกว่า Assistant กำลังดำเนินการค้นหาอยู่ และ ไมโครโฟนปิดอยู่

API จะรายงานสถานะอินพุตไปยังการดำเนินการของคุณทุกครั้งที่สถานะมีการเปลี่ยนแปลง

แม้ว่าการเปลี่ยนระหว่างรัฐต่างๆ จะเป็นไปได้ แต่กระบวนการต่อไปนี้เป็นเรื่องปกติ

  • IDLE>LISTENING>PROCESSING>IDLE - ผู้ใช้พูดข้อความค้นหา ประมวลผลการค้นหา และไมโครโฟนจะปิด
  • IDLE>PROCESSING>IDLE - เว็บแอปใช้ sendTextQuery() API เพื่อส่งข้อความค้นหาไปที่การดำเนินการ
  • IDLE>LISTENING>IDLE - ผู้ใช้เปิดไมโครโฟนแต่ไม่ พูดข้อความค้นหา

หากต้องการใช้ฟีเจอร์นี้ในการดำเนินการ ให้เพิ่ม onInputStatusChanged() ลงในเว็บแอป ดังที่แสดงในข้อมูลโค้ดต่อไปนี้

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

Callback onInputStatusChanged() จะส่งพารามิเตอร์ enum เดียวกลับมา inputStatus คุณสามารถตรวจสอบค่านี้เพื่อดูสถานะอินพุตปัจจุบันได้ inputStatus จะเป็น LISTENING, PROCESSING หรือ IDLE ก็ได้

ถัดไป ให้เพิ่ม onInputStatusChanged() ลงในออบเจ็กต์ callbacks เพื่อลงทะเบียนเป็น ที่แสดงในตัวอย่างต่อไปนี้

 /**
  * 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);
 }
}