Amazon Connect - 调用 Lambda
Amazon Connect - Invoke Lambda
get_customer_input
ReasonForCalling_Play_prompt
Lambda 在测试 Lex 聊天机器人时可以正常运行 return。
通过 Amazon Connect 调用函数会导致错误。
关于如何以正确的格式在 Connect 中保存来自 Lambda 的 return 有什么想法吗? * 更新以添加更新的 lambda 代码和 Lex 配置图像。
Lambda Code:
console.log('Loading event');
var AWS = require('aws-sdk');
var db = new AWS.DynamoDB({ apiVersion: '2012-08-10' });
exports.handler = (event, context, callback) => {
var ssn = event.currentIntent.slots.userSSN;
var mySecret = event.currentIntent.slots.secretWord;
var params = {
TableName: 'users',
Key: {
"fourDigSSN": {
"N": ssn
},
"mySecretWord": {
"S": mySecret
}
},
AttributesToGet: ["accountBalance"]
};
db.getItem(params, function(err, data) {
if (err) {
console.log(" It didn't work and here is the error " + err); // an error occurred
}
else
callback(null, {
"sessionAttributes":{
"accountBal": data.Item.accountBalance.N
},
"dialogAction": {
"type": "ConfirmIntent",
"message": {
"contentType": "PlainText",
"content": "Your account has been verified. Your account balance is " + data.Item.accountBalance.N + "."
},
"intentName": "ReasonForCalling",
"slots": {
"userSSN": ssn,
"secretWord": mySecret
}
}
});
// var accountBal = data.Item.accountBalance.N;
// //console.log("GetDBItem succeeded:", JSON.stringify(data, null, 2));
// callback(null, {accountBalance : accountBal});
});
};
[lex_configuration][1]
[connect_contact_flow][2]
[connect_lambda_Details][3]
您的 Amazon Connect 联系流似乎在匹配 "ReasonForCalling" 意图后引用了 $.External.(something)。 $.External 仅在 Amazon Connect 直接调用 Lambda 函数时使用。在您的例子中,Amazon Connect 正在与 Lex 交互。 Lex 正在调用 Lambda,因此您返回到 Amazon Connect 的任何响应都将来自 Lex,而不是 Lambda。为了让 Amazon Connect 从 Lex 读回某些内容,您需要在播放提示步骤中使用以下内容之一:
- $.Lex.IntentName
- $.Lex.Slots.(插槽名称)
- $.Lex.SessionAttributes.(sessionAttributeKey)
选项 1:您可以配置 Lex 将帐户余额插入名为 "AccountBal" 的插槽,然后插入 "return parameters to client"。从那里,Amazon Connect 可以以 $.Lex.Slots.AccountBal.
的形式访问该值
选项 2:如果您希望 Amazon Connect 直接与 Lambda 交互,您可以使用 Lex 收集 userSSN 和 secretWord,然后构建一个单独的 Lambda 函数,Amazon Connect 使用 "Invoke AWS Lambda Function" 步骤直接调用该函数来执行数据库查找。使用此方法,您将直接从 Lambda 接收响应并可以将其引用为 $.External.accountBalance.
已编辑 ----------
您的回调已将 DialogAction 类型设置为 "ConfirmIntent",因此 Lex 很可能仍在期待一些用户响应。我怀疑 Amazon Connect 是否能从 Lex 那里得到任何回报。尝试将回调更新为类似以下内容,以便 Lex 完成履行并 return 到 Amazon Connect:
callback(null, {
"sessionAttributes":{
"accountBal": data.Item.accountBalance.N
},
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": "Your account has been verified. Your account balance is " + data.Item.accountBalance.N + "."
}
}
});
get_customer_input ReasonForCalling_Play_prompt
Lambda 在测试 Lex 聊天机器人时可以正常运行 return。 通过 Amazon Connect 调用函数会导致错误。 关于如何以正确的格式在 Connect 中保存来自 Lambda 的 return 有什么想法吗? * 更新以添加更新的 lambda 代码和 Lex 配置图像。
Lambda Code:
console.log('Loading event');
var AWS = require('aws-sdk');
var db = new AWS.DynamoDB({ apiVersion: '2012-08-10' });
exports.handler = (event, context, callback) => {
var ssn = event.currentIntent.slots.userSSN;
var mySecret = event.currentIntent.slots.secretWord;
var params = {
TableName: 'users',
Key: {
"fourDigSSN": {
"N": ssn
},
"mySecretWord": {
"S": mySecret
}
},
AttributesToGet: ["accountBalance"]
};
db.getItem(params, function(err, data) {
if (err) {
console.log(" It didn't work and here is the error " + err); // an error occurred
}
else
callback(null, {
"sessionAttributes":{
"accountBal": data.Item.accountBalance.N
},
"dialogAction": {
"type": "ConfirmIntent",
"message": {
"contentType": "PlainText",
"content": "Your account has been verified. Your account balance is " + data.Item.accountBalance.N + "."
},
"intentName": "ReasonForCalling",
"slots": {
"userSSN": ssn,
"secretWord": mySecret
}
}
});
// var accountBal = data.Item.accountBalance.N;
// //console.log("GetDBItem succeeded:", JSON.stringify(data, null, 2));
// callback(null, {accountBalance : accountBal});
});
};
[lex_configuration][1]
[connect_contact_flow][2]
[connect_lambda_Details][3]
您的 Amazon Connect 联系流似乎在匹配 "ReasonForCalling" 意图后引用了 $.External.(something)。 $.External 仅在 Amazon Connect 直接调用 Lambda 函数时使用。在您的例子中,Amazon Connect 正在与 Lex 交互。 Lex 正在调用 Lambda,因此您返回到 Amazon Connect 的任何响应都将来自 Lex,而不是 Lambda。为了让 Amazon Connect 从 Lex 读回某些内容,您需要在播放提示步骤中使用以下内容之一:
- $.Lex.IntentName
- $.Lex.Slots.(插槽名称)
- $.Lex.SessionAttributes.(sessionAttributeKey)
选项 1:您可以配置 Lex 将帐户余额插入名为 "AccountBal" 的插槽,然后插入 "return parameters to client"。从那里,Amazon Connect 可以以 $.Lex.Slots.AccountBal.
的形式访问该值选项 2:如果您希望 Amazon Connect 直接与 Lambda 交互,您可以使用 Lex 收集 userSSN 和 secretWord,然后构建一个单独的 Lambda 函数,Amazon Connect 使用 "Invoke AWS Lambda Function" 步骤直接调用该函数来执行数据库查找。使用此方法,您将直接从 Lambda 接收响应并可以将其引用为 $.External.accountBalance.
已编辑 ----------
您的回调已将 DialogAction 类型设置为 "ConfirmIntent",因此 Lex 很可能仍在期待一些用户响应。我怀疑 Amazon Connect 是否能从 Lex 那里得到任何回报。尝试将回调更新为类似以下内容,以便 Lex 完成履行并 return 到 Amazon Connect:
callback(null, {
"sessionAttributes":{
"accountBal": data.Item.accountBalance.N
},
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": "Your account has been verified. Your account balance is " + data.Item.accountBalance.N + "."
}
}
});