

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

# Lex V2 봇에 대한 대화 로그 활성화
<a name="enabling-logs"></a>

대화 로그를 사용하여 봇과의 사용자 대화를 저장하세요. 이러한 로그를 검토하여 봇과 사용자 간의 상호 작용과 관련된 문제를 식별하고 이러한 인사이트를 바탕으로 봇의 행동을 수정하세요. 또한 이 섹션에서는 슬롯 값을 난독화하여 사용자의 개인 정보를 보호하는 방법에 대해서도 설명합니다.

**Topics**
+ [Lex V2에서 대화 로그를 사용한 대화 로깅](conversation-logs.md)
+ [Lex V2에서 대화 로그의 슬롯 값 가리기](monitoring-obfuscate.md)
+ [Lex V2에서 선택적 대화 로그 캡처](monitoring-selective-logging.md)

# Lex V2에서 대화 로그를 사용한 대화 로깅
<a name="conversation-logs"></a>

*대화 로그*를 활성화하여 봇 상호 작용을 저장합니다. 이러한 로그를 사용하여 봇의 성능을 검토하고 대화 관련 문제를 해결할 수 있습니다. [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) 작업에 대한 텍스트와 오디오를 모두 기록할 수 있습니다. 대화 로그를 활성화하면 사용자가 봇과 나누는 대화를 자세히 볼 수 있습니다.

예를 들어 봇이 있는 세션에는 세션 ID가 있습니다. 이 ID를 사용하여 사용자 표현 및 해당 봇 응답을 포함한 대화의 기록을 가져올 수 있습니다. 또한 표현에 대한 의도 이름 및 슬롯 값과 같은 메타 데이터를 얻을 수 있습니다.

**참고**  
어린이 온라인 사생활 보호법(COPPA)이 적용되는 봇과의 대화 로그는 사용할 수 없습니다.

대화 로그는 별칭에 대해 구성됩니다. 각 별칭은 텍스트 및 오디오 로그에 대해 서로 다른 설정을 가질 수 있습니다. 각 별칭에 대해 텍스트 로그, 오디오 로그 또는 둘 다를 사용하도록 설정할 수 있습니다. 텍스트 로그는 텍스트 입력, 오디오 입력 기록 및 관련 메타 데이터를 CloudWatch Logs에 저장합니다. 오디오 로그는 오디오 입력을 Amazon S3에 저장합니다. AWS KMS 고객 관리형 CMK를 사용하여 텍스트 및 오디오 로그의 암호화를 활성화할 수 있습니다.

로깅을 구성하려면 콘솔 또는 [CreateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotAlias.html) 또는 [UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html) 작업을 사용하세요. 별칭에 대한 대화 로그를 활성화한 후, 해당 별칭에 대해 [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) 작업을 사용하면 구성된 CloudWatch Logs 그룹 또는 S3 버킷에 텍스트 또는 오디오 표현이 기록됩니다.

**Topics**
+ [대화 로그에 대한 IAM 정책](conversation-logs-policies.md)
+ [Lex V2 봇의 대화 로그 구성](conversation-logs-configure.md)
+ [Lex V2에서 Amazon CloudWatch Logs를 사용한 텍스트 로그 보기](conversation-logs-cw.md)
+ [Amazon S3에서 오디오 로그에 액세스](conversation-logs-s3.md)
+ [CloudWatch 지표를 통해 대화 로그 상태 모니터링](conversation-logs-monitoring.md)

# 대화 로그에 대한 IAM 정책
<a name="conversation-logs-policies"></a>

선택하는 로깅 유형에 따라, Amazon Lex V2는 Amazon CloudWatch Logs 및 S3(Amazon Simple Storage Service) 버킷을 사용해 로그를 보관할 권한이 필요합니다. Amazon Lex V2가 이러한 리소스에 액세스할 수 있도록 AWS Identity and Access Management 역할 및 권한을 생성해야 합니다.

## 대화 로그에 대한 IAM 역할 및 정책 생성
<a name="conversation-logs-role-and-policy"></a>

대화 로그를 활성화하려면, CloudWatch Logs 및 Amazon S3 에 대한 쓰기 권한을 부여해야 합니다. S3 객체에 대해 객체 암호화를 활성화하는 경우 객체를 암호화하는 데 사용되는 AWS KMS 키에 액세스 권한을 부여해야 합니다.

IAM 콘솔, IAM API 또는를 사용하여 역할 및 정책을 AWS Command Line Interface 생성할 수 있습니다. 여기에 나온 지침에서는 AWS CLI를 사용하여 역할과 정책을 생성합니다.

**참고**  
다음 코드는 Linux 및 MacOS 용으로 형식이 지정됩니다. Windows의 경우 Linux 줄 연속 문자(\$1)를 캐럿(^)으로 바꿉니다.



**대화 로그에 대한 IAM 역할 을 만들려면**

1. **LexConversationLogsAssumeRolePolicyDocument.json**이라는 현재 디렉터리에 문서를 만들고 다음 코드를 추가한 다음 저장합니다. 이 정책 문서는 Amazon Lex V2를 역할에 대한 신뢰할 수 있는 엔터티로써 추가합니다. 이렇게 하면 Amazon Lex V2가 역할을 수임하여 대화 로그에 대해 구성된 리소스에 로그를 전달할 수 있습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lexv2.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. AWS CLI에서 다음 명령을 실행하여 대화 로그에 대한 IAM 역할을 생성합니다.

   ```
   aws iam create-role \
       --role-name role-name \
       --assume-role-policy-document file://LexConversationLogsAssumeRolePolicyDocument.json
   ```

