

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

# Lex V2 봇과의 대화 컨텍스트
<a name="conversation-contexts"></a>

*대화 컨텍스트*는 사용자, 클라이언트 애플리케이션 또는 Lambda 함수가 의도를 이행하기 위해 Amazon Lex V2 봇에 제공하는 정보입니다. 대화 컨텍스트에는 사용자가 제공하는 슬롯 데이터, 클라이언트 애플리케이션에서 설정한 요청 속성, 클라이언트 애플리케이션과 Lambda 함수가 생성하는 세션 속성이 포함됩니다.

**Topics**
+ [Lex V2 봇의 의도 컨텍스트 설정](context-mgmt-active-context.md)
+ [Lex V2 봇에서 의도에 기본 슬롯 값 사용](context-mgmt-default.md)
+ [Lex V2 봇의 세션 특성 설정](context-mgmt-session-attribs.md)
+ [Lex V2 봇의 요청 특성 설정](context-mgmt-request-attribs.md)
+ [세션 시간 제한 설정](context-mgmt-session-timeout.md)
+ [Lex V2 봇과 의도 간 정보 공유](context-mgmt-cross-intent.md)
+ [Lex V2 봇에서 복잡한 특성 설정](context-mgmt-complex-attributes.md)

# Lex V2 봇의 의도 컨텍스트 설정
<a name="context-mgmt-active-context"></a>

*컨텍스트*에 따라 Amazon Lex V2 트리거 의도를 사용할 수 있습니다. *컨텍스트*는 봇을 정의할 때 intent와 연결할 수 있는 상태 변수입니다. 콘솔이나 [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) 작업을 사용하여 의도를 만들 때 intent의 컨텍스트를 구성합니다. 영어(미국)(en-US) 로캘에서만 컨텍스트를 사용할 수 있습니다.

컨텍스트에는 출력 컨텍스트와 입력 컨텍스트라는 두 가지 유형의 관계가 있습니다. 관련 intent가 이행되면 *출력 컨텍스트*가 활성화됩니다. 출력 컨텍스트는 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 또는 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 작업의 응답으로 애플리케이션에 반환되며, 이 컨텍스트는 현재 세션에 맞게 설정됩니다. 컨텍스트가 활성화된 후에는 컨텍스트가 정의될 때 구성된 턴 수 또는 시간 제한 동안 활성 상태를 유지합니다.

*입력 컨텍스트*는 의도를 인식할 수 있는 조건을 지정합니다. 의도는 모든 입력 컨텍스트가 활성화된 경우에만 대화 중에 인식될 수 있습니다. 입력 컨텍스트가 없는 의도는 항상 인식될 수 있습니다.

Amazon Lex V2는 출력 컨텍스트로 의도를 이행하여 활성화된 컨텍스트의 수명 주기를 자동으로 관리합니다. `RecognizeText` 또는 `RecognizeUtterance` 작업에 대한 직접 호출에서 활성 컨텍스트를 설정할 수도 있습니다.

또한 의도에 대한 Lambda 함수를 사용하여 대화의 컨텍스트를 설정할 수 있습니다. Amazon Lex V2의 출력 컨텍스트는 Lambda 함수 입력 이벤트로 전송됩니다. Lambda 함수는 응답으로 컨텍스트를 전송할 수 있습니다. 자세한 내용은 [Amazon Lex V2 봇에 AWS Lambda함수 통합](lambda.md) 단원을 참조하세요.

예를 들어, "book\$1car\$1fulfilled"라는 출력 컨텍스트를 반환하도록 구성된 렌터카를 예약하려는 의도가 있다고 가정해 보겠습니다. 의도가 이행되면 Amazon Lex V2는 출력 컨텍스트 변수 "book\$1car\$1fulfilled"를 설정합니다. "book\$1car\$1fulfilled"는 활성 컨텍스트이므로 "book\$1car\$1fulfilled" 컨텍스트가 입력 컨텍스트로 설정된 의도는 이제 인식 대상으로 간주됩니다. 단, 사용자 표현이 해당 의도를 이끌어내려는 시도로 인식되어야 합니다. 영수증을 이메일로 보내거나 예약을 수정하는 등 차량 예약 이후에만 의미가 있는 의도에 이 방법을 사용할 수 있습니다.

## Lex V2 봇의 의도 출력 컨텍스트
<a name="context-output"></a>

