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 w celu aktualizacji odpowiednio dostosować aplikację internetową. Tego wywołania zwrotnego należy używać tylko po stronie serwera i modelu realizacji tworzenia interaktywnego obszaru roboczego.

Więcej informacji o onUpdate(): Przekazywanie danych do aktualizowania aplikacji internetowej.

onTtsMark()

Wywołanie zwrotne onTtsMark() jest wywoływane, gdy w parametrze znajdują się niestandardowe tagi <mark> Język znaczników syntezy mowy (SSML) odpowiedzi są odczytywane użytkownikowi podczas zamiany tekstu na mowę (TTS). Dostępne opcje używaj usługi onTtsMark() zarówno do programowania realizacji po stronie serwera, jak i klienta modeli ML.

W tych fragmentach kodu onTtsMark() synchronizuje animację aplikacji internetowej z odpowiednim wyjściem zamiany tekstu na mowę. Gdy działanie informuje użytkownika: „Przepraszamy, zniknęła”. Aplikacja internetowa przeliteruje poprawne słowo i wyświetla litery użytkownika.

W poniższym przykładzie moduł obsługi webhooka revealWord zawiera element niestandardowy w odpowiedzi do użytkownika, który przegrał 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 wywołanie zwrotne onTtsMark(), sprawdza i wykonuje funkcję revealCorrectWord(), która aktualizuje aplikacji internetowej:

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 interaktywnej akcji obszaru roboczego. Zmiany stanu danych wejściowych wskazują, kiedy mikrofon otwiera się i zamyka lub gdy Asystent przetwarza zapytanie. następujące zdarzenia mogą powodować zmianę stanu danych wejściowych:

  • Użytkownik mówiący do akcji
  • Użytkownik wpisuje tekst w aplikacji Wyszukiwarka Google na Androida (AGSA)
  • Aplikacja internetowa używająca interfejsu API sendTextQuery() do wysyłania zapytania tekstowego do akcji
  • działanie zapisujące w pamięci domowej i inne zdarzenia Asystenta,

Głównym przypadkiem użycia tego wywołania zwrotnego jest zsynchronizowanie akcji z parametrem między interakcjami głosowymi użytkownika. Na przykład jeśli użytkownik gra w grę interaktywną gra Canvas i włącza mikrofon. Możesz wstrzymać grę, gdy użytkownik przemawia. Możesz też poczekać, aż mikrofon zostanie włączony, aby wysłać zapytanie tekstowe do Asystenta, aby upewnić się, że wiadomość została odebrana.

Ten interfejs API zgłasza następujące stany:

  • LISTENING – oznacza, że mikrofon jest włączony.
  • IDLE – mikrofon jest wyłączony.
  • PROCESSING – oznacza, że Asystent wykonuje w tej chwili zapytanie, mikrofon jest wyłączony.

Interfejs API zgłasza do Akcji stan danych wejściowych za każdym razem, gdy zmieni się stan.

Mimo że możliwe jest dowolne przejście między stanami, typowe są następujące przepływy:

  • IDLE>LISTENING>PROCESSING>IDLE – użytkownik wymawia zapytanie, po przetworzeniu zapytania i zamykaniu mikrofonu.
  • IDLE>PROCESSING>IDLE – aplikacja internetowa używa interfejsu API sendTextQuery() , aby wysłać zapytanie tekstowe do akcji.
  • IDLE>LISTENING>IDLE – użytkownik otwiera mikrofon, ale tego nie robi i wypowiedz zapytanie.

Aby używać tej funkcji w akcji, dodaj aplikację onInputStatusChanged() do swojej aplikacji internetowej zgodnie z poniższym fragmentem kodu:

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

Wywołanie zwrotne onInputStatusChanged() przekazuje jeden parametr wyliczenia, inputStatus Możesz sprawdzić tę wartość, aby poznać bieżący stan sygnału. inputStatus może mieć wartość LISTENING, PROCESSING lub IDLE.

Następnie dodaj onInputStatusChanged() do obiektu callbacks, aby go zarejestrować, jako 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);
 }
}