如何通过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"
                                    ]
                                }
                            }
                        ]
                    }
                }
            }
        }
    }
}