그런 다음 Amazon Lex V2가 CloudWatch Logs 에 쓸 수 있도록 하는 정책을 만들어 역할에 연결합니다.

**대화 텍스트를 CloudWatch Logs에 로깅하기 위한 IAM 정책을 만들려면**

1. **LexConversationLogsCloudWatchLogsPolicy.json**이라는 현재 디렉터리에 문서를 만들고 다음 IAM 정책 을 추가한 다음 저장합니다.

1. AWS CLI에서 CloudWatch Logs 로그 그룹에 쓰기 권한을 부여하는 IAM 정책을 생성합니다.

   ```
   aws iam create-policy \
       --policy-name cloudwatch-policy-name \
       --policy-document file://LexConversationLogsCloudWatchLogsPolicy.json
   ```

1. 대화 로그에 대해 생성한 IAM 역할 에 정책을 연결합니다.

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::account-id:policy/cloudwatch-policy-name \
       --role-name role-name
   ```

S3 버킷에 오디오를 로깅하는 경우 Amazon Lex V2가 버킷에 쓸 수 있도록 허용하는 정책을 생성합니다.

**S3 버킷에 오디오를 로깅하기 위한 IAM 정책을 만들려면**

1. **LexConversationLogsS3Policy.json**이라는 현재 디렉터리에 문서를 만들고 다음의 정책을 추가한 후 저장합니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::bucket-name/*"
         }
     ]
   }
   ```

------

1. AWS CLI에서 S3 버킷에 쓰기 권한을 부여하는 IAM 정책을 생성합니다.

   ```
   aws iam create-policy \
       --policy-name s3-policy-name \
       --policy-document file://LexConversationLogsS3Policy.json
   ```

1. 대화 로그에 대해 생성한 역할에 정책을 연결합니다.

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::account-id:policy/s3-policy-name \
       --role-name role-name
   ```

## IAM 역할 전달 권한 부여
<a name="conversation-logs-pass-role"></a>

콘솔 AWS Command Line Interface, 또는 AWS SDK를 사용하여 대화 로그에 사용할 IAM 역할을 지정하는 경우 대화 로그를 지정하는 사용자는 Amazon Lex V2에 역할을 전달할 권한이 있어야 합니다. 사용자가 역할을 Amazon Lex V2에 전달하도록 하려면 사용자의 IAM 사용자, 역할 또는 그룹에 `PassRole` 권한을 부여해야 합니다.

다음 정책은 사용자, 역할 또는 그룹에게 부여할 권한을 정의합니다. `iam:AssociatedResourceArn` 및 `iam:PassedToService` 조건 키를 사용해 권한 범위를 제한할 수 있습니다. 자세한 내용은 [ AWS Identity and Access Management 사용 설명서의 AWS 서비스에 역할을 전달할 수 있는 사용자 권한 부여 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) 및 [ IAM 및 AWS STS 조건 컨텍스트 키를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html). *AWS Identity and Access Management *

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/role-name",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "lexv2.amazonaws.com"
                },
                "StringLike": {
                    "iam:AssociatedResourceARN": "arn:aws:lex:region:123456789012:bot:bot-name:bot-alias"
                }
            }
        }
    ]
}
```

------

# Lex V2 봇의 대화 로그 구성
<a name="conversation-logs-configure"></a>

콘솔 또는 `CreateBotAlias` 또는 `UpdateBotAlias` 작업의 `conversationLogSettings` 필드를 사용하여 대화 로그를 활성화 및 비활성화합니다. 오디오 로그, 텍스트 로그 또는 둘 다 설정하거나 해제할 수 있습니다. 새 봇 세션에서 로깅이 시작됩니다. 로그 설정에 대한 변경 사항은 활성 세션에 반영되지 않습니다.

텍스트 로그를 저장하려면 AWS 계정에서 Amazon CloudWatch Logs 로그 그룹을 사용합니다. 유효한 로그 그룹 어느 것이든 사용할 수 있습니다. 로그 그룹은 Amazon Lex V2 봇과 동일한 리전에 있어야 합니다. CloudWatch 로그 로그 그룹 생성에 대한 자세한 내용을 알아보려면 *Amazon CloudWatch Logs 사용 설명서*의 [로그 그룹 및 로그 스트림 작업](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)을 참조하세요.

오디오 로그를 저장하려면 AWS 계정에 Amazon S3 버킷을 사용합니다. 유효한 S3 버킷 어느 것이든 사용할 수 있습니다. 버킷은 Amazon Lex V2 봇과 동일한 리전에 있어야 합니다. Amazon S3 버킷에 대한 자세한 내용은 *Amazon Simple Storage Service 시작 가이드*의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)을 참조하세요.

콘솔을 사용하여 대화 로그를 관리하면 콘솔이 로그 그룹 및 S3 버킷에 액세스할 수 있도록 서비스 역할을 업데이트합니다.

