Обратные вызовы

Вы можете реализовать следующие обратные вызовы в своем действии Interactive Canvas:

onUpdate()

Обратный вызов onUpdate() передает данные из вашего веб-перехватчика в ваше веб-приложение для соответствующего обновления веб-приложения. Этот обратный вызов следует использовать только с моделью выполнения на стороне сервера при разработке Interactive Canvas.

Дополнительные сведения о onUpdate() см. в разделе Передача данных для обновления веб-приложения .

onTtsMark()

Обратный вызов 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()

Обратный вызов onInputStatusChanged() уведомляет вас, когда статус ввода изменяется в вашем действии интерактивного холста. Изменения состояния входа указывают на то, когда микрофон открывается и закрывается или когда Ассистент обрабатывает запрос. Следующие события могут привести к изменению состояния входа:

  • Пользователь, говорящий с вашим действием
  • Пользователь вводит текст в приложении Google Search для Android (AGSA).
  • Веб-приложение, использующее API sendTextQuery() для отправки текстового запроса в действие.
  • Запись действий в домашнее хранилище и другие события Ассистента.

Основной вариант использования этого обратного вызова — синхронизация вашего действия с голосовым взаимодействием пользователя. Например, если пользователь играет в игру Interactive Canvas и открывает микрофон, вы можете приостановить игру, пока пользователь говорит. Вы также можете подождать, пока микрофон откроется, чтобы отправить текстовый запрос Ассистенту, чтобы убедиться, что он получен.

Этот API сообщает о следующих статусах:

  • LISTENING — указывает на то, что микрофон открыт.
  • IDLE — указывает на то, что микрофон закрыт.
  • PROCESSING — указывает, что Ассистент в данный момент выполняет запрос, а микрофон закрыт.

API сообщает статус ввода вашему действию каждый раз, когда статус меняется.

Хотя возможен любой переход между состояниями, распространены следующие потоки:

  • IDLE > LISTENING > PROCESSING > IDLE — пользователь произносит запрос, запрос обрабатывается, и микрофон закрывается.
  • IDLE > PROCESSING > IDLE — веб-приложение использует API sendTextQuery() для отправки текстового запроса в действие.
  • IDLE > LISTENING > IDLE — пользователь открывает микрофон, но не произносит вопрос.

Чтобы использовать эту функцию в своем действии, добавьте onInputStatusChanged() в код вашего веб-приложения, как показано в следующем фрагменте:

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

Обратный вызов onInputStatusChanged() передает обратно один параметр перечисления 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);
 }
}