我正在尝试弄清楚如何在DialogFlow的webhook响应中嵌入Google Actions响应,例如carousel。
我正在使用REST协议的V2,所以我在ACTIONS_ON_GOOGLE
字段填写source
,payload
字段包含指定的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?中的回答进行比较,但到目前为止没有成功。
答案 0 :(得分:3)
你没有自己的脚 - 但是你已经做了一些已经有点复杂甚至更复杂的东西。有两点需要注意:
更正:确保payload
与以前的data
相同,但其他字段的格式已更改。
您需要确保模拟器处于手机模式而不是扬声器模式。
详细信息如下。
记录的对话流差异
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"
}
]
}
}
}
}
}
}
模拟器表面设置
确保您的模拟器设置为"电话"表面而不是"扬声器"表面。选项不会显示在扬声器上。