Wywołania zwrotne

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 API sendTextQuery() 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);
 }
}