0

我正在开发一个带有 Dialogflow 实现的 Google Action 并且有一个奇怪的错误。在某些时候,尽管答案是正确形成的,但它并没有被正确地解析为 AppResponse。

唯一不同的似乎是尺寸。我测量了大小,发现当后端的 JSON 响应超过 1021 个字符(文本中多一个字符就足够了)时,它给了我这个错误:

由于语音响应为空,无法将 Dialogflow 响应解析为 AppResponse

在响应文本中只添加一个额外的字符是可重现的,这会让响应失败。

我找不到关于 JSON 响应的任何大小限制。对于我的示例,响应文本和卡片中的所有限制都足够了。

{
"payload": {
    "google": {
        "expectUserResponse": true,
        "richResponse": {
            "items": [
                {
                    "simpleResponse": {
                        "textToSpeech": "328 characters here"
                    }
                },
                {
                    "basicCard": {
                        "title": "39 characters",
                        "subtitle": "16 characters",
                        "formattedText": "82 characters here"
                    }
                }
            ],
            "suggestions": [
                {
                    "title": "13 characters"
                },
                {
                    "title": "14 characters"
                },
                {
                    "title": "6 characters"
                }
            ]
        }
    }
},
"outputContexts": [
    {
        "name": "default",
        "lifespanCount": 99,
        "parameters": {
            "data": "54 characters"
        }
    }
]
}
4

1 回答 1

0

问题实际上与 NodeJS Express 服务器压缩以及 AWS API 网关有关。在某个阈值之后,Express 服务器激活 GZIP 内容编码,这是 AWS API Gateway 无法理解的。禁用压缩解决了这个问题。

于 2019-02-14T20:43:15.577 回答