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

Actions on Google Node.js SDK v2: conv.ask()传JSON时建议按钮不显示

在Actions on Google SDK v2中直接传入JSON响应实现带建议按钮的Simple Response

我之前开发Actions on Google项目时也踩过一模一样的坑——v1的JSON响应结构拿到v2里直接用就失效了,核心问题是v2的响应层级结构和v1有本质区别,你之前的写法把suggestions和simpleResponse放在同一层级,导致SDK无法识别建议按钮的配置。

正确的JSON响应结构

在v2中,simpleResponse需要嵌套在richResponse.items数组中,而suggestions是richResponse的直接属性,这样才能被SDK正确解析并渲染建议按钮。你可以用下面的写法:

conv.ask({
  richResponse: {
    items: [
      {
        simpleResponse: {
          textToSpeech: 'blabla',
          displayText: 'display text'
        }
      }
    ],
    suggestions: [
      { title: 'Suggestion 1' },
      { title: 'Suggestion 2' }
    ]
  }
});

为什么之前的写法不生效?

你之前的代码把suggestions和simpleResponse平级放置,但在v2的Response类型定义里,建议按钮是richResponse的一部分,而非顶级属性。SDK会直接忽略这个无效的顶级suggestions字段,自然不会显示建议按钮。

这个结构和你用SDK内置类生成的响应完全一致——当你调用conv.ask(new SimpleResponse(...), new Suggestions(...))时,SDK内部也是把这些实例转化为上述的richResponse结构。

TypeScript类型校验提示

如果你用TypeScript,可以确保传入的对象符合SDK内置的RichResponse类型,这样编译时就能提前避免结构错误:

import { RichResponse } from 'actions-on-google';

const prebuiltResponse: RichResponse = {
  richResponse: {
    items: [
      {
        simpleResponse: {
          textToSpeech: 'blabla',
          displayText: 'display text'
        }
      }
    ],
    suggestions: [
      { title: 'Suggestion 1' },
      { title: 'Suggestion 2' }
    ]
  }
};

conv.ask(prebuiltResponse);

这样就能完美实现预先生成JSON响应文件,再直接传入conv.ask()的需求了。

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:03:35