W interaktywnym obszarze roboczym możesz zaimplementować te wywołania zwrotne:
onUpdate()
onUpdate()
Wywołanie zwrotne przekazuje dane z webhooka do aplikacji internetowej, aby odpowiednio zaktualizować aplikację internetową. Tego wywołania zwrotnego należy używać tylko w przypadku modelu realizacji interaktywnego obszaru roboczego po stronie serwera.
Więcej informacji o onUpdate()
znajdziesz w artykule Aktualizacja danych karty.
onTtsMark()
Wywołanie zwrotne onTtsMark()
jest wywoływane, gdy niestandardowe tagi <mark>
zawarte w języku syntezy mowy (MLML) są odczytywane użytkownikowi podczas zamiany tekstu na mowę. onTtsMark()
można stosować zarówno w modelach programowania po stronie serwera, jak i po stronie klienta.
W poniższych fragmentach onTtsMark()
synchronizuje animację aplikacji internetowej z odpowiednimi danymi wyjściowymi TTS. Gdy akcja powie użytkownikowi „przegrana”, aplikacja internetowa przeliteruje odpowiednie słowo i wyświetli litery użytkownikowi.
W tym przykładzie moduł obsługi webhooka revealWord
w odpowiedzi na żądanie użytkownika zawiera niestandardowy znak:
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()); }); …
Ten fragment kodu rejestruje wywołanie zwrotne onTtsMark()
, sprawdza nazwę znaku i wykonuje funkcję revealCorrectWord()
, która aktualizuje aplikację internetową:
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()
Wywołanie zwrotne onInputStatusChanged()
powiadamia o zmianie stanu wprowadzania danych w interaktywnym działaniu obszaru roboczego. Zmiany stanu wprowadzania wskazują, kiedy mikrofon jest otwierany i zamykany lub gdy Asystent przetwarza zapytanie. Te zdarzenia mogą spowodować zmianę stanu danych wejściowych:
- Działanie użytkownika mówiącego
- Użytkownik wpisuje tekst w wyszukiwarce Google na Androida.
- Aplikacja internetowa korzystająca z interfejsu API
sendTextQuery()
do wysyłania zapytań tekstowych do działania - Zapisywanie akcji w pamięci domowej i innych wydarzeniach Asystenta
Głównym przypadkiem użycia tego wywołania zwrotnego jest synchronizowanie akcji z interakcjami głosowymi użytkownika. Jeśli na przykład użytkownik gra w Interaktywną grę Canvas i otwiera mikrofon, możesz wstrzymać grę w czasie, gdy mówi. Możesz też poczekać, aż mikrofon będzie otwarty, i wysłać zapytanie tekstowe do Asystenta, żeby się upewnić, że je otrzyma.
Ten interfejs API zgłasza te stany:
LISTENING
– oznacza, że mikrofon jest otwarty.IDLE
– oznacza, że mikrofon jest zamknięty.PROCESSING
– wskazuje, że Asystent obecnie wykonuje zapytanie, a mikrofon jest zamknięty.
Za każdym razem, gdy zmieni się stan, interfejs API raportuje stan działania.
Mimo że możliwe jest przejście między stanami, to pewne częste wzorce:
IDLE
>LISTENING
>PROCESSING
>IDLE
– użytkownik wydaje zapytanie, zapytanie jest przetwarzane, a mikrofon się zamyka.IDLE
>PROCESSING
>IDLE
– aplikacja internetowa używa interfejsu APIsendTextQuery()
do wysyłania zapytania tekstowego do działania.IDLE
>LISTENING
>IDLE
– użytkownik otwiera mikrofon, ale nie wydaje zapytania.
Aby używać tej funkcji w akcji, dodaj do kodu aplikacji internetowej onInputStatusChanged()
, jak widać w tym fragmencie kodu:
onInputStatusChanged(inputStatus) {
console.log("The new input status is: ", inputStatus);
}
Wywołanie onInputStatusChanged()
zwraca jeden parametr enum: inputStatus
. Możesz sprawdzić tę wartość, by sprawdzić obecny stan danych wejściowych. inputStatus
może mieć wartość LISTENING
, PROCESSING
lub IDLE
.
Następnie dodaj do obiektu callbacks
obiekt onInputStatusChanged()
, aby go zarejestrować, jak pokazano w tym fragmencie kodu:
/**
* 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);
}
}