

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

# 콜센터 에이전트 어시스턴트
<a name="example-call-center"></a>

이 자습서에서는 Amazon Kendra와 함께 Amazon Lex V2를 사용하여 고객 지원 에이전트를 지원하는 에이전트 지원 봇을 빌드하고 웹 애플리케이션으로 게시합니다. Amazon Kendra는 기계 학습을 사용하여 문서를 검색하여 답을 찾는 엔터프라이즈 검색 서비스입니다. Amazon Kendra에 대한 자세한 내용은 [https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html)를 참조하세요.

Amazon Lex V2 봇은 콜 센터에서 고객의 첫 번째 연락처로 널리 사용됩니다. 봇은 종종 고객 질문을 해결할 수 있습니다. 봇이 질문에 답할 수 없는 경우 대화를 고객 지원 담당자에게 넘깁니다.

이 자습서에서는 에이전트가 고객 쿼리에 실시간으로 응답하는 데 사용하는 Amazon Lex V2 봇을 생성합니다. 봇이 제공하는 답변을 읽으므로 에이전트는 일일이 답변을 찾아볼 필요가 없습니다.

이 튜토리얼에서 만드는 봇 및 웹 애플리케이션은 에이이전트가 적절한 리소스를 신속하게 제공하여 고객에게 효율적이고 정확하게 응답하는 데 도움이 됩니다. 다음 다이어그램은 작동 방식을 보여 줍니다.

![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/lexv2/latest/dg/images/agent-tutorial.png)






다이어그램에서 볼 수 있듯이 문서의 Amazon Kendra 인덱스는 Amazon Simple Storage Service(S3) 버킷에 저장됩니다. S3 버킷이 아직 없는 경우 Amazon Kendra 인덱스를 생성할 때 설정할 수 있습니다. 이 튜토리얼에서는 Amazon S3 외에도 Amazon Cognito 를 사용하게 됩니다. Amazon Cognito 는 봇을 웹 애플리케이션으로 배포하기 위한 권한을 관리합니다.

이 튜토리얼에서는 고객 질문에 대한 답변을 제공하는 Amazon Kendra 색인을 생성하고, 봇을 생성하고, 고객과의 대화를 기반으로 답변을 제안할 수 있는 의도를 추가하고, 액세스 권한을 관리하도록 Amazon Cognito 를 설정하고, 봇을 웹 애플리케이션으로 배포합니다.

**예상 소요 시간:** 75분

**예상 비용: **Amazon Kendra 인덱스의 경우 시간당 2.50 USD, Amazon Lex V2 요청 1000개의 경우 0.75 USD. Amazon Kendra 인덱스는 이 연습을 마친 후에도 계속 실행됩니다. 불필요한 비용이 발생하지 않도록 반드시 삭제하십시오.

**참고:** 이 튜토리얼에서 사용하는 모든 서비스에 대해 동일한 AWS 리전을 선택해야 합니다.

**Topics**
+ [

# 1단계: Amazon Kendra 인덱스를 생성합니다.
](agent-step-1.md)
+ [

# 2단계: Amazon Lex V2 봇 생성
](agent-step-2.md)
+ [

# 3단계: 사용자 지정 및 기본 제공 의도에 추가
](agent-step-3.md)
+ [

# 4단계: Amazon Cognito 설정
](agent-step-4.md)
+ [

# 5단계: 봇을 웹 애플리케이션으로 배포
](agent-step-5.md)
+ [

# 6단계: 봇 사용
](agent-step-6.md)

# 1단계: Amazon Kendra 인덱스를 생성합니다.
<a name="agent-step-1"></a>

먼저 고객 질문에 답하는 Amazon Kendra 문서 색인을 생성하십시오. 인덱스는 클라이언트 쿼리를 위한 검색 API를 제공합니다. 소스 문서에서 색인을 만듭니다. Amazon Kendra는 인덱싱된 문서에서 찾은 답변을 봇에 반환하고 봇은 이를 에이전트에게 표시합니다.

