无法在 Amazon Connect 联系流中调用 AWS Lambda 函数
Unable to Invoke AWS Lambda Function in Amazon Connect Contact Flow
我正在尝试在 Amazon Connect 联系流中集成 AWS Lambda 函数。 AWS Lambda 函数运行良好并给出响应。在 Connect 联系流中调用函数时,它返回错误语句,但我无法找出错误是什么以及错误日志存储在哪里。
我正在尝试将用户的 phone 号码获取到 Amazon Connect,然后我想检查 phone 号码是否已存在于 DynamoDB 中。为此,我正在编写 lambda 函数并尝试从 Amazon Connect
调用它
const AWS=require('aws-sdk');
const doClient=new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
exports.handler = function(event, context, callback) {
var params={
TableName:'testdata',
Key: {
Address: event.Details.ContactData.CustomerEndpoint.Address
}
};
doClient.get(params,function(err,data){
if(err)
{
callback(err,null);
}
else
{
callback(null,data);
}
});
}
首先,您需要确保已正确授予权限。从 AWS CLI 发出以下命令并进行以下编辑。
- 将函数 "Lambda_Function_Name" 替换为您的 Lambda 函数的实际名称。
- 将源账户“111122223333”替换为您的 AWS 帐号
将 source-arn 字符串替换为您的 Amazon Connect 实例的 arn 字符串。
aws lambda add-permission --function-name function:Lambda_Function_Name --statement-id 1 --principal connect.amazonaws.com --action lambda:InvokeFunction --source-account 111122223333 --source-arn arn:aws:connect:us-east-1:111122223333:instance/444555a7-abcd-4567-a555-654327abc87
正确设置权限后,Amazon Connect 应该能够访问 Lambda。但是,您必须确保您的 Lambda 函数 returns 是格式正确的响应。 函数返回的输出必须是 key/value 对的平面对象,其值仅包含字母数字、破折号和下划线字符。不支持嵌套和复杂对象。返回数据的大小必须小于 32 Kb 的 UTF-8 数据。
即使在您的呼叫流上启用了日志记录,Amazon Connect 也不会提供有关 Lambda 函数失败原因的非常详细的信息。我建议在您的 Lambda 函数中硬编码一个简单的响应,例如以下 node.js 响应,以确保您的 Lambda 响应格式不会导致您的问题,然后从那里开始工作。
callback(null, {test : "Here is a valid response"});
当您使用 "Invoke AWS Lambda function" 步骤时,您不需要将 phone 数字作为单独的参数传递给 Lambda,如图所示。 Amazon Connect 已将 JSON 对象传递给包含该信息的 Lambda。以下是 Amazon Connect 发送到 Lambda 的示例。
{
"Details": {
"ContactData": {
"Attributes": {
"Call_Center": "0"
},
"Channel": "VOICE",
"ContactId": "",
"CustomerEndpoint": {
"Address": "+13215551212",
"Type": "TELEPHONE_NUMBER"
},
"InitialContactId": "",
"InitiationMethod": "INBOUND",
"InstanceARN": "",
"PreviousContactId": "",
"Queue": null,
"SystemEndpoint": {
"Address": "+18005551212",
"Type": "TELEPHONE_NUMBER"
}
}
},
"Name": "ContactFlowEvent"
}
您可以在 Lambda 函数中使用以下内容来引用呼叫号码以在 DynamoDB 中查找。
var CallingNumber = event.Details.ContactData.CustomerEndpoint.Address;
希望对您有所帮助。
我正在尝试在 Amazon Connect 联系流中集成 AWS Lambda 函数。 AWS Lambda 函数运行良好并给出响应。在 Connect 联系流中调用函数时,它返回错误语句,但我无法找出错误是什么以及错误日志存储在哪里。
我正在尝试将用户的 phone 号码获取到 Amazon Connect,然后我想检查 phone 号码是否已存在于 DynamoDB 中。为此,我正在编写 lambda 函数并尝试从 Amazon Connect
调用它const AWS=require('aws-sdk');
const doClient=new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
exports.handler = function(event, context, callback) {
var params={
TableName:'testdata',
Key: {
Address: event.Details.ContactData.CustomerEndpoint.Address
}
};
doClient.get(params,function(err,data){
if(err)
{
callback(err,null);
}
else
{
callback(null,data);
}
});
}
首先,您需要确保已正确授予权限。从 AWS CLI 发出以下命令并进行以下编辑。
- 将函数 "Lambda_Function_Name" 替换为您的 Lambda 函数的实际名称。
- 将源账户“111122223333”替换为您的 AWS 帐号
将 source-arn 字符串替换为您的 Amazon Connect 实例的 arn 字符串。
aws lambda add-permission --function-name function:Lambda_Function_Name --statement-id 1 --principal connect.amazonaws.com --action lambda:InvokeFunction --source-account 111122223333 --source-arn arn:aws:connect:us-east-1:111122223333:instance/444555a7-abcd-4567-a555-654327abc87
正确设置权限后,Amazon Connect 应该能够访问 Lambda。但是,您必须确保您的 Lambda 函数 returns 是格式正确的响应。 函数返回的输出必须是 key/value 对的平面对象,其值仅包含字母数字、破折号和下划线字符。不支持嵌套和复杂对象。返回数据的大小必须小于 32 Kb 的 UTF-8 数据。
即使在您的呼叫流上启用了日志记录,Amazon Connect 也不会提供有关 Lambda 函数失败原因的非常详细的信息。我建议在您的 Lambda 函数中硬编码一个简单的响应,例如以下 node.js 响应,以确保您的 Lambda 响应格式不会导致您的问题,然后从那里开始工作。
callback(null, {test : "Here is a valid response"});
当您使用 "Invoke AWS Lambda function" 步骤时,您不需要将 phone 数字作为单独的参数传递给 Lambda,如图所示。 Amazon Connect 已将 JSON 对象传递给包含该信息的 Lambda。以下是 Amazon Connect 发送到 Lambda 的示例。
{
"Details": {
"ContactData": {
"Attributes": {
"Call_Center": "0"
},
"Channel": "VOICE",
"ContactId": "",
"CustomerEndpoint": {
"Address": "+13215551212",
"Type": "TELEPHONE_NUMBER"
},
"InitialContactId": "",
"InitiationMethod": "INBOUND",
"InstanceARN": "",
"PreviousContactId": "",
"Queue": null,
"SystemEndpoint": {
"Address": "+18005551212",
"Type": "TELEPHONE_NUMBER"
}
}
},
"Name": "ContactFlowEvent"
}
您可以在 Lambda 函数中使用以下内容来引用呼叫号码以在 DynamoDB 中查找。
var CallingNumber = event.Details.ContactData.CustomerEndpoint.Address;
希望对您有所帮助。