如何在DialogFlow中实现Google Assistant多段式响应?
实现Google Assistant多段式响应(多个对话气泡)
嘿,我明白你想要的效果——就像Lucky Trivia那样,让Google Assistant分多个气泡依次展示内容对吧?其实这个实现起来并不复杂,核心是在Webhook返回的JSON响应里,给Google Assistant指定多个Simple Response条目,每个条目对应一个独立的对话气泡。
下面我给你一步步拆解实现方法:
核心原理
Google Assistant的多气泡响应,本质是通过richResponse.items数组(或者Dialogflow的fulfillmentMessages)包含多个simpleResponse对象,每个对象会被渲染成一个单独的对话气泡,同时语音也会按顺序播放每个条目的内容。
正确的JSON响应结构
你需要让PHP后端返回符合Dialogflow Webhook规范的JSON,这里有两种常用的写法:
写法1:使用payload.google.richResponse(推荐)
这种方式直接针对Google Assistant平台定制响应,结构清晰:
{ "payload": { "google": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "这是第一段语音内容", "displayText": "这是第一段对话气泡的文本" } }, { "simpleResponse": { "textToSpeech": "这是第二段语音内容", "displayText": "这是第二段对话气泡的文本" } }, { "simpleResponse": { "textToSpeech": "这是第三段语音内容", "displayText": "这是第三段对话气泡的文本" } } ] } } }, "fulfillmentText": "备用文本(当富响应无法渲染时显示)" }
写法2:使用fulfillmentMessages
这种方式是Dialogflow通用的富响应格式,适合需要兼容多个平台的场景:
{ "fulfillmentMessages": [ { "platform": "ACTIONS_ON_GOOGLE", "simpleResponses": { "simpleResponses": [ { "textToSpeech": "第一段语音", "displayText": "第一段气泡" }, { "textToSpeech": "第二段语音", "displayText": "第二段气泡" } ] } } ] }
PHP后端示例代码
下面是一个PHP的完整示例,直接返回上述结构的响应:
<?php // 务必设置正确的Content-Type header('Content-Type: application/json'); // 构造多段响应数据 $multiResponse = [ 'payload' => [ 'google' => [ 'richResponse' => [ 'items' => [ [ 'simpleResponse' => [ 'textToSpeech' => '欢迎来到我的小测试!', 'displayText' => '欢迎来到我的小测试!' ] ], [ 'simpleResponse' => [ 'textToSpeech' => '第一个问题:PHP的全称是什么?', 'displayText' => '第一个问题:PHP的全称是什么?' ] ], [ 'simpleResponse' => [ 'textToSpeech' => 'A) 私人家庭页面 B) 超文本预处理器 C) 公共主页', 'displayText' => 'A) 私人家庭页面 B) 超文本预处理器 C) 公共主页' ] ] ] ] ] ], 'fulfillmentText' => '欢迎来到我的小测试!第一个问题:PHP的全称是什么?A) 私人家庭页面 B) 超文本预处理器 C) 公共主页' ]; // 输出JSON echo json_encode($multiResponse); ?>
关键注意事项
- 格式正确性:确保PHP返回的JSON没有语法错误,
json_encode()默认会处理大部分转义问题,但如果有特殊字符可以加上JSON_UNESCAPED_UNICODE参数。 - 平台指定:如果用
fulfillmentMessages,一定要加上"platform": "ACTIONS_ON_GOOGLE",避免其他平台解析出错。 - 混合富响应:你还可以在
items数组里混合其他类型的响应(比如Basic Card、列表选择器),比如先一段文本气泡,再展示一张卡片,再一段文本气泡,Google Assistant会按顺序渲染。 - 测试工具:用Google Assistant模拟器测试响应,查看控制台的"Response"标签,确认多段响应是否被正确解析。
这样实现后,你的Assistant应用就会像Lucky Trivia一样,分多个气泡依次展示内容啦!
内容的提问来源于stack exchange,提问作者Octopus
相关产品推荐
相关产品推荐

