Lex chat bot error: Reached second execution of fulfillment lambda on the same utterance
Lex chat bot error: Reached second execution of fulfillment lambda on the same utterance
我已阅读 Lex Docs on Responses。
我搜索并发现:
- 未答复 question on same error.
- 未回复 similar question but in Python.
- 未回答 similar question in Amazon Dev Forum.
所以我的问题仍然存在。导致什么/如何修复 Lex 聊天机器人中的此错误:
An error has occurred: Invalid Lambda Response:
Reached second execution of fulfillment lambda on the same utterance
错误仅在尝试使用 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
}
};
}
我已确认响应按文档的最低要求按预期返回,即 sessionAttributes 和 DialogAction:类型和插槽。插槽按预期返回 null。
其他可能相关的信息:
- 意图有多个表达。
- 意图有多个插槽。
- None 个插槽是必需的。
非常感谢任何关于可能导致此错误的建议或信息!
我猜你是在 FulfillmentCodeHook
中调用 delegate()
。当调用委托时,这意味着
Lambda function directs Amazon Lex to choose the next course of action
现在,Lambda 函数中有两个动作,DialogCodeHook
和 FulfillmentCodeHook
。如果你在 DialogCodeHook 中,那么 delegate
会调用 FulfillmentCodeHook。但是如果你在 FulfillmentCodeHook 中,那么它会抛出一个错误。
但是,如果您在 FulfillmentCodeHook 中,并且由于某种原因您想修改任何 slot
的值,那么您可以将 slot
的值设置为 null 然后调用传递新插槽集的委托。这样,delegate 就会再次调用 DialogCodeHook。
来自 AWS 文档:
If the value of the field is unknown, you must set it to null. You
will get a DependencyFailedException exception if your fufillment
function returns the Delegate dialog action without removing any
slots.
希望对您有所帮助。
我已阅读 Lex Docs on Responses。
我搜索并发现:
- 未答复 question on same error.
- 未回复 similar question but in Python.
- 未回答 similar question in Amazon Dev Forum.
所以我的问题仍然存在。导致什么/如何修复 Lex 聊天机器人中的此错误:
An error has occurred: Invalid Lambda Response:
Reached second execution of fulfillment lambda on the same utterance
错误仅在尝试使用 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
}
};
}
我已确认响应按文档的最低要求按预期返回,即 sessionAttributes 和 DialogAction:类型和插槽。插槽按预期返回 null。
其他可能相关的信息:
- 意图有多个表达。
- 意图有多个插槽。
- None 个插槽是必需的。
非常感谢任何关于可能导致此错误的建议或信息!
我猜你是在 FulfillmentCodeHook
中调用 delegate()
。当调用委托时,这意味着
Lambda function directs Amazon Lex to choose the next course of action
现在,Lambda 函数中有两个动作,DialogCodeHook
和 FulfillmentCodeHook
。如果你在 DialogCodeHook 中,那么 delegate
会调用 FulfillmentCodeHook。但是如果你在 FulfillmentCodeHook 中,那么它会抛出一个错误。
但是,如果您在 FulfillmentCodeHook 中,并且由于某种原因您想修改任何 slot
的值,那么您可以将 slot
的值设置为 null 然后调用传递新插槽集的委托。这样,delegate 就会再次调用 DialogCodeHook。
来自 AWS 文档:
If the value of the field is unknown, you must set it to null. You will get a DependencyFailedException exception if your fufillment function returns the Delegate dialog action without removing any slots.
希望对您有所帮助。