使用Dialogflow v2+Actions v2 API报错:MalformedResponse需设置final_response
解决Dialogflow Fulfillment中MalformedResponse 'final_response' must be set错误
嘿,这个MalformedResponse 'final_response' must be set错误我之前也碰到过,大概率是你Webhook返回的响应格式不符合Google Actions的要求,我给你拆解下问题和解决办法:
错误核心原因
这个错误本质是:当对话需要结束时,你的Webhook没有返回标记为“最终响应”的内容。Google Actions v2要求,对话收尾阶段必须明确告诉平台“对话可以结束了”,否则就会抛出这个格式错误。
从你给出的代码片段看,conv.as...应该是没写完的响应调用,另外很可能是误用了响应方法——比如该用conv.close()的时候用了conv.ask():
conv.ask():用于需要用户继续输入的场景,平台会等待用户的下一轮对话,不会生成final_responseconv.close():用于对话结束的场景,会生成final_response,告诉平台对话到此为止
修正后的示例代码
把你的代码补全并调整响应方法,比如欢迎意图如果是只做问候就结束,应该这么写:
'use strict'; const functions = require('firebase-functions'); const { dialogflow } = require('actions-on-google'); const app = dialogflow(); app.intent('Default Welcome Intent', conv => { // 使用conv.close()返回最终响应,结束对话 conv.close(`欢迎使用我的技能!有需要随时召唤我~`); // 如果需要引导用户继续交互,才用conv.ask(),但要确保后续有对应的意图处理用户输入 // conv.ask(`欢迎使用我的技能!请问有什么可以帮你的?`); }); exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
额外排查要点
- 检查意图配置:确认你的
Default Welcome Intent是否被设置为“结束对话”的触发场景,如果是,必须用conv.close() - 避免手动构造响应JSON:尽量使用
actions-on-google库提供的conv.close()/conv.ask()方法,不要自己拼JSON结构,很容易出现格式遗漏 - 查看日志排查:去Dialogflow的Fulfillment页面或者Firebase Functions的日志里,查看Webhook的请求和响应详情,能更精准定位结构缺失的问题
内容的提问来源于stack exchange,提问作者miro
相关产品推荐
相关产品推荐

