Вы можете реализовать следующие обратные вызовы в своем действии 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
— веб-приложение использует APIsendTextQuery()
для отправки текстового запроса в действие. -
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);
}
}