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)
关键说明
fulfillmentText不能丢:它是DialogFlow识别的核心文本字段,确保控制台能正常显示回复内容;- SSML必须放在指定嵌套结构:Google助手只会读取
payload.google.richResponse.items里的simpleResponse中的ssml或textToSpeech字段; - SSML格式要合法:必须用
<speak>标签包裹所有内容,里面的标签也要符合Google助手的SSML规范,否则会被自动忽略。
这样调整后,你在DialogFlow的「Show JSON」里能看到完整的payload结构,Google助手也能正确解析SSML,不会再抛出错误——亲测有效(Did the trick)!
内容的提问来源于stack exchange,提问作者S4rt-H4K
相关产品推荐
相关产品推荐

