

지원 종료 공지: 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 V1에서 Amazon Lex V2로 Lambda 함수 마이그레이션
<a name="message-lambda"></a>

Amazon Lex V2는 봇의 각 언어에 대해 하나의 Lambda 함수 만 허용합니다. Lambda 함수 및 해당 설정은 런타임 시 사용하는 봇 별칭에 맞게 구성됩니다.

Lambda 함수는 해당 의도에 대해 대화상자 및 이행 코드 후크가 활성화된 경우 해당 언어의 모든 의도에 대해 호출됩니다.

Amazon Lex V2 Lambda 함수는 Amazon Lex V1과 다른 입력 및 출력 메시지 형식을 사용합니다. Lambda 함수 입력 형식의 차이는 다음과 같습니다.
+ Amazon Lex V2는 `currentIntent` 및 `alternativeIntents` 구조를 `interpretations` 구조로 대체합니다. 각 해석에는 의도, 해당 의도에 대한 NLU 신뢰도 점수 및 선택적 센티멘트 분석이 포함됩니다.
+ Amazon Lex V2는 아마존 Lex V1의 `activeContexts`, `sessionAttributes`의 기능을 통합 `sessionState` 구조로 이전합니다. 이 구조는 시작 요청 ID를 포함하여 대화의 현재 상태에 대한 정보를 제공합니다.
+ Amazon Lex V2는 `recentIntentSummaryView`을 반환하지 않습니다. 대신 `sessionState` 구조체의 정보를 사용합니다.
+ Amazon Lex V2 입력은 `bot` 속성 내의 `botId` 및 `localeId`를 제공합니다.
+ 입력 구조에는 입력 유형(텍스트, 음성 또는 DTMF)에 대한 정보를 제공하는 `inputMode` 속성이 포함되어 있습니다.

Lambda 함수 입력 형식의 차이는 다음과 같습니다.
+ Amazon Lex V1의 `activeContexts` 및 `sessionAttributes` 구조는 아마존 Lex V2의 `sessionState` 구조로 대체되었습니다.
+ `recentIntentSummaryView`은 출력에 포함되지 않습니다.
+ Amazon Lex V1 `dialogAction` 구조는 두 개의 구조로 나뉘는데, `dialogAction` 구조는 `sessionState` 구조의 일부이며, `messages`는 `dialogAction.type`가 `ElicitIntent`일 때 필요합니다. Amazon Lex는 이 구조에서 사용자에게 표시할 메시지를 선택합니다.

Amazon Lex V2 API로 봇을 구축하는 경우, 각 의도에 대한 Lambda 함수 대신 언어별로 봇 별칭당 하나의 Lambda 함수 만 있습니다. 별도의 함수를 계속 사용하려는 경우 각 의도에 대해 별도의 함수를 활성화하는 라우터 함수를 생성할 수 있습니다. 다음은 애플리케이션에 사용하거나 수정할 수 있는 라우터 함수입니다.

```
import os
import json
import boto3

# reuse client connection as global
client = boto3.client('lambda') 

def router(event):
    intent_name = event['sessionState']['intent']['name']
    fn_name = os.environ.get(intent_name)
    print(f"Intent: {intent_name} -> Lambda: {fn_name}")
    if (fn_name):
        # invoke lambda and return result
        invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event))
        print(invoke_response)
        payload = json.load(invoke_response['Payload'])
        return payload
    raise Exception('No environment variable for intent: ' + intent_name)
    
def lambda_handler(event, context):
    print(event)
    response = router(event)
    return response
```

## 업데이트된 필드 목록
<a name="lambda-migrating"></a>

다음 표에는 Amazon Lex V2 Lambda 요청 및 응답의 업데이트된 필드에 대한 자세한 정보가 나와 있습니다. 이 테이블을 사용하여 버전 간에 필드를 매핑할 수 있습니다.

### 요청
<a name="migrating-lambda-request"></a>

Lambda 함수 요청 형식으로 다음 필드가 업데이트되었습니다.

#### 활성 컨텍스트
<a name="lambda-migrating-contexts"></a>

이제 `activeContexts` 구조가 `sessionState` 구조의 일부입니다.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  activeContexts[\$1].timeToLive  |  sessionState.activeContexts[\$1].timeToLive  | 
|  activeContexts[\$1].timeToLive.timeToLiveInSeconds  |  sessionState.activeContexts[\$1].timeToLive.timeToLiveInSeconds  | 
|  activeContexts[\$1].timeToLive.turnsToLive  |  sessionState.activeContexts[\$1].timeToLive.turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

#### 대체 의도
<a name="lambda-migrating-alternative"></a>

