

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

# AWS LambdaLex V2의 응답 형식
<a name="lambda-response-format"></a>

Lambda 함수를 Amazon Lex V2 봇에 통합하는 두 번째 단계는 Lambda 함수 응답의 필드를 이해하고 조작하려는 파라미터를 결정하는 것입니다. 다음 JSON 객체는 Amazon Lex V2로 반환되는 Lambda 응답의 일반적인 형식을 보여줍니다.

```
{
    "sessionState": {
        // see 세션 상태 for details about the structure
    },
    "messages": [
        {
            "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
            "content": string,
            "imageResponseCard": {
                "title": string,
                "subtitle": string,
                "imageUrl": string,
                "buttons": [
                    {
                        "text": string,
                        "value": string
                    },
                    ...
                ]
            }
        },
        ...
    ],
    "requestAttributes": {
        string: string,
        ...
    }
}
```

응답의 각 필드는 아래에 설명되어 있습니다.

## sessionState
<a name="lambda-response-sessionstate"></a>

사용자와 반환하려는 Amazon Lex V2 봇 간의 대화 상태입니다. 구조에 대한 자세한 내용은 [세션 상태](lambda-common-structures.md#lambda-session-state)를 참조하세요. 이 필드는 항상 필수 항목입니다.

## messages
<a name="lambda-response-messages"></a>

Amazon Lex V2가 다음 대화를 위해 고객에게 반환하는 메시지 목록입니다. 제공하는 `contentType`이 `PlainText`, `CustomPayload` 또는 `SSML`인 경우 `content` 필드에 고객에게 반환할 메시지를 작성합니다. 제공하는 `contentType`이 `ImageResponseCard`인 경우 `imageResponseCard` 필드에 카드의 세부 정보를 입력합니다. 메시지를 제공하지 않는 경우 Amazon Lex V2는 봇이 생성될 때 정의된 적절한 메시지를 사용합니다.

`dialogAction.type`이 `ElicitIntent` 또는 `ConfirmIntent`인 경우 `messages` 필드는 필수입니다.

목록의 각 항목은 사용자에게 반환할 메시지에 대한 정보를 포함하는 다음 형식의 구조입니다. 다음 예를 참고하세요

```
{
    "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
    "content": string,
    "imageResponseCard": {
        "title": string,
        "subtitle": string,
        "imageUrl": string,
        "buttons": [
            {
                "text": string,
                "value": string
            },
            ...
        ]
    }
}
```

각 필드에 대한 설명은 다음과 같습니다.
+ **contentType** – 사용할 메시지 유형입니다.

  `CustomPayload`– 애플리케이션에 대한 데이터 또는 메타데이터를 포함하도록 사용자 지정할 수 있는 응답 문자열입니다.

  `ImageResponseCard`– 고객이 선택할 수 있는 버튼이 있는 이미지입니다. 자세한 내용은 [ImageResponseCard](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ImageResponseCard.html)를 참조하세요.

  `PlainText`– 일반 텍스트 문자열입니다.

  `SSML`– 오디오 응답을 사용자 지정하기 위한 Speech Synthesis Markup Language가 포함된 문자열입니다.
+ **content** – 사용자에게 전송할 메시지입니다. 메시지 유형이 `PlainText`, `CustomPayload` 또는 `SSML`인 경우 이 필드를 사용하세요.
+ **imageResponseCard** – 사용자에게 표시할 응답 카드의 정의를 포함합니다. 메시지 유형이 `ImageResponseCard`인 경우 이 필드를 사용하세요. 다음 필드가 포함된 구조에 매핑합니다
  + **제목** – 응답 카드의 제목입니다.
  + **자막** – 사용자가 버튼을 선택하라는 메시지입니다.
  + **imageUrl** – 카드의 이미지로 연결되는 링크입니다.
  + **버튼** – 버튼에 대한 정보가 포함되어 있는 구조 목록입니다. 각 구조에는 표시할 텍스트가 있는 `text` 필드와 Amazon Lex V2에 고객이 해당 버튼을 선택할 경우 Amazon Lex V2로 전송할 값이 포함된 `value` 필드가 포함되어 있습니다. 최대 세 개의 버튼을 포함할 수 있습니다.

## requestAttributes
<a name="lambda-response-requestattributes"></a>

고객에 대한 응답에 대한 요청별 속성을 포함하는 구조입니다. 자세한 정보는 [Lex V2 봇의 요청 특성 설정](context-mgmt-request-attribs.md)을 참조하세요. 이 필드는 선택 사항입니다.

## 응답의 필수 필드
<a name="lambda-response-required"></a>

최소한 Lambda 응답에는 `sessionState` 객체가 포함되어야 합니다. 그 안에 `dialogAction` 객체를 제공하고 `type` 필드를 지정하세요. 제공하는 `dialogAction`의 `type`에 따라 Lambda 응답에 다른 필수 필드가 있을 수 있습니다. 이러한 요구 사항은 최소한의 작업 예시와 함께 다음과 같이 설명됩니다.

### Delegate
<a name="lambda-response-delegate"></a>

**Delegate**를 통해 Amazon Lex V2에서 다음 단계를 결정할 수 있습니다. 다른 필드는 필요하지 않습니다.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "Delegate"
    }
}
```

### ElicitIntent
<a name="lambda-response-elicitintent"></a>

**ElicitIntent**는 고객에게 의도를 표현하라는 메시지를 표시합니다. 의도를 유도하려면 `messages` 필드에 메시지를 하나 이상 포함해야 합니다.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ElicitIntent"
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "How can I help you?"
        }
    ]
}
```

