Google Home에서 요청했는지 여부를 Webhook에서 확인

Google 어시스턴트는 Android 6.0 이상의 Android에서 사용하거나 Google Home에서 사용할 수 있습니다. Dialogflow의 Fulfillment에서 Webhook을 Heroku 등에서 받고 응답을 반환하는 API를 만든 경우 요청이 Google Home에서인지 스마트 폰에서인지를 판별하여 반환하는 메시지를 바꾸고 싶은 경우가 있습니다. 예를 들어, 응답 시 앱으로 안내하고 싶다면 스마트폰에서 '자세히 알아보려면 앱을 실행하세요.' 이렇게 응답 메시지가 미묘하게 바뀌는 경우나 날씨 등의 정보라면 디스플레이가 있는 스마트폰에는 날씨 아이콘을 돌려주는 등입니다.



surface.capabilities 확인



요청의 Json surface.capabilities 속성을 확인합니다.
{ "originalRequest":
  {
    //...省略
    "data":
    { 
      // ...省略
      "surface": { "capabilities": [ 
        { "name": "actions.capability.AUDIO_OUTPUT" } 
        { "name": "actions.capability.SCREEN_OUTPUT" }
      ] },
      // ...省略
    }
  }
}
AUDIO_OUTPUT 는 음성 회신이 가능한 것을 나타내고, SCREEN_OUTPUT 는 화면 표시가 가능한 것을 나타냅니다. 배열형의 프로퍼티 때문에 스마트폰의 경우는 양쪽 모두, 스피커의 경우는 AUDIO_OUTPUT 만이 설정된 리퀘스트가 보내져 옵니다.

AppRequest  |  Actions on Google  |  Google Developers

앱 자체 설정



원래 Google Home에만 대응하고 싶은 경우는 Action on Google로 설정할 수 있습니다.



Google Home에서만 사용할 수 있는 피카츄 앱은 이 설정을 사용하는 것 같습니다.

Google Japan Blog : Google Home에서 피카츄와 이야기합시다!

보충



스마트폰과 스피커로 대화를 분기시키는 경우 Dialogflow의 Intents에서 Context를 설정함으로써 특정 Surface만을 트리거로 하도록 Intent를 설정할 수 있는 것 같다. 주제와 벗어났기 때문에 할애. 이러한 Surface의 제어에 대해서는, 상기의 경우도 포함해 공식 문서에 정리되고 있으므로 자세한 것은 그쪽을 참조해 주세요.

Surface Capabilities  |  Actions on Google  |  Google Developers

좋은 웹페이지 즐겨찾기