Lambda函数在测试Lex chatbot时正确返回。 通过Amazon Connect调用该功能会导致错误。 有关如何使用正确格式保存连接中的Lambda返回的任何想法? *更新以添加更新的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]
答案 0 :(得分:0)
在匹配" ReasonForCalling"之后,您的Amazon Connect联系人流似乎引用了$ .External。(某事)。意图。 $ .External仅在Amazon Connect直接调用Lambda函数时使用。在您的情况下,Amazon Connect正在与Lex进行交互。 Lex打电话给Lambda,所以你回到Amazon Connect的任何回复都来自Lex,而不是Lambda。为了让Amazon Connect从Lex读回内容,您需要在Play提示步骤中使用以下其中一项:
选项1:您可以配置Lex将帐户余额插入名为" AccountBal"的插槽中,然后"将参数返回给客户"。从那里,Amazon Connect可以访问该值作为$ .Lex.Slots.AccountBal。
选项2:如果您希望Amazon Connect直接与Lambda交互,您可以使用Lex收集userSSN和secretWord,然后使用"调用AWS Lambda函数"直接构建Amazon Connect直接调用的单独Lambda函数。步骤执行数据库查找。使用此方法,您将直接从Lambda接收响应,并可将其引用为$ .External.accountBalance。
已编辑----------
您的回调将DialogAction类型设置为" ConfirmIntent"所以Lex很可能仍然期待一些用户的回应。我怀疑Amazon Connect甚至从Lex那里得到了回报。尝试将回调更新为以下内容,以便Lex完成履行并返回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 + "."
}
}
});