Lệnh gọi lại

Bạn có thể triển khai các lệnh gọi lại sau trong Thao tác Canvas tương tác:

onUpdate()

Lệnh gọi lại onUpdate() truyền dữ liệu từ webhook đến ứng dụng web của bạn để cập nhật ứng dụng web một cách thích hợp. Bạn chỉ nên sử dụng lệnh gọi lại này với phía máy chủ mô hình thực hiện của quá trình phát triển Canvas tương tác.

Để biết thêm thông tin về onUpdate(), hãy xem Truyền dữ liệu để cập nhật ứng dụng web.

onTtsMark()

Lệnh gọi lại onTtsMark() được gọi khi các thẻ <mark> tuỳ chỉnh có trong phần tử Ngôn ngữ đánh dấu tổng hợp lời nói (SSML) nội dung phản hồi của bạn sẽ được đọc cho người dùng trong tính năng Chuyển văn bản sang lời nói (TTS). Bạn có thể sử dụng onTtsMark() trong cả quá trình phát triển phương thức thực hiện phía máy chủ và phía máy khách người mẫu.

Trong các đoạn mã sau, onTtsMark() sẽ đồng bộ hoá ảnh động của ứng dụng web với đầu ra TTS tương ứng. Khi Hành động nói với người dùng: "Rất tiếc, bạn đã thua," ứng dụng web đánh vần đúng từ và hiện các chữ cái để người dùng.

Trong ví dụ sau, trình xử lý webhook revealWord bao gồm một tuỳ chỉnh đánh dấu trong phản hồi cho người dùng khi họ thua trò chơi:

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

Sau đó, đoạn mã sau đây sẽ đăng ký lệnh gọi lại onTtsMark(), kiểm tra tên của nhãn hiệu đó rồi thực thi hàm revealCorrectWord(). Hàm này cập nhật ứng dụng 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()

Lệnh gọi lại onInputStatusChanged() thông báo cho bạn khi trạng thái đầu vào thay đổi trong Interactive Canvas Action (Thao tác trên vải canvas tương tác). Trạng thái đầu vào thay đổi cho biết khi micrô mở và đóng, hoặc khi Trợ lý đang xử lý yêu cầu. Chiến lược phát hành đĩa đơn các sự kiện sau có thể khiến trạng thái đầu vào thay đổi:

  • Người dùng nói với Hành động của bạn
  • Người dùng nhập văn bản trên Ứng dụng Google Tìm kiếm trên Android (AGVL)
  • Ứng dụng web dùng API sendTextQuery() để gửi truy vấn bằng văn bản đến Hành động
  • Hành động ghi vào bộ nhớ trong nhà và các sự kiện khác của Trợ lý

Trường hợp sử dụng chính của lệnh gọi lại này là đồng bộ hoá Hành động của bạn với tương tác bằng giọng nói của người dùng. Ví dụ: nếu người dùng đang chơi một trò chơi Trò chơi trên Canvas và mở micrô, bạn có thể tạm dừng trò chơi trong khi người dùng nói. Bạn cũng có thể đợi cho đến khi micrô mở để gửi yêu cầu bằng văn bản tới Trợ lý để đảm bảo thiết bị nhận được tin nhắn.

API này báo cáo các trạng thái sau:

  • LISTENING – Cho biết micrô đang mở.
  • IDLE – Cho biết micrô đã đóng.
  • PROCESSING – Cho biết Trợ lý hiện đang thực hiện một truy vấn và micrô đã tắt.

API báo cáo trạng thái đầu vào cho Hành động của bạn mỗi khi trạng thái thay đổi.

Mặc dù có thể chuyển đổi giữa các trạng thái, nhưng các luồng sau đây phổ biến:

  • IDLE>LISTENING>PROCESSING>IDLE – Người dùng nói một truy vấn, truy vấn được xử lý và micrô sẽ đóng.
  • IDLE>PROCESSING>IDLE - Ứng dụng web sử dụng API sendTextQuery() để gửi truy vấn bằng văn bản đến Hành động.
  • IDLE>LISTENING>IDLE – Người dùng mở micrô nhưng không mở nói một truy vấn.

Để sử dụng tính năng này trong Hành động, hãy thêm onInputStatusChanged() vào ứng dụng web như minh hoạ trong đoạn mã sau:

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

Lệnh gọi lại onInputStatusChanged() truyền lại một tham số enum, inputStatus Bạn có thể kiểm tra giá trị này để xem trạng thái nhập hiện tại. Chiến lược phát hành đĩa đơn inputStatus có thể là LISTENING, PROCESSING hoặc IDLE.

Tiếp theo, hãy thêm onInputStatusChanged() vào đối tượng callbacks để đăng ký đối tượng này, dưới dạng được hiển thị trong đoạn mã sau:

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