Amazon Lex V2는 의도가 이행될 때 의도의 출력 컨텍스트를 활성화합니다. 출력 컨텍스트를 사용하여 현재 의도의 후속 조치로 적합한 의도를 제어할 수 있습니다.

각 컨텍스트에는 세션에서 유지 관리되는 파라미터 목록이 있습니다. 파라미터는 수행된 의도의 슬롯 값입니다. 이 매개변수를 사용하여 다른 의도의 슬롯 값을 미리 채울 수 있습니다. 자세한 내용은 [Lex V2 봇에서 의도에 기본 슬롯 값 사용](context-mgmt-default.md) 단원을 참조하세요.

콘솔이나 [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) 작업을 사용하여 intent를 생성할 때 출력 컨텍스트를 구성합니다. 둘 이상의 출력 컨텍스트로 intent를 구성할 수 있습니다. intent가 이행되면 모든 출력 컨텍스트가 활성화되고 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 또는 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 응답에 반환됩니다.

출력 컨텍스트를 정의할 때 *컨텍스트*가 Amazon Lex V2의 응답에 포함되는 시간, 시간 또는 회전 수도 정의합니다. *턴*은 애플리케이션에서 Amazon Lex V2로 보내는 하나의 요청입니다. 턴 수 또는 시간이 만료되면 컨텍스트는 더 이상 활성화되지 않습니다.

애플리케이션은 필요에 따라 출력 컨텍스트를 사용할 수 있습니다. 예를 들어, 애플리케이션은 출력 컨텍스트를 사용하여 다음을 수행할 수 있습니다.
+ 컨텍스트를 기반으로 응용 프로그램의 동작을 변경합니다. 예를 들어 여행 애플리케이션은 "book\$1car\$1fulfilled" 컨텍스트에서 "rental\$1hotel\$1fulfilled"와는 다른 작업을 수행할 수 있습니다.
+ 출력 컨텍스트를 Amazon Lex V2에 다음 발화의 입력 컨텍스트로 반환합니다. Amazon Lex V2는 표현을 의도를 유도하려는 시도로 인식하는 경우 컨텍스트를 사용하여 지정된 컨텍스트가 있는 의도로 반환할 수 있는 의도를 제한합니다.

## Lex V2 봇의 의도 입력 컨텍스트
<a name="context-input"></a>

대화에서 의도가 인식되는 지점을 제한하도록 입력 컨텍스트를 설정합니다. 입력 컨텍스트가 없는 의도는 항상 인식될 수 있습니다.

콘솔이나 `CreateIntent` 작업을 사용하여 의도가 응답하는 입력 컨텍스트를 설정합니다. intent에는 입력 컨텍스트가 둘 이상 있을 수 있습니다.

