콜백

Interactive Canvas 작업에서 다음 콜백을 구현할 수 있습니다.

onUpdate()

onUpdate() 콜백은 웹훅에서 웹 앱으로 데이터를 전달하여 웹 앱을 적절하게 업데이트합니다. 이 콜백은 Interactive Canvas 개발의 서버 측 처리 모델에서만 사용해야 합니다.

onUpdate()에 관한 자세한 내용은 데이터를 전달하여 웹 앱 업데이트를 참고하세요.

onTtsMark()

onTtsMark() 콜백은 TTS (텍스트 음성 변환) 중에 응답의 음성 합성 마크업 언어 (SSML)에 포함된 맞춤 <mark> 태그를 사용자에게 읽을 때 호출됩니다. 서버 측 처리 개발 모델과 클라이언트 측 처리 개발 모델 모두에서 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()

Interactive Canvas 작업에서 입력 상태가 변경되면 onInputStatusChanged() 콜백이 알려줍니다. 입력 상태 변경은 마이크가 열리고 닫히는 시점 또는 어시스턴트가 쿼리를 처리하는 시점을 나타냅니다. 다음과 같은 이벤트로 인해 입력 상태가 변경될 수 있습니다.

  • 작업에 말하는 사용자
  • 사용자가 Android Google 검색 앱 (AGSA)에 텍스트를 입력하는 중입니다.
  • sendTextQuery() API를 사용하여 작업에 텍스트 쿼리를 전송하는 웹 앱
  • 집 스토리지 및 기타 어시스턴트 이벤트에 쓰는 작업

이 콜백의 기본 사용 사례는 작업을 사용자의 음성 상호작용과 동기화하는 것입니다. 예를 들어 사용자가 Interactive Canvas 게임을 하면서 마이크를 열면 사용자가 말하는 동안 게임을 일시중지할 수 있습니다. 마이크가 켜질 때까지 기다렸다가 어시스턴트에 텍스트 쿼리를 보내 수신되었는지 확인할 수도 있습니다.

이 API는 다음 상태를 보고합니다.

  • LISTENING - 마이크가 열려 있음을 나타냅니다.
  • IDLE - 마이크가 닫혀 있음을 나타냅니다.
  • PROCESSING - 어시스턴트가 현재 쿼리를 실행 중이며 마이크가 닫혀 있음을 나타냅니다.

API는 상태가 변경될 때마다 작업에 입력 상태를 보고합니다.

상태 간에 모든 전환이 가능하지만 일반적인 흐름은 다음과 같습니다.

  • IDLE>LISTENING>PROCESSING>IDLE - 사용자가 쿼리를 말하면 쿼리가 처리되고 마이크가 닫힙니다.
  • IDLE>PROCESSING>IDLE - 웹 앱이 sendTextQuery() API를 사용하여 작업에 텍스트 쿼리를 보냅니다.
  • IDLE>LISTENING>IDLE - 사용자가 마이크를 열지만 쿼리를 말하지 않습니다.

작업에서 이 기능을 사용하려면 다음 스니펫과 같이 웹 앱 코드에 onInputStatusChanged()를 추가하세요.

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

onInputStatusChanged() 콜백은 단일 enum 매개변수 inputStatus를 다시 전달합니다. 이 값을 통해 현재 입력 상태를 확인할 수 있습니다. inputStatusLISTENING, PROCESSING 또는 IDLE일 수 있습니다.

다음으로, 아래 스니펫과 같이 callbacks 객체에 onInputStatusChanged()를 추가하여 등록합니다.

 /**
  * 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);
 }
}