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
相关产品推荐
相关产品推荐