입력 컨텍스트가 두 개 이상인 intent의 경우 intent를 트리거하려면 모든 컨텍스트가 활성 상태여야 합니다. [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html), [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 또는 [PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html) 작업을 직접적으로 호출할 때 입력 컨텍스트를 설정할 수 있습니다.

현재 활성 컨텍스트에서 기본값을 가져오도록 intent에서 슬롯을 구성할 수 있습니다. 기본값은 Amazon Lex V2가 새 의도를 인식하지만 슬롯 값을 수신하지 않을 때 사용됩니다. 슬롯을 정의할 때 컨텍스트 이름과 슬롯 이름을 `#context-name.parameter-name` 형식으로 지정합니다. 자세한 내용은 [Lex V2 봇에서 의도에 기본 슬롯 값 사용](context-mgmt-default.md) 단원을 참조하세요.

# Lex V2 봇에서 의도에 기본 슬롯 값 사용
<a name="context-mgmt-default"></a>

기본값을 사용하는 경우 사용자 입력으로 슬롯이 제공되지 않을 때 새 의도에 맞게 채워질 슬롯 값의 소스를 지정합니다. 이 소스는 이전 대화상자, 요청 또는 세션 속성이거나 빌드 시 설정한 고정 값일 수 있습니다.

다음을 기본값의 소스로 사용할 수 있습니다.
+ 이전 대화 상자(컨텍스트) – \$1context -name.parameter-name
+ 세션 속성 – [attribute-name]
+ 요청 속성 – <attribute-name>
+ 고정 값 – 이전 값과 일치하지 않는 모든 값

[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) 작업을 사용하여 intent에 슬롯을 추가할 때 기본값 목록을 추가할 수 있습니다. 기본값은 나열된 순서대로 사용됩니다. 예를 들어 다음과 같은 정의의 슬롯이 있는 의도를 가정합니다.

```
"slots": [
    {
        "botId": "string",
        "defaultValueSpec": {
            "defaultValueList": [
                {
                    "defaultValue": "#book-car-fulfilled.startDate"
                },
                {
                    "defaultValue": "[reservationStartDate]"
                }
            ]
        },
        Other slot configuration settings
    }
]
```

의도가 인식되면 이름이 "reservation-start-date"라는 슬롯의 값은 다음 중 하나로 설정됩니다.

1. "book-car-fulfilled" 컨텍스트가 활성화된 경우 "startDate" 매개 변수의 값이 기본값으로 사용됩니다.

1. "book-car-fulfilled" 컨텍스트가 비활성화된 경우 또는 "startDate" 매개 변수가 설정되지 않은 경우, "reservationStartDate"의 세션 속성의 값이 기본값으로 사용됩니다.

1. 처음 두 기본값 중 어느 것도 사용되지 않으면 슬롯에 기본값이 없으며 Amazon Lex V2는 평소와 같이 값을 유도합니다.

슬롯에 기본값을 사용하면 필요한 경우에도 슬롯이 추출되지 않습니다.

# Lex V2 봇의 세션 특성 설정
<a name="context-mgmt-session-attribs"></a>

*세션 속성*에는 세션 중에 봇과 클라이언트 애플리케이션 간에 전달되는 애플리케이션별 정보가 포함됩니다. Amazon Lex V2는 봇에 대해 구성된 모든 Lambda 함수에 세션 속성을 전달합니다. Lambda 함수가 세션 속성을 추가 또는 업데이트하는 경우 Amazon Lex V2는 새로운 정보를 클라이언트 애플리케이션에 다시 전달합니다.

Lambda 함수의 세션 속성을 사용하여 봇을 초기화하고 프롬프트 및 응답 카드를 사용자 지정합니다. 예제:
+ 초기화 – 피자 주문 봇에서 클라이언트 애플리케이션은 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 또는 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 작업에 대한 첫 번째 직접 호출 시 사용자의 위치를 세션 속성으로 전달합니다. 예를 들어 `"Location": "111 Maple Street"`입니다. Lambda 함수는 이 정보를 사용하여 주문할 수 있는 가장 가까운 피자 가게를 찾습니다.
+ 프롬프트 개인화 - 세션 속성을 참조하도록 프롬프트와 응답 카드를 구성합니다. 예를 들어, "[FirstName]님, 어떤 토핑을 드시겠어요?" 사용자의 이름을 세션 속성(`{"FirstName": "Vivian"}`)으로 전달하면 Amazon Lex 가 자리 표시자를 이름으로 대체합니다. 그런 다음 사용자에게 “Hey Vivian, 어떤 토핑을 원하세요?”라는 맞춤형 프롬프트를 보냅니다.

세션 속성은 세션 기간 동안 암호화된 저장소에서 지속됩니다. Amazon Lex V2는 세션이 종료될 때까지 암호화된 데이터 스토어에 저장합니다. 클라이언트는 `sessionAttributes` 필드가 값으로 설정된 상태에서 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 또는 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 작업을 직접적으로 호출하여 요청에 세션 속성을 생성할 수 있습니다. Lambda 함수 는 응답에 세션 속성을 생성할 수 있습니다. 클라이언트 또는 Lambda 함수가 세션 속성을 생성한 후에는 클라이언트 애플리케이션이 Amazon Lex V2에 대한 요청에 `sessionAttribute` 필드를 포함하지 않을 때마다 저장된 속성 값이 사용됩니다.

예를 들어, 다음과 같은 두 개의 세션 속성 `{"x": "1", "y": "2"}`이 있다고 가정하겠습니다. 클라이언트가 `sessionAttributes` 필드를 지정하지 않고 `RecognizeText` 또는 `RecognizeUtterance` 작업을 호출하는 경우 Amazon Lex V2는 저장된 세션 속성()을 사용하여 Lambda 함수를 호출합니다`{"x": 1, "y": 2}`. Lambda 함수가 세션 속성을 반환하지 않으면 Amazon Lex V2는 저장된 세션 속성을 클라이언트 애플리케이션에 반환합니다.

클라이언트 애플리케이션 또는 Lambda 함수가 세션 속성을 전달하면 Amazon Lex V2는 저장된 세션 속성을 업데이트합니다. ` {"x": 2}`과 같은 기존 값을 전달하면 저장된 값이 업데이트됩니다. 새 세션 속성 세트(예를 들어, `{"z": 3}`) 를 전달하면 기존 값은 제거되고 새 값만 유지됩니다. 빈 맵 `{}`가 전달되면 저장된 값이 지워집니다.

세션 속성을 Amazon Lex V2로 전송하려면 속성의 string-to-string 맵을 생성합니다. 다음은 세션 속성을 매핑하는 방법을 보여줍니다.

```
{
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

`RecognizeText` 작업의 경우 다음과 같이 `sessionState` 구조의 `sessionAttributes` 필드를 사용하여 요청 본문에 맵을 삽입합니다.

```
"sessionState": {
    "sessionAttributes": {
        "attributeName": "attributeValue",
        "attributeName": "attributeValue"
    }
}
```

`RecognizeUtterance` 작업의 경우, 맵을 base64로 인코딩한 다음 `x-amz-lex-session-state` 헤더의 일부로 전송합니다.

세션 속성으로 이진수 또는 구조화된 데이터를 보내는 경우 먼저 데이터를 단순 문자열로 변환해야 합니다. 자세한 내용은 [Lex V2 봇에서 복잡한 특성 설정](context-mgmt-complex-attributes.md) 단원을 참조하세요.

# Lex V2 봇의 요청 특성 설정
<a name="context-mgmt-request-attribs"></a>

*요청 속성*은 요청 관련 정보를 포함하고 있고 현재 요청에만 적용됩니다. 클라이언트 애플리케이션은이 정보를 Amazon Lex V2로 전송합니다. 전체 세션에서 유지할 필요가 없는 정보를 전달하려면 요청 속성을 사용합니다. 요청 속성을 직접 생성할 수도 있고 사전 정의된 속성을 사용할 수도 있습니다. 요청 속성을 보내려면 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 요청에 포함된 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 또는 `requestAttributes` 필드 안의 `x-amz-lex-request-attributes` 헤더를 사용합니다. 요청 속성은 세션 속성처럼 요청 전체에 지속되지 않기 때문에 요청 속성은 `RecognizeUtterance` 또는 `RecognizeText` 응답에서 반환되지 않습니다.

**참고**  
요청 간에 유지되는 정보를 보내려면 세션 속성을 사용하세요.

## 각 Lex V2 봇 요청에서 사용자 정의 요청 특성 설정
<a name="context-mgmt-user"></a>

*사용자-정의 요청 속성*은 각 요청에서 봇에 보내는 데이터입니다. `RecognizeUtterance` 요청의 `amz-lex-request-attributes` 헤더나 `RecognizeText` 요청의 `requestAttributes` 필드에 정보를 전송합니다.

Amazon Lex V2로 요청 속성을 보내려면 속성의 string-to-string 맵을 생성합니다. 다음은 세션 속성을 매핑하는 방법을 보여줍니다.

```
{
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

`PostText` 작업의 경우 다음과 같이 `requestAttributes` 필드를 사용하여 요청 본문에 맵을 삽입합니다.

```
"requestAttributes": {
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

`PostContent` 작업의 경우, 맵을 base64로 인코딩한 다음 `x-amz-lex-request-attributes` 헤더로 전송합니다.

세션 속성으로 이진수 또는 구조화된 데이터를 보내는 경우 먼저 데이터를 단순 문자열로 변환해야 합니다. 자세한 내용은 [Lex V2 봇에서 복잡한 특성 설정](context-mgmt-complex-attributes.md) 단원을 참조하십시오.

Amazon Lex V2는 봇으로 전송된 정보를 처리하는 방식을 관리하기 위해 사전 정의된 요청 속성을 제공합니다. 속성은 전체 세션 동안 지속되지 않으므로 각 요청에서 사전 정의된 속성을 전송해야 합니다. 사전 정의된 모든 속성은 `x-amz-lex:` 네임스페이스에 있습니다. 

Amazon Lex는 다음과 같은 사전 정의된 속성 외에도 메시징 플랫폼을 위한 사전 정의된 속성을 제공합니다. 이러한 속성 목록은 메시징 플랫폼에서 Amazon Lex 봇 배포 섹션을 참조하세요.

## 응답 유형 설정
<a name="response-type-context"></a>



기능이 다른 두 개의 클라이언트 애플리케이션을 사용하는 경우 응답의 메시지 형식을 제한해야 할 수 있습니다. 예를 들어 웹 클라이언트에 보내는 메시지는 일반 텍스트로 제한하고 모바일 클라이언트는 일반 텍스트와 음성 합성 마크업 언(SSML)를 모두 사용할 수 있도록 할 수 있습니다. `PostContent` 및 `PostText` 작업이 필드에 반환하는 메시지 형식을 제어하려면 x-amz-lex:accept-content-types 요청 속성을 사용합니다.

다음 메시지 유형의 모든 조합으로 속성을 설정할 수 있습니다.
+ `PlainText` - 메시지에 일반 UTF-8 텍스트가 포함됩니다.
+ `SSML` - 메시지에 음성 출력용으로 서식이 지정된 텍스트가 포함됩니다.
+ `CustomPayload` - 메시지에 클라이언트용으로 생성한 사용자 지정 형식이 포함됩니다. 애플리케이션의 요건을 이행하도록 페이로드를 정의할 수 있습니다.

Amazon Lex V2는 응답 메시지 필드에 지정된 유형의 메시지만 반환합니다. 값을 쉼표로 구분하여 둘 이상의 값을 설정할 수 있습니다. 메시지 그룹을 사용하는 경우 모든 메시지 그룹에는 지정된 유형의 메시지가 하나 이상 포함되어야 합니다. 그러지 않을 경우 `NoUsableMessageException` 오류가 발생합니다. 더 자세한 내용은, 메시지 그룹을 참조하십시오.

## Lex V2 봇에서 사전 정의된 요청 속성 설정
<a name="setting-predefined-request-attributes"></a>

Amazon Lex V2는 봇으로 전송된 정보를 처리하는 방식을 관리하기 위해 사전 정의된 요청 속성을 제공합니다. 속성은 전체 세션 동안 지속되지 않으므로 각 요청에서 사전 정의된 속성을 전송해야 합니다. 사전 정의된 모든 속성은 `x-amz-lex:` 네임스페이스에 있습니다. 

## Lex V2 봇에서 의도 전환 비활성화
<a name="disabling-intent-switches-attributes"></a>

사용자가 의도 확인 또는 슬롯 유도 중에 의도 간에 전환할 수 있는지 여부를 제어하려면 `x-amz-lex:intent-switch` 요청 속성을 사용합니다. `DISABLE`로 설정하면 이 속성은 사용자가 현재 의도 흐름을 완료하는 동안 다른 의도를 트리거하지 못하도록 합니다.

예를 들어, 사용자가 항공편을 예약하는 중에 항공편 세부 정보를 묻는 메시지가 표시되는 경우 일반적으로 다른 의도를 트리거할 수 있는 '날씨 확인' 또는 '예약 호텔'과 같은 표현은 무시되어 대화가 현재 예약 프로세스에 집중되도록 합니다.

# 세션 시간 제한 설정
<a name="context-mgmt-session-timeout"></a>

Amazon Lex는 대화 세션이 종료될 때까지 슬롯 데이터 및 세션 속성과 같은 컨텍스트 정보를 유지합니다. 봇의 세션 지속 시간을 제어하려면 세션 제한 시간을 설정하세요. 기본적으로 세션 기간은 5분이지만 0\$11,440분(24시간) 사이의 기간을 지정할 수 있습니다.

예를 들어, `OrderShoes` 및 `GetOrderStatus` 와 같은 의도를 지원하는 `ShoeOrdering` 봇을 생성한다고 가정해 보겠습니다. Amazon Lex는 사용자의 의도가 신발을 주문하는 것임을 감지하면 슬롯 데이터를 요청합니다. 예를 들어 신발 사이즈, 색상, 브랜드 등을 묻습니다. 사용자가 일부 슬롯 데이터를 제공했지만 신발 구매를 완료하지 않은 경우 Amazon Lex는 전체 세션의 슬롯 데이터와 세션 속성을 모두 기억합니다. 사용자가 세션이 만료되기 전에 세션으로 돌아오면 나머지 슬롯 데이터를 제공하고 구매를 완료할 수 있습니다.

Amazon Lex V2 콘솔에서 봇을 생성할 때 세션 제한 시간을 설정합니다. AWS Command Line Interface(AWS CLI) 또는 API에서는 [idleSessionTTLInSeconds](https://docs.aws.amazon.com/lexv2/latest/dg/API_PutBot.html#API_CreateBot.html#lexv2-CreateBot-request-idleSessionTTLInSeconds) 필드를 설정함으로써 [CreateBot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBot.html) 작업을 갖는 봇을 생성할 때에 제한 시간을 설정합니다.

# Lex V2 봇과 의도 간 정보 공유
<a name="context-mgmt-cross-intent"></a>

Amazon Lex V2는 의도 간 정보 공유를 지원합니다. intent 간에 공유하려면 출력 컨텍스트 또는 세션 속성을 사용하세요.

출력 컨텍스트를 사용하려면 intent를 만들거나 업데이트할 때 출력 컨텍스트를 정의해야 합니다. intent가 이행되면 Amazon Lex V2의 응답에는 의도의 컨텍스트 및 슬롯 값이 컨텍스트 파라미터로 포함됩니다. 이러한 파라미터를 후속 intent나 애플리케이션 코드 또는 Lambda 함수에서 기본값으로 사용할 수 있습니다.

세션 속성을 사용하려면 Lambda 또는 애플리케이션 코드에서 속성을 설정합니다. 예를 들어 `ShoeOrdering` 봇 사용자는 신발을 주문하는 것으로 시작합니다. 봇은 사용자와 대화하면서 신발 사이즈, 색상, 브랜드와 같은 슬롯 데이터를 수집합니다. 사용자가 주문을 하면 주문을 이행하는 Lambda 함수가 주문 번호가 포함된 `orderNumber` 세션 속성을 설정합니다. 사용자는 `GetOrderStatus` 의도를 사용하여 주문 상태를 확인합니다. 봇은 사용자에게 주문 번호 및 주문 날짜와 같은 슬롯 데이터를 요청할 수 있습니다. 봇이 필수 정보를 수집하면 주문 상태를 반환합니다.

같은 세션에서 사용자가 의도를 바꿀 수 있다고 생각되면 최신 주문 상태를 반환하도록 봇을 설계할 수 있습니다. 사용자에게 주문 정보를 다시 요청하는 대신 `orderNumber` 세션 속성을 사용하여 의도 간에 정보를 공유하고 `GetOrderStatus` 의도를 이행할 수 있습니다. 봇은 사용자가 마지막으로 주문한 상태를 반환하여 이 작업을 수행합니다.

# Lex V2 봇에서 복잡한 특성 설정
<a name="context-mgmt-complex-attributes"></a>

세션 및 요청 속성은 속성 및 값의 문자열 간 매핑입니다. 대부분의 경우 문자열 맵을 사용하여 클라이언트 애플리케이션과 봇 간에 속성 값을 전송할 수 있습니다. 하지만 문자열 맵으로 쉽게 변환할 수 없는 이진 데이터나 복잡한 구조를 전송해야 하는 경우도 있습니다. 예를 들어 다음 JSON 객체는 미국에서 인구가 가장 많은 세 도시의 배열을 나타냅니다.

```
{
   "cities": [
      {
         "city": {
            "name": "New York",
            "state": "New York",
            "pop": "8537673"
         }
      },
      {
         "city": {
            "name": "Los Angeles",
            "state": "California",
            "pop": "3976322"
         }
      },
      {
         "city": {
            "name": "Chicago",
            "state": "Illinois",
            "pop": "2704958"
         }
      }
   ]
}
```

이 데이터 배열은 string-to-string 맵으로 잘 변환되지 않습니다. 이 경우 객체를 간단한 문자열로 변환하여 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 및 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 작업으로 봇에 보낼 수 있습니다.

예를 들어 JavaScript를 사용하는 경우 객체를 JSON으로 변환하는 `JSON.stringify` 작업과 JSON 텍스트를 JavaScript 객체로 변환하는 `JSON.parse` 작업을 사용할 수 있습니다.

```
// To convert an object to a string.
var jsonString = JSON.stringify(object, null, 2);
// To convert a string to an object.
var obj = JSON.parse(JSON string);
```

`RecognizeUtterance` 작업을 통해 속성을 보내려면 다음 JavaScript 코드와 같이, 속성을 요청 헤더에 추가하기 전에 속성을 base64로 인코딩해야 합니다.

```
var encodedAttributes = new Buffer(attributeString).toString("base64");
```

먼저 데이터를 base64로 인코딩된 문자열로 변환한 다음 이 문자열을 세션 속성의 값으로 전송하여 `RecognizeText` 및 `RecognizeUtterance` 작업에 바이너리 데이터를 보낼 수 있습니다.

```
"sessionAttributes" : {
   "binaryData": "base64 encoded data"
}
```