回呼

您可以在互動畫布動作中實作下列回呼:

onUpdate()

onUpdate()回呼會將 Webhook 中的資料傳遞至網頁應用程式加以更新 妥善設定網頁應用程式此回呼只能與伺服器端搭配使用 以及互動式畫布開發的執行要求模型。

如要進一步瞭解 onUpdate(),請參閱 傳遞資料以更新網頁應用程式

onTtsMark()

onTtsMark()<mark> 語音合成標記語言 (SSML) 系統會在文字轉語音 (TTS) 作業期間向使用者朗讀您的回應內容。你可以 在伺服器端和用戶端執行要求開發作業中,都使用 onTtsMark() 我們來看評估分類模型成效時 的喚回度和精確度指標

在下列程式碼片段中,onTtsMark() 會同步處理網頁應用程式的動畫 以及對應的 TTS 輸出內容。對使用者說出「很抱歉, 你輸了。」這個應用程式會讀出正確的字詞,並顯示字母 使用者。

在以下範例中,Webhook 處理常式 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()

輸入狀態變更時,onInputStatusChanged() 回呼會通知您 以及互動式畫布動作輸入狀態變更會指出 就會開啟並關閉麥克風,或是 Google 助理正在處理查詢時。 下列事件可能會導致輸入狀態發生變更:

  • 使用者對您的動作說話時
  • 使用者在 Android Google 搜尋應用程式 (AGSA) 上輸入文字
  • 網頁應用程式使用 sendTextQuery() API 將文字查詢傳送至動作
  • 動作寫入住家儲存空間和其他 Google 助理事件的動作

這個回呼的主要用途是將動作與 透過語音互動取得資料舉例來說,如果使用者玩的是互動式遊戲 畫布遊戲並開啟麥克風,您可以在使用者同時暫停遊戲 說話。您也可以等到麥克風開啟時再傳送文字查詢給 並檢查 Google 助理是否收到驗證碼

這個 API 會回報下列狀態:

  • LISTENING - 表示麥克風已開啟。
  • IDLE - 表示麥克風已關閉。
  • PROCESSING - 表示 Google 助理目前正在執行查詢,以及 就會關閉麥克風。

每次狀態變更時,API 都會將輸入狀態回報給動作。

雖然狀態之間可以轉換,但常見流程如下:

  • IDLE>LISTENING>PROCESSING>IDLE - 使用者說查詢 查詢,並關閉麥克風。
  • IDLE>PROCESSING>IDLE - 網頁應用程式使用 sendTextQuery() API 將文字查詢傳送至 Action。
  • IDLE>LISTENING>IDLE:使用者開啟麥克風,但未開啟 表示查詢

如要在動作中使用這項功能,請在網頁應用程式中加入 onInputStatusChanged() 程式碼,如以下程式碼片段所示:

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

onInputStatusChanged() 回呼會傳回單一列舉參數。 inputStatus。您可以檢查這個值瞭解目前的輸入狀態。 inputStatus 可以是 LISTENINGPROCESSINGIDLE

接下來,將 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);
 }
}