

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 調用 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. 在 [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/) 開啟 Amazon Connect 主控台。

1. 在執行個體頁面的**執行個體別名**資料欄中選擇您的執行個體名稱。此執行個體名稱會出現在您用來存取 Amazon Connect 的 URL 中。

1. 在**頻道和通訊**下方的導覽窗格中，選擇**外撥行銷活動**。

1. 在**設定自訂動作**區段下，使用 **Lambda 函數**下拉式方塊選取要新增至對外行銷活動執行個體的函數。

1. 選擇**新增 Lambda 函數**。確認函數的 ARN 已新增至 **Lambda 函數**。

## 步驟 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`傳回的 中的金鑰名稱相符。