Amazon Kendra에서 제안하는 응답의 품질과 정확성은 색인을 생성하는 문서에 따라 달라집니다. 문서에는 에이전트가 자주 액세스하고 S3 버킷에 저장해야 하는 파일이 포함되어야 합니다. .html, Microsoft Office(.doc, .ppt), PDF 및 텍스트 형식으로 비정형 및 반정형 데이터를 인덱싱할 수 있습니다.

Amazon Kendra 인덱스를 생성하려면 *Amazon Kendra 개발자 가이드*의 [S3 버킷 시작하기(콘솔)](https://docs.aws.amazon.com/kendra/latest/dg/gs-console.html)을 참조하십시오.

고객 쿼리에 답변하는 데 도움이 되는 질문 및 답변(FAQ)을 추가하려면 *Amazon Kendra 개발자 가이드*에 [질문 및 답변 추가](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html)를 참조하십시오. 이 튜토리얼에서는 [GitHub의 ML\$1FAQ.csv 파일](https://github.com/awsdocs/amazon-lex-developer-guide/blob/master/example_apps/agent_assistance_bot/ML_FAQ.csv)을 사용하세요.

## 다음 단계
<a name="agent-step-1-next"></a>

[2단계: Amazon Lex V2 봇 생성](agent-step-2.md)

# 2단계: Amazon Lex V2 봇 생성
<a name="agent-step-2"></a>

Amazon Lex V2는 콜센터 에이전트와 Amazon Kendra 인덱스 간의 인터페이스를 제공합니다. 에이전트와 고객 간의 대화를 추적하고 고객이 묻는 질문에 따라 `AMAZON.KendraSearchIntent` 의도를 직접 호출합니다. *의도*는 사용자가 수행하고자 하는 작업입니다.

Amazon Kendra는 인덱싱된 문서를 검색하고 봇에 표시되는 Amazon Lex V2에 답변을 반환합니다. 이 답변은 에이전트에게만 표시됩니다.

**에이전트 어시스턴트 봇을 만들려면**

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

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

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

1. **사용자 지정 봇**을 선택하고 봇을 구성합니다.

   1. **봇 이름** – 봇의 용도를 나타내는 이름(예: **AgentAssistBot**)을 지정합니다.

   1. **음성 출력** – **없음**을 선택합니다.

   1. **세션 제한 시간** – **5**를 입력합니다.

   1. **COPPA** – **아니요**를 선택합니다.

1. **생성(Create)**을 선택합니다. 봇을 생성한 후 Amazon Lex V2는 봇 편집기 탭을 표시합니다.

## 다음 단계
<a name="agent-step-2-next"></a>

[3단계: 사용자 지정 및 기본 제공 의도에 추가](agent-step-3.md)

# 3단계: 사용자 지정 및 기본 제공 의도에 추가
<a name="agent-step-3"></a>

*의도*는 콜 센터 에이전트가 봇이 수행하기를 원하는 작업을 나타냅니다. 이 경우 에이전트은 에이전트가 고객과 나눈 대화를 바탕으로 봇이 답변과 유용한 리소스를 제안하기를 원합니다.

Amazon Lex V2에는 사용자 지정 의도와 기본 제공 의도라는 두 가지 유형의 의도가 있습니다. `AMAZON.KendraSearchIntent`는 기본 제공 의도입니다. 봇은 `AMAZON.KendraSearchIntent` 의도를 사용하여 색인을 쿼리하고 Amazon Kendra에서 제안한 응답을 표시합니다.

이 예제의 봇에는 사용자 지정 의도가 필요하지 않습니다. 그러나 봇을 성공적으로 빌드하려면 하나 이상의 샘플 표현을 사용하여 하나 이상의 사용자 지정 의도를 생성해야 합니다. 이 의도는 에이전트 어시스턴트 봇을 빌드하는 데만 필요합니다. 다른 기능은 수행하지 않습니다. 이 의도의 표현은 고객이 묻는 질문에 해당하지 않아야 합니다. 이렇게 하면 `AMAZON.KendraSearchIntent`을 호출하여 고객 문의에 응답할 수 있습니다. 자세한 내용은 [AMAZON.KendraSearchIntent](built-in-intent-kendra-search.md)을 참조하세요.

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

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

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

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

1. **샘플 표현**의 경우 설명적인 표현(예: **Required utterance**)를 입력합니다.

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

**`AMAZON.KendraSearchIntent` 의도 및 응답 메시지를 추가하려면**

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

1. **기존 의도 검색**을 선택합니다.

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

1. 의도에 설명이 포함된 이름(예: **AgentAssistSearchIntent**)을 지정한 다음 **추가**를 선택합니다.

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

1. 의도에서 검색하려는 색인을 선택하고

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

   ```
   I found an answer for the customer query: ((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 this answer will help the customer: ((x-amz-lex:kendra-search-response-answer-1)).
   ```

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

1. 봇을 구축하려면 **빌드**를 선택합니다.

## 다음 단계
<a name="agent-step-3-next"></a>

[4단계: Amazon Cognito 설정](agent-step-4.md)

# 4단계: Amazon Cognito 설정
<a name="agent-step-4"></a>

웹 애플리케이션의 권한 및 사용자를 관리하려면 Amazon Cognito 를 설정해야 합니다. Amazon Cognito 는 웹 애플리케이션의 보안과 액세스 제어를 보장합니다. Amazon Cognito는 자격 증명 풀을 사용하여 사용자에게 다른 AWS 서비스에 대한 액세스 권한을 부여하는 AWS 자격 증명을 제공합니다. 이 자습서에서는 Amazon Lex V2에 대한 액세스를 제공합니다.

자격 증명 풀을 생성할 때 Amazon Cognito는 인증 및 미인증 사용자를 위한 AWS Identity and Access Management(IAM) 역할을 제공합니다. Amazon Lex V2에 대한 액세스 권한을 부여하는 정책을 추가하여 IAM 역할을 수정합니다.

**Amazon Cognito 를 설정하려면**

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

1. **자격 증명 풀 관리**를 선택합니다.

1. **새 자격 증명 풀 생성**을 선택합니다.

1. 자격 증명 풀을 구성합니다.

   1. **자격 증명 풀 이름** – 봇의 용도를 나타내는 이름(예: **BotPool**)을 지정합니다.

   1. **인증되지 않은 자격 증명**에서 **인증되지 않은 자격 증명에 대한 액세스 활성화**를 선택합니다.

1. **풀 생성**을 선택합니다.

1. **새 자격 증명 풀과 사용할 IAM 역할 식별** 페이지에서 **세부 정보 보기**를 선택합니다.

1. IAM 역할 이름을 기록해 둡니다. 나중에 수정할 것입니다.

1. **허용**을 선택합니다.

1. **Amazon Cognito 시작하기** 페이지에서, **플랫폼**에 대해 **JavaScript**를 선택합니다.

1. **AWS 자격 증명 가져오기** 섹션에서 **자격 증명 풀 ID**를 찾아 기록합니다.

1. Amazon Lex V2에 대한 액세스를 허용하려면 인증 및 미인증 IAM 역할을 수정합니다.

   1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

   1. 탐색 창의 **액세스 관리**에서 **역할**을 선택합니다.

   1. 검색 상자에 인증된 IAM 역할의 이름을 입력하고 옆에 있는 체크박스를 선택합니다.

      1. **정책 연결**을 선택합니다.

      1. 검색 상자에 **AmazonLexRunBotsOnly**을 입력하고 옆에 있는 체크박스를 선택합니다.

      1. **정책 연결**을 선택합니다.

   1. 검색 상자에 미인증 IAM 역할의 이름을 입력하고 옆에 있는 체크박스를 선택합니다.

      1. **정책 연결**을 선택합니다.

      1. 검색 상자에 **AmazonLexRunBotsOnly**을 입력하고 옆에 있는 체크박스를 선택합니다.

      1. **정책 연결**을 선택합니다.

## 다음 단계
<a name="agent-step-4-next"></a>

[5단계: 봇을 웹 애플리케이션으로 배포](agent-step-5.md)

# 5단계: 봇을 웹 애플리케이션으로 배포
<a name="agent-step-5"></a>

**봇을 웹 애플리케이션으로 배포하려면**

1. [https://github.com/awsdocs/amazon-lex-developer-guide/blob/master/example\$1apps/agent\$1assistance\$1bot/](https://github.com/awsdocs/amazon-lex-developer-guide/blob/master/example_apps/agent_assistance_bot/)의 리포지토리(repository)를 컴퓨터에 다운로드하세요.

1. 다운로드한 저장소로 이동하여 편집기에서 index.html 파일을 여세요.

1. 다음과 같이 변경합니다.

   1. `AWS.config.credentials` 섹션에 지역 이름과 자격 증명 풀 ID를 입력합니다.

   1. ` Amazon Lex V2 runtime parameters` 섹션에 봇 이름을 입력합니다.

   1. 파일을 저장합니다.

# 6단계: 봇 사용
<a name="agent-step-6"></a>

데모용으로 봇에 고객 및 에이전트로서 입력을 제공합니다. 이 둘을 구분하기 위해 고객이 묻는 질문은 “고객:”으로 시작하고 에이전트가 제공하는 답변은 “에이전트:”로 시작합니다. 제안된 입력 메뉴 중에서 선택할 수 있습니다.

다음과 같이 웹 애플리케이션을 열어 봇과의 대화에 `index.html` 참여합니다.

![\[콜센터 봇과 Agent Assistant 간의 대화 예제입니다.\]](http://docs.aws.amazon.com/ko_kr/lexv2/latest/dg/images/agent-tutorial-ss.png)


index.html 파일의 `pushChat()` 함수에 대한 설명은 다음과 같습니다.

```
            
            var endConversationStatement = "Customer: I have no more questions. Thank you." 
            // If the agent has to send a message, start the message with 'Agent'
            var inputText = document.getElementById('input');
            if (inputText && inputText.value && inputText.value.trim().length > 0 && inputText.value[0]=='Agent') {               
                showMessage(inputText.value, 'agentRequest','conversation');
                inputText.value = "";
            }
            // If the customer has to send a message, start the message with 'Customer'
            if(inputText && inputText.value && inputText.value.trim().length > 0 && inputText.value[0]=='Customer') {  
                // disable input to show we're sending it
                var input = inputText.value.trim();
                inputText.value = '...';
                inputText.locked = true;
                customerInput = input.substring(2);

                // Send it to the Lex runtime
                var params = {
                    botAlias: '$LATEST',
                    botName: 'KendraTestBot',
                    inputText: customerInput,
                    userId: lexUserId,
                    sessionAttributes: sessionAttributes
                };

                showMessage(input, 'customerRequest', 'conversation');
                if(input== endConversationStatement){
                    showMessage('Conversation Ended.','conversationEndRequest','conversation');
                }
                lexruntime.postText(params, function(err, data) {
                    if (err) {
                        console.log(err, err.stack);
                        showMessage('Error:  ' + err.message + ' (see console for details)', 'lexError', 'conversation1')
                    }

                    if (data &&input!=endConversationStatement) {
                        // capture the sessionAttributes for the next cycle
                        sessionAttributes = data.sessionAttributes;
                        
                            showMessage(data, 'lexResponse', 'conversation1');
                    }
                    // re-enable input
                    inputText.value = '';
                    inputText.locked = false;
                });
            }
            // we always cancel form submission
            return false;
```

 고객으로서 입력을 제공하면 Amazon Lex V2 런타임 API가 이를 Amazon Lex V2로 전송합니다.

이 `showMessage(daText, senderRequest, displayWindow)` 함수는 채팅 창에 에이전트와 고객 간의 대화를 표시합니다. Amazon Kendra에서 제안한 응답은 인접한 창에 표시됩니다. 고객이 **“I have no more questions. Thank you.”**과 같이 말하면 대화가 종료됩니다. 

**참고:** 사용하지 않을 때는 Amazon Kendra 색인을 삭제하십시오.