콘솔을 사용하지 않는 경우, Amazon Lex V2가 구성된 로그 그룹 또는 버킷에 쓸 수 있도록 하는 정책을 IAM 역할 에 제공해야 합니다. 를 사용하여 서비스 연결 역할을 생성하는 경우 다음 예제와 같이 `custom-suffix` 옵션을 사용하여 역할에 사용자 지정 접미사를 추가 AWS Command Line Interface해야 합니다. 자세한 내용은 [대화 로그에 대한 IAM 역할 및 정책 생성](conversation-logs-policies.md#conversation-logs-role-and-policy) 단원을 참조하십시오.

```
aws iam create-service-linked-role \
    --aws-service-name lexv2.amazon.aws.com \
    --custom-suffix suffix
```

대화 로그를 활성화하는 데 사용하는 IAM 역할에 `iam:PassRole` 권한이 있어야 합니다. 다음 정책이 역할에 연결되어야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/role"
        }
    ]
}
```

------

## 대화 로그 활성화
<a name="conversation-logs-enable"></a>

**콘솔을 사용하여 로그를 활성화하려면**

1. [https://console.aws.amazon.com/lexv2](https://console.aws.amazon.com/lexv2)에서 Amazon Lex V2 콘솔을 엽니다.

1. 목록에서 봇을 선택합니다.

1. 왼쪽 메뉴에서 **별칭**을 선택합니다.

1. 별칭 목록에서 대화 로그를 구성할 별칭을 선택합니다.

1. **대화 로그** 섹션에서 **대화 로그 관리**를 선택합니다.

1. 텍스트 로그의 경우 **활성화**를 선택한 다음 Amazon CloudWatch Logs 로그 그룹 이름을 입력합니다.

1. 오디오 로그의 경우 **활성화**를 선택한 다음 S3 버킷 정보를 입력합니다.

1. 선택 사항. 오디오 로그를 암호화하려면 암호화에 사용할 AWS KMS 키를 선택합니다.

1. **저장**을 선택하여 대화 로깅을 시작합니다. 필요한 경우 Amazon Lex V2는 CloudWatch Logs 로그 그룹 및 선택한 S3 버킷에 액세스할 수 있는 권한으로 서비스 역할을 업데이트합니다.

## Lex V2에서 대화 로그 비활성화
<a name="conversation-logs-disable"></a>

**콘솔을 사용하여 로그를 해제하려면**

1. [https://console.aws.amazon.com/lexv2](https://console.aws.amazon.com/lexv2)에서 Amazon Lex V2 콘솔을 엽니다.

1. 목록에서 봇을 선택합니다.

1. 왼쪽 메뉴에서 **별칭**을 선택합니다.

1. 별칭 목록에서 대화 로그를 구성할 별칭을 선택합니다.

1. **대화 로그** 섹션에서 **대화 로그 관리**를 선택합니다.

1. 텍스트 로깅, 오디오 로깅 또는 둘 다를 비활성화하여 로깅을 끕니다.

1. 대화 로깅을 중지하려면 **저장**을 선택합니다.

# Lex V2에서 Amazon CloudWatch Logs를 사용한 텍스트 로그 보기
<a name="conversation-logs-cw"></a>

Amazon Lex V2는 Amazon CloudWatch Logs의 사용자 대화에 대한 텍스트 로그를 저장합니다. 로그를 보려면 콘솔이나 API를 사용하세요. 자세한 내용은 [필터 패턴을 사용한 로그 데이터 검색](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html) 및 *Amazon CloudWatch Logs 사용자 가이드*의 [CloudWatch Logs Insights 쿼리 구문](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)을 참조하세요.

**Amazon Lex V2 콘솔을 사용하여 로그를 보려면**

1. [https://console.aws.amazon.com/lexv2](https://console.aws.amazon.com/lexv2)에서 Amazon Lex V2 콘솔을 엽니다.

1. 목록에서 봇을 선택합니다.

1. 왼쪽 메뉴에서 **분석**을 선택한 다음 **CloudWatch 지표**를 선택합니다.

1. **CloudWatch 지표** 페이지에서 봇에 대한 지표를 확인하세요.

CloudWatch 콘솔이나 API를 사용하여 로그 항목을 볼 수도 있습니다. 로그 항목을 찾으려면 별칭에 대해 구성한 로그 그룹으로 이동합니다. Amazon Lex V2 콘솔 또는 [DescribeBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeBotAlias.html) 작업을 사용하여 로그의 로그 스트림 접두사를 찾을 수 있습니다.

사용자 발화에 대한 로그 항목은 여러 로그 스트림에서 찾을 수 있습니다. 대화의 표현에는 지정된 접두사가 있는 로그 스트림 중 하나의 항목이 있습니다. 로그 스트림의 항목에는 다음 정보가 있습니다.

메시지 버전  
메시지 스키마 버전입니다.

bot  
고객이 상호 작용하는 봇에 대한 세부 정보입니다.

messages  
봇이 사용자에게 다시 보낸 응답입니다.

utteranceContext  
이 발화 처리에 관한 정보입니다.  
+ `runtimeHints`—사용자 입력을 기록하고 해석하는 데 사용되는 런타임 컨텍스트입니다. 자세한 내용은 [대화에서 런타임 힌트를 통한 슬롯 값 인식 개선](using-hints.md) 단원을 참조하세요.
+ `slotElicitationStyle`—사용자 입력을 해석하는 데 사용되는 슬롯 유도 스타일입니다. 자세한 내용은 [대화하는 동안 맞춤법 스타일을 사용하여 슬롯 값 캡처](spelling-styles.md) 단원을 참조하세요.

sessionState  
사용자와 봇 간의 현재 대화 상태입니다. 자세한 내용은 [Amazon Lex V2 봇 대화 이해](managing-conversations.md) 단원을 참조하세요.

해석  
Amazon Lex V2에서 사용자의 의견을 만족시킬 수 있다고 판단한 의도 목록입니다. [신뢰도 점수를 사용하여 대화 정확도 향상](confidence-scores.md).

interpretationSource  
슬롯이 Amazon Lex V2 또는 Amazon Bedrock에 의해 확인되는지 여부를 나타냅니다. 값: Lex \$1 Bedrock

sessionId  
대화를 진행 중인 사용자 세션의 식별자입니다.

inputTranscript  
사용자의 입력 내용에 대한 트랜스크립션입니다.  
+ 텍스트 입력의 경우 사용자가 입력한 텍스트입니다. DTMF 입력의 경우 사용자가 입력하는 키입니다.
+ 음성 입력의 경우, 이 텍스트는 의도를 간접적으로 호출하거나 슬롯을 채우기 위해 Amazon Lex V2가 사용자 표현을 변환하는 텍스트입니다.

rawInputTranscript  
텍스트 처리가 적용되기 전 사용자 입력의 원본 대화 기록입니다. 참고: 텍스트 처리는 en-US 및 en-GB 로캘에만 해당됩니다.

transcriptions  
사용자 입력의 잠재적 트랜스크립션 목록입니다. 자세한 내용은 [음성 트랜스크립션 신뢰도 점수를 사용하여 Lex V2 봇에서 대화 향상](using-transcript-confidence-scores.md) 단원을 참조하세요.

rawTranscription  
음성 트랜스크립션 신뢰도 점수 사용. 자세한 내용은 [음성 트랜스크립션 신뢰도 점수를 사용하여 Lex V2 봇에서 대화 향상](using-transcript-confidence-scores.md) 단원을 참조하세요.

missedUtterance  
Amazon Lex V2가 사용자의 발화를 인식할 수 있었는지 여부를 나타냅니다.

requestId  
Amazon Lex V2는 사용자 입력을 위한 요청 ID를 생성했습니다.

timestamp  
사용자 입력의 타임스탬프.

developerOverride  
대화 코드 후크를 사용하여 대화 흐름을 업데이트했는지 여부를 나타냅니다. 대화 코드 후크 사용에 대한 자세한 내용은 [Amazon Lex V2 봇에 AWS Lambda함수 통합](lambda.md) 단원을 참조하세요.

inputMode  
입력 유형을 나타냅니다. 오디오, DTMF 또는 텍스트일 수 있습니다.

requestAttributes  
사용자 입력을 처리할 때 사용되는 요청 속성입니다.

audioProperties  
오디오 대화 로그가 활성화되어 있고 사용자 입력이 오디오 형식인 경우 오디오 입력의 총 지속 시간, 음성 지속 시간 및 오디오의 무음 지속 시간이 포함됩니다. 오디오 파일에 대한 링크도 포함되어 있습니다.

bargeIn  
사용자 입력으로 인해 이전 봇 응답이 중단되었는지 여부를 나타냅니다.

responseReason  
응답이 생성된 이유입니다. 다음 중 하나일 수 있습니다.  
+ `UtteranceResponse` – 사용자 입력에 대한 응답
+ `StartTimeout` – 사용자가 입력을 제공하지 않은 경우 서버에서 생성된 응답
+ `StillWaitingResponse` – 사용자가 봇 대기를 요청할 때 서버가 생성한 응답
+ `FulfillmentInitiated` – 이행이 시작되려 한다는 서버 생성 응답
+ `FulfillmentStartedResponse` – 이행이 시작되었다는 서버 생성 응답
+ `FulfillmentUpdateResponse` – 이행이 진행되는 동안 정기적으로 서버에서 생성되는 응답
+ `FulfillmentCompletedResponse` – 이행 완료 시 서버에서 생성된 응답.

operationName  
봇과 상호 작용하는 데 사용되는 API입니다. `PutSession`, `RecognizeText`, `RecognizeUtterance` 또는 `StartConversation` 중 하나일 수 있습니다.

```
{
    "message-version": "2.0",
    "bot": {
        "id": "string",
        "name": "string",
        "aliasId": "string",
        "aliasName": "string",
        "localeId": "string",
        "version": "string"
    },
    "messages": [
        {
            "contentType": "PlainText | SSML | CustomPayload | ImageResponseCard",
            "content": "string",
            "imageResponseCard": {
                "title": "string",
                "subtitle": "string",
                "imageUrl": "string",
                "buttonsList": [
                    {
                        "text": "string",
                        "value": "string"
                    }
                ]
            }
        }
    ],
    "utteranceContext": {
        "activeRuntimeHints": {
            "slotHints": {
                "string": {
                    "string": {
                        "runtimeHintValues": [
                            {
                                "phrase": "string"
                            },
                            {
                                "phrase": "string"
                            }
                        ]
                    }
                }
            }
        },
        "slotElicitationStyle": "string"
    },
    "sessionState": {
        "dialogAction": {
            "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot",
            "slotToElicit": "string"
        },
        "intent": {
            "name": "string",
            "slots": {
                "string": { 
                    "value": { 
                       "interpretedValue": "string",
                       "originalValue": "string",
                       "resolvedValues": [ "string" ]
                    }
                 },  
                "string": {
                    "shape": "List",
                    "value": {
                        "originalValue": "string",
                        "interpretedValue": "string",
                        "resolvedValues": [ "string" ]
                    },
                    "values": [
                        {
                            "shape": "Scalar",
                            "value": {
                                "originalValue": "string",
                                "interpretedValue": "string",
                                "resolvedValues": [ "string" ]
                            }
                        },
                        {
                            "shape": "Scalar",
                            "value": {
                                "originalValue": "string",
                                "interpretedValue": "string",
                                "resolvedValues": [ "string" ]
                            }
                        }
                    ]
                }
            },
            "kendraResponse": {
                // Only present when intent is KendraSearchIntent. For details, see 
                // https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax
                },
            "state": "InProgress | ReadyForFulfillment | Fulfilled | Failed",
            "confirmationState": "Confirmed | Denied | None"
        },
        "originatingRequestId": "string",
        "sessionAttributes": {
            "string": "string"
        },
        "runtimeHints": {
            "slotHints": {
                "string": {
                    "string": {
                        "runtimeHintValues": [
                            {
                                "phrase": "string"
                            },
                            {
                                "phrase": "string"
                            }
                        ]
                    }
                }
            }
        }
    },
   "dialogEventLogs": [
        {
	  // only for conditional
     "conditionalEvaluationResult":[
      // all the branches until true

     {
     "conditionalBranchName": "string",
     "expressionString": "string",
     "evaluatedExpression": "string",
     "evaluationResult": "true | false"
     }
    ],
  "dialogCodeHookInvocationLabel": "string",
  "response": "string",
  "nextStep": {
        "dialogAction": {
            "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot",
            "slotToElicit": "string"
        },
	      "intent": {
                          "name": "string",
           "slots": {
               }
        }
       }
    ]
    "interpretations": [
        {
            "interpretationSource": "Bedrock | Lex",
            "nluConfidence": "string",
            "intent": {
                "name": "string",
                "slots": {
                    "string": {
                        "value": {
                            "originalValue": "string",
                            "interpretedValue": "string",
                            "resolvedValues": [ "string" ]
                        }
                    },
                    "string": {
                        "shape": "List",
                        "value": {
                            "interpretedValue": "string",
                            "originalValue": "string",
                            "resolvedValues": [ "string" ]
                        },
                        "values": [
                            {
                                "shape": "Scalar",
                                "value": {
                                    "interpretedValue": "string",
                                    "originalValue": "string",
                                    "resolvedValues": [ "string" ]
                                }
                            },
                            {
                                "shape": "Scalar",
                                "value": {
                                    "interpretedValue": "string",
                                    "originalValue": "string",
                                    "resolvedValues": [ "string" ]
                                }

                            }
                        ]
                    }
                },
                "kendraResponse": {
                    // Only present when intent is KendraSearchIntent. For details, see 
                    // https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax
                    },
                "state": "InProgress | ReadyForFulfillment | Fulfilled | Failed",
                "confirmationState": "Confirmed | Denied | None"
                },
            "sentimentResponse": {
                "sentiment": "string",
                "sentimentScore": {
                    "positive": "string",
                    "negative": "string",
                    "neutral": "string",
                    "mixed": "string"
                }
            }
        }
    ],
    "sessionId": "string",
    "inputTranscript": "string",
    "rawInputTranscript": "string",
    "transcriptions": [
        {
            "transcription": "string",
            "rawTranscription": "string",
            "transcriptionConfidence": "number",
            },
            "resolvedContext": {
                "intent": "string"
            },
            "resolvedSlots": {
                "string": {
                    "name": "slotName",
                    "shape": "List",
                    "value": { 
                        "originalValue": "string",
                        "resolvedValues": [
                            "string"
                        ]
                    }
                }
            }
        }
    ],
    "missedUtterance": "bool",
    "requestId": "string",
    "timestamp": "string",
    "developerOverride": "bool",
    "inputMode": "DTMF | Speech | Text",
    "requestAttributes": {
        "string": "string"
    },
    "audioProperties": {
        "contentType": "string",
        "s3Path": "string",
        "duration": {
            "total": "integer",
            "voice": "integer",
            "silence": "integer"
        }
    },
    "bargeIn": "string",
    "responseReason": "string",
    "operationName": "string"
}
```

로그 항목의 내용은 거래 결과와 봇 및 요청 구성에 따라 다릅니다.
+ `intent`, `slots`, `slotToElicit` 필드는 `missedUtterance` 필드가 `true`인 경우 항목에 나타나지 않습니다.
+ 오디오 로그가 비활성화되어 있거나 `inputDialogMode` 필드가 `Text`인 경우 `s3PathForAudio` 필드가 나타나지 않습니다.
+ `responseCard` 필드는 봇에 대한 응답 카드를 지정한 경우에만 나타납니다.
+ `requestAttributes` 맵은 요청에 지정된 속성이 있는 경우에만 나타납니다.
+ 이 `kendraResponse`필드는 `AMAZON.KendraSearchIntent`가 Amazon Kendra 인덱스 검색을 요청할 때만 표시됩니다.
+ 봇의 Lambda 함수에 대체 의도가 지정된 경우 이 `developerOverride` 필드는 참입니다.
+ `sessionAttributes` 맵은 요청에 지정된 세션 속성이 있는 경우에만 나타납니다.
+ `sentimentResponse` 맵은 사용자가 봇을 구성해 감정 값을 반환할 경우에만 나타납니다.

**참고**  
`messageVersion`에서 해당 내용을 변경하지 않아도 입력 형식을 변경할 수 있습니다. 새 필드가 있는 경우 코드에서 오류가 발생하면 안 됩니다.

# Amazon S3에서 오디오 로그에 액세스
<a name="conversation-logs-s3"></a>

Amazon Lex V2는 S3 버킷에 대화에 대한 오디오 로그를 보관합니다.

Amazon S3 콘솔 또는 API를 사용하여 오디오 로그에 액세스할 수 있습니다. Amazon Lex V2 콘솔 또는 `DescribeBotAlias` 작업 응답의 `conversationLogSettings` 필드에서 오디오 파일의 S3 객체 키 접두사를 볼 수 있습니다.

# CloudWatch 지표를 통해 대화 로그 상태 모니터링
<a name="conversation-logs-monitoring"></a>

Amazon CloudWatch 를 사용하여 대화 로그의 전달 지표를 모니터링합니다. 로깅 문제가 발생할 경우 이를 인식할 수 있도록 지표에 경보를 설정할 수 있습니다.

Amazon Lex V2에서는 대화 로그에 대한 `AWS/Lex` 네임스페이스에 다음과 같은 4개의 지표를 제공합니다.
+ `ConversationLogsAudioDeliverySuccess`
+ `ConversationLogsAudioDeliveryFailure`
+ `ConversationLogsTextDeliverySuccess`
+ `ConversationLogsTextDeliveryFailure`

성공 지표는 Amazon Lex V2가 대상에 오디오 또는 텍스트 로그를 성공적으로 작성했음을 보여줍니다.

실패 지표는 Amazon Lex V2가 지정된 대상에 오디오 또는 텍스트 로그를 전달할 수 없음을 보여줍니다. 일반적으로 이는 구성 오류입니다. 실패 지표가 0보다 높으면 다음을 확인하세요.
+ Amazon Lex V2가 IAM 역할에 대한 신뢰할 수 있는 엔터티인지 확인합니다.
+ 텍스트 로깅의 경우 CloudWatch 로그 로그 그룹이 있는지 확인합니다. 오디오 로깅의 경우 S3 버킷이 있는지 확인합니다.
+ Amazon Lex V2가 로그 그룹 또는 S3 버킷에 액세스하는 데 사용하는 IAM 역할에 로그 그룹 또는 버킷에 대한 쓰기 권한이 있는지 확인합니다.
+ S3 버킷이 Amazon Lex V2 봇과 동일한 리전에 존재하며, 사용자 계정에 속하는지 확인합니다.

# Lex V2에서 대화 로그의 슬롯 값 가리기
<a name="monitoring-obfuscate"></a>

Amazon Lex V2를 사용하면 슬롯의 내용이 표시되지 않도록 해당 내용을 난독화하거나 숨길 수 있습니다. 슬롯 값으로 캡처된 민감한 데이터를 보호하기 위해 슬롯 난독화 기능을 활성화하여 로깅에 대해 이러한 값을 마스킹할 수 있습니다.

슬롯 값을 난독화하도록 선택한 경우 Amazon Lex V2는 슬롯 값을 대화 로그의 슬롯 이름으로 바꿉니다. `full_name`이라는 슬롯의 경우 슬롯 값은 다음과 같이 난독화됩니다.

```
Before:
    My name is John Stiles
