

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

# Amazon Lex V2 봇 세션 이해
<a name="managing-sessions"></a>

사용자가 봇과 대화를 시작하면 Amazon Lex V2는 *세션*을 생성합니다. 애플리케이션과 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) 작업의 `sessionId` 필드를 참조하세요.

애플리케이션과 봇 간에 전송된 세션 상태를 수정할 수 있습니다. 예를 들어 세션에 대한 사용자 정의 정보가 포함된 세션 속성을 생성 및 수정할 수 있으며, 다음 표현을 해석하도록 대화 컨텍스트를 설정하여 대화의 흐름을 변경할 수 있습니다.

세션 상태를 업데이트할 수 있는 방법에는 세 가지가 있습니다.
+ `RecognizeText` 또는 `RecognizeUtterance` 작업에 대한 직접 호출의 일부로 세션 정보를 인라인으로 전달합니다.
+ 첫 번째 방법은 대화가 바뀔 때마다 직접적으로 호출되는 `RecognizeText` 또는 `RecognizeUtterance` 작업을 통해 Lambda 함수를 사용하는 것입니다. 자세한 내용은 [Amazon Lex V2 봇에 AWS Lambda함수 통합](lambda.md) 단원을 참조하세요. 다른 방법은 애플리케이션에서 Amazon Lex V2 런타임 API를 사용하여 세션 상태를 변경하는 것입니다.
+ 봇과의 대화에 대한 세션 정보를 관리할 수 있도록 하는 작업을 사용합니다. 이 작업은 [PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html) 작업, [GetSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_GetSession.html) 작업 및 [DeleteSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DeleteSession.html) 작업입니다. 이러한 작업을 사용하여 봇과의 사용자 세션 상태에 대한 정보를 얻고 상태를 세부적으로 제어할 수 있습니다.

현재 세션 상태를 확인하려는 경우 `GetSession` 작업을 사용합니다. 이 작업은 사용자와의 대화 상태, 설정된 모든 세션 속성, 현재 의도에 대한 슬롯 값, Amazon Lex V2가 사용자의 발화와 일치하는 가능한 의도로 식별한 기타 의도를 포함하여 세션의 현재 상태를 반환합니다.

`PutSession` 작업을 사용하면 현재 세션 상태를 직접 조작할 수 있습니다. 봇이 다음에 수행할 대화 작업의 유형과 Amazon Lex V2가 사용자에게 보내는 메시지를 포함하여 세션을 설정할 수 있습니다. 이를 통해 봇과의 대화 흐름을 제어할 수 있습니다. Amazon Lex V2가 봇의 다음 작업을 결정하도록 하려면 대화 작업 `type` 필드를 `Delegate`로 설정합니다.

`PutSession` 작업을 사용하여 봇과의 새로운 세션을 만들고 봇이 시작해야 하는 의도를 설정할 수 있습니다. `PutSession` 작업을 사용하여 한 의도에서 다른 의도로 변경할 수도 있습니다. 세션을 만들거나 의도를 변경할 때 슬롯 값 및 세션 속성 등의 세션 상태를 설정할 수도 있습니다. 새 의도를 마치면 이전 의도를 다시 시작할 수 있습니다.

`PutSession` 작업의 응답에는 `RecognizeUtterance` 작업과 동일한 정보가 포함되어 있습니다. `RecognizeUtterance` 작업의 응답과 마찬가지로 이 정보를 사용하여 사용자에게 다음 정보를 입력하라는 메시지를 표시할 수 있습니다.

`DeleteSession` 작업을 사용하여 기존 세션을 제거하고 새 세션을 시작합니다. 예를 들어 봇을 테스트하려는 경우 `DeleteSession` 작업을 사용하여 봇에서 테스트 세션을 제거할 수 있습니다.

이 세션 작업은 이행 Lambda 함수와 함께 작동합니다. 예를 들어 Lambda 함수가 이행 상태로 `Failed`를 반환하는 경우, `PutSession` 작업을 사용하여 대화 작업 유형을 `close`로 설정하고 `fulfillmentState`를 `ReadyForFulfillment`로 설정하여 이행 단계를 재시도할 수 있습니다.

다음은 세션 작업으로 수행할 수 있는 작업입니다.
+ 봇이 사용자를 기다리지 않고 대화를 시작하도록 합니다.
+ 대화 중에 의도를 전환합니다.
+ 이전 의도로 돌아갑니다.
+ 상호 작용 중에 대화를 시작하거나 다시 시작합니다.
+ 슬롯 값의 유효성을 검사하고 봇이 유효하지 않은 값을 다시 묻도록 합니다.

