

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 调用 Lambda 函数
<a name="lambda-invoke-functions"></a>

## 第 1 步：创建 Lambda 函数
<a name="lambda-create-function"></a>

在活动执行期间，出站活动将使用一批配置文件调用您的 Lambda 函数，并期望收到包含每个配置文件的结果的响应。

### 请求有效负载
<a name="lambda-request-payload"></a>

当您的 Lambda 函数被调用时，它将收到具有以下结构的 JSON 有效负载：

#### 有效载荷结构
<a name="lambda-payload-structure"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "string",
      "RunId": "string",
      "ActionId": "string",
      "CampaignName": "string"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "string",
        "CustomerData": "string",
        "IdempotencyToken": "string"
      }
    ]
  }
}
```

#### 字段描述
<a name="lambda-field-descriptions"></a>

##### InvocationMetadata
<a name="lambda-invocation-metadata"></a>
+ **CampaignContext**: 包含有关活动执行的元数据
+ **CampaignId**: 广告活动的唯一标识符
+ **RunId**: 此特定广告活动的唯一标识符
+ **ActionId**：出站广告系列正在执行的流程操作的标识符
+ **CampaignName**: 用户可读的广告系列名称

##### 物品
<a name="lambda-items"></a>
+ **CustomerProfiles**: 要处理的一系列客户档案（为提高效率而进行批处理）
+ **ProfileId**: 客户资料的唯一标识符
+ **CustomerData**: 客户资料的 JSON 字符串
+ **IdempotencyToken**: 此特定调用的唯一令牌，可确保等性处理

#### 请求负载示例
<a name="lambda-example-request"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "campaign-12345",
      "RunId": "run-67890",
      "ActionId": "activity-abc123",
      "CampaignName": "Welcome Campaign"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "customer-001",
        "CustomerData": "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"email\":\"john.doe@example.com\"}",
        "IdempotencyToken": "token-xyz789"
      },
      {
        "ProfileId": "customer-002",
        "CustomerData": "{\"firstName\":\"Jane\",\"lastName\":\"Smith\",\"email\":\"jane.smith@example.com\"}",
        "IdempotencyToken": "token-abc456"
      }
    ]
  }
}
```

### 预期响应有效负载
<a name="lambda-response-payload"></a>

您的 Lambda 函数必须返回具有以下结构的 JSON 响应：

#### 响应结构
<a name="lambda-response-structure"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "string",
        "ResultData": {}
      }
    ]
  }
}
```

#### 字段描述
<a name="lambda-response-field-descriptions"></a>

##### 物品
<a name="lambda-response-items"></a>
+ **CustomerProfiles**：与请求中每个客户资料相对应的结果数组
+ **ID**：必须与请求`ProfileId`中的相匹配
+ **ResultData**: 包含您的处理结果的自定义 JSON 对象（可选）

#### 响应负载示例
<a name="lambda-example-response"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "customer-001",
        "ResultData": {
          "recommendedProduct": "Premium Plan",
          "score": 85,
          "nextAction": "send_email"
        }
      },
      {
        "Id": "customer-002",
        "ResultData": {
          "error": "Invalid customer data",
          "errorCode": "VALIDATION_ERROR"
        }
      }
    ]
  }
}
```

## 重要约束
<a name="lambda-constraints"></a>

### 有效载荷大小限制
<a name="lambda-payload-size-limits"></a>
+ **最大响应负载大小**：每个客户资料 32 KB
+ 如果`ResultData`超过此限制，则调用将被标记为无效

### 回应要求
<a name="lambda-response-requirements"></a>
+ 您必须为请求中`ProfileId`包含的所有内容提供回复
+ 缺少的回复将被视为错误
+ 响应中的`Id`字段必须与请求中的`ProfileId`字段完全匹配

### 错误处理
<a name="lambda-error-handling"></a>
+ 如果您的 Lambda 函数抛出异常，则批次中的所有配置文件都将被标记为失败
+ 在中包含错误详细信息`ResultData`以用于调试

### 调用类型
<a name="lambda-invocation-type"></a>
+ **调用类型**：`REQUEST_RESPONSE`（同步）
+ 您的函数应在 30 秒内返回结果，而不是异步处理。响应时间超过 30 秒将导致操作失败

## 第 2 步：授予出站活动访问您的 Lambda 函数的权限
<a name="lambda-grant-access"></a>

1. 打开 Amazon Connect 控制台，网址为[https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/)。

1. 在实例页面上的**实例别名**列中选择您的实例名称。此实例名称显示在您用于访问 Amazon Connect 的 URL 中。

1. 在导航窗格中的**渠道和通信**下，选择**出站广告系列**。

1. 在**设置自定义操作**部分下，使用 **Lambda 函数**下拉框选择要添加到出站活动实例的函数。

1. 选择**添加 Lambda 函数**。确认在 **Lambda 函数**下添加了函数的 ARN。

## 步骤 3：从活动中调用 Lambda
<a name="lambda-invoke-from-journey"></a>

1. 打开或创建**旅程**流程。

1. 向网格中添加**自定义操作**块（在 “**集成**” 组中）。将分支与数据块连接起来。

1. 选择**自定义操作**块的标题以打开其属性页面。

1. 在 “**函数 ARN**” 下，从已添加到出站广告系列实例的功能列表中进行选择。

## 步骤 4：使用 Lambda 函数的响应
<a name="lambda-consume-response"></a>

### 直接访问变量
<a name="lambda-access-variables"></a>

要直接在流程块中访问这些变量，请在**自定义操作**块之后添加该模块，然后引用这些属性，如以下示例所示：

```
RecommendedProduct - $.LambdaInvocation.ResultData.recommendedProduct
Score - $.LambdaInvocation.ResultData.score
```

确保为源属性指定的名称与 Lambda `ResultData` 返回的密钥名称相匹配。