Node.js Lex chat bot错误:在同一个语句上第二次执行lambda
我已经读过了。Node.js Lex chat bot错误:在同一个语句上第二次执行lambda,node.js,amazon-web-services,aws-lambda,amazon-lex,Node.js,Amazon Web Services,Aws Lambda,Amazon Lex,我已经读过了。 我已搜索并找到: -未回答的问题 -未回答的问题 -未回答的问题 因此,我的问题仍然存在。导致Lex chat bot出现此错误的原因/解决方法: 出现错误:Lambda响应无效: 在同一句话中第二次执行了lambda 该错误仅在尝试使用委托进行响应时发生。以下是代表响应的AWS lambda(node.js 6.10)代码: exports.handler = (event, context, callback) => { try { intent
我已搜索并找到:
-未回答的问题
-未回答的问题
-未回答的问题 因此,我的问题仍然存在。导致Lex chat bot出现此错误的原因/解决方法: 出现错误:Lambda响应无效:
在同一句话中第二次执行了lambda 该错误仅在尝试使用委托进行响应时发生。以下是代表响应的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
}
};
}
我已经确认,响应按预期返回,每个文档都有代表的最低要求,即sessionAttributes和DialogAction:type和slots。插槽按预期返回null
其他可能相关的信息:-意图有多种表达方式。
-意图有多个插槽。
-不需要任何插槽
对于可能导致此错误的任何建议或信息,我们将不胜感激 我猜您正在调用
FulfillmentCodeHook
中的delegate()
。当调用委托时,它意味着
Lambda函数指示Amazon Lex选择下一个操作过程
现在,Lambda函数中有两个操作,DialogCodeHook
和FulfillmentCodeHook
。如果您在DialogCodeHook中,那么委托
将调用FulfillmentCodeHook。但是如果您在FulfillmentCodeHook中,那么它将抛出一个错误
但是,如果您处于FulfillmentCodeHook中,并且由于某种原因您希望修改任何插槽的值,则可以将该插槽的值设置为null,然后调用传递新插槽集的代理。这样,代理将再次调用DialogCodeHook
来自AWS文件:
如果字段的值未知,则必须将其设置为null。你
如果您的填写失败,将获得DependencyFailedException异常
函数返回委托对话框操作,而不删除任何
插槽
希望能有所帮助。谢谢,这无疑为我指明了正确的方向。我的Lambda函数仅用于“实现”部分,而不用于用于DialogCodeHook
的“初始化和验证”部分。如果插槽是必需的,这就解决了问题,但我认为您不能将委托
用于非必需插槽,因此我必须将引导插槽
用于非必需插槽。非常感谢。