AWS Lex配置Node.js Lambda做意图fulfillment报Invalid Lambda Response错误如何处理
AWS Lex Lambda Fulfillment 无效响应错误解决方案
无效Lambda响应:从Lambda接收到无效响应:无法构造IntentResponse实例,问题:已验证的对象为空。来源:{"sessionAttributes":{},"recentIntentSummaryView":[],"activeContexts":[],"dialogAction":{"type":"Close","fulfillmentState":"Fulfilled","message":{"contentType":"PlainText","content":"Okay Added"}}}; 行: 1, 列: 197
核心原因
- 返回的响应结构和使用的Lex版本(V1/V2)不匹配,或者Node.js Lambda没有正确返回完整响应对象
- 响应结构在Lambda逻辑执行中最终返回了null/undefined,导致Lex无法解析
常见问题&修复方案
1. 确认Lex版本匹配响应格式
你当前返回的是Lex V1的标准响应结构,如果使用的是Lex V2版本,需要切换为V2的响应格式:
Lex V1 正确返回示例(Node.js)
// async 写法 exports.handler = async (event) => { // 业务逻辑处理 const response = { sessionAttributes: event.sessionAttributes || {}, dialogAction: { type: "Close", fulfillmentState: "Fulfilled", message: { contentType: "PlainText", content: "Okay Added" } } }; // 必须显式return响应对象 return response; }; // callback 写法 exports.handler = (event, context, callback) => { // 业务逻辑处理 const response = { sessionAttributes: event.sessionAttributes || {}, dialogAction: { type: "Close", fulfillmentState: "Fulfilled", message: { contentType: "PlainText", content: "Okay Added" } } }; // 必须将响应作为第二个参数传入callback callback(null, response); };
Lex V2 正确返回示例(Node.js)
exports.handler = async (event) => { const response = { sessionState: { dialogAction: { type: "Close" }, intent: { name: event.sessionState.intent.name, state: "Fulfilled" } }, messages: [ { contentType: "PlainText", content: "Okay Added" } ] }; return response; };
2. 排查异步逻辑问题
如果业务逻辑包含数据库查询、第三方接口请求等异步操作,必须加await等待操作完成后再生成返回响应,避免函数提前返回空值。
3. Lambda测试验证
直接在Lambda控制台使用Lex模拟事件做测试,检查Lambda返回结果是否为完整的响应对象,不是null或undefined。
内容的提问来源于stack exchange,提问作者vineet
相关产品推荐
相关产品推荐

