You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写DialogFlow Webhook返回SSML音频播放及格式报错求助

解决DialogFlow Webhook返回SSML不显示及Google助手报错的问题

我之前也踩过完全一样的坑!折腾了好一阵才摸清楚正确的响应格式,现在把解决方案分享给你:

问题根源

DialogFlow的Webhook响应得同时兼顾自身格式和Google Actions的要求:

  • 直接在顶级JSON里加ssml键没用,DialogFlow控制台不识别这个顶级字段,所以你在「Show JSON」里看不到它;
  • 只移除speech但没按Google Actions的规范放置SSML,就会触发MalformedResponse错误——因为Google助手找不到它要求的text_to_speech或ssml字段。

正确的响应格式(Python示例)

你需要把SSML放在payload.google.richResponse.items的simpleResponse结构里,同时保留fulfillmentText用于DialogFlow的文本显示:

import json

def generate_webhook_response():
    # 构造符合要求的响应字典
    response = {
        # 这个字段给DialogFlow控制台和非Google助手平台显示文本
        "fulfillmentText": "您好,这是测试的文本内容",
        "payload": {
            "google": {
                "richResponse": {
                    "items": [
                        {
                            "simpleResponse": {
                                # 显示给用户的文本(和fulfillmentText一致也可以)
                                "text": "您好,这是测试的文本内容",
                                # 这里放你的SSML内容,必须用<speak>标签包裹
                                "ssml": "<speak>欢迎使用<say-as interpret-as='ordinal'>第1</say-as>个测试SSML响应</speak>"
                            }
                        }
                    ]
                }
            }
        }
    }
    # 返回JSON字符串
    return json.dumps(response)

关键说明

  1. fulfillmentText不能丢:它是DialogFlow识别的核心文本字段,确保控制台能正常显示回复内容;
  2. SSML必须放在指定嵌套结构:Google助手只会读取payload.google.richResponse.items里的simpleResponse中的ssml或textToSpeech字段;
  3. SSML格式要合法:必须用<speak>标签包裹所有内容,里面的标签也要符合Google助手的SSML规范,否则会被自动忽略。

这样调整后,你在DialogFlow的「Show JSON」里能看到完整的payload结构,Google助手也能正确解析SSML,不会再抛出错误——亲测有效(Did the trick)!

内容的提问来源于stack exchange,提问作者S4rt-H4K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:49:25