我已阅读Lex Docs on Responses
我搜索过并发现:
- 未答复的question on same error.
- 未答复的similar question but in Python.
- 未答复的similar question in Amazon Dev Forum.
所以我的问题仍然存在。是什么导致/如何在Lex chat bot中修复此错误:
发生错误:Lambda响应无效:
在同一个话语中达到了履行lambda的第二次执行
只有在尝试使用Delegate进行响应时才会出现此错误。这是代表响应的AWS lambda(node.js 6.10)代码:
exports.handler = (event, context, callback) => {
try {
intentProcessor(event,
(response) => {
callback(null, response);
});
} catch (err) {
callback(err);
}
};
function intentProcessor(intentRequest, callback) {
respond = delegate(sessionAttributes,intentRequest['currentIntent']['slots']);
callback(respond);
}
function delegate(sessionAttributes, slots){
return {
sessionAttributes,
dialogAction: {
type: "Delegate",
slots
}
};
}
我已经确认响应按预期返回,其中包含每个Docs委托的最低要求,即sessionAttributes和DialogAction:type和slots。插槽按预期返回null。
其他可能的相关信息:
- 意图有多个话语
- 意图有多个插槽
- 不需要任何插槽。
非常感谢任何可能导致此错误的建议或信息!
答案 0 :(得分:2)
我的猜测是你在delegate()
中呼叫FulfillmentCodeHook
。当委托被调用时,意味着
Lambda函数指示Amazon Lex选择下一步行动
现在,Lambda函数中有两个操作,DialogCodeHook
和FulfillmentCodeHook
。如果您在DialogCodeHook中,则delegate
将调用FulfillmentCodeHook。但如果您在FulfillmentCodeHook中,则会抛出错误。
但是,如果你在FulfillmentCodeHook中,并且由于某种原因你想要修改任何slot
的值,那么你可以将slot
的值设置为 null 和然后调用委托传递新的插槽集。这样,委托将再次调用DialogCodeHook。
来自AWS文档:
如果字段的值未知,则必须将其设置为null。您 如果您的fufillment将获得DependencyFailedException异常 函数返回Delegate对话框操作而不删除任何 槽。
希望它有所帮助。