대화 웹훅 형식{:#conversation-webhook-format} (Dialogflow)

이 섹션에서는 Actions on Google이 Actions SDK를 통해 처리됩니다.

대화가 시작되면 고유한 conversationId로 식별됩니다. 이후 각 사용자에게 적용 어시스턴트에 쿼리하면 처리에서는 다음과 같은 인텐트를 수신합니다. 응답해야 합니다 이 conversationId는 모든 요청에서 유지되고 응답 쌍입니다.

요청 본문

사용자가 첫 쿼리를 하거나 후속 입력을 제공하면 어시스턴트에서 요청을 전송합니다. 추가하는 것입니다 대화 웹훅 요청 어시스턴트의 인텐트에는 트리거된 인텐트, 사용자의 원시 텍스트, 사용자 기기의 표면적 기능을 평가합니다.

대화 웹훅 형식의 요청에 대한 주요 필드는 아래에 요약되어 있습니다.

필드 설명
isInSandbox 이 부울 변수는 주로 트랜잭션 기능을 사용하여 웹훅이 샌드박스에서 이 요청을 처리해야 하는지 여부를 나타냅니다. 있습니다. 샌드박스 모드에서는 웹훅에서 사용자에 대한 구매주문서를 청구하거나 처리해서는 안 됩니다. 기본값은 "true"입니다.
surface 사용자가 상호작용하는 어시스턴트 노출 영역 및 기능에 관한 정보
Inputs 호출 요청에 관한 정보입니다. 트리거 호출의 경우 여기에는 인텐트입니다. 이후 요청의 경우 이 객체에는 처리에서 지정한 예상 입력을 나타냅니다.
User 요청을 시작한 사용자에 대한 정보입니다. 이 정보에는 권한 및 사용자의 언어로 인식됩니다.
Conversation 대화 ID, 유형 등 대화 컨텍스트에 관한 정보 (예: 이 요청이 새 대화를 시작하는지 여부) 및 대화 토큰 대화 수명 동안 영구 데이터를 저장하는 데 사용할 수 있습니다.
availableSurfaces 이 정보는 다음에 사용됩니다. 다중 표면 대화를 지원합니다.

간단한 호출 요청 예시

아래 스니펫은 대화 웹훅 형식의 호출 요청 예시를 보여줍니다.

{
  "user": {
    "userId": "ABwppHEF...",
    "locale": "en-US",
    "lastSeen": "2018-03-21T17:59:52Z",
    "userStorage": "{\"data\":{}}"
  },
  "device": {},
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "conversation": {
    "conversationId": "1521784527171",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.MAIN",
      "rawInputs": [
        {
          "inputType": "VOICE",
          "query": "Talk to my test app"
        }
      ]
    }
  ],
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}

간단한 대화 요청의 예

아래 스니펫은 대화 웹훅 형식의 대화 요청 예시를 보여줍니다. 여기서 사용자 입력은 텍스트 문자열 (예: 'My Lucy number is 88.')입니다.

{
  "user": {
    "userId": "ABwppHEF...",
    "locale": "en-US",
    "lastSeen": "2018-03-21T17:59:52Z",
    "userStorage": "{\"data\":{}}"
  },
  "device": {},
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "conversation": {
    "conversationId": "1521784527171",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.TEXT",
      "rawInputs": [
        {
          "inputType": "VOICE",
          "query": "My lucky number is 88."
        }
      ]
    }
  ],
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}

응답 본문

처리 엔드포인트의 HTTP 게시물 헤더에 있는 Content-Type application/json여야 합니다.

응답은 대화 웹훅 형식에는 사용자 (오디오 및 시각적 구성요소 포함) 및 (예상 인텐트라고 함)에서 트리거됩니다. 예상 인텐트는 설명된 대로 어시스턴트가 이해하는 모든 인텐트가 될 수 있습니다. Intents API 참조 문서를 참고하세요.

응답의 사용자 인터페이스 형식 지정에 대해 자세히 알아보려면 어시스턴트에 표시됩니다. 자세한 내용은 응답 문서

간단한 응답 예시

아래 스니펫은 대화의 간단한 응답 예시를 보여줍니다. 웹훅 형식입니다.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "You are using the Actions SDK. Do you want to hear more about it?"
              }
            }
          ]
        }
      }
    }
  ]
}

도우미 예

아래 스니펫은 대화에서 도우미 인텐트를 사용하는 예를 보여줍니다. 웹훅 형식입니다. 이 예시에서 웹훅은 어시스턴트에 다음을 가져오도록 지시하는 actions.intent.OPTIONS 도우미 인텐트 사용자가 여러 옵션 중에서 선택할 수 있습니다.

도우미 인텐트 사용에 관한 자세한 내용은 도우미 가이드를 참조하세요.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.OPTION",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
            "carouselSelect": {
              "items": [
                {
                  "optionInfo": {
                    "key": "one",
                    "synonyms": [
                      "synonym of KEY_ONE 1",
                      "synonym of KEY_ONE 2"
                    ]
                  },
                  "description": "Description of number one",
                  "title": "Number one"
                },
                {
                  "optionInfo": {
                    "key": "two",
                    "synonyms": [
                      "synonym of KEY_TWO 1",
                      "synonym of KEY_TWO 2"
                    ]
                  },
                  "description": "Description of number two",
                  "title": "Number two"
                }
              ]
            }
          }
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "this shows an example of a carousel"
              }
            }
          ],
          "suggestions": [
            {
              "title": "1"
            },
            {
              "title": "2"
            }
          ]
        }
      }
    }
  ]
}

대화 종료 예시

아래 스니펫은 대화를 종료하는 간단한 응답의 예를 보여줍니다. 세션을 사용하도록 설정합니다.

expectedUserResponse 응답 메시지의 false 값이 어시스턴트에 더 이상 사용자가 없음을 알립니다. 현재 대화를 종료해야 한다는 것을 알립니다. 이 finalResponse 드림 값은 어시스턴트가 먼저 사용자에게 표시하거나 출력해야 하는 내용을 나타냅니다. 대화는 끝납니다.

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Good bye"
          }
        }
      ]
    }
  }
}

사용자가 표준 문구를 말하지 마세요. 자세한 내용은 대화 종료.