

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

# 2단계: 시작하기(콘솔)
<a name="gs-console"></a>

## 콘솔 개요
<a name="console-overview"></a>

Amazon Lex V2를 사용하는 방법을 배우는 가장 쉬운 방법은 콘솔을 사용하는 것입니다. 역할 및 경험 수준에 가장 적합한 학습 경로를 선택합니다.

## 학습 경로 선택
<a name="learning-paths"></a>

역할 및 경험 수준에 가장 적합한 학습 경로를 선택합니다.
+ **코드 없는 경로(비즈니스 사용자) -** 콘솔 인터페이스만 사용하여 봇을 빌드하려는 비즈니스 분석가, 제품 관리자 및 비기술 사용자에게 적합합니다.
  + 다음으로 시작합니다. [빠른 시작: 5분 안에 챗봇 생성](quick-start.md) 
  + 그런 다음 다음을 시도하세요. [연습 1: 템플릿에서 챗봇 생성](exercise-1.md) 
  + 다음을 알아봅니다. [시작하기 모범 사례](getting-started-best-practices.md) 
+ **개발자 경로** - Amazon Lex V2를 애플리케이션과 통합하고, APIs 사용하고, 사용자 지정 비즈니스 로직을 구현하려는 소프트웨어 개발자에게 적합합니다.
  + 다음으로 시작합니다. [연습 1: 템플릿에서 챗봇 생성](exercise-1.md) 
  + 고급: [연습 3: 고급 고객 서비스 챗봇 구축](exercise-3.md)
  + 그런 다음 다음을 살펴봅니다. [Amazon Lex V2 봇에 AWS Lambda함수 통합](lambda.md) 
  + 검토: [봇 예제](examples.md)
  + 고급: API 통합 및 SDK 사용
+ **엔터프라이즈 경로** - 보안, 규정 준수 및 확장성 요구 사항을 갖춘 대규모 배포를 계획하는 아키텍트 및 엔지니어를 위해 설계되었습니다.
  + 다음으로 시작합니다. [연습 1: 템플릿에서 챗봇 생성](exercise-1.md) 
  + 엔터프라이즈 예제: [연습 3: 고급 고객 서비스 챗봇 구축](exercise-3.md)
  + 검토: 보안 및 IAM 모범 사례
  + 탐색: [Global Resiliency를 사용하여 다른 리전에 봇 배포](global-resiliency.md)
  + 계획: 모니터링, 로깅 및 비용 최적화

## 기본 연습
<a name="foundational-exercises"></a>

선택한 경로에 관계없이 다음 기본 연습부터 시작하는 것이 좋습니다.
+ 연습 1 - 필요한 모든 봇 구성을 제공하는 사전 정의된 봇인 템플릿을 사용하여 Amazon Lex V2 봇을 생성합니다. 엔드 투 엔드 설정을 테스트하기 위한 최소한의 작업만 수행합니다.
+ 연습 2 — 클라이언트 애플리케이션과 Amazon Lex V2 봇 간에 전송되는 JSON 구조를 검토하세요.
+ 연습 3 - 주문 관리, 지능형 업셀링, 리드 생성, 맞춤형 고객 경험을 위한 AI 기반 기능 등 엔터프라이즈급 기능을 보여주는 고급 고객 서비스 채팅 봇을 구축합니다.

**Topics**

# 빠른 시작: 5분 안에 챗봇 생성
<a name="quick-start"></a>

이 빠른 시작 안내서는 사전 구축된 템플릿을 사용하여 단 5분 만에 작동하는 Amazon Lex V2 챗봇을 생성하는 데 도움이 됩니다. 필요에 따라 즉시 테스트하고 사용자 지정할 수 있는 기능 챗봇이 있습니다.

## 1단계: 템플릿 선택
<a name="choose-template"></a>

Amazon Lex V2는 일반적인 사용 사례를 위해 몇 가지 사전 구축된 템플릿을 제공합니다.
+ **고객 지원 FAQ** - 일반적인 고객 서비스 문의 처리
+ **예약 **- 예약 예약 및 관리
+ **주문 상태** - 주문 정보 및 배송 상태 확인
+ **IT 헬프데스크** - 기술 지원 및 문제 해결 제공

**템플릿을 선택하려면**

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

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

1. **템플릿으로 시작을** 선택합니다.

1. 이 빠른 시작을 위해 **고객 지원 FAQ** 템플릿을 선택합니다.

1. 와 같은 봇 이름을 입력합니다**MyFirstChatbot**.

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

## 2단계: 빠른 사용자 지정(선택 사항)
<a name="customize-template"></a>

템플릿은 미리 구성되어 있지만 특정 요구 사항에 맞게 빠르게 사용자 지정할 수 있습니다.

**챗봇을 사용자 지정하려면**

1. 봇 개요에서 사전 구성된 의도를 검토합니다.

1. **GetAccountInfo**와 같이 수정할 의도를 선택합니다.

1. 고객이 요청을 표현하는 방식과 일치하는 고유한 샘플 표현을 추가합니다.

1. 브랜드 음성에 맞게 응답 메시지를 업데이트합니다.

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

## 3단계: 봇 테스트
<a name="test-bot"></a>

내장된 테스트 콘솔을 사용하여 챗봇을 즉시 테스트합니다.

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

1. **빌드**를 선택하여 봇을 컴파일합니다.

1. 빌드가 완료될 때까지 기다립니다(일반적으로 1\$12분).

1. 오른쪽의 테스트 콘솔에서 다음을 입력합니다. **I need help with my account** 

1. Enter 키를 눌러 봇의 응답을 관찰합니다.

1. 봇의 이해를 테스트하려면 다른 문구를 시도해 보세요.

## 4단계: 봇 배포
<a name="deploy-bot"></a>

챗봇의 응답에 만족하면 사용할 수 있도록 배포합니다.

**챗봇을 배포하려면**

1. 봇 작업 메뉴에서 **게시**를 선택합니다.

1. 버전 생성을 선택하여 새 **버전을 생성합니다**.

1. 버전을 가리키는 별칭(예: "Production")을 생성합니다.

1. 통합 방법을 선택합니다.

## 다음 단계
<a name="next-steps-quick"></a>

축하합니다\$1 이제 Amazon Lex V2 챗봇이 작동 중입니다. 다음은 수행할 수 있는 작업입니다.
+ **지원 NLU 활성화 **- AI 기반 자연어 처리로 이해를 개선합니다.
+ **의도 추가** - 추가 사용 사례로 챗봇의 기능을 확장합니다.
+ **Lambda와 통합** - 비즈니스 로직 및 외부 시스템 통합을 추가합니다. [Amazon Lex V2 봇에 AWS Lambda함수 통합](lambda.md)을(를) 참조하세요.
+ **모니터링 설정** - 사용량 및 성능을 추적합니다. [Amazon CloudWatch로 운영 지표 측정](monitoring-cloudwatch.md)을(를) 참조하세요.
+ **고급 기능 알아보기** - 대화 흐름 관리, 멀티턴 대화 상자 및 컨텍스트 전환을 살펴봅니다.

자세한 설명을 보려면를 계속 진행합니다[연습 1: 템플릿에서 챗봇 생성](exercise-1.md).

# 연습 1: 템플릿에서 챗봇 생성
<a name="exercise-1"></a>

이 연습에서는 첫 번째 Amazon Lex V2 챗봇을 생성하고 Amazon Lex V2 콘솔에서 테스트합니다. 이 연습에서는 전자 상거래에 대한 실용적인 실제 사용 사례를 보여주는 **OrderFlowers** 템플릿을 사용합니다.

## OrderFlowers 봇 예제
<a name="example-overview"></a>

**OrderFlowers** 템플릿을 사용하여 꽃 주문 요청을 처리할 수 있는 Amazon Lex V2 챗봇을 생성합니다. 이 예제는 기업이 지능형 챗봇을 사용하여 주문 접수를 자동화하는 방법을 보여줍니다. 구조에 대한 자세한 내용은 [Amazon Lex V2 핵심 개념](how-it-works.md) 단원을 참조하세요.
+ **의도 **- 봇에는 다음과 같은 하나의 주요 의도가 포함됩니다.
  + `OrderFlowers` - 꽃 유형, 픽업 날짜 및 픽업 시간을 수집하여 꽃 주문 요청을 처리합니다.
+ **슬롯 유형** - 봇은 일반적인 데이터 형식을 자동으로 인식하고 처리하는 기본 제공 슬롯 유형을 사용합니다.
  + [AMAZON.Date](built-in-slot-date.md) - "tomorrow", "next Friday" 또는 "March 15th"와 같은 날짜를 인식합니다.
  + [AMAZON.Time](built-in-slot-time.md) - "오후 2시", "정오" 또는 "지난 3분기"와 같은 시간을 인식합니다.
  + `FlowerTypes` (사용자 지정) - "roses", "tulips", "lilies"와 같은 특정 꽃 품종