### ElicitSlot
<a name="lambda-response-elicitslot"></a>

**ElicitSlot**은 고객에게 슬롯 값을 제공하라는 메시지를 표시합니다. `dialogAction` 객체의 `slotToElicit` 필드에 슬롯 이름을 포함해야 합니다. 또한 `sessionState` 객체에 `intent`의 `name`을 포함해야 합니다.

```
{`
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "OriginCity",
            "type": "ElicitSlot"
        },
        "intent": {
            "name": "BookFlight"
        }
    }
}
```

### ConfirmIntent
<a name="lambda-response-confirmintent"></a>

**ConfirmIntent**는 고객의 슬롯 값과 의도를 이행할 준비가 되었는지 여부를 확인합니다. `sessionState` 객체에 `intent`의 `name`과 확인할 `slots`을 포함해야 합니다. 또한 사용자에게 슬롯 값 확인을 요청하는 메시지를 하나 이상 `messages` 필드에 포함해야 합니다. 메시지에 “예” 또는 “아니요” 응답이 표시되어야 합니다. 사용자가 "예"라고 응답하면 Amazon Lex V2는 의도의 `confirmationState`를 `Confirmed`로 설정합니다. 사용자가 “아니요”라고 응답하면 Amazon Lex V2는 의도의 `confirmationState`를 `Denied`로 설정합니다.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ConfirmIntent"
        },
        "intent": {
            "name": "BookFlight",
            "slots": {
                "DepartureDate": {
                    "value": {
                        "originalValue": "tomorrow",
                        "interpretedValue": "2023-05-09",
                        "resolvedValues": [
                            "2023-05-09"
                    ]
                 }
                },
                "DestinationCity": {
                    "value": {
                        "originalValue": "sf",
                        "interpretedValue": "sf",
                        "resolvedValues": [
                            "sf"
                        ]
                    }
                },
                "OriginCity": {
                    "value": {
                        "originalValue": "nyc",
                        "interpretedValue": "nyc",
                        "resolvedValues": [
                            "nyc"
                        ]
                    }
                }
            }
        }
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "Okay, you want to fly from {OriginCity} to \
            {DestinationCity} on {DepartureDate}. Is that correct?"
        }
    ]
}
```

### Close
<a name="lambda-response-close"></a>

**Close**는 의도의 이행 프로세스를 종료하고 사용자로부터 추가 응답이 예상되지 않음을 나타냅니다. `sessionState` 객체에 `intent`의 `name`과 `state`를 포함해야 합니다. 호환되는 의도 상태는`Failed`, `Fulfilled`, `InProgress`입니다.

```
"sessionState": {
    "dialogAction": {
        "type": "Close"
    },
    "intent": {
        "name": "BookFlight",
        "state": "Failed | Fulfilled | InProgress"
    }
}
```