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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:13