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

使用Actions-on-Google NodeJS库与Dialogflow Fulfillment遇响应格式错误求助

解决Actions-on-Google中MalformedResponse错误的两种场景

我之前在使用Actions-on-Google NodeJS库搭配dialogflow-fulfillment时,也碰到过一模一样的问题!其实核心是对conv.close()的用法理解有偏差,让我帮你拆解问题和解决办法:

情况1:未使用conv.close()时报错MalformedResponse 'final_response' must be set

这个报错的逻辑很清晰:Actions on Google平台要求,当你要结束对话时,必须明确标记这是最终响应。如果你只调用了conv.ask()添加内容,却没有告诉平台“这是最后一轮回复”,平台会认为你的响应不完整,就会抛出这个错误。

情况2:使用conv.close()搭配Suggestions时报错

你这里的问题是把Suggestions实例直接传给了conv.close(),但conv.close()的正确用法不是这样的:

  • conv.close()的作用是标记当前响应为最终响应,它可以接受内容参数,但参数需要是完整的响应内容(比如文本数组或结构化响应对象);
  • 更常用的方式是先通过conv.ask()添加所有需要的内容(文本、富媒体元素都可以),再调用无参数的conv.close()来结束对话。

正确代码示例

下面两种写法都可以解决你的问题:

写法1:先添加所有内容,再标记结束

let conv = agent.conv();
// 添加文本内容
conv.ask('Sample Title');
conv.ask('Sample Next Line');
// 添加建议芯片
conv.ask(new Suggestions('Lets Go!!', 'Awesome!!'));
// 标记对话为最终响应
conv.close();
agent.add(conv);

写法2:直接把所有内容传给conv.close()

let conv = agent.conv();
// 一次性传入所有响应内容,同时标记结束
conv.close([
  'Sample Title',
  'Sample Next Line',
  new Suggestions('Lets Go!!', 'Awesome!!')
]);
agent.add(conv);

关键注意点

  • 如果你需要结束对话,必须调用conv.close(),否则会触发情况1的报错;
  • 富媒体元素(比如Suggestions)需要通过conv.ask()添加,或者作为数组项传给conv.close(),不能直接作为conv.close()的唯一参数;
  • 确保你的响应结构符合Actions on Google的规范,dialogflow-fulfillment库会帮你转换格式,但前提是你调用API的方式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:22:54