如何通过API.AI发送轮播?
How to send carousel through API.AI?
我的机器人想通过 API.AI 向 Google 助理发送轮播。我的理解是,需要在data
-> google
里面括起来,比如:
{
"data": {
"google": {
"expectUserResponse": true,
"isSsml": false,
"expectedInputs": [
{
"inputPrompt": {
"richInitialPrompt": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Hello World"
}
}
]
}
},
"possibleIntents": [
{
"intent": "actions.intent.OPTION",
"inputValueData": {
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
"carouselSelect": {
"items": [
{
"optionInfo": {"key": "FOO", "synonyms": ["foo"]},
"title": "Foo",
"image": {"url": "http://example.com/", "accessibilityText": "Foo"}
},
{
"optionInfo": {"key": "BAR", "synonyms": ["bar"]},
"title": "Bar",
"image": {"url": "http://example.com/", "accessibilityText": "Bar"}
}
]
}
}
}
]
}
]
}
}
}
但它不起作用。正确的格式是什么?
如果您通过模拟器对此进行测试,则应该会出现一个验证错误,至少可以为您提供一些有关缺少内容的指导。如果你连那个都没有,那么除了 data.google
对象之外的其他部分可能有问题,以至于 api.ai 有问题。
有很多事情乍看之下可能是问题所在。您不能只在 api.ai 响应中粘贴对话 webhook 响应。请参阅 https://developers.google.com/actions/apiai/webhook#response 以获取文档,但这里有一些我认为可能存在问题的地方
-
expectedInputs
属性 不应该存在。
- 您的
data.google.expectedInputs.possibleIntents
属性 应该在 data.google.systemIntent
- 您还需要提供 api.ai 字段,例如基本
speech
属性
data.google.expectedInputs.inputPrompt.richInitialPrompt
会在 data.google.richResponse
这里有一些 JSON 对我有用:
{
"speech": "Hello",
"contextOut": [
{
"name": "_actions_on_google_",
"lifespan": 100,
"parameters": {}
}
],
"data": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Hello"
}
}
],
"suggestions": []
},
"systemIntent": {
"intent": "actions.intent.OPTION",
"data": {
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
"carouselSelect": {
"items": [
{
"title": "Foo",
"image": {
"url": "http://example.com/foo.jpg",
"accessibilityText": "Foo title"
},
"optionInfo": {
"key": "foo-key",
"synonyms": [
"foo-alt-1",
"foo-alt-2"
]
}
},
{
"title": "Bar",
"image": {
"url": "http://example.com/bar.jpg",
"accessibilityText": "Bar title"
},
"optionInfo": {
"key": "bar-key",
"synonyms": [
"bar-alt-1",
"bar-alt-2"
]
}
}
]
}
}
}
}
}
}
我的机器人想通过 API.AI 向 Google 助理发送轮播。我的理解是,需要在data
-> google
里面括起来,比如:
{
"data": {
"google": {
"expectUserResponse": true,
"isSsml": false,
"expectedInputs": [
{
"inputPrompt": {
"richInitialPrompt": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Hello World"
}
}
]
}
},
"possibleIntents": [
{
"intent": "actions.intent.OPTION",
"inputValueData": {
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
"carouselSelect": {
"items": [
{
"optionInfo": {"key": "FOO", "synonyms": ["foo"]},
"title": "Foo",
"image": {"url": "http://example.com/", "accessibilityText": "Foo"}
},
{
"optionInfo": {"key": "BAR", "synonyms": ["bar"]},
"title": "Bar",
"image": {"url": "http://example.com/", "accessibilityText": "Bar"}
}
]
}
}
}
]
}
]
}
}
}
但它不起作用。正确的格式是什么?
如果您通过模拟器对此进行测试,则应该会出现一个验证错误,至少可以为您提供一些有关缺少内容的指导。如果你连那个都没有,那么除了 data.google
对象之外的其他部分可能有问题,以至于 api.ai 有问题。
有很多事情乍看之下可能是问题所在。您不能只在 api.ai 响应中粘贴对话 webhook 响应。请参阅 https://developers.google.com/actions/apiai/webhook#response 以获取文档,但这里有一些我认为可能存在问题的地方
-
expectedInputs
属性 不应该存在。 - 您的
data.google.expectedInputs.possibleIntents
属性 应该在data.google.systemIntent
- 您还需要提供 api.ai 字段,例如基本
speech
属性 data.google.expectedInputs.inputPrompt.richInitialPrompt
会在data.google.richResponse
这里有一些 JSON 对我有用:
{
"speech": "Hello",
"contextOut": [
{
"name": "_actions_on_google_",
"lifespan": 100,
"parameters": {}
}
],
"data": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Hello"
}
}
],
"suggestions": []
},
"systemIntent": {
"intent": "actions.intent.OPTION",
"data": {
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
"carouselSelect": {
"items": [
{
"title": "Foo",
"image": {
"url": "http://example.com/foo.jpg",
"accessibilityText": "Foo title"
},
"optionInfo": {
"key": "foo-key",
"synonyms": [
"foo-alt-1",
"foo-alt-2"
]
}
},
{
"title": "Bar",
"image": {
"url": "http://example.com/bar.jpg",
"accessibilityText": "Bar title"
},
"optionInfo": {
"key": "bar-key",
"synonyms": [
"bar-alt-1",
"bar-alt-2"
]
}
}
]
}
}
}
}
}
}