当响应大小超过 1021 个字符时,由于语音响应为空,无法将 Dialogflow 响应解析为 AppResponse

Failed to parse Dialogflow response into AppResponse because of empty speech response when response size exceeds 1021 characters

我正在使用 Dialogflow fulfillment 开发一个 Google 动作,但出现了一个奇怪的错误。 在某些时候,答案没有被正确解析为 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"
        }
    }
]
}

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