

지원 종료 공지: 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) 참조하세요.

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

# 기본 제공 의도
<a name="howitworks-builtins-intents"></a>

일반적인 작업에 표준 기본 제공 의도 라이브러리를 사용할 수 있습니다. 기본 제공 의도에서 의도를 생성하려면, 콘솔에서 기본 제공 의도를 선택한 후 해당 기본 제공 의도에 새 이름을 지정합니다. 새 의도에는 샘플 표현 등 기본 의도의 구성이 포함되어 있습니다.

현재 구현에서는 다음 작업을 수행할 수 없습니다.
+ 기본 의도에서 샘플 표현 추가 또는 제거
+ 기본 제공 의도의 슬롯 구성

**봇에 기본 제공 의도를 추가하려면**

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

1. 기본 제공 의도를 추가할 봇을 선택합니다.

1. 탐색 창에서 **의도** 옆에 있는 더하기(\$1) 기호를 선택합니다.

1. **의도 추가**에서 **기존 의도 검색**을 선택합니다.

1. **검색 의도 상자**에 봇에 추가할 기본 제공 의도의 이름을 입력합니다.

1. **기본 제공 의도 복사**에서 의도 이름을 입력한 다음 **추가**를 선택합니다.

1. 봇에 필요한 대로 의도를 구성하세요.

**Topics**
+ [AMAZON.CancelIntent](built-in-intent-cancel.md)
+ [AMAZON.FallbackIntent](built-in-intent-fallback.md)
+ [AMAZON.HelpIntent](built-in-intent-help.md)
+ [AMAZON.KendraSearchIntent](built-in-intent-kendra-search.md)
+ [AMAZON.PauseIntent](built-in-intent-pause.md)
+ [AMAZON.RepeatIntent](built-in-intent-repeat.md)
+ [AMAZON.ResumeIntent](built-in-intent-resume.md)
+ [AMAZON.StartOverIntent](built-in-intent-start-over.md)
+ [AMAZON.StopIntent](built-in-intent-stop.md)

