

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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**: 사람이 읽을 수 있는 캠페인 이름

##### Items
<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>

##### Items
<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>
+ **최대 응답 페이로드 크기**: 고객 프로필당 32KB
+ 이 제한을 `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 Functions(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` 반환된의 키 이름과 일치하는지 확인합니다.