对话 webhook 格式 {:#conversation-webhook-format} (Dialogflow)

本部分介绍 Actions on Google 调用您的 通过 Actions SDK 执行。

对话开始后,即会获得一个唯一的 conversationId 进行标识。对于每个后续用户 您的执行方式会收到一个 intent, 网络钩子必须处理和响应。此 conversationId 将存在于每个请求中, 响应对,直到对话结束。

请求正文

当用户进行初始询问或提供后续输入时,Google 助理会发送请求 。来自 Google 助理的对话 webhook 请求包含触发的 intent、用户输入的原始文本以及用户设备的外观功能等数据。

对话 webhook 格式中请求的关键字段总结如下:

字段 说明
isInSandbox 该布尔变量主要用于 事务功能,用于指明网络钩子是否应在沙盒中处理此请求 模式。在沙盒模式下,网络钩子不应向用户收取任何采购订单的款项,也不应履行任何采购订单。 默认设置为“true”。
surface 有关用户当前与之互动的 Google 助理 surface 及其功能的信息。
Inputs 调用请求的相关信息。对于触发调用,这包括一个 intent。对于后续的 请求,此对象可能还包含与 您的执行方式指定的预期输入。
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"
       
}
     
]
   
}
 
]
}

简单对话请求示例

以下代码段显示了一个对话 webhook 格式的对话请求示例, 其中,用户输入是文本字符串(例如,“My lucky 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"
       
}
     
]
   
}
 
]
}

响应正文

从执行端点向 Google 助理发送的 HTTP 发布的标头中的 Content-Type 必须为 application/json

响应(位于 对话 webhook 格式包含数据,例如显示 用户(包括音频和视觉组件)以及可被 在后续请求中触发(称为“预期意图”)。预期 intent 可以是 Google 助理可以理解的任何 intent,如前所述 Intents API 参考中给出的值。

详细了解如何在设置响应时 它们会显示在 Google 助理中,请参阅 响应文档。

简单响应示例

以下代码段显示了对话中的简单响应示例 webhook 格式。

{
 
"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?"
             
}
           
}
         
]
       
}
     
}
   
}
 
]
}

帮助程序示例

以下代码段展示了在对话中使用帮助程序 intent 的示例 webhook 格式。在此示例中,webhook 使用 actions.intent.OPTIONS 辅助 intent,用于指示 Google 助理获取 供用户在多个选项之间进行选择

如需详细了解如何使用辅助 intent,请参阅 帮助程序指南。

{
 
"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"
           
}
         
]
       
}
     
}
   
}
 
]
}

结束对话示例

以下代码段显示了一个用于结束对话的简单响应示例 会话 webhook 响应格式。

expectedUserResponse 响应消息中的 false 值会向 Google 助理表明,没有进一步的用户 正确输入,并结束当前对话。通过 finalResponse 值指示 Google 助理先显示或输出什么内容 对话结束。

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

了解如何在用户调用标准 来结束与 Google 助理的对话,请参阅 退出对话