**참고**  
영어(미국)(en-US) 로캘의 경우 Amazon Lex는 Alexa 표준 기본 제공 의도로부터 의도를 지원합니다. 기본 제공 의도 목록은 [Alexa Skills Kit](https://developer.amazon.com/docs/custom-skills/standard-built-in-intents.html)의 *표준 기본 제공 의도*를 참조하십시오.  
Amazon Lex는 다음과 같은 의도는 지원하지 않습니다.  
`AMAZON.YesIntent`
`AMAZON.NoIntent` 
*Alexa Skills Kit*의 [기본 제공 의도 라이브러리](https://developer.amazon.com/docs/custom-skills/built-in-intent-library.html)에 있는 의도

# AMAZON.CancelIntent
<a name="built-in-intent-cancel"></a>

사용자가 현재 상호 작용을 취소하기를 원한다는 것을 나타내는 단어와 문구에 응답합니다. 애플리케이션은 이 의도를 사용하여 사용자와의 상호작용을 종료하기 전에 슬롯 유형 값 및 기타 속성을 제거할 수 있습니다.

공통 표현:
+ 취소
+ 신경 쓰지 마
+ 잊어버려

# AMAZON.FallbackIntent
<a name="built-in-intent-fallback"></a>

사용자의 의도 입력이 봇의 예상과 다를 경우 Amazon Lex가 *폴백 의도*를 호출하도록 구성할 수 있습니다. 예를 들어 사용자 입력 "캔디를 주문하고 싶어"가 봇의 `OrderFlowers` 의도와 맞지 않는 경우 Amazon Lex는 응답 처리를 위해 폴백 의도를 호출합니다.

기본 제공 `AMAZON.FallbackIntent` 의도 유형을 봇에 추가하여 폴백 의도를 추가할 수 있습니다. [PutBot](API_PutBot.md) 작업을 사용하거나 콘솔의 기본 제공 의도 목록에서 의도를 선택하여 의도를 지정할 수 있습니다.

폴백 의도 간접 호출은 두 단계로 진행됩니다. 첫 번째 단계에서 폴백 의도는 사용자의 입력을 기반으로 매칭됩니다. 폴백 의도가 일치할 경우 봇이 작동하는 방식은 프롬프트에 설정된 재시도 수에 따라 다릅니다. 예를 들어 의도를 판단하는 최대 시도 횟수가 2라면 봇은 폴백 의도를 호출하기 전에 봇의 확인 프롬프트를 두 번 반환합니다.

Amazon Lex가 폴백 의도와 일치하는 경우는 다음과 같습니다.
+ 의도에 대한 사용자 입력이 봇이 예상한 입력과 같지 않습니다.
+ 음성 입력에 노이즈가 있거나, 텍스트 입력이 단어로 인식되지 않습니다.
+ 사용자 입력이 모호하여 Amazon Lex에서 호출할 의도를 판단할 수 없습니다.

폴백 의도가 간접적으로 호출되는 시점은 다음과 같습니다.
+ 대화가 시작될 때 명확히 하기 위해 설정된 시도 횟수를 넘긴 후에도 봇이 사용자 입력을 의도로 인식하지 않는 경우
+ 설정된 시도 횟수를 넘긴 후에도 의도가 사용자 입력을 슬롯 값으로 인식하지 않는 경우
+ 설정된 시도 횟수를 넘긴 후에도 의도가 사용자 입력을 확인 프롬프트에 대한 응답으로 인식하지 않는 경우

폴백 의도에 사용할 수 있는 항목은 다음과 같습니다.
+ Lambda 함수 이행
+ 결론문
+ 후속 프롬프트

다음은 폴백 의도에 추가할 수 없습니다.
+ 표현
+ Slots
+ 초기화 및 검증 Lambda 함수 
+ 확인 프롬프트

봇의 취소문과 폴백 의도를 모두 구성한 경우 Amazon Lex가 폴백 의도를 사용합니다. 봇에 취소문이 있어야 한다면 폴백 의도에 대한 이행 함수를 사용하여 취소문과 동일한 동작을 제공할 수 있습니다. 자세한 내용은 [PutBot](API_PutBot.md) 작업의 `abortStatement` 파라미터를 참조하십시오.

## 확인 프롬프트 사용
<a name="fallback-clarification"></a>

봇에 확인 프롬프트를 제공하면 사용자의 유효한 의도를 얻을 수 있도록 해당 프롬프트가 사용됩니다. 확인 프롬프트는 설정해 놓은 횟수를 반복합니다. 그 이후에 폴백 의도가 호출됩니다.

봇을 만들 때 확인 프롬프트를 설정하지 않았고, 사용자가 올바른 의도로 대화를 시작하지 않는다면 Amazon Lex는 폴백 의도를 즉시 호출합니다.

확인 프롬프트를 사용하지 않고 폴백 의도를 사용한다면 Amazon Lex는 다음 상황에서 폴백을 호출하지 않습니다.
+ 사용자가 후속 프롬프트에 응답하지만, 의도를 제공하지 않는 경우 예를 들어, "오늘 다른 것을 원하시나요?"라는 후속 프롬프트에 대한 응답에 대해, 사용자는 "네"라고 대답합니다. Amazon Lex에 사용자의 의도를 파악하기 위한 확인 프롬프트가 없기 때문에 400 잘못된 요청 예외가 반환됩니다.
+  AWS Lambda 함수를 사용할 때 `ElicitIntent` 대화 유형을 반환합니다. Amazon Lex에 사용자의 의도를 파악하기 위한 확인 프롬프트가 없기 때문에 400 잘못된 요청 예외가 반환됩니다.
+ `PutSession` 작업을 사용 중인 경우 `ElicitIntent` 대화 유형을 전송합니다. Amazon Lex에 사용자의 의도를 파악하기 위한 확인 프롬프트가 없기 때문에 400 잘못된 요청 예외가 반환됩니다.

## 폴백 의도에 Lambda 함수 사용
<a name="invoke-fallback"></a>

폴백 의도가 호출되면 응답은 [PutIntent](API_PutIntent.md) 작업에 대한 `fulfillmentActivity` 파라미터 설정에 따라 달라집니다. 봇은 다음 중 하나를 수행합니다.
+ 의도 정보를 클라이언트 애플리케이션에 반환합니다.
+ 이행 Lambda 함수를 호출합니다. 세션에 설정된 세션 변수로 함수를 직접적으로 호출합니다.

폴백 의도가 호출될 때 응답을 설정하는 작업에 대한 자세한 내용은 [PutIntent](API_PutIntent.md) 작업의 `fulfillmentActivity` 파라미터를 참조하십시오.

폴백 의도에서 이행 Lambda 함수를 사용하는 경우에는 이 함수로 다른 의도를 호출할 수 있습니다. 회신 번호를 수집하거나 고객 서비스 담당자와의 세션을 개설하는 사용자와 일종의 커뮤니케이션을 수행할 수도 있습니다.

이행 함수에서 다른 의도에 대해 수행할 수 있는 모든 작업을 폴백 의도 Lambda 함수에서 수행할 수 있습니다. 를 사용하여 이행 함수를 생성하는 방법에 대한 자세한 내용은 섹션을 AWS Lambda참조하세요[Lambda 함수 사용](using-lambda.md).

세션이 동일하면 폴백 의도는 여러 번 간접적으로 호출할 수 있습니다. 예를 들어 Lambda 함수가 `ElicitIntent` 대화 작업을 사용하여 사용자에게 다른 의도를 묻는 프롬프트를 표시한다고 해 보겠습니다. Amazon Lex가 설정된 시도 횟수 이후에 사용자의 의도를 추론할 수 없다면 폴백 의도를 다시 호출합니다. 또한 사용자가 구성된 시도 횟수 후 올바른 슬롯 값으로 응답하지 않을 때도 폴백 의도를 간접적으로 호출합니다.

세션 변수를 사용하여 폴백 의도를 호출하는 횟수를 추적하도록 Lambda 함수를 구성할 수 있습니다. Lambda 함수는 Lambda 함수에 설정한 임계값보다 더 많이 호출될 경우 다른 작업을 수행할 수 있습니다. 세션 변수에 대한 자세한 내용은 [Setting Session Attributes](context-mgmt-session-attribs.md) 단원을 참조하세요.

# AMAZON.HelpIntent
<a name="built-in-intent-help"></a>

사용자가 봇과 상호작용하는 동안 도움이 필요함을 나타내는 단어나 문구에 응답합니다. 이 의도가 간접적으로 호출되면 Lambda 함수 또는 애플리케이션을 구성하여 봇 기능에 대한 정보를 제공하고, 도움이 필요한 영역에 대한 후속 질문을 하거나, 상담원에게 상호 작용을 넘겨줄 수 있습니다.

공통 표현:
+ 도움
+ 도와줘
+ 나 좀 도와줄래?

# AMAZON.KendraSearchIntent
<a name="built-in-intent-kendra-search"></a>

Amazon Kendra로 인덱싱된 문서를 검색하려면 `AMAZON.KendraSearchIntent` 의도를 사용합니다. Amazon Lex가 사용자와의 대화에서 다음 작업을 결정할 수 없으면 검색 의도가 트리거됩니다.

`AMAZON.KendraSearchIntent`는 영어(미국)(en-US) 및 미국 동부(버지니아 북부), 미국 서부(오레곤) 및 유럽(아일랜드) 리전만 사용 가능합니다.

Amazon Kendra는 PDF 문서 또는 Microsoft Word 파일과 같은 자연어 문서를 인덱싱하는 기계 학습 기반 검색 서비스입니다. 인덱싱된 문서를 검색하고 질문에 대해 다음 유형의 응답을 반환할 수 있습니다.
+ 대답 
+ 질문에 대한 답이 될 수 있는 FAQ 항목
+ 질문과 관련된 문서

`AMAZON.KendraSearchIntent` 사용 예는 [예제: Amazon Kendra 인덱스에 대한 FAQ 봇 생성](faq-bot-kendra-search.md) 섹션을 참조하십시오.

봇에 `AMAZON.KendraSearchIntent` 의도를 구성하면 Amazon Lex가 슬롯 또는 의도에 대한 사용자 표현을 파악할 수 없을 때마다 이 의도를 호출합니다. 예를 들어 봇이 "피자 토핑"이라는 슬롯 유형에 대한 응답을 유도할 때 사용자가 "피자가 뭐야?"라고 말할 경우 Amazon Lex는 이 질문을 처리하기 위해 `AMAZON.KendraSearchIntent`를 호출합니다. Amazon Kendra에서 응답이 없으면 봇에 구성된 대로 대화가 계속됩니다.

동일한 봇에서 `AMAZON.KendraSearchIntent`와 `AMAZON.FallbackIntent`가 모두 사용되는 경우 Amazon Lex는 이러한 의도를 다음과 같이 사용합니다.

1. Amazon Lex가 `AMAZON.KendraSearchIntent`을 호출합니다. 이 의도는 Amazon Kendra `Query` 작업을 호출합니다.

1. Amazon Kendra에서 응답을 반환하면 Amazon Lex가 사용자에게 결과를 표시합니다.

1. Amazon Kendra에서 응답이 없으면 Amazon Lex가 사용자에게 다시 메시지를 표시합니다. 다음 작업은 사용자의 응답에 따라 달라집니다.
   + 사용자의 응답에 슬롯 값을 채우거나 의도를 확인하는 것과 같이 Amazon Lex에서 인식하는 표현이 포함된 경우 봇에 구성된 대로 사용자와의 대화가 진행됩니다.
   + 사용자의 응답에 Amazon Lex에서 인식하는 표현이 포함되어 있지 않으면 Amazon Lex가 새로운 `Query` 작업을 호출합니다.

1. 구성된 재시도 횟수 이후에 응답이 없으면 Amazon Lex가 `AMAZON.FallbackIntent`를 호출하여 사용자와의 대화를 종료합니다.

`AMAZON.KendraSearchIntent`를 사용하여 Amazon Kendra에 요청을 하는 방법에는 다음 3가지가 있습니다.
+ 의도 검색이 대신 요청하도록 하세요. Amazon Lex는 사용자의 말을 검색 문자열로 사용하여 Amazon Kendra를 호출합니다. 의도를 생성할 때 Amazon Kendra에서 반환되는 응답 수를 제한하는 쿼리 필터 문자열을 정의할 수 있습니다. Amazon Lex는 쿼리 요청에서 필터를 사용합니다.
+ 대화 Lambda 함수를 사용하여 요청에 추가 쿼리 파라미터 추가하세요. `delegate` 대화 작업에 Amazon Kendra 쿼리 파라미터가 포함된 `kendraQueryFilterString` 필드를 추가합니다. Lambda 함수를 사용하여 요청에 쿼리 파라미터를 추가하면 해당 파라미터가 의도를 생성할 때 정의한 쿼리 필터보다 우선 적용됩니다.
+ 대화 Lambda 함수를 사용하여 새 쿼리 생성. Amazon Lex가 보내는 전체 Amazon Kendra 쿼리 요청을 생성할 수 있습니다. `delegate` 대화 작업의 `kendraQueryRequestPayload` 필드에 쿼리를 지정합니다. `kendraQueryRequestPayload` 필드가 `kendraQueryFilterString` 필드보다 우선 적용됩니다.

봇을 생성할 때 `queryFilterString` 파라미터를 지정하거나 대화 Lambda 함수에서 `delegate` 작업을 직접적으로 호출할 때 `kendraQueryFilterString` 필드를 지정하려면 Amazon Kendra 쿼리에 대한 속성 필터로 사용되는 문자열을 지정합니다. 문자열이 유효한 속성 필터가 아닌 경우 런타임에 `InvalidBotConfigException` 예외가 발생합니다. 속성 필터에 대한 자세한 내용은 *Amazon Kendra 개발자 안내서*의 [문서 속성을 사용하여 쿼리 필터링](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)을 참조하십시오.

Amazon Lex가 Amazon Kendra에 보내는 쿼리를 제어하려면 대화 Lambda 함수의 `kendraQueryRequestPayload` 필드에 쿼리를 지정합니다. 쿼리가 유효하지 않으면 Amazon Lex에서 `InvalidLambdaResponseException` 예외를 반환합니다. 자세한 내용은 *Amazon Kendra 개발자 안내서*의 [쿼리 작업](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html)을 참조하세요.

`AMAZON.KendraSearchIntent` 사용 방법의 예는 [예제: Amazon Kendra 인덱스에 대한 FAQ 봇 생성](faq-bot-kendra-search.md) 단원을 참조하세요.

## Amazon Kendra 검색에 사용되는 IAM 정책
<a name="kendra-search-iam"></a>

`AMAZON.KendraSearchIntent` 의도를 사용하려면 Amazon Lex가 Amazon Kendra `Query` 의도를 호출할 권한이 있는 런타임 역할을 수임할 수 있도록 하는 AWS Identity and Access Management (IAM) 정책을 제공하는 역할을 사용해야 합니다. 사용하는 IAM 설정은 Amazon Lex 콘솔을 `AMAZON.KendraSearchIntent` 사용하여를 생성하는지 아니면 AWS SDK 또는 AWS Command Line Interface ()를 사용하여 생성하는지에 따라 달라집니다AWS CLI. 콘솔을 사용하는 경우 Amazon Lex 서비스 연결 역할에 Amazon Kendra 호출 권한을 추가하거나, Amazon Kendra `Query` 작업 호출을 위한 전용 역할을 사용할 수 있습니다. AWS CLI 또는 SDK를 사용하여 의도를 생성할 때는 `Query` 작업을 직접적으로 호출하기 위한 역할을 사용해야 합니다.

### 권한 연결
<a name="kendra-iam-attach"></a>

Amazon Kendra 콘솔을 사용하여 `Query` 작업에 액세스할 수 있는 권한을 기본 Amazon Lex 서비스 연결 역할에 연결할 수 있습니다. 서비스 연결 역할에 권한을 연결하면 Amazon Kendra 인덱스에 연결하기 위한 전용 런타임 역할을 생성하고 관리할 필요가 없습니다.

Amazon Lex 콘솔에 액세스하는 데 사용하는 사용자, 역할 또는 그룹에는 역할 정책을 관리할 수 있는 권한이 있어야 합니다. 콘솔 액세스 역할에 다음 IAM 정책을 연결합니다. 이러한 권한을 부여하면 해당 역할이 기존 서비스 연결 역할 정책을 변경할 수 있는 권한을 갖게 됩니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "iam:GetRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/lex.amazonaws.com/AWSServiceRoleForLexBots"
        },
        {
            "Effect": "Allow",
            "Action": "iam:ListRoles",
            "Resource": "*"
        }
    ]
}
```

------

### 역할 지정
<a name="kendra-iam-role"></a>

콘솔, AWS CLI또는 API를 사용하여 Amazon Kendra `Query` 작업을 호출할 때 사용할 런타임 역할을 지정할 수 있습니다.

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

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

****  

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

------

Amazon Lex가 Amazon Kendra를 호출하는 데 사용하는 런타임 역할에는 `kendra:Query` 권한이 있어야 합니다. Amazon Kendra `Query` 작업을 호출할 수 있는 권한을 위해 기존 IAM 역할을 사용하는 경우 역할에 다음 정책이 연결되어 있어야 합니다.

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

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

**역할에 쿼리 작업 권한을 추가하려면**

1. 현재 디렉터리에 **KendraQueryPolicy.json**이라는 문서를 만들고 다음 코드를 추가한 다음 저장합니다.

1. 에서 다음 명령을 AWS CLI실행하여 Amazon Kendra `Query` 작업을 실행하기 위한 IAM 정책을 생성합니다.

   ```
   aws iam create-policy \
       --policy-name query-policy-name \
       --policy-document file://KendraQueryPolicy.json
   ```

1. `Query` 작업을 호출하는 데 사용하는 IAM 역할에 정책을 연결합니다.

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

Amazon Lex 서비스 연결 역할을 업데이트하거나 봇에 `AMAZON.KendraSearchIntent`를 만들 때 생성한 역할을 사용하도록 선택할 수 있습니다. 다음 절차에서는 사용할 IAM 역할 을 선택하는 방법을 보여 줍니다.

**AMAZON.KendraSearchItent에 대한 런타임 역할을 지정하려면**

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

1. `AMAZON.KendraSearchIntent`를 추가할 봇을 선택합니다.

1. **의도** 옆에 있는 더하기(\$1) 기호를 선택합니다.

1. **의도 추가**에서 **기존 의도 검색**을 선택합니다.

1. **검색 의도**에 **AMAZON.KendraSearchIntent**를 입력한 다음 **추가**를 선택합니다.

1. **기본 제공 의도 복사**에서 의도의 이름(예: **KendraSearchIntent**)을 입력한 다음 **추가**를 선택합니다.

1. **Amazon Kendra 쿼리** 섹션을 엽니다.

1. **IAM 역할**에서 다음 옵션 중 하나를 선택합니다.
   + 봇이 Amazon Kendra 인덱스를 쿼리할 수 있도록 Amazon Lex 서비스 연결 역할을 업데이트하려면 **Amazon Kendra 권한 추가**를 선택합니다.
   + Amazon Kendra `Query` 작업을 호출할 수 있는 권한이 있는 역할을 사용하려면 **기존 역할 사용**을 선택합니다.

## 요청 및 세션 속성을 필터로 사용
<a name="kendra-search-filter"></a>

Amazon Kendra의 응답을 현재 대화와 관련된 항목으로 필터링하려면 봇을 생성할 때 `queryFilterString` 파라미터를 추가하여 세션 및 요청 속성을 필터로 사용합니다. 의도를 생성할 때 속성의 자리 표시자를 지정하면 Amazon Lex V2가 Amazon Kendra를 직접적으로 호출하기 전에 해당 값을 대체합니다. 요청 속성에 대한 자세한 내용은 [Setting Request Attributes](context-mgmt-request-attribs.md) 단원을 참조하세요. 세션 속성에 대한 자세한 내용은 [Setting Session Attributes](context-mgmt-session-attribs.md) 단원을 참조하세요.

다음은 Amazon Kendra라는 요청 속성을 사용하여 쿼리를 필터링하는 `queryFilterString` 파라미터의 예입니다.

```
"{"equalsTo": {"key": "City", "value": {"stringValue": "Seattle"}}}"
```

다음은 `"SourceURI"`이라는 세션 속성을 사용하여 Amazon Kendra 쿼리를 필터링하는 `queryFilterString` 파라미터의 예입니다.

```
"{"equalsTo": {"key": "SourceURI","value": {"stringValue": "[FileURL]"}}}"
```

다음은 `"DepartmentName"`이라는 요청 속성을 사용하여 Amazon Kendra 쿼리를 필터링하는 `queryFilterString` 파라미터의 예입니다.

```
"{"equalsTo": {"key": "Department","value": {"stringValue": "((DepartmentName))"}}}"
```

`AMAZON.KendraSearchInteng` 필터는 Amazon Kendra 검색 필터와 동일한 형식을 사용합니다. 자세한 내용은 *Amazon Kendra 개발자 안내서*의 [문서 속성을 사용하여 검색 결과 필터링](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)을 참조하세요.

`AMAZON.KendraSearchIntent`과 함께 사용되는 쿼리 필터의 문자열은 각 필터의 첫 글자에 소문자를 사용해야 합니다. 예를 들어, 다음은 `AMAZON.KendraSearchIntent`에 대한 유효한 쿼리 필터입니다.

```
{
    "andAllFilters": [
        {
            "equalsTo": {
                "key": "City",
                "value": {
                    "stringValue": "Seattle"
                }
            }
        },
        {
            "equalsTo": {
                "key": "State",
                "value": {
                    "stringValue": "Washington"
                }
            }
        }
    ]
}
```

## 검색 응답 사용
<a name="kendra-search-response"></a>

Amazon Kendra는 의도의 `conclusion` 문에서 검색에 대한 응답을 반환합니다. 이행 Lambda 함수가 결론 메시지를 생성하지 않는 한, 의도에 `conclusion` 문이 있어야 합니다.

Amazon Kendra에는 네 가지 유형의 응답이 있습니다.
+ `x-amz-lex:kendra-search-response-question_answer-question-<N>` – 검색과 일치하는 FAQ 질문.
+ `x-amz-lex:kendra-search-response-question_answer-answer-<N>` – 검색과 일치하는 FAQ 답변.
+ `x-amz-lex:kendra-search-response-document-<N>` – 표현 텍스트와 관련된 인덱스에 있는 문서의 발췌문.
+ `x-amz-lex:kendra-search-response-document-link-<N>` – 표현 텍스트와 관련된 인덱스에 있는 문서의 URL.
+ `x-amz-lex:kendra-search-response-answer-<N>` – 질문에 대한 답이 되는 인덱스에 있는 문서의 발췌문.

응답은 `request` 속성에서 반환됩니다. 각 속성에 1부터 5까지 번호가 매겨진 최대 5개의 응답이 있을 수 있습니다. 서비스 이름 변경에 대한 자세한 내용을 알아보려면 *Amazon Kendra 개발자 가이드*의 [응답 유형](https://docs.aws.amazon.com/kendra/latest/dg/response-types.html)을 참조하세요.

`conclusion` 문에는 하나 이상의 메시지 그룹이 있어야 합니다. 각 메시지 그룹에는 하나 이상의 메시지가 포함됩니다. 각 메시지에는 Amazon Kendra의 응답에서 요청 속성으로 대체되는 하나 이상의 자리 표시자 변수가 포함될 수 있습니다. 메시지 그룹에는 해당 메시지의 모든 변수가 런타임 응답에서 요청 속성 값으로 대체되는 메시지가 하나 이상 있어야 합니다. 그렇지 않은 경우 자리 표시자 변수가 없는 메시지 하나가 그룹에 있어야 합니다. 요청 속성은 이중 괄호("((" "))")로 묶입니다. 다음 메시지 그룹 메시지는 Amazon Kendra의 모든 응답과 일치합니다.
+ "질문에 대한 FAQ를 찾았습니다: ((x-amz-lex:kendra-search-response-question\$1answer-question-1)), and the answer is ((x-amz-lex:kendra-search-response-question\$1answer-answer-1))"
+ "I found an excerpt from a helpful document: ((x-amz-lex:kendra-search-response-document-1))"
+ "질문에 대한 답변은 다음과 같습니다 ((x-amz-lex:kendra-search-response-answer-1))"

## Lambda 함수를 사용하여 요청 및 응답 관리
<a name="kendra-search-lambda"></a>

`AMAZON.KendraSearchIntent` 의도는 대화 코드 후크 및 이행 코드 후크를 사용하여 Amazon Kendra에 대한 요청과 응답을 관리할 수 있습니다. Amazon Kendra에 보내는 쿼리를 수정하려면 대화 코드 후크 Lambda 함수를 사용하고, 응답을 수정하려면 이행 코드 후크 Lambda 함수를 사용합니다.

### 대화 코드 후크를 사용하여 쿼리 생성
<a name="kendra-search-lambda-dialog"></a>

대화 코드 후크를 사용하여 Amazon Kendra에 보낼 쿼리를 생성할 수 있습니다. 대화 코드 후크 사용은 선택 사항입니다. 대화 코드 후크를 지정하지 않으면 Amazon Lex가 사용자 표현으로부터 쿼리를 구성하고 의도 구성 시 제공된(있는 경우) `queryFilterString`를 사용합니다.

Amazon Kendra에 대한 요청을 수정하기 위해 대화 코드 후크 응답에서 다음 두 필드를 사용할 수 있습니다.
+ `kendraQueryFilterString` – Amazon Kendra 요청에 대한 속성 필터를 지정하려면 이 문자열을 사용합니다. 인덱스에 정의된 인덱스 필드 중 하나를 사용하여 쿼리를 필터링할 수 있습니다. 필터 문자열의 구조는 *Amazon Kendra 개발자 안내서*의 [문서 속성을 사용하여 쿼리 필터링](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)을 참조하세요. 지정된 필터 문자열이 유효하지 않으면 `InvalidLambdaResponseException` 예외가 발생합니다. `kendraQueryFilterString` 문자열은 해당 의도에 구성된 `queryFilterString`에 지정되어 있는 모든 쿼리 문자열을 재정의합니다.
+ `kendraQueryRequestPayload` – Amazon Kendra 쿼리를 지정하려면 이 문자열을 사용합니다. 쿼리에서 Amazon Kendra의 모든 기능을 사용할 수 있습니다. 유효한 쿼리를 지정하지 않으면 `InvalidLambdaResponseException` 예외가 발생합니다. 자세한 정보는 *Amazon Kendra 개발자 안내서*의 [쿼리](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html)를 참조하세요.

필터 또는 쿼리 문자열을 생성한 후 응답 `dialogAction` 필드를 `delegate`로 설정하여 Amazon Lex에 응답을 보냅니다. Amazon Lex는 Amazon Kendra 에 쿼리를 보낸 다음 이행 코드 후크에 쿼리 응답을 반환합니다.

### 응답에 이행 코드 후크 사용
<a name="kendra-search-lambda-fulfillment"></a>

Amazon Lex가 Amazon Kendra에 쿼리를 보내면 쿼리 응답이 `AMAZON.KendraSearchIntent` 이행 Lambda 함수로 반환됩니다. 코드 후크에 대한 입력 이벤트에는 Amazon Kendra의 전체 응답이 포함되어 있습니다. 쿼리 데이터는 Amazon Kendra `Query` 작업에서 반환된 것과 동일한 구조입니다. 자세한 정보는 *Amazon Kendra 개발자 안내서*의 [쿼리 응답 구문](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax)을 참조하세요.

이행 코드 후크는 선택 사항입니다. 이행 코드 후크가 존재하지 않거나 이행 코드 후크가 응답에 메시지를 반환하지 않는 경우 Amazon Lex는 응답에 `conclusion` 문을 사용합니다.

# 예제: Amazon Kendra 인덱스에 대한 FAQ 봇 생성
<a name="faq-bot-kendra-search"></a>

이 예제에서는 Amazon Kendra 인덱스를 사용하여 사용자의 질문에 대한 답변을 제공하는 Amazon Lex 봇을 생성합니다. FAQ 봇은 사용자와의 대화를 관리합니다. `AMAZON.KendraSearchIntent` 의도를 사용하여 인덱스에 쿼리하고 사용자에게 응답을 제공합니다. 봇을 생성하려면 

1. 고객이 봇으로부터 답변을 얻기 위해 상호 작용할 봇을 생성합니다.

1. 사용자 지정 의도를 생성합니다. 봇에는 하나 이상의 표현과 함께 하나 이상의 의도가 필요합니다. 이 의도는 봇을 빌드하는 데 필요하지만 다른 방식으로는 사용되지 않습니다.

1. 봇에 `KendraSearchIntent` 의도를 추가하고 Amazon Kendra 인덱스와 함께 작동하도록 구성합니다.

1. Amazon Kendra 인덱스에 저장된 문서로 답변할 수 있는 질문을 하여 봇을 테스트합니다.

이 예제를 사용하기 전에 Amazon Kendra 인덱스를 생성해야 합니다. 자세한 내용은 *Amazon Kendra 개발자 안내서*의 [S3 버킷(콘솔)으로 시작하기](https://docs.aws.amazon.com/kendra/latest/dg/gs-console.html)를 참조하세요.

**FAQ 봇을 생성하려면**

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

1. 탐색 창에서 **봇**을 선택합니다.

1. **생성(Create)**을 선택합니다.

1. **사용자 지정 봇**을 선택합니다. 다음과 같이 봇을 구성합니다.
   + **봇 이름** – 봇에 용도를 나타내는 이름(예: **KendraTestBot**)을 지정합니다.
   + **음성 출력** – **없음**을 선택합니다.
   + **세션 제한 시간** – **5**를 입력합니다.
   + **감정 분석** – **아니요**를 선택합니다.
   + **COPPA** – **아니요**를 선택합니다.
   + **사용자 표현 저장** – **저장 안 함**을 선택합니다.

1. **생성(Create)**을 선택합니다.

봇을 성공적으로 빌드하려면 하나 이상의 샘플 표현을 사용하여 하나 이상의 의도를 생성해야 합니다. 이 의도는 Amazon Lex 봇을 빌드하는 데 필요하지만 FAQ 응답에는 사용되지 않습니다. 이 의도의 표현은 고객이 묻는 질문에 해당하지 않아야 합니다.

**필요한 의도를 생성하려면**

1. **봇 시작하기** 페이지에서 **의도 생성**을 선택합니다.

1. **의도 추가**에서 **의도 생성**을 선택합니다.

1. **의도 생성** 대화 상자에서 의도의 이름(예: **RequiredIntent**)을 지정합니다.

1. **샘플 표현**에 표현(예: **Required utterance**)를 입력합니다.

1. **의도 저장**을 선택합니다.

이제 Amazon Kendra 인덱스를 검색하기 위한 의도와 이를 통해 반환되어야 하는 응답 메시지를 생성합니다.

**AMAZON.KendraSearchIntent 및 응답 메시지를 생성하려면**

1. 탐색 창에서 **의도** 옆에 있는 더하기(\$1) 기호를 선택합니다.

1. **의도 추가**에서 **기존 의도 검색**을 선택합니다.

1. **의도 검색** 상자에 **AMAZON.KendraSearchIntent**를 입력한 다음 목록에서 이를 선택합니다.

1. **기본 제공 의도 복사**에서 의도 이름(예: **KendraSearchIntent**)을 입력한 다음 **추가**를 선택합니다.

1. 의도 편집기에서 **Amazon Kendra 쿼리**를 선택하여 쿼리 옵션을 엽니다.

1. **Amazon Kendra 인덱스** 메뉴에서 검색하려는 인덱스를 선택합니다.

1. **응답** 섹션에서 다음 3가지 메시지를 추가합니다.

   ```
   I found a FAQ question for you: ((x-amz-lex:kendra-search-response-question_answer-question-1)) and the answer is ((x-amz-lex:kendra-search-response-question_answer-answer-1)).
   I found an excerpt from a helpful document: ((x-amz-lex:kendra-search-response-document-1)).
   I think the answer to your questions is ((x-amz-lex:kendra-search-response-answer-1)).
   ```

1. **의도 저장**을 선택한 다음 **빌드**를 선택하여 봇을 빌드합니다.

마지막으로 콘솔 테스트 창을 사용하여 봇의 응답을 테스트합니다. 질문이 인덱스가 지원하는 도메인에 있어야 합니다.

**FAQ 봇을 테스트하려면**

1. 콘솔 테스트 창에서 인덱스에 대한 질문을 입력합니다.

1. 테스트 창의 응답 섹션에서 답을 확인합니다.

1. 다른 질문에 대한 테스트 창을 재설정하려면 **채팅 기록 지우기**를 선택합니다.

# AMAZON.PauseIntent
<a name="built-in-intent-pause"></a>

사용자가 봇과의 상호 작용을 일시 중지하여 나중에 다시 돌아올 수 있도록 하는 단어 및 구문에 응답합니다. Lambda 함수 또는 애플리케이션이 의도 데이터를 세션 변수에 저장하거나, 현재 의도를 재개할 때 [GetSession](API_runtime_GetSession.md) 작업을 사용하여 의도 데이터를 검색해야 합니다.

공통 표현:
+ 일시 중지
+ 일시 중지

# AMAZON.RepeatIntent
<a name="built-in-intent-repeat"></a>

사용자가 이전 메시지를 반복하게 할 수 있는 단어와 구문에 응답합니다. 애플리케이션은 Lambda 함수를 사용하여 이전 의도 정보를 세션 변수에 저장하거나 [GetSession](API_runtime_GetSession.md) 작업을 사용하여 이전 의도 정보를 가져와야 합니다.

공통 표현:
+ 반복
+ 다시 말해줘
+ 반복해줘

# AMAZON.ResumeIntent
<a name="built-in-intent-resume"></a>

사용자가 이전에 일시 중지된 의도를 재개할 수 있도록 단어와 구문에 응답합니다. Lambda 함수 또는 애플리케이션은 이전 의도를 재개하는 데 필요한 정보를 관리해야 합니다.

공통 표현:
+ 재개
+ 계속
+ 지속

# AMAZON.StartOverIntent
<a name="built-in-intent-start-over"></a>

사용자가 현재 의도 처리를 중단하고 처음부터 다시 시작할 수 있도록 하는 단어와 구문에 응답합니다. Lambda 함수 또는 `PutSession` 작업을 사용하여 첫 번째 슬롯 값을 다시 이끌어낼 수 있습니다.

공통 표현:
+ 다시 시작
+ 재시작
+ 다시 시작해

# AMAZON.StopIntent
<a name="built-in-intent-stop"></a>

사용자가 현재 의도 처리를 중단하고 봇과의 상호작용을 종료하기를 원한다는 것을 나타내는 단어와 문구에 응답합니다. Lambda 함수 또는 애플리케이션은 기존 속성 및 슬롯 유형 값을 모두 지운 다음 상호 작용을 종료해야 합니다.

공통 표현:
+ 멈춰
+ 꺼
+ 조용히 해