인덱스 1부터 N까지의 해석 목록에는 Amazon Lex V2에서 예측한 대체 의도 목록과 해당 신뢰도 점수가 포함되어 있습니다. Amazon Lex V2의 요청 구조에서 `recentIntentSummaryView`가 제거되었습니다. `recentIntentSummaryView`에서 세부 정보를 보려면 [GetSession](API_runtime_GetSession.md) 작업을 사용하십시오.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  alternativeIntents  |  interpretations[1:\$1]  | 
|  recentIntentSummaryView  |  N/A  | 

#### 봇
<a name="lambda-migrating-bot"></a>

Amazon Lex V2에서는 봇과 별칭에 식별자가 있습니다. 봇 ID는 코드후크 입력의 일부입니다. 앨리어스 ID는 포함되지만 앨리어스 이름은 포함되지 않습니다. Amazon Lex V2는 동일한 봇에 대해 여러 로케일을 지원하므로 로케일 ID가 포함됩니다.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  bot  |  bot  | 
|  bot.name  |  bot.name  | 
|  N/A  |  bot.id  | 
|  bot.alias  |  N/A  | 
|  N/A  |  bot.aliasId  | 
|  bot.version  |  bot.version  | 
|  N/A  |  bot.localeId  | 

#### 현재 의도
<a name="lambda-migrating-intent"></a>

`sessionState.intent` 구조에는 활성 의도의 세부 정보가 포함됩니다. 또한 Amazon Lex V2는 대체 의도를 포함하여 `interpretations` 구조에 있는 모든 의도의 목록을 반환합니다. 해석 목록의 첫 번째 요소는 항상 `sessionState.intent`와 동일합니다. 


| V1 구조 | V2 구조 | 
| --- | --- | 
|  currentIntent  |  sessionState.intent OR interpretations[0].intent  | 
|  currentIntent.name  |  sessionState.intent.name OR interpretations[0].intent.name  | 
|  currentIntent.nluConfidenceScore  |  interpretations[0].nluConfidence.score  | 

#### 다이얼로그 액션
<a name="lambda-migrating-dialog"></a>

`confirmationStatus` 필드는 이제 `sessionState` 구조의 일부가 되었습니다.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  currentIntent.confirmationStatus  |  sessionState.intent.confirmationState OR interpretations[0].intent.confirmationState  | 
|  N/A  |  sessionState.intent.state OR interpretations[\$1].intent.state  | 

#### Amazon Kendra
<a name="lambda-migrating-kendra"></a>

`kendraResponse` 필드는 이제 `sessionState` 및 `interpretations` 구조의 일부가 되었습니다. 


| V1 구조 | V2 구조 | 
| --- | --- | 
|  kendraResponse  |  sessionState.intent.kendraResponse OR interpretations[0].intent.kendraResponse  | 

#### Sentiment
<a name="lambda-migrating-sentiment"></a>

`sentimentResponse` 구조가 새로운 `interpretations` 구조로 이동되었습니다. 


| V1 구조 | V2 구조 | 
| --- | --- | 
|  sentimentResponse  |  interpretations[0].sentimentResponse  | 
|  sentimentResponse.sentimentLabel  |  interpretations[0].sentimentResponse.sentiment  | 
|  sentimentResponse.sentimentScore  |  interpretations[0].sentimentResponse.sentimentScore  | 

#### Slots
<a name="lambda-migrating-slots"></a>

Amazon Lex V2는 해석된 값, 해석된 값 및 사용자가 말한 원래 값을 포함하는 `sessionState.intent` 구조 내에 단일 `slots` 객체를 제공합니다. Amazon Lex V2는 `slotShape`를 `List`로 설정하고 `values` 목록을 설정하여 다중 값 슬롯도 지원합니다. `value` 필드는 단일 값 슬롯을 지원하며 그 모양은 `Scalar`와 같이 가정합니다. 


| V1 구조 | V2 구조 | 
| --- | --- | 
|  currentIntent.slots  |  sessionState.intent.slots OR interpretations[0].intent.slots  | 
|  currentIntent.slots[\$1].value  |  sessionState.intent.slots[\$1].value.interpretedValue OR interpretations[0].intent.slots[\$1].value.interpretedValue  | 
|  N/A  |  sessionState.intent.slots[\$1].value.shape OR interpretations[0].intent.slots[\$1].shape  | 
|  N/A  |  sessionState.intent.slots[\$1].values OR interpretations[0].intent.slots[\$1].values  | 
|  currentIntent.slotDetails  |  sessionState.intent.slots OR interpretations[0].intent.slots  | 
|  currentIntent.slotDetails[\$1].resolutions  |  sessionState.intent.slots[\$1].resolvedValues OR interpretations[0].intent.slots[\$1].resolvedValues  | 
|  currentIntent.slotDetails[\$1].originalValue  |  sessionState.intent.slots[\$1].originalValue OR interpretations[0].intent.slots[\$1].originalValue  | 

