首先,您需要确保已正确授予权限。从 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 函数返回格式正确的响应。 从函数返回的输出必须是键/值对的平面对象,其值仅包含字母数字、破折号和下划线字符。不支持嵌套和复杂对象。返回数据的大小必须小于 32 Kb 的 UTF-8 数据。
即使在您的调用流上启用了日志记录,Amazon Connect 也不会提供有关 Lambda 函数失败原因的非常详细的信息。我建议在您的 Lambda 函数中硬编码一个简单的响应,例如以下 node.js 响应,以确保您的 Lambda 响应格式不会导致您的问题,然后从那里开始工作。
callback(null, {test : "Here is a valid response"});
当您使用“调用 AWS Lambda 函数”步骤时,您不需要将电话号码作为单独的参数传递给 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;
希望这可以帮助。