After:
    My name is {full_name}
```

발언에 괄호 문자(\$1\$1)가 있는 경우 Amazon Lex V2는 괄호 문자를 역슬래시 두 개(\$1\$1)로 이스케이프합니다. 예를 들어 텍스트 `{John Stiles}`는 다음과 같이 난독화됩니다.

```
Before:
    My name is {John Stiles}
After:
    My name is \\{{full_name}\\}
```

슬롯 값은 대화 로그에서 난독화됩니다. 슬롯 값은 `RecognizeText` 및 `RecognizeUtterance` 작업의 응답에서 계속 사용할 수 있으며, Lambda 함수의 유효성 검사 및 이행에 사용할 수 있습니다. 프롬프트 또는 응답에 슬롯 값을 사용하는 경우 이러한 슬롯 값은 대화 로그에서 난독화되지 않습니다.

대화의 첫 번째 차례에서 Amazon Lex V2가 발화의 슬롯 및 슬롯 값을 인식하면 슬롯 값을 난독화합니다. 슬롯 값이 인식되지 않으면 Amazon Lex V2는 발화를 난독화하지 않습니다.

두 번째 및 이후 차례에서 Amazon Lex V2는 유도할 슬롯과 슬롯 값을 난독화해야 하는지 여부를 알고 있습니다. Amazon Lex V2가 슬롯 값을 인식하면 값이 난독화됩니다. Amazon Lex V2가 값을 인식하지 못하면 전체 발언이 난독화됩니다. 누락된 표현의 슬롯 값은 난독화되지 않습니다.

또한 Amazon Lex V2는 요청 또는 세션 속성에 저장하는 슬롯 값을 난독화하지 않습니다. 속성으로 난독화해야 하는 슬롯 값을 저장하는 경우 값을 암호화하거나 난독화해야 합니다.

Amazon Lex V2는 오디오의 슬롯 값을 난독화하지 않으며, 오디오 트랜스크립션의 슬롯 값을 난독화합니다.

콘솔을 사용하거나 Amazon Lex V2 API를 사용하여 난독화할 슬롯을 선택할 수 있습니다. 콘솔의 슬롯에 대한 설정에서 **슬롯 난독화**를 선택합니다. API를 사용하는 경우 [CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html) 또는 [UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html) 작업을 직접적으로 호출할 때 슬롯의 `obfuscationSetting` 필드를 `DEFAULT_OBFUSCATION`으로 설정합니다.

# Lex V2에서 선택적 대화 로그 캡처
<a name="monitoring-selective-logging"></a>

선택적 대화 로그 캡처를 통해 사용자는 실시간 대화의 텍스트 및 오디오 데이터와 함께 대화 로그를 캡처하는 방법을 선택할 수 있습니다.

선택적 대화 로그 캡처 기능의 출력을 활성화하고 캡처하려면 Amazon Lex V2 콘솔에서 기능을 활성화하고 API 설정에서 필수 세션 속성을 활성화하여 로그에서 선택한 출력을 캡처해야 합니다.

선택적 대화 로그 캡처를 위해 다음 옵션을 선택할 수 있습니다.
+ 텍스트 전용
+ 오디오 전용
+ 텍스트 및 오디오

대화의 특정 부분을 캡처하고 대화 로그에 오디오, 텍스트 또는 둘 다 캡처할지 선택할 수 있습니다.

**참고**  
선택적 대화 로그 캡처는 Amazon Lex V2에서만 작동합니다.

**Topics**
+ [선택적 대화 로그 캡처를 관리합니다.](manage-selective-logging.md)
+ [선택적 대화 로그 캡처의 예](example-selective-logging.md)

# 선택적 대화 로그 캡처를 관리합니다.
<a name="manage-selective-logging"></a>

Lex 콘솔을 사용하여 선택적 대화 로그 캡처 설정을 활성화하고 선택적 대화 로그 캡처 기능을 활성화할 슬롯을 선택할 수 있습니다.

**Amazon Lex V2 콘솔에서 선택적 대화 로그 캡처 활성화:**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/lexv2/home](https://console.aws.amazon.com/lexv2/home) Amazon Lex V2 콘솔을 엽니다.

1. 왼쪽 패널에서 **봇**을 선택하고 선택적 대화 로그 캡처를 활성화하려는 봇을 선택합니다. 기존 봇을 사용하거나 새 봇을 만듭니다.

1. 왼쪽 패널의 **배포** 섹션에서 선택한 봇의 **별칭**을 선택합니다.

1. 봇의 별칭을 선택한 다음 **대화 로그 관리**를 선택합니다.

1. **대화 로그 관리** 패널의 **텍스트 로그**의 경우 라디오 버튼을 선택하여 텍스트 로그의 활성화 또는 비활성화 여부를 선택합니다. 텍스트 로그 **활성화**를 선택한 경우 **로그 그룹 이름**을 입력하거나 드롭다운 메뉴에서 기존 로그 그룹 이름을 선택해야 합니다. 텍스트 파일을 선택적으로 로깅하려면 **선택적으로 발화 로그** 확인란을 선택합니다.
**참고**  
빌드 타임 **BotAlias** 설정에서 **대화 로그 설정**(텍스트 및/또는 오디오)에서 **선택적으로 발화 로그** 확인란을 선택하여 텍스트 및/또는 오디오 로그를 활성화합니다. 이 옵션을 선택하려면 CloudWatch 로그 그룹과 Amazon S3 버킷을 구성해야 합니다.

1. **오디오 로그** 섹션에서 라디오 버튼을 선택하여 오디오 로그의 활성화 또는 비활성화 여부를 선택합니다. 오디오 로그 **활성화**를 선택한 경우 Amazon S3 버킷 위치와 오디오 데이터 암호화를 위한 KMS 키(선택 사항)를 지정해야 합니다. 오디오 파일을 선택적으로 로깅하려면 **선택적으로 발화 로그** 확인란을 선택합니다.  
![\[대화 로그 관리를 위한 패널.\]](http://docs.aws.amazon.com/ko_kr/lexv2/latest/dg/images/logging/selective-manage-logs.png)

1. 패널 오른쪽 하단에 있는 **저장**을 선택하여 선택적 대화 로그 캡처 설정을 저장합니다.

**Amazon Lex V2 콘솔에서 선택적 대화 로그 캡처 활성화:**

1. **의도**로 이동하여 **의도 이름**, **초기 응답**, **고급 설정**, **값 설정**, **세션 속성**을 선택합니다.

1. 선택적 대화 로그 캡처를 활성화하려는 의도와 슬롯을 기반으로 다음 속성을 설정합니다.
   + `x-amz-lex:enable-audio-logging:intent:slot = "true"`
   + `x-amz-lex:enable-text-logging:intent:slot = "true"`  
![\[선택적 세션 속성을 추가하기 위한 패널.\]](http://docs.aws.amazon.com/ko_kr/lexv2/latest/dg/images/logging/selective-session-attributes.png)
**참고**  
대화의 특정 슬롯만 포함하는 발화를 캡처하도록 `x-amz-lex:enable-audio-logging:intent:slot = "true"`를 설정합니다. 발화를 기록하는 작업은 세션 속성 식과 비교하여 발화 내의 *의도 *:*슬롯* 평가 및 해당 플래그 값에 따라 달라집니다. 발화를 기록하려면 세션 속성에서 하나 이상의 표현식이 이를 허용하고 로깅 활성화 플래그가 `true`로 설정되어 있어야 합니다. *의도*와 *슬롯*의 값도 `"*"`이 될 수 있습니다. 슬롯 및/또는 의도 값이 `"*"`이면 `"*"`의 모든 슬롯 및/또는 의도 값이 일치함을 의미합니다. `x-amz-lex:enable-audio-logging`과 마찬가지로 `x-amz-lex:enable-text-logging`이라는 새 세션 속성이 텍스트 로그를 제어하는 데 사용됩니다.

1. **업데이트 옵션**을 선택하고 업데이트된 설정을 포함하도록 봇을 빌드합니다.

**참고**  
IAM 역할에는 Amazon S3 버킷에 데이터를 쓰고 KMS 키를 사용하여 데이터를 암호화할 수 있는 액세스 권한이 있어야 합니다. Lex는 CloudWatch Logs 로그 그룹 및 선택한 Amazon S3 버킷에 액세스할 수 있는 Lex 권한으로 IAM 역할을 업데이트합니다.

**선택적 대화 로그 캡처 사용 지침:**

**대화 로그 설정**에서 텍스트 및/또는 오디오 로그를 활성화한 경우에만 텍스트 및/또는 오디오 로그에 대한 선택적 대화 로그 캡처를 활성화할 수 있습니다. 텍스트 및/또는 오디오 로그에 대한 선택적 대화 로그 캡처를 활성화하면 대화의 모든 의도와 슬롯에 대한 로깅이 비활성화됩니다. 특정 의도와 슬롯에 대한 텍스트 및/또는 오디오 로그를 생성하려면 해당 의도와 슬롯에 대한 텍스트 및/또는 오디오 선택적 대화 로그 캡처 세션 속성을 “true”로 설정해야 합니다.
+ 선택적 대화 로그 캡처가 활성화되어 있고 x-amz-lex:enable-audio-loging이라는 접두사를 가진 세션 속성이 없는 경우 모든 발화에 대해 기본적으로 로깅이 비활성화됩니다. 이 시나리오는 x-amz-lex:enable-text-loging의 경우에도 마찬가지입니다.
+ 세션 속성에 있는 식이 하나 이상 허용하는 경우 발화 로그는 텍스트 및/또는 오디오 대화의 세그먼트에만 저장됩니다.
+ 세션 속성에 정의된 텍스트 및/또는 오디오의 선택적 대화 로그 캡처 구성은 봇 별칭 내 대화 로그 설정에서 텍스트 및/또는 오디오에 대한 선택적 대화 로그 캡처를 활성화한 경우에만 유효합니다. 그러지 않으면 세션 속성은 무시됩니다.
+ 선택적 대화 로그 캡처가 활성화되면 세션 속성을 사용하여 로깅이 활성화되지 않은 SessionState, 해석 및 트랜스크립션의 모든 슬롯 값이 생성된 텍스트 로그에서 난독 처리됩니다.
+ 사용자가 의도 도출과 함께 슬롯 값을 제공할 수 있는 의도 도출 턴을 제외하고 봇이 유도한 슬롯을 선택적 대화 로그 캡처 세션 속성과 일치시켜 오디오 및/또는 텍스트 로그를 생성할지 여부를 결정합니다. 의도 추출 턴에서는 현재 턴에 채워진 슬롯이 선택적 대화 로그 캡처 세션 속성과 매칭됩니다.
+ 채워진 것으로 간주되는 슬롯은 턴 종료 시점의 세션 상태에서 파생됩니다. 따라서 Dialog Codehook Lambda가 세션 상태의 슬롯을 변경하면 선택적 대화 로그 캡처 동작에 영향을 줍니다.
+ 의도 유도 턴에서 사용자가 여러 슬롯 값을 제공하면 텍스트 및 오디오 세션 속성이 해당 턴에 채워진 모든 슬롯에 대한 로깅을 허용하는 경우에만 텍스트 및/또는 오디오 로그가 생성됩니다.
+ 권장되는 운영 접근 방식은 세션 시작 시 선택적 대화 로그 캡처 세션 속성을 설정하고 세션 중에는 수정하지 않는 것입니다.
+ 민감한 데이터가 포함된 슬롯이 있는 경우 항상 슬롯 난독화 기능을 활성화해야 합니다.

# 선택적 대화 로그 캡처의 예
<a name="example-selective-logging"></a>

다음은 선택적 대화 로그 캡처에 대한 비즈니스 사용 사례의 예입니다.

**사용 사례:**

한 핀테크 회사는 Amazon Lex V2 봇을 사용하여 사용자가 청구서를 결제할 수 있는 IVR 시스템을 지원합니다. 규정 준수 및 감사 요구 사항을 충족하려면 사용자가 제공한 승인 동의의 오디오 녹음을 보관해야 합니다. 그러나 일반 오디오 로그를 활성화하면 오디오 로그의 CardNumber, CVV 및 기타 정보와 같은 민감한 슬롯을 난독화할 수 없기 때문에 규정을 준수하지 않게 되므로 활성화할 수 없습니다. 대신 오디오 로그에 대한 선택적 대화 로그 캡처를 활성화하고 권한 부여가 승인된 발화에 대한 오디오 로그만 생성하도록 세션 속성을 설정할 수 있습니다.

**BotAlias 설정:**
+ 텍스트 로그 활성화: true 
+ 텍스트 로그 선택적 로깅 활성화: false
+ 오디오 로그 활성화: true 
+ 오디오 로그 선택적 로깅 활성화: true 

**세션 속성:**

`x-amz-lex:enable-audio-logging:PayBill:AuthorizationConsent = "true"`

**샘플 대화:**
+ 사용자(오디오 입력): “청구서 번호 35XU68로 청구서를 결제하고 싶어요.”
+ 봇: “납부해야 할 금액은 달러로 얼마인가요?”
+ 사용자(오디오 입력): "235."
+ 봇: “신용카드 번호가 뭔가요?”
+ 사용자(오디오 입력): "9239829722200348."
+ 봇: “0348로 끝나는 신용 카드 번호를 사용하여 235 달러를 지불하겠습니다. '235 달러 결제를 승인했습니다'라고 말해 주세요.”
+ 사용자(오디오 입력): “235 달러 결제를 승인합니다.”
+ 봇: “청구서가 결제되었습니다.”

**대화 로그 출력: **

이 경우 모든 턴에 대해 텍스트 로그가 생성됩니다. 하지만 오디오 로그는 **PayBill** 의도 내 **AuthorizationConcept** 슬롯이 요청된 특정 턴에 대해서만 기록되며, 다른 턴에 대해서는 오디오 로그가 생성되지 않습니다.