4

我正在尝试在 Amazon Connect 联系流中集成 AWS Lambda 函数。AWS Lambda 函数工作正常并给出响应。在 Connect 联系流中调用该函数时,它返回错误语句,但我无法找出错误是什么以及错误日志存储在哪里。 在此处输入图像描述

我正在尝试将用户的电话号码获取到 Amazon Connect,然后我想检查电话号码是否已存在于 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);
  }
});

}
4

1 回答 1

2

首先,您需要确保已正确授予权限。从 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;

希望这可以帮助。

于 2018-02-03T12:15:20.380 回答