无法在Amazon Connect联系流程中调用AWS Lambda函数

时间:2018-02-02 16:00:26

标签: amazon-web-services aws-lambda amazon-connect

我正在尝试在Amazon Connect Contact流程中集成AWS Lambda函数。 AWS Lambda函数运行正常并给出响应。在调用Connect联系人流中的函数时,它返回错误语句但我无法找出错误是什么以及错误日志存储在何处。 enter image description here

我正在尝试将用户的电话号码输入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);
  }
});

}

1 个答案:

答案 0 :(得分:1)

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

希望这有帮助。