+ **슬롯** - 봇이 꽃 주문을 이행하려면 OrderFlowers 의도에 다음 정보가 필요합니다.
  + `FlowerType` (FlowerTypes 사용자 지정 유형) - 주문할 꽃의 유형입니다.
  + `PickupDate` ([AMAZON.Date](built-in-slot-date.md) 유형) - 꽃을 픽업해야 하는 경우
  + `PickupTime` ([AMAZON.Time](built-in-slot-time.md) 유형) - 꽃을 픽업할 시간
+ **샘플 표현** - 다음 샘플 표현은 사용자가 꽃 주문을 요청할 수 있는 자연스러운 방법을 보여줍니다.
  + "I would like to pick up flowers"
  + “꽃을 주문하고 싶어요.”
  + “픽업을 위해 꽃을 받을 수 있나요?”
  + “꽃을 구입해야 합니다.”
+ **프롬프트** – 봇이 의도를 식별한 후에는 다음 프롬프트를 사용하여 슬롯을 채웁니다.
  + `FlowerType` 슬롯에 대한 프롬프트 – "어떤 꽃을 주문하고 싶으세요?"
  + `PickupDate` 슬롯에 대한 프롬프트 – "언제 \$1FlowerType\$1를 픽업하고 싶으세요?"
  + `PickupTime` 슬롯에 대한 프롬프트 – "\$1FlowerType\$1의 픽업 시간은 언제인가요?"
  + 확인 설명문 – "네, \$1FlowerType\$1을 \$1PickupDate\$1 날 \$1PickupTime\$1에 픽업할 수 있도록 준비할게요. 괜찮으신가요?"

## 봇 생성
<a name="create-bot-procedure"></a>

**Amazon Lex V2 봇을 만들려면(콘솔)**

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

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

1. **생성 방법**으로는 **예제로 시작**을 선택합니다.

1. **예제 봇** 섹션의 목록에서 **OrderFlowers**를 선택합니다.

1. **봇 구성** 섹션에서 봇의 이름과 선택적 설명을 입력합니다. 이름은 계정에서 고유해야 합니다.

1. **권한** 섹션에서 **기본 Amazon Lex 권한을 사용하여 새 역할 생성**을 선택합니다. 그러면 Amazon Lex V2가 봇을 실행하는 데 필요한 권한이 있는 AWS Identity and Access Management(IAM) 역할이 생성됩니다.

