

지원 종료 공지: 2025년 9월 15 AWS 일에는 Amazon Lex V1에 대한 지원을 중단할 예정입니다. 2025년 9월 15일 이후에는 Amazon Lex V1 콘솔 또는 Amazon Lex V1 리소스에 더 이상 액세스할 수 없습니다. Amazon Lex V2를 사용하는 경우 대신 [Amazon Lex V2 가이드를](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) 참조하세요.

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

# Amazon Lex API로 세션 관리
<a name="how-session-api"></a>

사용자가 봇과 대화를 시작하면 Amazon Lex는 *세션*을 생성합니다. 애플리케이션과 Amazon Lex 간에 교환된 정보는 대화의 세션 상태를 구성합니다. 요청하면 지정한 봇 이름과 사용자 식별자 조합으로 세션이 식별됩니다. 사용자 식별자에 대한 자세한 내용은 [PostContent](API_runtime_PostContent.md) 또는 [PostText](API_runtime_PostText.md) 작업의 `userId` 필드를 참조하십시오.

세션 작업의 응답에는 사용자로 특정 세션을 식별하는 고유한 세션 식별자가 포함됩니다. 테스트 중에 또는 봇의 문제 해결을 위해 이 식별자를 사용할 수 있습니다.

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

세션 상태를 업데이트할 수 있는 방법에는 두 가지가 있습니다. 첫 번째 방법은 대화가 바뀔 때마다 호출되는 `PostContent` 또는 `PostText` 작업과 함께 Lambda 함수를 사용하는 것입니다. 자세한 내용은 [Lambda 함수 사용](using-lambda.md)을 참조하세요. 다른 방법은 애플리케이션에서 Amazon Lex 런타임 API를 사용하여 세션 상태를 변경하는 것입니다.

Amazon Lex 런타임 API는 봇과의 대화에 대한 세션 정보를 관리할 수 있도록 하는 작업을 제공합니다. 이 작업은 [PutSession](API_runtime_PutSession.md) 작업, [GetSession](API_runtime_GetSession.md) 작업, [DeleteSession](API_runtime_DeleteSession.md) 작업입니다. 이러한 작업을 사용하여 봇과의 사용자 세션 상태에 대한 정보를 얻고 상태를 세부적으로 제어할 수 있습니다.

현재 세션 상태를 확인하려는 경우 `GetSession` 작업을 사용합니다. 이 작업은 사용자와의 대화 상태, 설정된 모든 세션 속성, 사용자가 상호 작용한 마지막 세 의도에 대한 슬롯 값을 포함하여 현재 세션 상태를 반환합니다.

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

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

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

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

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

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

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

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

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

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

이전 의도를 다시 시작하려면 `GetSession` 작업을 사용하여 의도의 요약을 가져온 후, `PutSession` 작업을 사용하여 의도를 이전 대화 상태로 설정합니다.
+ `GetSession` 작업을 직접적으로 호출합니다. 작업의 응답에는 사용자가 상호 작용한 마지막 세 의도의 대화 상태에 대한 요약이 포함되어 있습니다.
+ 의도 요약의 정보를 사용하여 `PutSession` 작업을 호출합니다. 그러면 사용자가 대화의 같은 위치에 있는 이전 의도로 돌아갑니다.

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

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

나중에 찾을 수 있도록 `PutSession` 작업 `checkpointLabel` 파라미터를 사용하여 의도에 레이블을 지정할 수 있습니다. 예를 들어, 고객에게 정보를 요청하는 봇은 고객이 정보를 수집하는 동안 `Waiting` 의도로 들어갈 수 있습니다. 이 봇은 현재 의도에 대한 체크포인트 레이블을 만든 다음 `Waiting` 의도를 시작합니다. 고객이 돌아오면 봇은 체크포인트 레이블을 사용하여 이전 의도를 찾아 다시 전환할 수 있습니다.

의도는 `GetSession` 작업에 의해 반환된 `recentIntentSummaryView` 구조에 있어야 합니다. `GetSession` 작업 요청에 체크포인트 레이블을 지정하는 경우 해당 체크포인트 레이블이 있는 의도를 최대 3개까지 반환합니다.
+ `GetSession` 작업을 사용하여 현재 세션 상태를 가져옵니다.
+ `PutSession` 작업을 사용하여 마지막 의도에 체크포인트 레이블을 추가합니다. 필요한 경우 이 `PutSession` 호출을 사용하여 다른 의도로 전환할 수 있습니다.
+ 레이블이 지정된 의도로 다시 전환해야 하는 경우 `GetSession` 작업을 호출하여 최근 의도 목록을 반환합니다. Amazon Lex에서 지정된 체크포인트 레이블이 있는 의도만 반환하도록 `checkpointLabelFilter` 파라미터를 사용할 수 있습니다.

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

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

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

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