#### 기타
<a name="lambda-migrating-other"></a>

아마존 Lex V2 `sessionId` 필드는 아마존 Lex V1의 `userId` 필드와 동일합니다. 또한 Amazon Lex V2는 발신자의 `inputMode`에게 문자, DTMF 또는 음성과 같은 메시지를 보냅니다. 


| V1 구조 | V2 구조 | 
| --- | --- | 
|  userId  |  sessionId  | 
|  inputTranscript  |  inputTranscript  | 
|  invocationSource  |  invocationSource  | 
|  outputDialogMode  |  responseContentType  | 
|  messageVersion  |  messageVersion  | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  requestAttributes  |  requestAttributes  | 
|  N/A  |  inputMode  | 
|  N/A  |  originatingRequestId  | 

### 응답
<a name="migrating-lambda-response"></a>

Lambda 함수 응답 메시지 형식에서 다음 필드가 변경되었습니다.

#### 활성 컨텍스트
<a name="lambda-migrating-resonse-context"></a>

`activeContexts` 구조가 `sessionState` 구조로 이동되었습니다.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  activeContexts[\$1].timeToLive  |  sessionState.activeContexts[\$1].timeToLive  | 
|  activeContexts[\$1].timeToLive.timeToLiveInSeconds  |  sessionState.activeContexts[\$1].timeToLive.timeToLiveInSeconds  | 
|  activeContexts[\$1].timeToLive.turnsToLive  |  sessionState.activeContexts[\$1].timeToLive.turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

#### 다이얼로그 액션
<a name="lambda-migrating-response-dialog"></a>

`dialogAction` 구조가 `sessionState` 구조로 이동되었습니다. 이제 대화 액션에서 여러 메시지를 지정할 수 있으며, 이제 `genericAttachments` 구조가 `imageResponseCard` 구조입니다.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  dialogAction  |  sessionState.dialogAction  | 
|  dialogAction.type  |  sessionState.dialogAction.type  | 
|  dialogAction.slotToElicit  |  sessionState.intent.dialogAction.slotToElicit  | 
|  dialogAction.type.fulfillmentState  |  sessionState.intent.state  | 
|  dialogAction.message  |  messages  | 
|  dialogAction.message.contentType  |  messages[\$1].contentType  | 
|  dialogAction.message.content  |  messages[\$1].content  | 
|  dialogAction.responseCard  |  messages[\$1].imageResponseCard  | 
|  dialogAction.responseCard.version  |  N/A  | 
|  dialogAction.responseCard.contentType  |  messages[\$1].contentType  | 
|  dialogAction.responseCard.genericAttachments  |  N/A  | 
|  dialogAction.responseCard.genericAttachments[\$1].title  |  messages[\$1].imageResponseCard.title  | 
|  dialogAction.responseCard.genericAttachments[\$1].subTitle  |  messages[\$1].imageResponseCard.subtitle  | 
|  dialogAction.responseCard.genericAttachments[\$1].imageUrl  |  messages[\$1].imageResponseCard.imageUrl  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons  |  messages[\$1].imageResponseCard.buttons  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].value  |  messages[\$1].imageResponseCard.buttons[\$1].value  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].text  |  messages[\$1].imageResponseCard.buttons[\$1].text  | 
|  dialogAction.kendraQueryRequestPayload  |  dialogAction.kendraQueryRequestPayload  | 
|  dialogAction.kendraQueryFilterString  |  dialogAction.kendraQueryFilterString  | 

#### 의도 및 슬롯
<a name="lambda-migrating-response-slots"></a>

`dialogAction` 구조의 일부였던 의도 및 슬롯 필드는 이제 `sessionState` 구조의 일부가 되었습니다.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  dialogAction.intentName  |  sessionState.intent.name  | 
|  dialogAction.slots  |  sessionState.intent.slots  | 
|  dialogAction.slots[\$1].key  |  sessionState.intent.slots[\$1].key  | 
|  dialogAction.slots[\$1].value  |  sessionState.intent.slots[\$1].value.interpretedValue  | 
|  N/A  |  sessionState.intent.slots[\$1].value.shape  | 
|  N/A  |  sessionState.intent.slots[\$1].values  | 

#### 기타
<a name="lambda-migrating-response-other"></a>

이제 `sessionAttributes` 구조가 `sessionState` 구조의 일부입니다. `recentIntentSummaryReview` 구조가 제거되었습니다.


| V1 구조 | V2 구조 | 
| --- | --- | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  recentIntentSummaryView  |  N/A  | 