1. **COPPA(Children's Online Privacy Protection Act, 어린이 온라인 사생활 보호법)** 섹션에서 적합한 응답을 선택하세요.

1. **세션 타임아웃** 및 **고급 설정** 섹션의 기본값은 그대로 두십시오.

1. **다음**을 선택합니다. Amazon Lex V2에서 봇을 생성합니다.

## 봇에 언어 추가
<a name="add-language-procedure"></a>

봇을 만든 후에는 봇에서 지원하는 하나 이상의 언어를 추가해야 합니다. 언어에는 봇이 사용자와 대화하는 데 사용하는 의도, 슬롯 유형, 슬롯이 포함됩니다.

**봇에 언어를 추가하려면**

1. **언어** 섹션에서 지원되는 언어를 선택하고 설명을 추가합니다.

1. **음성 상호작용** 및 **의도 분류 신뢰도 점수 임계값** 필드는 기본값 그대로 둡니다.

1. **완료**를 선택하여 봇에 언어를 추가합니다.

## 봇 테스트
<a name="test-bot-procedure"></a>

**완료**를 선택하면 콘솔에서 의도 편집기가 열립니다. 의도 편집기를 사용하여 봇이 사용한 의도를 검사할 수 있습니다. 봇 검사를 마치면 테스트할 수 있습니다.

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

1. 페이지 상단에서 **빌드**를 선택합니다. 봇이 빌드될 때까지 기다리세요.

1. 빌드가 완료되면 **테스트**를 선택하여 테스트 창을 엽니다.

1. 봇 테스트. “꽃을 픽업하고 싶습니다.”와 같은 샘플 발화 중 하나로 대화를 시작하세요.

## NLU를 활성화하여 이해 개선
<a name="enable-assisted-nlu"></a>

이제 챗봇이 작동 중이므로 Assisted NLU로 챗봇을 개선하여 의도 인식 및 슬롯 해결을 개선해 보겠습니다. Assisted NLU는 대규모 언어 모델(LLMs)을 사용하여 사용자 요청이 훈련 예제와 다른 구문을 사용하는 경우에도 사용자 요청을 더 잘 이해합니다.

**Assisted NLU를 활성화하려면**

1. Amazon Lex V2 콘솔에서 봇의 설정으로 이동합니다.

1. 왼쪽 탐색 창에서 **봇 설정을** 선택합니다.

1. **지원되는 NLU**에서 **활성화**를 선택합니다.

1. **저장**을 선택하여 변경 사항을 적용합니다.

1. 봇을 다시 빌드하여 Assisted NLU 개선 사항을 적용합니다.

**개선 테스트:** 테스트 콘솔에서 이러한 변형을 시도하여 Assisted NLU가 다양한 구문을 처리하는 방법을 확인합니다.
+ “일부 장미를 구매하고 싶어요”( OrderFlowers 의도를 트리거하고 FlowerType을 캡처해야 함)
+ “내일 꽃을 배달받을 수 있나요?” ( OrderFlowers 의도를 트리거하고 PickupDate를 캡처해야 함)
+ “오후 3시에 픽업하려면 튜립이 필요합니다.”( OrderFlowers 의도를 트리거하고 FlowerType 및 PickupTime을 캡처해야 함)

챗봇이 이러한 자연 변형을 명시적 샘플 발화로 추가하지 않고도 어떻게 이해할 수 있는지 확인합니다. 이는 AI를 사용하여 자연어 이해를 개선하는 Assisted NLU로 구동됩니다.

## 다음 단계
<a name="getting-started-next-steps"></a>

템플릿을 사용하여 첫 번째 봇을 만들었으니 콘솔을 사용하여 자신만의 봇을 만들 수 있습니다. 사용자 지정 봇을 만드는 방법에 대한 지침 및 봇 만들기에 대한 자세한 내용은 [Amazon Lex V2 봇 작업](building-bots.md) 단원을 참조하세요.

# 연습 2: 대화 흐름 검토
<a name="exercise-2"></a>

 이 연습에서는 클라이언트 애플리케이션과 [연습 1: 템플릿에서 챗봇 생성](exercise-1.md)에서 생성한 Amazon Lex V2 봇 간에 전송되는 JSON 구조를 검토합니다. 대화에서는 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 작업을 사용하여 JSON 구조를 생성합니다. [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html)는 응답의 HTTP 헤더와 동일한 정보를 반환합니다.

JSON 구조는 대화의 각 차례에 따라 구분됩니다. *턴*은 클라이언트 애플리케이션의 요청과 봇의 응답입니다.

## 턴 1
<a name="exercise-2-turn-1"></a>

대화가 처음 시작되면 클라이언트 애플리케이션이 봇과의 대화를 시작합니다. URI와 요청 본문은 모두 요청에 대한 정보를 제공합니다.

```
POST /bots/botId/botAliases/botAliasId/botLocales/localeId/sessions/sessionId/text HTTP/1.1
Content-type: application/json

{
    "text": "I would like to order flowers"
}
```
+ URI는 클라이언트 애플리케이션이 통신 중인 봇을 식별합니다. 또한 사용자와 봇 간의 특정 대화를 식별하는 클라이언트 애플리케이션에서 생성한 세션 식별자도 포함됩니다.
+ 요청 본문에는 사용자가 클라이언트 애플리케이션에 입력한 텍스트가 포함됩니다. 이 경우에는 텍스트만 전송되지만 애플리케이션은 요청 속성이나 세션 상태와 같은 추가 정보를 전송할 수 있습니다. 자세한 정보는 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 작업을 참조하세요.

`text`에서 Amazon Lex V2는 꽃을 주문하려는 사용자의 의도를 감지합니다. Amazon Lex V2는 의도의 슬롯(`FlowerType`) 중 하나와 슬롯에 대한 프롬프트 중 하나를 선택한 후 다음 응답을 클라이언트 애플리케이션에 보냅니다. 클라이언트가 사용자에게 응답을 표시합니다.

```
{
    "interpretations": [
        {
            "intent": {
                "confirmationState": "None",
                "name": "OrderFlowers",
                "slots": {
                    "FlowerType": null,
                    "PickupDate": null,
                    "PickupTime": null
                },
                "state": "InProgress"
            },
            "nluConfidence": {
                "score": 0.95
            }
        },
        {
            "intent": {
                "name": "FallbackIntent",
                "slots": {}
            }
        }
    ],
    "messages": [
        {
            "content": "What type of flowers would you like to order?",
            "contentType": "PlainText"
        }
    ],
    "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c",
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "FlowerType",
            "type": "ElicitSlot"
        },
        "intent": {
            "confirmationState": "None",
            "name": "OrderFlowers",
            "slots": {
                "FlowerType": null,
                "PickupDate": null,
                "PickupTime": null
            },
            "state": "InProgress"
        },
        "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f"
    }
}
```

## 턴 2
<a name="exercise-2-turn-2"></a>

턴 2에서 사용자는 턴 1에서 Amazon Lex V2 봇의 프롬프트에 `FlowerType` 슬롯을 채우는 값으로 응답합니다.

```
{
    "text": "1 dozen roses"
}
```

턴 2에 대한 응답은 `FlowerType` 슬롯이 채워진 것을 보여주고 다음 슬롯 값을 유도하라는 메시지를 표시합니다.

```
{
    "interpretations": [
        {
            "intent": {
                "confirmationState": "None",
                "name": "OrderFlowers",
                "slots": {
                    "FlowerType": {
                        "value": {
                            "interpretedValue": "dozen roses",
                            "originalValue": "dozen roses",
                            "resolvedValues": []
                        }
                    },
                    "PickupDate": null,
                    "PickupTime": null
                },
                "state": "InProgress"
            },
            "nluConfidence": {
                "score": 0.98
            }
        },
        {
            "intent": {
                "name": "FallbackIntent",
                "slots": {}
            }
        }
    ],
    "messages": [
        {
            "content": "What day do you want the dozen roses to be picked up?",
            "contentType": "PlainText"
        }
    ],
    "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c",
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "PickupDate",
            "type": "ElicitSlot"
        },
        "intent": {
            "confirmationState": "None",
            "name": "OrderFlowers",
            "slots": {
                "FlowerType": {
                    "value": {
                        "interpretedValue": "dozen roses",
                        "originalValue": "dozen roses",
                        "resolvedValues": []
                    }
                },
                "PickupDate": null,
                "PickupTime": null
            },
            "state": "InProgress"
        },
        "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f"
    }
}
```

## 턴 3
<a name="exercise-2-turn-3"></a>

턴 3에서 사용자는 턴 2에서 Amazon Lex V2 봇의 프롬프트에 `PickupDate` 슬롯을 채우는 값으로 응답합니다.

```
{
    "text": "next monday"
}
```

턴 3에 대한 응답은 `FlowerType` 및 `PickupDate` 슬롯이 채워진 것을 보여주고 다음 슬롯 값을 유도하라는 메시지를 표시합니다.

```
{
    "interpretations": [
        {
            "intent": {
                "confirmationState": "None",
                "name": "OrderFlowers",
                "slots": {
                    "FlowerType": {
                        "value": {
                            "interpretedValue": "dozen roses",
                            "originalValue": "dozen roses",
                            "resolvedValues": []
                        }
                    },
                    "PickupDate": {
                        "value": {
                            "interpretedValue": "2022-12-28",
                            "originalValue": "next monday",
                            "resolvedValues": [
                                "2021-01-04"
                            ]
                        }
                    },
                    "PickupTime": null
                },
                "state": "InProgress"
            },
            "nluConfidence": {
                "score": 1.0
            }
        },
        {
            "intent": {
                "name": "FallbackIntent",
                "slots": {}
            }
        }
    ],
    "messages": [
        {
            "content": "At what time do you want the 1 dozen roses to be picked up?",
            "contentType": "PlainText"
        }
    ],
    "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c",
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "PickupTime",
            "type": "ElicitSlot"
        },
        "intent": {
            "confirmationState": "None",
            "name": "OrderFlowers",
            "slots": {
                "FlowerType": {
                    "value": {
                        "interpretedValue": "dozen roses",
                        "originalValue": "dozen roses",
                        "resolvedValues": []
                    }
                },
                "PickupDate": {
                    "value": {
                        "interpretedValue": "2021-01-04",
                        "originalValue": "next monday",
                        "resolvedValues": [
                            "2021-01-04"
                        ]
                    }
                },
                "PickupTime": null
            },
            "state": "InProgress"
        },
        "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f",
        "sessionAttributes": {}
    }
}
```

## 턴 4
<a name="exercise-2-turn-4"></a>

턴 4에서 사용자는 의도의 최종 슬롯 값, 즉 꽃을 픽업한 시간을 제공합니다.

```
{
    "text": "5 in the evening"
}
```

이에 대한 응답으로 Amazon Lex V2는 주문이 올바른지 확인하는 확인 메시지를 사용자에게 보냅니다. `dialogAction`은 `ConfirmIntent`로 설정되고 `confirmationState`는 `None`입니다.

```
{
    "interpretations": [
        {
            "intent": {
                "confirmationState": "None",
                "name": "OrderFlowers",
                "slots": {
                    "FlowerType": {
                        "value": {
                            "interpretedValue": "dozen roses",
                            "originalValue": "dozen roses",
                            "resolvedValues": []
                        }
                    },
                    "PickupDate": {
                        "value": {
                            "interpretedValue": "2021-01-04",
                            "originalValue": "next monday",
                            "resolvedValues": [
                                "2021-01-04"
                            ]
                        }
                    },
                    "PickupTime": {
                        "value": {
                            "interpretedValue": "17:00",
                            "originalValue": "5 evening",
                            "resolvedValues": [
                                "17:00"
                            ]
                        }
                    }
                },
                "state": "InProgress"
            },
            "nluConfidence": {
                "score": 1.0
            }
        },
        {
            "intent": {
                "name": "FallbackIntent",
                "slots": {}
            }
        }
    ],
    "messages": [
        {
            "content": "Okay, your dozen roses will be ready for pickup by 17:00 on 2021-01-04.  Does this sound okay?",
            "contentType": "PlainText"
        }
    ],
    "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c",
    "sessionState": {
        "dialogAction": {
            "type": "ConfirmIntent"
        },
        "intent": {
            "confirmationState": "None",
            "name": "OrderFlowers",
            "slots": {
                "FlowerType": {
                    "value": {
                        "interpretedValue": "dozen roses",
                        "originalValue": "dozen roses",
                        "resolvedValues": []
                    }
                },
                "PickupDate": {
                    "value": {
                        "interpretedValue": "2021-01-04",
                        "originalValue": "next monday",
                        "resolvedValues": [
                            "2021-01-04"
                        ]
                    }
                },
                "PickupTime": {
                    "value": {
                        "interpretedValue": "17:00",
                        "originalValue": "5 evening",
                        "resolvedValues": [
                            "17:00"
                        ]
                    }
                }
            },
            "state": "InProgress"
        },
        "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f"
    }
}
```

## 턴 5
<a name="exercise-2-turn-5"></a>

마지막 턴에서 사용자는 확인 프롬프트에 응답합니다.

```
{
    "text": "yes"
}
```

응답에서 Amazon Lex V2 전송은 `confirmationState`를 `Confirmed`로 설정하고 `dialogAction`을 종료하도록 설정하여 의도가 이행되었음을 나타냅니다. 모든 슬롯 값은 클라이언트 애플리케이션에서 사용할 수 있습니다.

```
{
    "interpretations": [
        {
            "intent": {
                "confirmationState": "Confirmed",
                "name": "OrderFlowers",
                "slots": {
                    "FlowerType": {
                        "value": {
                            "interpretedValue": "dozen roses",
                            "originalValue": "dozen roses",
                            "resolvedValues": []
                        }
                    },
                    "PickupDate": {
                        "value": {
                            "interpretedValue": "2021-01-04",
                            "originalValue": "next monday",
                            "resolvedValues": [
                                "2021-01-04"
                            ]
                        }
                    },
                    "PickupTime": {
                        "value": {
                            "interpretedValue": "17:00",
                            "originalValue": "5 evening",
                            "resolvedValues": [
                                "17:00"
                            ]
                        }
                    }
                },
                "state": "Fulfilled"
            },
            "nluConfidence": {
                "score": 1.0
            }
        },
        {
            "intent": {
                "name": "FallbackIntent",
                "slots": {}
            }
        }
    ],
    "messages": [
        {
            "content": "Thanks. ",
            "contentType": "PlainText"
        }
    ],
    "sessionId": "bf445a49-7165-4fcd-9a9c-a782493fba5c",
    "sessionState": {
        "dialogAction": {
            "type": "Close"
        },
        "intent": {
            "confirmationState": "Confirmed",
            "name": "OrderFlowers",
            "slots": {
                "FlowerType": {
                    "value": {
                        "interpretedValue": "dozen roses",
                        "originalValue": "dozen roses",
                        "resolvedValues": []
                    }
                },
                "PickupDate": {
                    "value": {
                        "interpretedValue": "2021-01-04",
                        "originalValue": "next monday",
                        "resolvedValues": [
                            "2021-01-04"
                        ]
                    }
                },
                "PickupTime": {
                    "value": {
                        "interpretedValue": "17:00",
                        "originalValue": "5 evening",
                        "resolvedValues": [
                            "17:00"
                        ]
                    }
                }
            },
            "state": "Fulfilled"
        },
        "originatingRequestId": "9e8add70-4106-4a10-93f5-2ce2cb959e5f"
    }
}
```

# 연습 3: 고급 고객 서비스 챗봇 구축
<a name="exercise-3"></a>

이 고급 연습에서는 전자 상거래 회사를 위한 정교한 고객 서비스 챗봇을 구축합니다. 이 봇은 주문 관리, 지능형 업셀링, 리드 생성, 수익 최적화를 포함한 엔터프라이즈급 기능을 보여줍니다. 챗봇은 AI 기반 기능을 사용하여 개인화된 고객 경험을 제공하고 비즈니스 성장을 촉진합니다.

## SmartCommerce 고객 서비스 봇 개요
<a name="exercise-3-overview"></a>

**SmartCommerce 고객 서비스 봇**은 수익 기회를 극대화하면서 복잡한 고객 상호 작용을 처리하도록 설계되었습니다. 이 예제에서는 기업이 지능형 대화 관리를 통해 고객 서비스를 자동화하는 동시에 매출 성장을 주도하는 방법을 보여줍니다.
+ **사용자 지정 의도** - 봇에는 포괄적인 고객 서비스를 위한 여러 사용자 지정 의도가 포함되어 있습니다.
  + `CheckOrderStatus` - 주문 상태 정보를 확인하고 제공합니다.
  + `ProcessReturn` - 반환 요청 및 교환을 처리합니다.
  + `UpsellProducts` - 추가 제품 및 서비스를 추천합니다.
  + `CaptureLeadInfo` - 리드 생성을 위한 고객 정보를 수집합니다.
  + `ScheduleCallback` - 고객 서비스 콜백 예약
+ **기본 제공 의도** - 일반적인 상호 작용을 위해 Amazon Lex V2 기본 제공 의도를 활용합니다.
  + [AMAZON.HelpIntent](built-in-intent-help.md) - 도움말 및 지침을 제공합니다.
  + [AMAZON.CancelIntent](built-in-intent-cancel.md) - 취소 요청을 처리합니다.
  + [AMAZON.StopIntent](built-in-intent-stop.md) - 대화를 정상적으로 종료합니다.
+ **사용자 지정 슬롯 유형** - 비즈니스별 데이터를 위한 특수 슬롯 유형:
  + `ProductCategories` - 전자 제품, 의상, 집, 책, 스포츠
  + `ReturnReasons` - 결함 있음, 잘못된 크기, 마인드 변경, 설명되지 않음
  + `ContactPreferences` - 이메일, SMS, 전화 통화, 앱 내 알림
  + `CustomerTiers` - 브론즈, 실버, 골드, 플래티넘
+ **기본 제공 슬롯 유형** - 일반적인 데이터 형식에 Amazon Lex V2 기본 제공 슬롯을 사용합니다.
  + [AMAZON.Date](built-in-slot-date.md) - 전송 날짜 및 콜백 예약의 경우
  + [AMAZON.Time](built-in-slot-time.md) - 콜백 시간 및 전송 기간의 경우
  + [AMAZON.EmailAddress](built-in-slot-email.md) - 고객 이메일 모음의 경우
  + [AMAZON.PhoneNumber](built-in-slot-phone.md) - 고객 전화번호의 경우
  + [AMAZON.Number](built-in-slot-number.md) - 주문 번호 및 수량의 경우

## 세부 의도 구성
<a name="exercise-3-intents-detail"></a>

### CheckOrderStatus 의도
<a name="check-order-status-intent"></a>

이 의도는 주문 확인 및 상태 문의를 처리하여 고객에게 업셀링 기회를 식별하는 동시에 실시간 주문 정보를 제공합니다.
+ **필수 슬롯:**
  + `OrderNumber` ([AMAZON.Number](built-in-slot-number.md)) - 고객의 주문 번호
  + `CustomerEmail` ([AMAZON.EmailAddress](built-in-slot-email.md)) - 확인을 위한 이메일
+ **샘플 표현:**
  + “\$1OrderNumber\$1 주문 상태는 어떻게 됩니까?”
  + “주문 번호 \$1OrderNumber\$1를 확인해야 합니다.”
  + "내 패키지 위치"
  + “\$1OrderNumber\$1 주문 추적”
  + "내 주문이 아직 배송되었나요"
+ **AI 기반 기능:**
  + Assisted NLU를 사용하여 "내 패키지", "내 사물", "내 배달"과 같은 변형을 이해합니다.
  + 자연어 패턴에서 주문 번호를 자동으로 추출합니다.

### UpsellProducts 의도
<a name="upsell-products-intent"></a>

이 의도는 고객 기록 및 현재 상호 작용 컨텍스트를 기반으로 보완 제품 및 프리미엄 서비스를 권장하여 수익 기회를 사전에 식별합니다.
+ **필수 슬롯:**
  + `ProductCategory` (ProductCategories) - 관심 범주
  + `CustomerTier` (CustomerTiers) - 고객 충성도 수준
  + `Budget` ([AMAZON.Number](built-in-slot-number.md)) - 고객의 예산 범위
+ **샘플 표현:**
  + “관련 제품 표시”
  + "이와 관련된 다른 사항"
  + “거래가 있습니까?”
  + “\$1ProductCategory\$1 항목에 관심이 있습니다.”
  + “오늘 판매 중인 상품”
+ **수익 최적화 기능:**
  + 고객 계층에 따른 동적 요금
  + 구매 기록을 사용한 맞춤형 추천
  + 한시적 제안 생성으로 즉각적인 구매 촉진

### CaptureLeadInfo 의도
<a name="capture-lead-info-intent"></a>

이 의도는 리드 생성을 위해 고객 정보를 체계적으로 수집하여 집계자에게 판매하거나 대상 마케팅 캠페인에 사용할 수 있는 중요한 데이터를 생성합니다.
+ **필수 슬롯:**
  + `CustomerFirstName` ([AMAZON.FirstName](built-in-slot-first-name.md)) - 개인 맞춤을 위한 고객의 이름
  + `CustomerLastName` ([AMAZON.LastName](built-in-slot-last-name.md)) - 판매 기록 조회를 위한 고객의 성
  + `CustomerEmail` ([AMAZON.EmailAddress](built-in-slot-email.md)) - 이메일 주소
  + `CustomerPhone` ([AMAZON.PhoneNumber](built-in-slot-phone.md)) - 전화번호
  + `InterestCategory` (ProductCategories) - 제품 관심사
  + `ContactPreference` (ContactPreferences) - 선호하는 연락 방법
+ **샘플 표현:**
  + “신제품에 대해 듣고 싶습니다.”
  + “업데이트를 위해 가입”
  + “\$1InterestCategory\$1에 관심이 있습니다.”
  + “판매에 대한 정보를 계속 받겠습니다.”
  + “우편 목록에 가입하고 싶습니다.”
  + “제 이름은 \$1CustomerFirstName\$1 \$1CustomerLastName\$1입니다.”
  + “저는 \$1CustomerFirstName\$1 \$1CustomerLastName\$1이고 개인 맞춤형 추천을 원합니다.”
+ **리드 생성 기능:**
  + CRM 통합을 위한 구조화된 데이터 수집
  + 상호 작용 품질을 기반으로 한 리드 점수
  + 자동화된 리드 검증 및 라우팅
  + 집계자 판매를 위한 데이터 형식 지정
+ **판매 기록 통합:**
  + S3-stored 구매 기록 테이블의 고객 이름 조회
  + 맞춤형 추천을 위한 구매 패턴 분석
  + 카테고리 간 구매 동작 식별
  + 대상 제안에 대한 계절별 구매 추세 분석
  + 티어 기반 요금에 대한 고객 수명 기간 값 계산

## 다중 전환 대화 흐름
<a name="exercise-3-multiturn-flow"></a>

SmartCommerce 봇은 여러 의도에 걸쳐 복잡한 멀티턴 대화를 처리하고 상호 작용 전반에 걸쳐 컨텍스트를 유지하도록 설계되었습니다. 이렇게 하면 수익 기회를 극대화하는 동시에 자연스럽고 사람과 유사한 경험을 할 수 있습니다.

### 대화 흐름 예
<a name="conversation-flow-example"></a>

**Turn 1-3: 주문 상태 확인**

```
Customer: "Hi, I need to check on my order"
Bot: "I'd be happy to help you check your order status. Can you provide your order number?"
Customer: "It's order 12345"
Bot: "Thank you. To verify your identity, can you provide the email address associated with this order?"
Customer: "john.doe@email.com"
Bot: "Perfect! Order #12345 is currently being prepared for shipment. You should receive it by tomorrow. 
     Since you're a Gold tier customer, would you like to hear about some exclusive deals on related items?"
```

**Turn 4-6: 업셀링 기회**

```
Customer: "Sure, what do you have?"
Bot: "Based on your Electronics purchase, I can offer you a 20% discount on premium accessories. 
     What's your budget range for additional items?"
Customer: "Maybe around $50"
Bot: "Excellent! I have a wireless charging pad normally $60, now $48 with your Gold discount. 
     Plus, if you add it to your current order, shipping is free. Should I add this to your cart?"
```

**Turn 7-11: 판매 기록 조회를 통한 리드 생성**

```
Customer: "Not right now, but I'd like to hear about future deals"
Bot: "Absolutely! I can set you up to receive personalized offers. What's your first name?"
Customer: "John"
Bot: "Thanks John! And your last name so I can look up your purchase history for better recommendations?"
Customer: "Smith"
Bot: "Perfect! Let me check your purchase history... I see you've bought electronics and home items before. 
     Based on your past purchases, I can offer you exclusive deals on smart home accessories. 
     How would you prefer to be contacted?"
Customer: "Email is fine"
Bot: "Great! I'll make sure john.doe@email.com gets personalized deals based on your purchase history. 
     You're all set for our premium recommendations program!"
```

### 컨텍스트 관리 기능
<a name="context-management"></a>
+ **세션 지속성:** 여러 의도에 걸쳐 고객 정보를 유지합니다.
+ **인텐트 체인:** 주문 확인, 업셀링 및 리드 캡처 간 원활한 전환
+ **동적 개인 맞춤:** 고객 계층 및 구매 내역을 기반으로 제안 조정
+ **수익 추적:** 업셀 성공률 및 리드 품질 점수를 모니터링합니다.

## AI 기반 기능
<a name="exercise-3-ai-features"></a>

이 챗봇은 여러 AI 기능을 활용하여 비즈니스 성장을 주도하는 동시에 지능적이고 개인화된 고객 서비스를 제공합니다.

### 지원되는 NLU 구현
<a name="assisted-nlu-implementation"></a>

Assisted NLU는 대규모 언어 모델을 사용하여 비표준 구문을 사용하거나 단일 발화로 여러 요청을 결합하더라도 고객의 의도를 이해합니다.
+ **자연어 이해:**
  + "내 사물이 아직 도착하지 않았습니다" → CheckOrderStatus 의도
  + "이 정크를 반환하고 싶습니다" → ProcessReturn 의도
  + "다른 내용을 보여줘" → UpsellProducts 의도
+ **다중 의도 인식:**
  + “주문 12345 확인 및 거래 등록” → CheckOrderStatus \$1 CaptureLeadInfo

### 생성형 슬롯 해상도
<a name="generative-slot-resolution"></a>

AI를 사용하여 훈련 데이터와 정확히 일치할 필요 없이 복잡한 자연어 입력에서 슬롯 값을 추출합니다.
+ **스마트 추출:**
  + “지난 주에 일부 전자 제품을 구입했는데 주문 번호는 12345와 비슷했습니다.” → OrderNumber: 12345, ProductCategory: electronic
  + "휴대 전화 555-123-4567 또는 이메일 john@company.com" → 전화: 555-123-4567, 이메일: john@company.com

### 감정 분석 통합
<a name="sentiment-analysis"></a>

대화 전반에 걸쳐 고객 감정을 모니터링하여 접근 방식을 조정하고 필요한 경우 에스컬레이션합니다.
+ **감정 기반 라우팅:**
  + 긍정적인 감정 → 적극적인 업셀링 접근 방식
  + 중립적인 감정 → 부드럽게 업셀링되는 표준 서비스
  + 부정적인 감정 → 문제 해결에 집중하고 업셀링 최소화

## 주문 확인 및 확인 시스템
<a name="exercise-3-confirmation-system"></a>

봇에는 고객 자격 증명을 확인하고, 주문 세부 정보를 확인하고, 여러 채널을 통해 확인을 전송하는 포괄적인 확인 시스템이 포함되어 있습니다.

### 다중 요소 확인 프로세스
<a name="verification-process"></a>
+ **기본 확인:**
  + 주문 번호 검증
  + 이메일 주소 확인
  + 결제 방법의 마지막 4자리(민감한 작업의 경우)
+ **보조 확인:**
  + 배송 주소 확인
  + 구매 날짜 검증
  + 제품 세부 정보 확인

### 다중 채널 확인 시스템
<a name="confirmation-channels"></a>

봇은 고객 기본 설정 및 작업 유형에 따라 여러 채널을 통해 확인을 자동으로 전송합니다.
+ **이메일 확인:**
  + 추적 정보가 포함된 주문 상태 업데이트
  + 선불 배송 라벨을 사용한 반품 권한 부여
  + 배송 세부 정보가 포함된 구매 확인 업셀링
  + 환영 제안이 포함된 리드 캡처 확인
+ **SMS 확인:**
  + 즉시 주문 상태 업데이트
  + 기간을 포함한 전송 알림
  + 관심 있는 고객을 위한 플래시 판매 알림
+ **인앱 알림:**
  + 실시간 주문 업데이트
  + 맞춤형 제품 권장 사항
  + 로열티 프로그램 업데이트

## POS(판매 시점) 통합
<a name="exercise-3-pos-integration"></a>

챗봇은 POS 시스템과 직접 통합되어 트랜잭션을 처리하고, 할인을 적용하고, 인벤토리를 실시간으로 업데이트합니다.

### 실시간 트랜잭션 처리
<a name="transaction-processing"></a>
+ **업셀 트랜잭션 흐름:**

  ```
  1. Customer accepts upsell offer
  2. Bot validates inventory availability
  3. Bot applies customer-tier discount
  4. Bot processes payment using stored payment method
  5. Bot updates order with additional items
  6. Bot sends confirmation via preferred channel
  7. Bot updates customer profile with purchase data
  ```
+ **수익 추적:**
  + 고객 계층별 전환율 업셀링
  + 상호 작용당 평균 주문 값 증가
  + 챗봇 상호 작용에 대한 수익 속성
  + 고객 수명 주기 가치 영향

### 동적 요금 엔진
<a name="dynamic-pricing"></a>
+ **티어 기반 요금:**
  + 브론즈: 표준 요금
  + 은: 업셀 5% 할인
  + 골드: 업셀 10\$120% 할인
  + 플래티넘: 25% 할인 \$1 무료 배송
+ **컨텍스트 요금:**
  + 문제 해결 시나리오: 만족도를 유지하기 위한 추가 할인
  + 고가치 고객: 독점 요금 티어
  + 인벤토리 정리: 느리게 움직이는 항목에 대한 적극적인 할인

## 고급 리드 생성 시스템
<a name="exercise-3-lead-generation"></a>

챗봇에는 여러 수익 스트림을 통해 고객 데이터를 캡처, 검증 및 수익화하는 정교한 리드 생성 시스템이 포함되어 있습니다.

### 멀티 터치 리드 캡처 전략
<a name="lead-capture-strategy"></a>
+ **기회 포착:**
  + 주문 상태 확인 중: "유사 제품에 대한 업데이트를 원하시나요?"
  + 문제 해결 후: "제품 개선 사항에 대해 알려드려도 될까요?"
  + 업셀 상호 작용 중: "이 범주의 향후 거래에 대해 알려야 합니까?"
+ **부가가치 캡처:**
  + 전용 멤버 요금 액세스
  + 신제품 출시에 대한 조기 액세스
  + 맞춤형 제품 권장 사항
  + 생일 및 기념일 특별 제안

### 자동 리드 검증
<a name="lead-qualification"></a>
+ **점수 기준:**
  + 구매 기록 값: 0\$125점
  + 참여 수준: 0\$120점
  + 연락처 정보 완전성: 0\$115점
  + 제품 범주 관심 범위: 0\$115점
  + 업셀링 시도에 대한 응답: 0\$125점
+ **리드 범주:**
  + 핫 리드(80\$1100점): 즉시 영업 팀 연락처
  + 웜 리드(60\$179점): 자동화된 양육 시퀀스
  + 콜드 리드(40\$159점): 월간 뉴스레터
  + 잠재 고객(0\$139점): 분기별 프로모션 이메일

### 집계자를 위한 리드 데이터 수익화
<a name="aggregator-sales"></a>

시스템 형식 및 패키지는 타사 애그리게이터에 판매할 데이터를 리드하여 추가 수익 스트림을 생성합니다.
+ **데이터 패키지:**
  + *프리미엄 패키지:* 전체 연락처 정보, 구매 기록, 기본 설정, 참여 점수
  + *표준 패키지:* 연락처 정보, 기본 기본 설정, 범주 관심사
  + *기본 패키지:* 이메일 주소, 기본 관심 범주
+ **규정 준수 기능:**
  + 명시적 동의 추적을 통한 GDPR 규정 준수
  + 옵트아웃 메커니즘을 사용한 CCPA 규정 준수
  + 이메일 마케팅을 위한 CAN-SPAM 규정 준수
  + 데이터 보존 및 삭제 정책
+ **수익 최적화:**
  + 리드 품질 점수를 기반으로 한 동적 요금
  + 프리미엄 애그리게이터와의 독점 데이터 파트너십
  + 고가치 리드에 대한 실시간 입찰

## 수익 최적화 전략
<a name="exercise-3-revenue-optimization"></a>

모든 상호 작용은 지능형 상향 판매, 교차 판매 및 고객 수명 가치 최적화를 통해 수익을 극대화하도록 설계되었습니다.

### 지능형 업셀링 전략
<a name="upselling-strategies"></a>
+ **컨텍스트 업셀링:**
  + 주문 상태 확인 → "주문이 준비되었습니다\$1 단 5 USD로 신속 배송을 추가하시겠습니까?"
  + 반환 요청 → "반환하는 대신 업그레이드된 모델로 교환하시겠습니까?"
  + 제품 문의 → "이 항목은 [보완 제품] - 번들링 및 15% 할인과 완벽하게 페어링됩니다"
+ **긴급성 기반 판매:**
  + “이 제안은 24시간 후에 만료됩니다.”
  + “이 가격에는 재고가 3개만 남았습니다.”
  + “플래시 세일은 자정에 종료됩니다.”

### 교차 판매 기회
<a name="cross-selling-opportunities"></a>
+ **제품 에코시스템 판매:**
  + 전자 → 액세서리, 보증, 설치 서비스
  + 의상 → 매칭 항목, 관리 제품, 스타일 서비스
  + 주택 상품 → 보완 항목, 유지 관리 제품, 설계 상담
+ **서비스 업셀링:**
  + 추가 보증 및 보호 플랜
  + 프리미엄 고객 지원 티어
  + 구독 서비스 및 자동 전송
  + 전문 설치 및 설정

### 고객 수명 가치 최적화
<a name="lifetime-value-optimization"></a>
+ **로열티 프로그램 통합:**
  + 챗봇 상호 작용을 기반으로 한 자동 티어 업그레이드
  + 업셀 제안 참여에 대한 보너스 포인트
  + 전용 챗봇 전용 보상 및 할인
+ **보존 전략:**
  + 이탈을 방지하기 위한 사전 예방적 문제 해결
  + 비활성 고객을 위한 맞춤형 윈백 제안
  + 기념일 및 마일스톤 축하 제안

## 구현 절차
<a name="exercise-3-implementation"></a>

다음 step-by-step 절차에 따라 모든 수익 최적화 기능으로 고급 고객 서비스 챗봇을 빌드합니다.

### 사전 조건 및 설정 요구 사항
<a name="exercise-3-prerequisites"></a>

SmartCommerce 봇을 빌드하기 전에 필요한 AWS 계정 설정 및 권한이 있는지 확인하고 서비스 고려 사항을 이해합니다.

#### AWS 계정 및 액세스 요구 사항
<a name="aws-account-setup"></a>
+ **AWS 계정:** 결제가 활성화된 활성 AWS 계정이 필요합니다. 없는 경우 [aws.amazon.com](https://aws.amazon.com/) 가입하세요.
+ **IAM 권한:** AWS 사용자 또는 역할에 다음 권한이 있어야 합니다.
  + `lex:*` - 봇 생성 및 관리를 위한 전체 Amazon Lex V2 권한
  + `iam:CreateRole` - 봇에 대한 서비스 역할을 생성하려면
  + `iam:AttachRolePolicy` - 서비스 역할에 정책을 연결하려면
  + `lambda:CreateFunction` - Lambda 통합의 경우(선택 사항)
  + `logs:CreateLogGroup` - Amazon CloudWatch Logs 로깅의 경우
+ **리전 선택:** Amazon Lex V2 및 대상을 지원하는 AWS 리전을 선택합니다. 권장 리전은 다음과 같습니다.
  + 미국 동부(버지니아 북부) - us-east-1
  + 미국 서부(오리건) - us-west-2
  + 유럽(아일랜드) - eu-west-1
  + 아시아 태평양(시드니) - ap-southeast-2

#### 서비스 제한 및 할당량
<a name="service-limits-quotas"></a>

Amazon Lex V2에는 봇 개발 및 배포에 영향을 미칠 수 있는 몇 가지 서비스 제한이 있습니다.
+ **봇 제한:**
  + 리전별 계정당 최대 100개의 봇
  + 봇당 최대 100개의 의도
  + 봇당 최대 100개의 슬롯 유형
  + 의도당 최대 200개의 슬롯
+ **런타임 제한:**
  + 최대 15분 세션 제한 시간
  + 초당 최대 1,000개의 요청(증가 가능)
  + 텍스트 입력당 최대 1,500자
+ **훈련 데이터 제한:**
  + 의도당 최대 1,500개의 샘플 발화
  + 최대 10,000개의 슬롯 유형 값
  + 샘플 발화당 최대 140자

**참고**  
프로덕션 사용에 더 높은 제한이 필요한 경우 AWS 지원 센터를 통해 할당량 증가를 요청할 수 있습니다.

#### 비용 고려 사항
<a name="cost-considerations"></a>

Amazon Lex V2 요금을 이해하면 챗봇 배포를 계획하고 예산을 책정하는 데 도움이 됩니다.
+ **요청 기반 요금:**
  + 텍스트 요청: 매월 처음 10,000건의 요청 후 요청당 0.00075 USD
  + 음성 요청: 매월 처음 1,000건의 요청 후 요청당 0.004 USD
+ **프리 티어:**
  + 첫 해 동안 매월 10,000건의 텍스트 요청
  + 첫 해 동안 매월 1,000건의 음성 요청
+ **추가 비용:**
  + Lambda 함수(사용된 경우): 1M 요청당 0.20 USD \$1 컴퓨팅 시간
  + Amazon CloudWatch Logs 로그: 수집된 GB당 0.50 USD
  + 외부 통합을 위한 데이터 전송 비용
+ **비용 최적화 팁:**
  + 세션 속성을 사용하여 중복 API 호출 감소
  + 효율적인 대화 흐름을 구현하여 회전 최소화
  + CloudWatch Logs를 통해 사용량을 모니터링하여 최적화 기회 식별

**중요**  
현재 요금 정보는 요금이 변경될 수 있으므로 [Amazon Lex 요금 페이지를](https://aws.amazon.com/lex/pricing/) 참조하세요.

#### Lambda 통합 개요
<a name="lambda-integration-basics"></a>

이 연습에서는 Lex 봇 구성에 중점을 두지만 설명된 고급 기능(POS 통합, 리드 생성, 수익 최적화)에는 일반적으로 백엔드 처리를 위한 Lambda 함수가 필요합니다.
+ **Lambda가 필요한 경우:**
  + 외부 데이터베이스에 대한 주문 상태 확인
  + 업셀링에 대한 실시간 인벤토리 확인
  + 고객 데이터 저장 및 검색
  + 고객 이름과 성을 사용하여 S3 테이블에서 판매 기록 조회
  + 맞춤형 추천을 위한 구매 패턴 분석
  + 결제 처리 통합
  + 이메일 및 SMS 확인 전송
+ **S3 판매 기록 통합:**
  + CustomerFirstName 및 CustomerLastName 슬롯을 사용하여 S3 테이블 쿼리
  + 구매 기록을 분석하여 구매 패턴 및 선호도 식별
  + 과거 구매를 기반으로 맞춤형 제품 추천 생성
  + 동적 요금 전략을 위한 고객 수명 가치 계산
  + 구매 상관관계 분석에서 교차 판매 기회 식별
+ **기본 Lambda 설정 요구 사항:**
  + 적절한 권한이 있는 Lambda 실행 역할
  + 프라이빗 리소스에 액세스하는 경우 VPC 구성
  + 구성을 위한 환경 변수
  + 오류 처리 및 로깅 구현
+ **통합 지점:**
  + 의도 이행 - 완료된 의도 처리
  + 슬롯 검증 - 사용자 입력을 실시간으로 검증
  + 대화 관리 - 대화 흐름 제어

**참고**  
이 연습에서는 Lex 봇 구성에 중점을 둡니다. Lambda 통합은 요구 사항이 발전함에 따라 나중에 추가할 수 있습니다. 봇은 테스트 및 데모 목적으로 정적 응답으로 작동합니다.

#### 구현 전 체크리스트
<a name="getting-started-checklist"></a>

봇 생성을 진행하기 전에 다음 사항이 있는지 확인합니다.
+ ✓ 결제가 활성화된 활성 AWS 계정
+ ✓ Lex 및 관련 서비스에 대한 적절한 IAM 권한
+ ✓ 선택한 대상 AWS 리전
+ ✓ 서비스 한도 및 할당량 검토
+ ✓ 비용 영향 이해
+ ✓ 계획된 Lambda 통합 접근 방식(필요한 경우)
+ ✓ AWS Management AWS Management Console에 대한 액세스

### SmartCommerce 봇 생성
<a name="create-advanced-bot-procedure"></a>

**SmartCommerce 고객 서비스 봇을 생성하려면**

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

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

1. **생성 방법**으로는 **빈 봇 만들기**를 선택합니다.

1. **봇 구성** 섹션에서 다음을 수행합니다.
   + 봇 이름: **SmartCommerceBot**
   + 설명: **Advanced customer service chatbot with upselling, lead generation, and revenue optimization**

1. **권한** 섹션에서 **기본 Amazon Lex 권한을 사용하여 새 역할 생성**을 선택합니다.

1. **COPPA(Children's Online Privacy Protection Act, 어린이 온라인 사생활 보호법)** 섹션에서 **아니오**를 선택합니다.

1. **세션 제한 시간** 섹션에서 복잡한 멀티턴 대화를 허용**15 minutes**하도록를 로 설정합니다.

1. **다음**을 선택합니다.

1. 영어(미국)를 언어로 추가하고 **완료**를 선택합니다.

### 사용자 지정 슬롯 유형 생성
<a name="create-custom-slot-types-procedure"></a>

**사용자 지정 슬롯 유형을 생성하려면**

1. 왼쪽 탐색 창에서 **슬롯 유형을** 선택합니다.

1. **슬롯 유형 추가**를 선택하고 다음 슬롯 유형을 생성합니다.

   1. **ProductCategories:**
      + 전자 제품
      + 의상
      + 홈
      + 서적
      + 스포츠
      + 미용
      + 자동차

   1. **ReturnReasons:**
      + 결함
      + 잘못된 크기
      + 변경된 마인드
      + 설명되지 않음
      + 배송 중 손상됨
      + 더 나은 가격 발견

   1. **ContactPreferences:**
      + 이메일
      + SMS
      + 전화 통화
      + 인앱 알림
      + Mail

   1. **CustomerTiers:**
      + 청동
      + 은
      + 골드
      + 플래티넘

### 사용자 지정 의도 생성
<a name="create-intents-procedure"></a>

**CheckOrderStatus 의도를 생성하려면**

1. 왼쪽 탐색 창에서 **의도를** 선택합니다.

1. **의도 추가**를 선택하고 이름을 로 지정합니다**CheckOrderStatus**.

1. 다음 샘플 발화를 추가합니다.
   + “\$1OrderNumber\$1 주문 상태는 어떻게 됩니까?”
   + “주문 번호 \$1OrderNumber\$1를 확인해야 합니다.”
   + "내 패키지 위치"
   + “\$1OrderNumber\$1 주문 추적”
   + "내 주문이 아직 배송되었나요"
   + “주문은 언제 도착하나요?”
   + “배송에 대해 알고 싶습니다.”

1. 다음 슬롯을 추가합니다.
   + `OrderNumber` ([AMAZON.Number](built-in-slot-number.md)) - 필수

     프롬프트: "주문 번호를 제공할 수 있나요?"
   + `CustomerEmail` ([AMAZON.EmailAddress](built-in-slot-email.md)) - 필수

     프롬프트: "자격 증명을 확인하려면이 주문과 연결된 이메일 주소를 제공하세요."

1. 확인 프롬프트를 "\$1CustomerEmail\$1에 대한 주문 \$1\$1OrderNumber\$1를 확인하겠습니다. 맞나요?”

1. 이행 메시지 "I found your order\$1 주문 \$1\$1OrderNumber\$1는 \$1OrderStatus\$1입니다. \$1UpsellMessage\$1"

**UpsellProducts 의도를 생성하려면**

1. 라는 새 의도를 생성합니다**UpsellProducts**.

1. 샘플 발화 추가:
   + "관련 제품 표시"
   + "이와 관련된 다른 사항"
   + “거래가 있습니까?”
   + “\$1ProductCategory\$1 항목에 관심이 있습니다.”
   + “오늘 판매 중인 상품”
   + “추가 옵션 표시”

1. 슬롯 추가:
   + `ProductCategory` (ProductCategories) - 필수

     프롬프트: "어떤 유형의 제품에 관심이 있습니까?"
   + `Budget` ([AMAZON.Number](built-in-slot-number.md)) - 선택 사항

     프롬프트: "추가 항목의 예산 범위는 어떻게 됩니까?"

**CaptureLeadInfo 의도를 생성하려면**

1. 라는 새 의도를 생성합니다**CaptureLeadInfo**.

1. 샘플 발화 추가:
   + “신제품에 대해 듣고 싶습니다.”
   + “업데이트를 위해 가입”
   + “\$1InterestCategory\$1에 관심이 있습니다.”
   + “판매에 대한 정보를 계속 받겠습니다.”
   + “우편 목록에 가입하고 싶습니다.”
   + “거래 및 제안 보내기”
   + “제 이름은 \$1CustomerFirstName\$1 \$1CustomerLastName\$1입니다.”
   + “저는 \$1CustomerFirstName\$1 \$1CustomerLastName\$1이고 개인 맞춤형 추천을 원합니다.”

1. 슬롯 추가:
   + `CustomerFirstName` ([AMAZON.FirstName](built-in-slot-first-name.md)) - 필수

     프롬프트: "개인 맞춤형 서비스의 이름은 무엇입니까?"
   + `CustomerLastName` ([AMAZON.LastName](built-in-slot-last-name.md)) - 필수

     프롬프트: "구입 내역을 조회할 수 있도록 성은 무엇입니까?"
   + `CustomerEmail` ([AMAZON.EmailAddress](built-in-slot-email.md)) - 필수
   + `CustomerPhone` ([AMAZON.PhoneNumber](built-in-slot-phone.md)) - 선택 사항
   + `InterestCategory` (ProductCategories) - 필수
   + `ContactPreference` (ContactPreferences) - 필수

### AI 기반 기능 활성화
<a name="enable-ai-features-procedure"></a>

**Assisted NLU 및 기타 AI 기능을 활성화하려면**

1. 왼쪽 탐색 창에서 **봇 설정을** 선택합니다.

1. **지원되는 NLU**에서 **활성화**를 선택합니다.

1. **생성형 AI**에서 다음을 활성화합니다.
   + 지원 슬롯 확인
   + 설명형 봇 구축

1. **감정 분석에서** **활성화**를 선택합니다.

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

### 봇 테스트 및 배포
<a name="test-and-deploy-procedure"></a>

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

1. **빌드**를 선택하여 봇을 컴파일합니다.

1. 빌드가 완료되면 **테스트를** 선택합니다.

1. 다음 대화 흐름을 테스트합니다.

   1. **주문 상태 흐름:**
      + 사용자: "내 주문 확인 12345"
      + 봇: 이메일 확인을 요청합니다.
      + 사용자: 이메일 제공
      + 봇: 상태 제공 및 상향 판매 제안

   1. **업셀링 흐름:**
      + 사용자: "거래 표시"
      + 봇: 제품 범주를 요청합니다.
      + 사용자: "Electronics"
      + 봇: 맞춤형 제안 제시

   1. **리드 생성 흐름:**
      + 사용자: "업데이트를 위해 가입"
      + 봇: 연락처 정보 수집
      + 사용자: 세부 정보 제공
      + 봇: 구독을 확인하고 즉시 할인을 제공합니다.

1. AI 기능이 작동하는지 확인합니다.
   + "내 사물이 도착하지 않음"과 같은 자연어 변형을 테스트합니다.
   + 감정 분석이 봇 응답을 조정하는지 확인
   + 슬롯 해상도가 복잡한 입력과 함께 작동하는지 확인

1. 테스트가 완료되면 **게시**를 선택하여 봇을 배포합니다.

## 성능 분석 및 최적화
<a name="exercise-3-analytics"></a>

포괄적인 분석 및 수익 추적을 사용하여 SmartCommerce 봇의 성능을 모니터링하고 최적화합니다.

### 주요 성능 지표
<a name="key-metrics"></a>
+ **수익 지표:**
  + 고객 계층별 업셀 변환율
  + 상호 작용당 평균 주문 값 증가
  + 대화당 수익
  + 고객 수명 주기 가치 영향
+ **리드 생성 지표:**
  + 상호 작용 유형별 리드 캡처 속도
  + 리드 품질 점수 및 변환율
  + 집계자 판매로 인한 데이터 수익 창출
  + 이메일 구독 증가율
+ **운영 지표:**
  + 의도 인식 정확도
  + 슬롯 채우기 성공률
  + 대화 완료율
  + 고객 만족도 점수

### 지속적 최적화 전략
<a name="optimization-strategies"></a>
+ **A/B 테스트:**
  + 다양한 업셀 메시징 접근 방식 테스트
  + 공격적인 리드 캡처 기법과 부드러운 리드 캡처 기법 비교
  + 최대 변환을 위한 할인율 최적화
+ **Machine Learning 최적화:**
  + 성공적인 대화 패턴 분석
  + 업셀 제안을 위한 최적의 타이밍 식별
  + 고객 계층 분류 알고리즘 구체화

## 연습 결론
<a name="exercise-3-conclusion"></a>

축하합니다\$1 수익 최적화 및 고객 참여를 위한 엔터프라이즈급 기능을 보여주는 고급 고객 서비스 챗봇을 성공적으로 구축했습니다. 이 SmartCommerce 봇은 기업이 Amazon Lex V2의 AI 기반 기능을 활용하여 다음을 수행하는 방법을 보여줍니다.
+ **수익 극대화:** 지능형 상향 판매, 교차 판매 및 동적 요금 전략을 통해
+ **리드 생성:** 여러 수익 스트림에 대한 고객 정보를 체계적으로 캡처하고 검증
+ **고객 경험 향상:** AI를 사용하여 자연어를 이해하고 개인화된 상호 작용 제공
+ **운영 최적화:** 품질을 유지하면서 효율적으로 확장되는 자동화된 고객 서비스를 통해

이 연습에서 설명하는 기법은 다양한 산업 및 사용 사례에 맞게 조정하고 확장하여 비즈니스 성장을 주도하는 정교한 대화형 AI 솔루션을 구축하기 위한 기반을 제공할 수 있습니다.

### 다음 단계
<a name="next-steps"></a>

SmartCommerce 봇을 더욱 개선하려면 다음을 구현하는 것이 좋습니다.
+ **고급 통합:**
  + 전체 고객 프로필을 위한 CRM 시스템 통합
  + 실시간 가용성을 위한 인벤토리 관리 시스템 연결
  + 원활한 트랜잭션을 위한 결제 처리 통합
+ **다중 채널 배포:**
  + 웹 사이트 채팅 위젯 통합
  + 소셜 미디어 플랫폼 연결
  + 음성 인터페이스 구현
+ **고급 분석:**
  + 비즈니스 지표를 위한 사용자 지정 대시보드 개발
  + 고객 행동에 대한 예측 분석
  + ROI 추적 및 어트리뷰션 모델링

# 시작하기 모범 사례
<a name="getting-started-best-practices"></a>

## 대화 설계 원칙
<a name="conversation-design-principles"></a>

처음부터 이러한 대화 설계 원칙을 따르면 자연적인 상호 작용을 제공하는 보다 효과적이고 유지 관리 가능하며 사용자 친화적인 Amazon Lex V2 챗봇을 구축하는 데 도움이 됩니다.

### 핵심 설계 원칙
<a name="core-design-principles"></a>
+ **사용자 목표 시작** - 시스템에서 수행할 수 있는 작업이 아니라 사용자가 달성하고자 하는 작업을 중심으로 봇을 설계합니다. 사용자의 여정과 원하는 결과에 집중합니다.
+ **자연어 사용** - 프롬프트와 응답을 대화로 작성합니다. 기술적인 전문 용어를 피하고 도움이 되는 사람처럼 말하세요.
+ **명확한 옵션 제공** - 사용자가 멈출 때 일반 도움말 텍스트가 아닌 말할 수 있는 내용의 구체적인 예를 제공합니다.
+ **단순 유지** - 기본 기능으로 시작하고 점진적으로 복잡성을 높입니다. 사용자는 일반적인 작업을 빠르게 완료할 수 있어야 합니다.
+ **오류 정상 처리** - 봇이 이해하지 못하면 단순히 "I't understand"라고 말하는 대신 유용한 지침을 제공합니다.
+ **중요 작업 확인** - 주문 또는 정보 삭제와 같이 쉽게 취소할 수 없는 작업을 수행하기 전에 항상 확인합니다.
+ **이스케이프 경로 제공** - 필요한 경우 항상 사용자에게 다시 시작하거나, 도움을 받거나, 사람과 연결할 수 있는 방법을 제공합니다.

### 대화 흐름 모범 사례
<a name="conversation-flow-best-practices"></a>
+ **기대치 지우기 설정** - 봇이 대화 초기에 수행할 수 있는 작업과 수행할 수 없는 작업을 사용자에게 알립니다.
+ **점진적 공개 사용** - 여러 질문으로 사용자에게 부담을 주지 않고 한 번에 하나씩 정보를 요청합니다.
+ **컨텍스트 제공** - 이미 수집한 정보와 여전히 필요한 정보를 사용자에게 상기시킵니다.
+ **쉽게 수정** - 사용자가 완전히 다시 시작하지 않고도 정보를 수정할 수 있습니다.

## 실제 사용 사례 및 예제
<a name="real-world-use-cases"></a>

이 실제 예제에서는 새로운 Amazon Lex V2 사용자가 직면하는 일반적인 시나리오에 대화 설계 원칙을 적용하는 방법을 보여줍니다.

### 사용 사례 1: 예약
<a name="use-case-appointment-booking"></a>

**시나리오:** 진료소가 예약 일정을 자동화하려고 합니다.

**해결 과제:** 사용자는 여러 정보(서비스 유형, 날짜, 시간, 연락처 정보)를 제공해야 하며 세부 정보를 변경할 수 있습니다.

**솔루션 접근 방식:**
+ **Start Broad:** "어떤 유형의 약속을 예약하시겠습니까?" (치과, 눈 검사, 상담)
+ **아래로 좁히기:** "언제 치과 진료 예약을 선호하시나요?" ("다음 주" 또는 "금요일 오후"와 같은 유연한 입력 허용)
+ **변경 사항 확인 및 제안:** "3월 15일 금요일 오후 2시에 치실 청소를 예약했습니다. 이 방법이 효과가 있나요?"
+ **변경 사항 처리:** 사용자가 "대신 오후 3시를 할 수 있나요?"라고 말하면 전체 프로세스를 다시 시작하지 않고 시간을 업데이트합니다.

**주요 기법:**
+ 유연한 날짜/시간 입력[AMAZON.Time](built-in-slot-time.md)에 [AMAZON.Date](built-in-slot-date.md) 및 사용
+ 약속 유형에 대한 사용자 지정 슬롯 유형 생성
+ 예약을 완료하기 전에 확인 프롬프트 사용

### 사용 사례 2: 주문 상태 조회
<a name="use-case-order-tracking"></a>

**시나리오:** 전자 상거래 회사는 고객이 지원을 호출하지 않고 주문 상태를 확인하려고 합니다.

**해결 과제:** 사용자가 주문 번호를 가지고 있지 않거나 다른 방식으로를 요청할 수 있습니다.

**솔루션 접근 방식:**
+ **여러 진입점:** "내 주문 위치", "내 패키지 추적" 또는 "주문 상태" 수락
+ **유연한 식별:** "주문을 추적할 수 있도록 도와드릴 수 있습니다. 주문 번호가 있습니까? 아니면 이메일 주소를 사용하시겠습니까?"
+ **유용한 지침:** "주문 번호는 일반적으로 확인 이메일에 있으며 'ORD-'로 시작합니다."
+ **결과 지우기:** "주문 \$1ORD-12345는 어제 배송되었으며 내일 오후 8시까지 도착합니다. 세부 정보를 추적하시겠습니까?"

**주요 기법:**
+ 주문 번호에 AMAZON.AlphaNumeric과 같은 기본 제공 슬롯 유형 사용
+ 주문을 식별하는 여러 방법 제공(이메일, 전화, 주문 번호)
+ 응답에 명확하고 실행 가능한 정보 제공

### 사용 사례 3: FAQ 및 지원
<a name="use-case-faq-support"></a>

**시나리오:** 소프트웨어 회사가 일반적인 지원 질문을 자동으로 처리하려고 합니다.

**해결 과제:** 사용자는 여러 가지 방법으로 동일한 질문을 하며, 일부 문제는 사람의 도움이 필요합니다.

**솔루션 접근 방식:**
+ **광범위한 의도 인식:** “로그인할 수 없음”, “로그인 문제”, “암호가 작동하지 않음”과 같은 변형을 인식하도록 의도를 교육합니다.
+ **안내 문제 해결:** "몇 가지 간단한 단계를 시도해 보겠습니다. 먼저 암호 재설정을 시도했나요?"
+ **에스컬레이션 경로:** "이 단계가 작동하지 않으면 지원 팀에 연결해 드릴 수 있습니다. 그렇게 하시겠습니까?"
+ **후속 조치:** "이렇게 하면 문제가 해결되었습니까? 다른 도움이 필요한 경우 언제든지 '도움'이라고 말할 수 있습니다.'

**주요 기법:**
+ 많은 샘플 발화를 사용하여 사용자가 문제를 표현하는 다양한 방법을 캡처합니다.
+ 긴 설명이 아닌 step-by-step 지침 제공
+ 자동화된 도움으로 충분하지 않은 경우 항상 인적 지원 경로를 제공합니다.

### 복잡한 시나리오 처리
<a name="handling-complex-scenarios"></a>

단순한 봇도 복잡한 상황에 직면합니다. 다음은 정상적으로 처리하는 방법입니다.
+ **사용자가 생각을 바꾸는 경우:**
  + 사용자: "실제로 튜립 대신 장미를 원합니다"
  + 봇: "문제 없습니다\$1 주문을 장미로 업데이트했습니다. 장미는 금요일 오후 2시에 픽업할 준비가 됩니다. 맞나요?"
+ **정보가 명확하지 않은 경우:**
  + 사용자: "다음 주에 꽃이 필요합니다"
  + 봇: “도와드리겠습니다\$1 다음 주에 가장 적합한 날은 어디입니까? '월요일' 또는 '다음 화요일'과 같은 말을 할 수 있습니다.'
+ **봇이 이해하지 못하는 경우:**
  + 사용자: "긴 어간이 있는 보라색 어간을 원합니다"
  + 봇: "이 문제를 제대로 해결하려고 합니다. 보라색 꽃을 찾고 계신가요? 보라색 장미, 보라색 튜립, 보라색 홍채를 사용할 수 있습니다.”
+ **사용자가 다시 시작해야 하는 경우:**
  + 사용자: "이것을 취소하고 다시 시작하겠습니다"
  + 봇: "물론입니다\$1 현재 주문을 지웠습니다. 오늘 어떤 유형의 꽃을 주문하시겠습니까?"