이러한 각 내용은 아래에 자세히 설명되어 있습니다.

## 새 세션 시작
<a name="session-start"></a>

봇이 사용자와 대화를 시작하도록 하려면 `PutSession` 작업을 사용하면 됩니다.
+ 슬롯이 없는 환영 의도와 사용자에게 의도를 명시하라는 결론 메시지를 만듭니다. 예를 들어 "무엇을 주문하시겠어요? '음료 주문' 또는 '피자 주문.'이라고 말할 수 있습니다.
+ `PutSession` 작업을 직접적으로 호출합니다. 의도 이름을 환영 의도의 이름으로 설정하고 대화 작업을 `Delegate`로 설정합니다.
+ Amazon Lex는 환영 의도의 프롬프트에 응답하여 사용자와의 대화를 시작합니다.

## 의도 전환
<a name="session-switch"></a>

`PutSession` 작업을 사용하여 한 의도에서 다른 의도로 전환할 수 있습니다. 이 작업을 사용하여 이전 의도로 다시 전환할 수도 있습니다. `PutSession` 작업을 사용하여 새 의도의 슬롯 값 또는 세션 속성을 설정할 수 있습니다.
+ `PutSession` 작업을 직접적으로 호출합니다. 의도 이름을 새 의도의 이름으로 설정하고 대화 작업을 `Delegate`로 설정합니다. 새 의도에 필요한 슬롯 값 또는 세션 속성을 설정할 수도 있습니다.
+ Amazon Lex는 새 의도를 사용하여 사용자와의 대화를 시작합니다.

## 이전 의도 다시 시작
<a name="session-return"></a>

이전 의도를 다시 시작하려면 `GetSession` 작업을 사용하여 의도의 상태를 가져오고 필요한 상호 작용을 수행한 다음 `PutSession` 작업을 사용하여 의도를 이전 대화 상태로 설정합니다.
+ `GetSession` 작업을 직접적으로 호출합니다. 의도의 상태를 저장합니다.
+ 다른 의도 이행과 같은 다른 상호 작용을 수행합니다.
+ 이전 의도에 대해 저장된 정보를 사용하여 `PutSession` 작업을 직접적으로 호출합니다. 그러면 사용자가 대화의 같은 위치에 있는 이전 의도로 돌아갑니다.

경우에 따라 봇과 사용자의 대화를 다시 시작해야 할 수 있습니다. 예를 들어 고객 서비스 봇을 만들었다고 가정하겠습니다. 애플리케이션은 사용자가 고객 서비스 담당자와 대화해야 한다고 결정합니다. 사용자와 대화한 후 이 담당자는 수집한 정보와 함께 대화를 다시 봇에 전달할 수 있습니다.

세션을 다시 시작하려면 다음과 비슷한 단계를 사용합니다.
+ 애플리케이션은 사용자가 고객 서비스 담당자와 대화해야 한다고 결정합니다.
+ `GetSession` 작업을 사용하여 의도의 현재 대화 상태를 가져옵니다.
+ 고객 서비스 담당자는 사용자와 대화하고 문제를 해결합니다.
+ `PutSession` 작업을 사용하여 의도의 대화 상태를 설정합니다. 여기에는 슬롯 값 설정, 세션 속성 설정 또는 의도 변경이 포함될 수 있습니다.
+ 봇이 사용자와의 대화를 다시 시작합니다.

## 슬롯 값의 유효성 검사
<a name="session-validation"></a>

클라이언트 애플리케이션을 사용하여 봇에 대한 응답의 유효성을 검사할 수 있습니다. 응답이 유효하지 않은 경우 `PutSession` 작업을 사용하여 사용자로부터 새 응답을 얻을 수 있습니다. 예를 들어 꽃 주문 봇이 튤립, 장미, 백합만 팔 수 있다고 가정하겠습니다. 사용자가 카네이션을 주문하면 애플리케이션이 다음을 수행할 수 있습니다.
+ `PostText` 또는 `PostContent` 응답에서 반환된 슬롯 값을 검사합니다.
+ 슬롯 값이 유효하지 않으면 `PutSession` 작업을 직접적으로 호출합니다. 애플리케이션이 슬롯 값을 지우고, `slotToElicit` 필드를 설정하고, `dialogAction.type` 값을 `elicitSlot`으로 설정합니다. 선택적으로, Amazon Lex가 슬롯 값을 유도하기 위해 사용하는 메시지를 변경하려는 경우 `message` 및 `messageFormat` 필드를 설정할 수 있습니다.