为什么旋转木马没有显示在控制台模拟器中?

时间:2018-03-06 07:27:36

标签: actions-on-google dialogflow

我正在尝试弄清楚如何在DialogFlow的webhook响应中嵌入Google Actions响应,例如carousel

我正在使用REST协议的V2,所以我在ACTIONS_ON_GOOGLE字段填写sourcepayload字段包含指定的Google操作字段(根据{{3 }})。我发送以下回复:

{
   "fulfillmentText":"This is a carousel.",
   "source":"ACTIONS_ON_GOOGLE",
   "payload":{
      "conversationToken":"",
      "expectUserResponse":true,
      "expectedInputs":[
         {
            "inputPrompt":{
               "initialPrompts":[
                  {
                     "textToSpeech":"This is a carousel."
                  }
               ],
               "noInputPrompts":[
               ]
            },
            "possibleIntents":[
               {
                  "intent":"actions.intent.OPTION",
                  "inputValueData":{,
                     "@type":"type.googleapis.com/google.actions.v2.OptionValueSpec"
                     "carouselSelect":{
                        "items":[
                           {
                              "optionInfo":{
                                 "key":"key1",
                                 "synonyms":[
                                    "Option 1"
                                 ]
                              },
                              "title":"Option 1",
                              "description":"Option 2"
                           },
                           {
                              "optionInfo":{
                                 "key":"key2",
                                 "synonyms":[
                                    "Option 2"
                                 ]
                              },
                              "title":"Option 2",
                              "description":"Option 2"
                           }
                        ]
                     }
                  }
               }
            ]
         }
      ]
   }
}

在控制台中尝试此操作时,不显示轮播。仅显示文本This is a carousel.。为了您的信息,我没有包含image字段,因为根据规范它是可选的,但即使是图像也没有显示轮播。

这很难调试,因为我的actions.intent.OPTION意图没有显示在响应标签中的possibleIntents[]数组中。我期望这个actions.intent.OPTION意图与Dialogflow响应生成的其他意图(例如assistant.intent.action.TEXT)合并。

我在这里做错了什么?我是否可以通过使用V2而不是Dialogflow REST协议的V1来拍摄自己的脚?

在囚犯的初步反馈后更新

我尝试了以下回复,但仍未获得任何轮播:

{
   "fulfillmentText":"Here you go.",
   "source":"ACTIONS_ON_GOOGLE",
   "payload":{
      "expectUserResponse":true,
      "richResponse":{
         "items":[
            {
               "simpleResponse":{
                  "textToSpeech":"Here are your results."
               }
            }
         ]
      },
      "systemIntent":{
         "intent":"actions.intent.OPTION",
         "data":{
            "carouselSelect":{
               "items":[
                  {
                     "optionInfo":{
                        "key":"Option1",
                        "synonyms":[
                           "Option2"
                        ]
                     },
                     "title":"Option3",
                     "description":"Option4"
                  },
                  {
                     "optionInfo":{
                        "key":"Option5",
                        "synonyms":[
                           "Option6"
                        ]
                     },
                     "title":"Option7",
                     "description":"Option8"
                  }
               ]
            },
            "@type":"type.googleapis.com/google.actions.v2.OptionValueSpec"
         }
      }
   }
}

我还尝试在Dialogflow中手动创建一个intent,返回一个'hardcoded'轮播(也就是说,没有履行回调),这个轮播完全显示出来。所以我确信控制台配置正确。

我也将我的回答与How can I integrate the Google Actions responses in a webhook response in Dialogflow?中的回答进行比较,但到目前为止没有成功。

1 个答案:

答案 0 :(得分:3)

你没有自己的脚 - 但是你已经做了一些已经有点复杂甚至更复杂的东西。有两点需要注意:

  1. 更正:确保payload与以前的data相同,但其他字段的格式已更改。

  2. 您需要确保模拟器处于手机模式而不是扬声器模式。

  3. 详细信息如下。

    记录的对话流差异

    Dialogflow响应的Actions on Google documentation有点令人困惑。它只是表示expectedInputs.possibleIntents下的响应应该在data.google.systemIntent之下,而不是提供完整的示例。对于V2,那将是payload.google.systemIntent

    inputPrompt对象也进行了一些重组,因此您应该发送包含richResponse对象的simpleResponse

    更新我已对此进行了测试。这是应该返回的整个 JSON。请注意payload的内容正是data的内容。 source字段被忽略,显然与有效负载无关。

    另请参阅https://github.com/dialogflow/fulfillment-webhook-json,其中包含一些示例。

    {
        "payload": {
            "google": {
                "expectUserResponse": true,
                "richResponse": {
                    "items": [
                        {
                            "simpleResponse": {
                                "textToSpeech": "This is a carousel"
                            }
                        }
                    ]
                },
                "systemIntent": {
                    "intent": "actions.intent.OPTION",
                    "data": {
                        "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
                        "carouselSelect": {
                            "items": [
                                {
                                    "optionInfo": {
                                        "key": "key1",
                                        "synonyms": [
                                            "Option 1"
                                        ]
                                    },
                                    "title": "Option 1",
                                    "description": "Option 2"
                                },
                                {
                                    "optionInfo": {
                                        "key": "key2",
                                        "synonyms": [
                                            "Option 2"
                                        ]
                                    },
                                    "title": "Option 2",
                                    "description": "Option 2"
                                }
                            ]
                        }
                    }
                }
            }
        }
    }
    

    模拟器表面设置

    确保您的模拟器设置为"电话"表面而不是"扬声器"表面。选项不会显示在扬声器上。

    设置应如下所示:phone setting

    喜欢这样:speaker setting