W działaniu interaktywnego obszaru roboczego możesz zaimplementować te wywołania zwrotne:
onUpdate()
Wywołanie zwrotne onUpdate()
przekazuje dane z webhooka do aplikacji internetowej, aby ją prawidłowo zaktualizować. Tego wywołania zwrotnego należy używać tylko w przypadku modelu realizacji po stronie serwera tworzenia interaktywnego obszaru roboczego.
Więcej informacji o onUpdate()
znajdziesz w artykule Przekazywanie danych w celu aktualizowania aplikacji internetowej.
onTtsMark()
Wywołanie zwrotne onTtsMark()
jest wywoływane, gdy niestandardowe tagi <mark>
zawarte w języku znaczników syntezy mowy (SSML) Twojej odpowiedzi są odczytywane użytkownikowi w trakcie przetwarzania tekstu na mowę (TTS). Typu onTtsMark()
możesz używać zarówno w modelach programowania realizacji po stronie serwera, jak i po stronie klienta.
We fragmencie kodu poniżej onTtsMark()
synchronizuje animację aplikacji internetowej z odpowiednimi danymi wyjściowymi zamiany tekstu na mowę. Gdy akcja powie do użytkownika „Przykro nam, przegrana”, aplikacja internetowa przeliteruje właściwe słowo i wyświetla odpowiednie litery.
W poniższym przykładzie moduł obsługi webhooka revealWord
w odpowiedzi do użytkownika przegrał z grą:
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 następnie 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 Cię o zmianie stanu danych wejściowych w działaniu interaktywnego obszaru roboczego. Zmiany stanu wejścia wskazują, kiedy mikrofon otwiera się i zamyka lub Asystent przetwarza zapytanie. Stan danych wejściowych mogą powodować te zdarzenia:
- Użytkownik mówiący do akcji
- Użytkownik wpisujący tekst w aplikacji Wyszukiwarka Google na Androida (AGSA)
- Aplikacja internetowa używająca interfejsu API
sendTextQuery()
do wysłania zapytania tekstowego do akcji. - Akcja zapisująca dane w pamięci domowej oraz inne zdarzenia związane z Asystentem
Głównym przypadkiem użycia tego wywołania zwrotnego jest synchronizacja akcji z interakcjami głosowymi użytkownika. Jeśli na przykład użytkownik gra w interaktywną grę Canvas i włączy mikrofon, możesz wstrzymać grę, gdy ten użytkownik zacznie mówić. Możesz też zaczekać, aż mikrofon się włączy, i wysłać zapytanie do Asystenta, aby upewnić się, że je otrzyma.
Ten interfejs API zgłasza te stany:
LISTENING
– wskazuje, że mikrofon jest włączony.IDLE
– wskazuje, że mikrofon jest zamknięty.PROCESSING
– oznacza, że Asystent obecnie wykonuje zapytanie, a mikrofon jest wyłączony.
Przy każdej zmianie stanu interfejs API przekazuje do akcji stan danych wejściowych.
Chociaż możliwe jest przejście między stanami, najczęściej występują te procesy:
IDLE
>LISTENING
>PROCESSING
>IDLE
– użytkownik wypowiada zapytanie, przetwarza je, a mikrofon się wyłącza.IDLE
>PROCESSING
>IDLE
– aplikacja internetowa używa interfejsu APIsendTextQuery()
do wysyłania zapytania tekstowego do akcji.IDLE
>LISTENING
>IDLE
– użytkownik włącza mikrofon, ale nie wypowiada zapytania.
Aby użyć tej funkcji w akcji, dodaj onInputStatusChanged()
do kodu aplikacji internetowej, jak w tym fragmencie:
onInputStatusChanged(inputStatus) {
console.log("The new input status is: ", inputStatus);
}
Wywołanie zwrotne onInputStatusChanged()
zwraca jeden parametr wyliczeniowy inputStatus
. Możesz sprawdzić tę wartość, żeby zobaczyć aktualny stan wprowadzania. Pole inputStatus
może mieć wartość LISTENING
, PROCESSING
lub IDLE
.
Następnie dodaj onInputStatusChanged()
do obiektu callbacks
, aby go zarejestrować, jak pokazano w tym fragmencie:
/**
* 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);
}
}