1. 시작하기 전에
이 Codelab에서는 대화형 UI를 빌드하기 위한 대화형 AI 플랫폼 (CAIP)인 Dialogflow CX를 사용하여 소매업체 챗봇을 빌드하는 방법을 알아봅니다. Dialogflow CX는 챗봇, 음성 봇, 전화 게이트웨이와 같은 가상 에이전트를 구현할 수 있으며 50개 이상의 언어로 여러 채널을 지원할 수 있습니다.
이 Codelab에서는 소매업체를 위한 웹사이트 챗봇을 빌드하는 방법을 안내합니다. 챗봇을 빌드할 가상 비즈니스의 이름은 G-Records입니다. G-Records는 캘리포니아에 기반을 둔 록 레코드 레이블입니다. 이 레이블에는 앨리스 구글러, G's N' Roses, 더 구 파이터스, 더 구글 돌스 등 4개의 록 밴드가 소속되어 있습니다. G-Records는 모든 록 팬에게 밴드 상품을 판매하고 있습니다.
이 Codelab이 끝나면 챗봇을 사용하여 티셔츠나 음악을 주문하거나 주문에 대해 문의할 수 있습니다.

학습할 내용
직접 실습을 통해 Dialogflow ES와 비교했을 때 Dialogflow CX의 이점을 알 수 있습니다. 여기에는 다음 개념이 포함됩니다.
- Google Cloud 내에서 Dialogflow CX 가상 에이전트를 만드는 방법
- 흐름을 만드는 방법 알아보기
- 엔티티를 만드는 방법 알아보기
- 인텐트를 만드는 방법 알아보기
- 상태 핸들러를 사용하여 페이지를 만들고 페이지를 전환하는 방법 알아보기
- 인텐트 경로를 사용하여 페이지를 전환하는 방법 알아보기
- 매개변수 및 조건 경로를 사용하여 페이지를 전환하는 방법 알아보기
- 시스템 함수로 조건부 응답을 반환하는 방법 알아보기
- 대체 메시지를 만드는 방법 알아보기
- 시뮬레이터 사용 방법 알아보기
- 테스트 사례 및 테스트 범위 만드는 방법 알아보기
최종 Dialogflow CX 에이전트 디자인은 다음과 같습니다.

필요한 항목
- Dialogflow CX 에이전트를 만들려면 Google ID / Gmail 주소가 필요합니다.
- Google Cloud 액세스
2. 환경 설정
Google Cloud 프로젝트 만들기
Dialogflow CX는 Google Cloud에서 실행되므로 Google Cloud 프로젝트를 만들어야 합니다. 프로젝트는 모든 Google Cloud 리소스를 구성합니다. 프로젝트는 공동작업자, 사용 설정된 API (및 기타 리소스), 모니터링 도구, 결제 정보, 인증, 액세스 제어로 구성됩니다.
새 프로젝트를 만들 때 프로젝트 이름을 입력해야 합니다. 기존 결제 계정 및 조직에 연결해야 합니다.
결제 계정은 정해진 리소스 집합의 비용을 누가 지불하는지 정의하는 데 사용되며 하나 이상의 프로젝트에 연결할 수 있습니다. 프로젝트 사용량이 연결된 결제 계정으로 청구됩니다. 대부분의 경우 프로젝트를 만들 때 결제를 구성합니다. 자세한 내용은 결제 문서를 참조하세요. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

Dialogflow API 사용 설정하기
Dialogflow를 사용하려면 프로젝트에 Dialogflow API를 사용 설정해야 합니다.
- API를 사용 설정할 프로젝트를 선택하고 계속을 클릭합니다.
- API 및 서비스 메뉴를 접고 사용자 인증 정보 만들기를 클릭합니다.
- 애플리케이션 데이터를 클릭합니다.
- 지금은 Kubernetes Engine, App Engine 또는 Cloud Functions를 사용하지 않으므로 아니요, 사용하지 않습니다라고 대답합니다.
- 완료를 클릭합니다.

새 Dialogflow CX 에이전트 만들기
새 Dialogflow CX 에이전트를 만들려면 먼저 Dialogflow CX 콘솔을 엽니다.
- 이전에 만든 Google Cloud 프로젝트를 선택합니다.
- 에이전트 만들기를 클릭합니다.
기본 에이전트 설정 양식을 작성합니다.
- 어떤 표시 이름이든 선택할 수 있습니다.
- 위치로 us-central1을 선택합니다.
- 원하는 시간대를 선택합니다.
- 기본 언어로 en - 영어를 선택합니다.
만들기를 클릭합니다.

이제 준비가 끝났습니다. 이제 가상 상담사 모델링을 시작할 수 있습니다.
3. 흐름
복잡한 대화상자에는 여러 가지 대화 주제가 포함되는 경우가 많습니다. G-Records를 위해 구축 중인 챗봇의 경우 밴드 상품 판매를 위해 제품 카탈로그, 결제, 주문 상태, 고객 지원 질문에 관한 대화가 있을 수 있습니다. 이러한 대화 주제를 흐름으로 분할할 수 있습니다.

흐름을 사용하면 팀이 개별 대화 경로에서 작업할 수 있습니다. 화면에 쉽게 맞고 더 모듈화되도록 흐름을 단순화하는 것이 좋습니다.
흐름은 Dialogflow CX의 새로운 개념입니다. Dialogflow Essentials에는 흐름과 유사한 메가 에이전트라는 개념이 있습니다. 하지만 흐름은 훨씬 더 자주 사용하게 됩니다.
이 실습의 후반부에서는 흐름을 종료할 수 있는 상태 핸들러를 사용합니다. 이렇게 하면 다음 또는 이전 흐름으로 돌아가거나 전체 에이전트 세션을 종료할 수 있습니다.
이제 흐름을 만들어 보겠습니다.
흐름 만들기
- Dialogflow CX에서 + 아이콘 > 흐름 만들기를 클릭합니다.
- 이름(
Catalog)을 지정하고 Enter 키를 누릅니다.

첫 번째 흐름인 Catalog가 생성되었습니다. 이제 다른 흐름을 만듭니다.
Order ProcessMy OrderCustomer Care

이 실습의 뒷부분에서 페이지 상태 핸들러를 설정합니다. 그러면 시각화가 다음과 같이 표시됩니다.

시뮬레이터
Dialogflow CX 콘솔의 오른쪽에서 내장된 시뮬레이터를 사용하여 가상 에이전트를 테스트할 수 있습니다. 대화의 시작 부분 또는 특정 흐름부터 대화를 테스트할 수 있습니다.
- 화면 오른쪽 상단에 있는 에이전트 테스트 버튼을 클릭합니다.
- 에이전트와 대화하기 필드에
Hello를 입력합니다. 가상 에이전트가 기본 환영 텍스트로 응답합니다. 안녕하세요. 무엇을 도와드릴까요?

이 기본 환영 텍스트를 수정해 보겠습니다.
기본 시작 흐름
먼저 가상 에이전트에게 인사하면 트리거되는 인텐트 경로를 만들어 보겠습니다.
- 왼쪽 빌드 > 흐름 사이드바에서 기본 시작 흐름을 클릭하고 시작 트리 노드를 선택합니다.
그러면 시작 페이지가 열립니다. 빌드 > 페이지 사이드바 섹션에서 시작 페이지가 자동으로 선택되었습니다.
- 시작 > 경로에서 기본 시작 인텐트를 클릭합니다.
인텐트는 한 차례의 대화에서 최종 사용자의 의도를 분류합니다. Dialogflow CX에서 인텐트는 다음 활성 페이지 또는 fulfillment를 라우팅하는 상태 핸들러의 일부가 될 수 있습니다.
- 상담사 항목을 모두 삭제하고 다음 새 텍스트를 추가합니다.
Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?
대화를 간소화하려면 빠른 답장 버튼 / 추천 칩도 필요합니다.
- 대화 옵션 추가 > 커스텀 페이로드를 클릭하고 아래 코드 스니펫을 사용합니다.
- 아래 코드 스니펫을 맞춤 페이로드로 사용하고 저장을 클릭합니다.
맞춤 페이로드에 대해 자세히 알아보려면 문서를 참고하세요.
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}

- 시뮬레이터에서 welcome 인텐트를 테스트합니다.
리치 콘텐츠가 표시되지 않는 이유가 궁금하실 것입니다. 추천 칩과 같은 리치 콘텐츠는 통합에 따라 달라지기 때문입니다. 다음 단계에는 결제 계정이 필요하지만 결제 계정이 없는 경우 건너뛸 수 있습니다.
- 왼쪽 사이드바에서 관리 > 통합을 클릭합니다.
- Dialogflow 메신저를 선택하고 연결을 클릭합니다.
- 팝업에서 사용 설정을 클릭합니다.

이번에는 웹사이트에 붙여넣어 웹사이트에 Dialogflow 메신저 구성요소를 통합할 수 있는 통합 JavaScript 코드가 포함된 팝업이 표시됩니다. 아직 웹사이트가 없으므로 도구에서 직접 가상 상담사를 테스트합니다.

- 지금 사용해 보기 링크를 클릭합니다.
- 오른쪽 하단의 챗봇 아이콘을 클릭하여 채팅 창을 엽니다.
Hello를 입력하여 대화를 시작합니다.

현재는 추천 칩을 클릭해도 가상 상담사가 의미를 이해하지 못합니다. 아직 가상 상담사가 상태 간에 전환되지 않기 때문입니다. Dialogflow CX에서는 페이지를 사용하여 이를 수행할 수 있습니다. 실습을 계속 진행해 보겠습니다. 먼저 엔티티와 인텐트를 만들어 보겠습니다.
4. 항목 유형
항목 유형은 최종 사용자 입력에서 데이터를 추출 방법을 제어하는 데 사용됩니다. Dialogflow CX 항목 유형은 Dialogflow ES 항목 유형과 매우 유사합니다. Dialogflow는 여러 일반적인 데이터 유형과 일치시킬 수 있는 사전 정의된 시스템 항목을 제공합니다. 예시로는 날짜, 시간, 색상, 이메일 주소 등을 일치시키는 시스템 항목이 있습니다. 커스텀 데이터와 일치시킬 맞춤 항목을 직접 만들 수도 있습니다.
흐름에서 페이지를 설계하기 전에 먼저 모든 맞춤 항목을 준비해 보겠습니다. 다음 항목이 생성됩니다.

항목 만들기
아티스트 항목을 만들어 보겠습니다.
- 관리 > 항목 유형을 클릭합니다.
- + 만들기를 클릭합니다.
- 표시 이름:
Artist - 항목:
The Google Dolls(동의어:Google Dolls)The Goo Fighters(동의어:Goo Fighters)G's N' Roses(동의어:Gs and Roses)Alice Googler- 고급 옵션을 클릭하고 퍼지 일치를 선택합니다. (밴드 이름을 잘못 입력해도 올바른 항목과 일치할 수 있습니다.)
- 고급 옵션에서 로그에서 수정도 선택합니다. (밴드 이름을 잘못 입력하면 로그에서 이름이 수정됩니다.)
- 저장을 클릭합니다.
Merch 항목의 항목도 필요합니다.
- 관리 > 항목 유형을 클릭합니다.
- + 만들기를 클릭합니다.
- 표시 이름:
Merch - 항목:
T-shirtLongsleeve(동의어:Longsleeve shirt)Tour MovieDigital Album(동의어:MP3 Album,MP3)CD(동의어Disc,Physical CD포함)
- 저장을 클릭합니다.
Album의 항목도 필요합니다.
- 관리 > 항목 유형을 클릭합니다.
- + 만들기를 클릭합니다.
- 표시 이름:
Album - 항목:
LiveGreatest Hits(동의어:Hits)
- 저장을 클릭합니다.
의류 사이즈의 항목도 필요합니다.
- 관리 > 항목 유형을 클릭합니다.
- + 만들기를 클릭합니다.
- 표시 이름:
ShirtSize - 항목:
XS(동의어:Extra Small)S(동의어:Small)M(동의어:Medium)L(동의어:Large)XL(동의어:Extra Large)2XL(동의어:Extra Extra Large)3XL
- 저장을 클릭합니다.
일반적으로 4개의 영숫자와 3개의 숫자로 구성된 주문 번호의 항목 (예: ABCD123)
- 관리 > 항목 유형을 클릭합니다.
- + 만들기를 클릭합니다.
- 표시 이름:
OrderNumber - 정규 표현식 항목
- 항목: [A-Z]{4}[0-9]{3}
- 저장을 클릭합니다.
엔티티 구성은 다음과 유사해야 합니다.
@아티스트: 
@Merch: 
@앨범: 
@ShirtSize: 
@OrderNumber: 
맞춤 항목이 준비되면 인텐트를 준비할 수 있습니다. 실습을 계속 진행하겠습니다.
5. 인텐트
인텐트는 대화 차례 1회에서 최종 사용자의 의도를 분류합니다. Dialogflow CX에서는 크게 간소화되었으며 더 이상 대화 제어를 위한 빌딩 블록이 아닙니다. Dialogflow CX는 인텐트만 사용하여 사용자가 말하는 내용을 일치시킵니다. Dialogflow ES에서는 모든 항목 (매개변수, 이벤트, 처리 등)을 인텐트에 연결해야 했습니다. Dialogflow CX의 인텐트에는 학습 문구만 포함되어 있으므로 재사용할 수 있습니다. 더 이상 대화를 제어하지 않습니다. 따라서 인텐트 생성 프로세스는 간단합니다.
의도의 학습 문구는 엔티티를 사용하여'변수' 입력을 추출할 수 있습니다. 따라서 실습 단계의 이전 페이지에서 했던 것처럼 엔티티 유형을 미리 만드는 것이 좋습니다.
인텐트 만들기
흐름에서 페이지를 설계하기 전에 모든 인텐트를 준비해 보겠습니다.
- 관리 > 인텐트를 클릭합니다.
- + 만들기를 클릭합니다.
다음 세부정보를 사용하세요.
- 표시 이름:
redirect.artists.overview - 설명
Artists overview: The bands supported by the label

아래로 스크롤하여 다음 학습 문구를 만듭니다.
Which bands are signed?Which bandsWhich artistsWhich artists are part of the record labelWho is part of the labelFrom which bands can I buy merchandiseBand merchandiseWhich music do you have?I would like to know who are signed to the labelWho are supported by the labelFrom who can I buy shirtsWhat music can I orderCan I get an overview of all the artists

- 저장을 클릭합니다.
- 이제 계속해서 다른 인텐트를 모두 만들어 보겠습니다. 상상력을 발휘하여 학습 문구를 더 많이 만들어 보세요. 사용자가 인텐트를 트리거할 수 있는 다양한 방법을 포괄하려면 인텐트당 학습 문구를 10개 이상 사용하는 것이 좋습니다. 이 실습에서는 이보다 적은 수의 데이터가 있어도 됩니다.
다음 사항을 확인하세요.
- 학습 문구를 입력하면 Dialogflow CX가 자동으로 개체에 주석을 추가합니다. 그렇지 않은 경우 동의어를 추가하거나 학습 문구를 직접 주석 처리하여 항목을 업데이트해야 할 수 있습니다.
- 짧은 학습 문구: Dialogflow의 NLU 시스템은 짧은 학습 문구로도 작동할 수 있으며, 몇 가지 예가 여기에 제공되어 있습니다.
- 과도한 학습: 인텐트의 학습 문구가 너무 많으면 과도한 학습이 발생하여 바람직하지 않은 결과가 나올 수 있습니다. 반복적이고 점진적인 테스트를 사용하고 일치하는 인텐트가 없는 경우 학습 문구를 추가하는 것이 좋습니다.
표시 이름 | 학습 문구 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
이제 재사용 가능한 요소 (흐름, 항목, 인텐트)가 준비되었으므로 페이지와 상태 핸들러를 만들어 이를 함께 사용할 수 있습니다.
6. 페이지 및 상태 핸들러
Dialogflow CX 대화 (세션)를 유한 상태 머신으로 설명하고 시각화할 수 있습니다. 자판기를 예로 들어보겠습니다. 자판기는 유한 상태 머신으로 모델링할 수 있습니다. 이 상태는 Waiting for Coins, Select Candy, Give Candy의 세 가지 상태를 가지며, 일련의 입력이 주어지면 이러한 상태 간에 이동합니다. 예를 들어 동전을 삽입하면 자판기가 동전 대기에서 사탕 선택으로 이동합니다. 페이지는 Dialogflow CX 가상 에이전트의 이러한 상태를 모델링하는 방법입니다.
최종 사용자가 대화에서 Dialogflow CX와 상호작용하면 대화가 페이지 간에 이동하므로 특정 시점에 정확히 하나의 페이지가 현재 페이지이고, 현재 페이지는 활성으로 간주되며, 해당 페이지와 연결된 흐름도 활성으로 간주됩니다.
각 흐름에 대해 여러 페이지를 정의하면 조합된 페이지에서 흐름이 설계된 주제에 대한 완전한 대화를 처리할 수 있습니다. 모든 흐름에는 특수한 시작 페이지가 있습니다. 처음에 흐름이 활성화되면 시작 페이지가 현재 페이지가 됩니다. 각 대화 차례에서 현재 페이지는 동일하게 유지되거나 다른 페이지로 전환됩니다. 이 개념을 사용하면 페이지가 많고 대화 차례가 여러 개인 더 큰 에이전트를 만들 수 있습니다.
페이지에는 fulfillment (정적 입력 대화상자 및/또는 웹훅), 매개변수, 상태 핸들러가 포함됩니다. 대화 제어는 상태 핸들러를 통해 이루어지며, 이를 통해 대화를 분기하는 등 다른 Dialogflow CX 페이지로 전환하는 다양한 전환 경로를 만들 수 있습니다.
대화의 상태는 세 가지 유형의 경로를 사용하여 페이지 간 전환을 처리하여 제어됩니다.
- 인텐트 경로: 인텐트가 일치해야 하는 경우 (예: 최종 사용자의 말에 따라 페이지 변경) (시각적 다이어그램의 파란색 선)
- 조건 경로: 조건을 확인해야 하는 경우 (예: 세션에 저장된 특정 매개변수에 따라 페이지 변경) (시각적 다이어그램의 주황색 선)
- 이벤트 핸들러: 특정 대체 이벤트가 처리되어야 하는 경우 (예: 최종 사용자를 인텐트 또는 조건 경로로 명확하게 구분하기 위해 입력 없음, 일치 항목 없음 처리) (시각적 다이어그램의 녹색 선)
대화 발화 (즉, 사용자에게 다시 전송되는 콘텐츠 또는 응답)는 정적 또는 동적일 수 있는 fulfillment에 의해 정의됩니다.
- 정적 fulfillment: 정적 fulfillment 응답이 제공되는 경우
- 동적 fulfillment: 동적 응답에 fulfillment 웹훅이 호출되는 경우
소매업체 봇의 경우 페이지가 활성화되는 즉시 사용자에게 표시되는 몇 가지 인텐트 경로를 만들고 몇 가지 정적 진입 이행 응답을 제공합니다. 나중에 조건 경로를 사용하여 매개변수를 만들어 상품 주문에 필요한 정보를 수집합니다.
페이지 인텐트 경로
기본 시작 흐름에서 페이지 만들기
다음은 기본 시작 흐름의 플로 차트입니다.

함께 클릭해 보겠습니다.
- 빌드 > 기본 시작 흐름을 클릭합니다.
- 시작 페이지를 클릭합니다.
- 경로 옆에 있는 + 아이콘을 클릭합니다.
- redirect.artists.overview 추가
- 전환까지 아래로 스크롤하고 카탈로그 흐름으로 전환합니다.
- 저장을 클릭합니다.
redirect.product.overview및 이 표의 다른 11개 행에 대해 위의 단계를 반복합니다.
페이지 (흐름 내) | 경로 > 인텐트 | 경로 > 전환 대상 |
시작 |
| - |
시작 |
| 흐름: 카탈로그 |
시작 |
| 흐름: 카탈로그 |
시작 |
| 흐름: 카탈로그 |
시작 |
| 흐름: 카탈로그 |
시작 |
| 흐름: 카탈로그 |
시작 |
| 흐름: 카탈로그 |
시작 |
| 흐름: 고객 지원 |
시작 |
| 흐름: 고객 지원 |
시작 |
| 흐름: 고객 지원 |
시작 |
| 흐름: 내 주문 |
시작 |
| 흐름: 내 주문 |
시작 |
| 흐름: 내 주문 |
시작 |
| 페이지: 세션 종료 |

기본 시작 흐름은 콜센터에 전화할 때 옵션 메뉴가 작동하는 방식과 유사하게 작동합니다. 하지만 이 가상 에이전트는 인텐트의 학습 문구와 함께 자연어로 학습됩니다. 따라서 상호작용은 DTMF 옵션이 아닌 대화로 이루어지며 더 자연스럽고 인간적입니다.

카탈로그 흐름에서 페이지 만들기
다음 채팅 스크립트는 카탈로그 흐름에 속합니다.
> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!
We sell shirts, music or the tour movie.
Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.
Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"
음악 또는 투어 영화를 선택하면 대화상자가 다르게 표시됩니다. 음악의 경우 대화상자가 다음과 같이 표시됩니다.
> "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"
투어 영화의 경우 대화상자는 다음과 같습니다.
> "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?
다음은 카탈로그 흐름 내 모든 페이지의 흐름 차트입니다.

이 흐름의 복잡성을 확인하세요.
- 아티스트 질문을 건너뛰고 바로 '어떤 상품이 있나요?'라고 물어볼 수 있습니다.
- 기본 시작 흐름에서 'I want to buy The Google Dolls t-shirt(Google Dolls 티셔츠를 사고 싶어.)' 또는 'I want to buy something(뭔가를 사고 싶어.)'이라고 물을 수 있습니다. 즉, 가상 에이전트가 이러한 필수 매개변수의 슬롯을 채우기 위해 후속 질문을 합니다. 제품 페이지로 바로 이동합니다.
- 가격 대화상자는 재사용될 가격 페이지에서 가져옵니다.
- 투어 영화의 대화상자가 가장 간단한 대화상자처럼 보이지만 실제로는 특별한 작업을 수행합니다. 이 대화 부분은 재사용되므로 최종 사용자가 한 번에 모든 정보를 전문화하는 경우 다른 제품에 대해서도 직접 입력할 수 있습니다.
> "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"
먼저 페이지를 연결해 보겠습니다.
- 빌드 > 카탈로그를 클릭합니다.
- 시작 페이지를 클릭합니다.
- 경로 옆에 있는 + 아이콘을 클릭합니다.
- redirect.artists.overview 추가
- 전환까지 아래로 스크롤한 후 페이지를 선택하고 + 새 페이지를 선택합니다.
- 페이지 이름
Artist Overview을 사용하고 저장을 누릅니다.
이제 나머지 흐름을 완료해 보겠습니다.
- 다음 페이지, 인텐트, 이행을 사용하여 이전 단계를 반복할 수 있습니다. 이 테이블을 인계받습니다. 페이지는 흐름에서 선택할 페이지이고 경로 > 전환 대상은 만들고 전환할 새 흐름 또는 페이지입니다.
페이지 (흐름 내) | 경로 > 인텐트 | 경로 > 전환 대상 |
카탈로그 시작 |
| 아티스트 개요 |
카탈로그 시작 |
| 제품 |
카탈로그 시작 |
| 제품 개요 |
카탈로그 시작 |
| 제품 개요 |
카탈로그 시작 |
| 셔츠 |
카탈로그 시작 |
| 음악 |
카탈로그 시작 |
| 세션 종료 |
카탈로그 시작 |
| 흐름 종료 |
아티스트 개요 |
| 제품 개요 |
이제 계속해서 정적 응답을 더 추가해 보겠습니다.
- 카탈로그 흐름에서 아티스트 개요 페이지를 클릭합니다.
- Entry fulfillment(항목 처리) 섹션에서 Edit fulfillment(처리 수정)을 클릭합니다.
- 다음 정적 응답 (상담사)을 사용하세요.
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- 저장을 클릭합니다.
- 카탈로그 흐름에서 제품 개요 페이지를 클릭합니다.
- Entry fulfillment(항목 처리) 섹션에서 Edit fulfillment(처리 수정)을 클릭합니다.
- 다음 정적 처리 (상담사)를 사용합니다.
We sell shirts, music or the tour movie.
- 저장을 클릭합니다.
페이지 매개변수
매개변수는 세션 중에 최종 사용자가 제공한 값을 캡처하고 참조하는 데 사용됩니다. 각 매개변수에는 이름과 항목 유형이 있습니다. @Artist 및 @Merch는 상품 주문을 위해 수집해야 하는 최소 매개변수입니다. 티셔츠나 긴팔 티셔츠의 경우 @ShirtSize도 수집해야 하며, 음악을 주문하려면 @Carrier 및 @Album 이름도 필요합니다.
이러한 매개변수는 필수로 표시해야 합니다. 이러한 매개변수를 수집할 수 있도록 최종 사용자를 기억하고 올바른 답변을 제공하는 맞춤 프롬프트를 제공해야 합니다. Dialogflow CX에는 이 작업을 지원하는 몇 가지 메커니즘이 있습니다.
예를 들어 Parameter 섹션에 맞춤 정적 fulfillment 메시지를 제공할 수 있습니다. 매개변수가 필요한 경우 이러한 매개변수 이행이 표시됩니다. 이러한 응답 메시지는 응답 큐에 추가됩니다. 에이전트의 차례에는 여러 개의 fulfillment를 호출할 수 있으며 (호출하는 것이 바람직한 경우도 있음), 각 fulfillment는 응답 메시지를 생성할 수 있습니다. Dialogflow는 이러한 응답을 응답 큐에 유지합니다. 페이지 수명 주기와 이러한 fulfillment가 응답 큐에 추가되는 순서에 대해 자세히 알아보려면 Dialogflow CX 페이지 문서를 참고하세요.
아티스트 개요 페이지에서 매개변수 만들기
페이지 매개변수를 정의해 보겠습니다.
- 카탈로그 흐름에서 아티스트 개요 페이지를 클릭합니다.
- 매개변수 블록에서 +를 클릭합니다. artist 매개변수를 추가합니다.
- 표시 이름:
artist - 법인 유형:
@Artist - 필수: 확인
- 로그에서 수정: 확인
- 이제 맞춤 매개변수 처리 메시지를 추가합니다. 아티스트 매개변수가 아직 가상 에이전트에 의해 수집되지 않은 경우 최종 사용자에게 이 에이전트 응답이 응답 대기열에 추가됩니다.
From which of these artists would you like to order merchandise?
- 풍부한 추천 칩을 제공하는 두 번째 대화 옵션을 추가합니다. 대화 옵션 추가를 클릭하고 다음 코드를 사용합니다 (JSON).
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
최종 사용자가 이러한 질문에 답변하려고 시도한 횟수에 따라 다양한 대체 처리 프롬프트를 처리할 수 있습니다. 이 경우 매개변수 이벤트 핸들러를 사용합니다. Invalid Parameters, Utterances too long, No input, No input 1st try, 2nd try, No Match 등 다양한 기본 제공 이벤트 핸들러 중에서 선택할 수 있습니다. 입력 없음과 일치 없음의 차이점은 입력 없음의 경우 사용자가 답변을 제공하지 않은 반면 일치 없음의 경우 사용자가 답변을 제공했지만 Dialogflow CX가 이를 페이지와 인텐트 일치시킬 수 없다는 것입니다.
- 이벤트 핸들러 재요청 섹션까지 아래로 스크롤합니다.
- 이벤트 핸들러 추가를 클릭하고 이벤트를 선택합니다.
No-match default - 다음 이벤트 정적 텍스트 fulfillment를 사용합니다.
I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- 저장을 클릭합니다.
- 이벤트 핸들러 추가를 클릭하고 이벤트를 선택합니다.
No-input default - 다음 이벤트 정적 텍스트 fulfillment를 사용합니다.
I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- 저장을 클릭합니다.
페이지 조건 경로
매개변수는 페이지 조건부 경로와 함께 사용하면 매우 강력합니다. 조건이 true로 평가되면 연결된 페이지 경로가 호출됩니다. 조건은 매개변수가 특정 값과 같음, 매개변수가 누락될 수 없음, 완료된 양식 등 다양합니다. 매개변수 및 조건에 대한 자세한 내용은 Dialogflow CX 문서를 참고하세요.
소매업체 가상 에이전트의 경우 일련의 매개변수를 수집해야 하므로 '양식'이 완료되었는지 확인하는 조건을 만들어야 합니다. 양식은 페이지에 대해 최종 사용자로부터 수집해야 하는 파라미터의 목록입니다. 가상 에이전트는 페이지 매개변수라고도 하는 모든 필수 양식 매개변수를 수집할 때까지 여러 대화 차례에 걸쳐 최종 사용자와 상호작용합니다.
Dialogflow CX는 양식 작성 중에 최종 사용자가 제공하는 파라미터 값을 자동으로 설정합니다. 현재 페이지의 양식이 작성되었는지 확인하려면 다음 조건을 사용하세요. $page.params.status = "FINAL"
아티스트 개요 페이지에서 조건부 경로 만들기
아티스트가 알려지면 다음 페이지로 전환되는 조건부 경로를 만들어 보겠습니다.
- 아티스트 개요 페이지의 경로 섹션에서 + 아이콘을 클릭합니다.
- 조건 섹션까지 아래로 스크롤합니다.
- 하나 이상을 선택합니다.
- 다음으로,
- 매개변수:
$page.params.status - 운영자:
= - 값:
"FINAL"
- 이제 경로에 특정 정적 fulfillment 메시지를 만들어 최종 사용자의 선택을 확인합니다. Fulfillment 블록까지 아래로 스크롤하고 다음 이행 메시지를 작성합니다.
$session.params.artist, great choice! Rock on!You want to rock with $session.params.artist merchandise. Awesome!
- 조건이 true이면 제품 개요 페이지로 전환해야 합니다. 전환 섹션까지 아래로 스크롤하고 다음 페이지를 사용합니다.
Product Overview - 저장을 클릭합니다.

제품 개요 페이지에서 경로 만들기
이제 매개변수와 조건부 경로를 만드는 방법을 알았으니 다음 페이지에 대한 매개변수를 더 만들어 보겠습니다.
제품 개요
- 제품 개요 페이지에서
artist매개변수를 만듭니다.
- 표시 이름:
artist - 법인 유형:
@Artist - 필수: 확인
- 로그에서 수정: 확인
- 초기 프롬프트 fulfillment:
From which of these artists would you like to order merchandise?
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- 이벤트 핸들러 >
No-match default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from? - 맞춤 페이로드:
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- 이벤트 핸들러 >
No-input default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention? - 맞춤 페이로드:
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
merch매개변수를 만듭니다.
- 표시 이름:
merch - 법인 유형:
@Merch - 필수: 확인
- 로그에서 수정: 확인
- Fulfillment:
Which merchandise item do you want? - 대화 옵션 추가 > 맞춤 페이로드를 클릭합니다.
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- 이벤트 핸들러 >
No-match default - 이벤트 핸들러 fulfillment:
We sell Shirts, Music or the Tour movie. Which of these items do you want? - 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- 이벤트 핸들러 >
No-input default - 이벤트 핸들러 fulfillment:
I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want? - 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
artist이 제공되고merch항목이 제공될 때 제품 페이지로 전환되는 경로를 만듭니다.
- 조건:
- 모든 규칙 일치 (AND)
- 표현식:
$session.params.artist != null - 표현식:
$session.params.merch != null - Fulfillment:
Alright! $session.params.merch of $session.params.artist, let's go! - 전환: 페이지:
Product
- 사용자가 'Shirts'라고 말할 때의 경로 만들기
- 인텐트: redirect.shirts
- 전환: 페이지:
Shirts
- 사용자가 '음악'이라고 말할 때의 경로 만들기
- 인텐트: redirect.music
- 전환: 페이지:
Music
- 사용자가 가격 정보를 요청할 때의 경로 만들기
- 인텐트: redirect.price
- 전환: 새 페이지 만들기:
Price
위 구성을 설정하면 아래 그림과 비슷한 시각화가 표시됩니다. 의도 경로는 다이어그램에서 파란색으로 표시되고 조건 경로는 주황색으로 표시됩니다. 그림에는 표시되지 않지만 이벤트 핸들러는 녹색이고 여러 경로 유형이 페이지로 전환되면 선이 회색으로 표시됩니다.

지금까지 매개변수를 기반으로 인텐트 경로 및 조건부 경로와 같은 상태 핸들러를 사용하여 흐름, 엔티티, 인텐트, 페이지를 만드는 방법을 알아봤습니다. 이 실습의 후반부에서는 입력에 따라 다양한 대화 상자를 제공하기 위해 풀필먼트에서 조건부 분기를 사용합니다.
다음 구성을 사용하여 가상 에이전트를 마무리할 수 있습니다.
셔츠 페이지:
- 셔츠 페이지에서 다음 구성을 만듭니다.
- 항목 fulfillment:
Do you want a longsleeve or a t-shirt? - 항목 fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
},
{
"text": "Price?"
}
]
}
]
]
}
- 인텐트 경로 만들기:
redirect.price에서Price페이지로 전환 - 다음 매개변수를 만듭니다.
- 매개변수:
merch- 항목 유형:@Merch,Required,Redact in log - 매개변수 > 이벤트 핸들러 >
No-match default - 파라미터 > 이벤트 핸들러 fulfillment:
You can choose between a t-shirt or a longsleeve. Which of these do you want? - 매개변수 > 이벤트 핸들러 Fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- 매개변수 > 이벤트 핸들러 >
No-input default - 파라미터 > 이벤트 핸들러 fulfillment:
I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want? - 매개변수 > 이벤트 핸들러 Fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- Shirts 페이지가 활성화될 때마다 항목 fulfillment를 클릭하고 Parameter presets(파라미터 프리셋)까지 아래로 스크롤하면 category 파라미터가 shirts로 설정됩니다.
매개변수 | 값 |
|
|
- 조건부 경로를 추가합니다.
- 하나 이상의 규칙과 일치 (OR)
- 표현식:
$session.params.merch = "T-shirt" - 표현식:
$session.params.merch = "Longsleeve" - 새 페이지로 전환:
Shirt Size
가격 페이지:
가격 메시지는 선택한 상품 항목 또는 카테고리 (음악 또는 티셔츠)에 따라 달라지므로 이 부분은 실습 후반부에 수정할 예정입니다. 지금은 자리표시자만 입력해도 충분합니다.
- 가격 페이지에서 다음 구성을 만듭니다.
- 항목 fulfillment:
PRICE TODO
대화의 다양한 위치에서 가격을 요청할 수 있으므로 항상 답변을 제공하고 주문을 계속할 수 있도록 이전 대화 부분으로 다시 트랜스퍼해야 합니다. 대화 트리에는 가격 정보를 얻기 위해 분기할 수 있는 5개의 위치가 있습니다. (셔츠, 셔츠 사이즈, 음악, 운송업체, 인텐트 경로를 통한 직접 이동) 따라서 다시 이동하려면 조건부 경로가 필요합니다.
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$session.params.category = "shirts" - 표현식:
$session.params.merch = "null" - 새 페이지로 전환:
Shirts
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$session.params.category = "shirts" - 표현식:
$session.params.size = "null" - 새 페이지로 전환:
Shirt Size
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$session.params.category = "music" - 표현식:
$session.params.album = "null" - 새 페이지로 전환:
Music
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$session.params.category = "music" - 표현식:
$session.params.merch = "null" - 새 페이지로 전환:
Carrier
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$session.params.category = "null" - 새 페이지로 전환:
Product Overview
셔츠 사이즈 페이지:
- 셔츠 사이즈 페이지에서 다음 구성을 만듭니다.
- 항목 fulfillment:
What shirt size do you want? - 항목 fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- 인텐트 경로 만들기:
Price페이지로 전환되는redirect.price - 다음 매개변수를 만듭니다.
- 매개변수:
shirtsize- 항목 유형:@ShirtSize-Required,Redact In Log - 매개변수 > 이벤트 핸들러 >
No-match default - 파라미터 > 이벤트 핸들러 fulfillment:
Please tell me the shirt size, such as XL. - 매개변수 > 이벤트 핸들러 Fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- 매개변수 > 이벤트 핸들러 >
No-input default - 파라미터 > 이벤트 핸들러 fulfillment:
I couldn't understand the shirt size. What size do you want? - 매개변수 > 이벤트 핸들러 Fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$page.params.shirtsize != "null" - 페이지로 전환:
Product
음악 페이지:
- 음악 페이지에서 다음 구성을 만듭니다.
- 항목 fulfillment:
We have a Greatest Hits Album or the Live Album. Which one do you want? - 항목 fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
},
{
"text": "Price?"
}
]
}
]
]
}
- 페이지:
Price으로 전환되는 인텐트 경로:redirect.price를 만듭니다. - 다음 매개변수를 만듭니다.
- 매개변수:
album- 항목 유형:@Album-Required,Redact In Log - 매개변수 > 이벤트 핸들러 >
No-match default - 파라미터 > 이벤트 핸들러 fulfillment:
You can choose between Greatest Hits and Live Album. Which of these do you want? - 매개변수 > 이벤트 핸들러 Fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- 매개변수 > 이벤트 핸들러 >
No-input default - 파라미터 > 이벤트 핸들러 fulfillment:
I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want? - 매개변수 > 이벤트 핸들러 Fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- 항목 처리에서 클릭하고 파라미터 사전 설정으로 스크롤합니다. 음악 페이지가 활성화될 때마다 카테고리 파라미터가 music으로 설정됩니다.
매개변수 | 값 |
|
|
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$page.params.album != "null" - 페이지로 전환:
Carrier
이동통신사 페이지:
- 이동통신사 페이지에서 다음 구성을 만듭니다.
- 항목 fulfillment:
Do you want this album on CD or MP3? - 항목 fulfillment 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
},
{
"text": "Price?"
}
]
}
]
]
}
- 인텐트 경로 만들기:
Price페이지로 전환되는redirect.price - 다음 매개변수를 만듭니다.
- 매개변수:
merch- 항목 유형:@Merch-Required,Redact In Log - 매개변수 > 이벤트 핸들러 >
No-match default - 파라미터 > 이벤트 핸들러 fulfillment:
Do you want a physical CD or the digital album? - 파라미터 > 이벤트 핸들러 Fulfillment: 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "Digital Album"
}
]
}
]
]
}
- 매개변수 > 이벤트 핸들러 >
No-input default - 파라미터 > 이벤트 핸들러 fulfillment:
I couldn't understand if you mean CD or MP3. Which one do you want? - 파라미터 > 이벤트 핸들러 Fulfillment: 맞춤 페이로드:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
}
]
}
]
]
}
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$page.params.merch != "null" - 페이지로 전환:
Product
제품 페이지:
- 다음 매개변수를 만듭니다.
Parameter Displayname | 매개변수 항목 유형 | 검토 |
|
| 필수, 로그에서 수정 |
|
| 필수, 로그에서 수정 |
- artist 매개변수에는 아티스트를 알 수 없을 때 표시되는 다음 초기 프롬프트 fulfillment가 필요합니다.
You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
"richContent": [
[
{
"options": [
{
"text": "Which artists?"
}
],
"type": "chips"
}
]
]
}
- 또한 fulfillment가 있는
No-input default이벤트 핸들러를 추가합니다.I couldn't understand what you just said. Ask me which artists are signed. - fulfillment가 있는
No-match default이벤트 핸들러:I missed that. Please ask me which artists are signed.
- merch 매개변수에도 재요청 이벤트 핸들러가 필요합니다.
- fulfillment가 있는
No-input default이벤트 핸들러 추가:I couldn't understand what you just said. Which merchandise item do you want? - fulfillment가 있는
No-match default이벤트 핸들러:I missed that. Which merchandise item do you want?
다음 경로는 아티스트가 알려져 있고 사용자가 '투어 영화'를 선택하면 확인 페이지로 전환됩니다.
- 조건부 경로를 추가합니다.
- 모든 규칙 일치 (AND)
- 표현식:
$session.params.artist != null - 표현식:
$session.params.merch = "Tour Movie" - 매개변수 사전 설정 매개변수 추가 >
price = 25 - 새 페이지로 전환:
Confirmation
아티스트가 알려져 있고 사용자가 '티셔츠'를 선택하고 셔츠 사이즈를 선택하면 다음 경로가 확인 페이지로 전환됩니다.
- 조건부 경로를 추가합니다.
- 맞춤 표현식:
$session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null - 매개변수 사전 설정 매개변수 추가 >
price = 25 - 페이지로 전환:
Confirmation
아티스트가 알려져 있고 사용자가 '긴팔'을 선택하고 셔츠 사이즈가 선택되면 다음 경로가 확인 페이지로 전환됩니다.
- 조건부 경로를 추가합니다.
- 맞춤 표현식:
$session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null - 매개변수 사전 설정 매개변수 추가 >
price = 30 - 페이지로 전환:
Confirmation
아티스트가 알려져 있고 사용자가 'CD'를 선택하고 앨범 이름도 선택하면 다음 경로가 확인 페이지로 전환됩니다.
- 조건부 경로를 추가합니다.
- 맞춤 표현식:
$session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null - 매개변수 사전 설정 매개변수 추가 >
price = 15 - 페이지로 전환:
Confirmation
아티스트가 알려져 있고 사용자가 '디지털 앨범'을 선택하고 앨범 이름을 선택하면 다음 경로가 확인 페이지로 전환됩니다.
- 조건부 경로를 추가합니다.
- 맞춤 표현식:
$session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null - 매개변수 사전 설정 매개변수 추가 >
price = 10 - 페이지로 전환:
Confirmation
이제 누락된 정보를 감지하는 프롬프트로 고급 조건문을 만들어 보겠습니다. 아티스트가 알려져 있고 사용자가 'CD' 또는 '디지털 앨범'을 선택했지만 앨범 이름을 선택하지 않은 경우 다음 경로를 통해 음악 페이지로 다시 전환됩니다.
- 조건부 경로를 추가합니다.
- 맞춤 표현식:
$session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null - Fulfillment:
I would also need to know which album you would like to buy! - 페이지로 전환:
Music
아티스트가 알려져 있고 사용자가 '티셔츠' 또는 '긴팔'을 선택했지만 티셔츠 사이즈를 선택하지 않은 경우 마지막 경로가 확인 페이지로 전환됩니다.
- 조건부 경로를 추가합니다.
- 맞춤 표현식:
$session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null - Fulfillment:
I would also need to know which shirt size you need! - 페이지로 전환:
Shirt Size
실습의 다음 부분에서는 조건부 이행을 사용하여 입력에 따라 다른 이행 메시지를 제공합니다.
7. 조건부 응답
일부 대답은 입력에 따라 다른 대화를 반환합니다. 대화가 분기되는데 이를 조건부 대답이라고 합니다. 백엔드에서 조건부 응답이 결정되는 웹훅 fulfillment를 사용하지 않는 경우에 유용합니다. 예시는 다음과 같습니다.
if [condition]
[response]
elif [condition]
[response]
elif [condition]
[response]
else
[response]
endif
- [조건] 의 예는
$session.params.user-age >= 21입니다. 경로의 조건과 비슷한 서식을 사용합니다. - [response] 는 정적 텍스트 응답을 사용합니다.
- 조건부 응답은 항상
if로 시작합니다. elif및else블록은 선택사항입니다.
Dialogflow CX는 기본 제공 시스템 함수를 사용할 수도 있습니다. 예를 들어 날짜 또는 시간을 형식화하거나 현재 시간 ($sys.func.NOW())을 표시합니다.
확인 및 가격 페이지를 수정하여 카탈로그 흐름을 마무리합니다.
확인 페이지:
이제 확인 페이지를 빌드합니다. 다음 요구사항이 있습니다.
- 상품이 CD 또는 디지털 앨범인 경우 확인 시 아티스트, 상품, 앨범, 가격 필드가 표시됩니다.
- 상품이 티셔츠 또는 긴팔인 경우 확인 시 아티스트, 상품, 사이즈, 가격 필드가 표시됩니다.
- 그렇지 않은 경우 (상품이 투어 영화인 경우) 확인 시 아티스트, 상품, 가격 필드가 표시됩니다.
- 확인 페이지를 클릭합니다.
- '처리 수정' > '에이전트 대답' > 대화 추가 옵션 > 조건부 대답을 클릭합니다.
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
- Create the following Custom payload:
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Yes, confirm"
}
],
"type": "chips"
}
]
]
}
Next, create two intent routes:
confirm.proceed.ordertransitions to:Order ProcessFlow.decline.proceed.ordertransitions toEnd Flow
When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.
- In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:
Parameter | Value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notice that we have created an additional parameter called restart. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.
- Click on the Default Start Flow, Start Page, and create another Conditional Route:
$session.params.restart = "true"- Fulfillment:
"Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?" - Custom payload:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- Select the Start Page and click on the
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
Price Page:
Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:
- Delete the Agent Says entry fulfillment.
- Create a new Conditional Response:
if $session.params.category = "shirts"
A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
A CD costs $15. The digital album on MP3 costs $10.
else
A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif

Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:
8. Wrapping up the agent
We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.
Creating the My Order Flow
- Go to the My Order Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
My Order Start |
| My Order |
My Order Start |
| My Order Status |
My Order Start |
| My Order Cancellation |
My Order Start |
| End Session |
My Order Start |
| End Flow |
My Order |
| My Order Status |
My Order |
| My Order Cancellation |
Default Start Flow |
| Flow: My Order |
Default Start Flow |
| Flow: My Order |
- Let's create the following entry fulfillment for the My Order Page:
- Entry fulfillment:
I can look up the status of your order, or I can cancel an order.
- In the My Order Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required: checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL" - Fulfillment:
And do you want to Cancel your order, or should I look up the status?
- Click on Add state handler > Event Handlers and create the Event Handler:
No-input default
- Fulfillment:
I'm sorry, what was that? Would you like me to cancel an order or look up the status? - Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- Create the Event Handler:
No-match default
- Fulfillment:
Would you like me to cancel an order or lookup the status? - Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- In the My Order Status Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Status Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null - Fulfillment:
Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items. - Add dialogue option > Text:
Is there anything else I can help you with?
- In the My Order Cancelation Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Cancelation Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null - Fulfillment:
Your order $session.params.ordernumber has been canceled. - Add dialogue option > Text:
Is there anything else I can help you with?
- Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"
And:
>"What's the status of order DEFG222"
- Select the Start Page and click on the
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day! - Select the Start Page and click on the
redirect.homeintent. Create the following parameter preset:restart = true
Default Negative intents (Fallback)
When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.
- Try in the simulator:
I don't like Alice Googler.
You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.
- Go to Manage > Intents and select the Default Negative Intent.
- Add the following training phrases that will trigger the No-match event.
I don't like Alice GooglerI am not a fan of G's N' RosesI can't stand the music of the Google Dolls
- Hit Save and test the following sentence in the simulator:
I am really not a fan of the Goo Fighters
This time the No-match event was triggered, you stayed on the Start Page.
Default Fallback Messages
- Click the Default Start Flow, select the
sys.no-input-defaultevent handler.
The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:
- Remove all answers, and add these text dialogues:
I'm sorry, I didn't receive an answer. Can you say it again?I missed your answer, can you say it again?Sorry, I didn't hear anything. Can you say it again?I couldn't hear what you were saying, what was that?I'm sorry, I missed your answer. What were you trying to say?
Don't forget to click Save.
- Click the Default Start Flow, select the
sys.no-match-defaultevent handler.
The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.
- Remove all answers, and add these text dialogues:
Sorry, I didn't get that. Can you please rephrase?I'm sorry, I don't understand. Can you please rephrase?I don't understand, please rephrase.Sorry, I didn't get that. What was that?I didn't get that, can you please rephrase?
Don't forget to click Save.
- It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.
Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.
Creating the Order Process Flow
- Go to the Order Process Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
Order Process Start |
| End Session |
Order Process Start |
| End Flow |
Order Process Start |
| New Page: Shipping Details |
- Let's create the following entry fulfillment for the Shipping Details Page:
- Entry fulfillment:
To complete your order I will first need to collect your shipping details.
- Create the following parameters:
These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.
Parameter Display name | Entity | Required? | Initial prompt fulfillment | No-match default | No-input default |
| @sys.person | Required |
|
|
|
| @sys.person | Required |
|
|
|
| @sys.address | Required |
|
|
|
| @sys.any | Required |
|
|
|
| @sys.geo-city | Required |
|
|
|
| @sys.geo-country | Required |
|
|
|
| @sys.email | Required |
|
|
|
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL" - Transition to new Page:
Payment Details
- Create the following entry fulfillment.
Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:
- Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
- Conditional Response
if $session.params.merch != "Digital Album"
Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
Your merchandise will be shipped to:
$session.params.firstname $session.params.lastname
$session.params.address
$session.params.zipcode $session.params.city
$session.params.country
To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
The total costs will be: $$session.params.price.
After purchasing the digital album, you will receive an email with the download link.
To continue the order process please explicitly say "I confirm".
Do you want to confirm your $session.params.artist $session.params.merch order?
endif
- 다음 인텐트 경로를 만듭니다.
- 인텐트:
confirm.proceed.order - 상담사 말하기:
Thank you for your order! Your merchandise will be shipped today! - 대화 옵션 추가 > 텍스트:
Here's the order number: ABCD123 - 대화 옵션 추가 > 텍스트:
Have a good day! - 전환:
End Session
- 시작 페이지를 선택하고
redirect.end인텐트를 클릭합니다. 다음 이행을 만듭니다.Thank you for contacting G-Records! Have a nice day! - 시작 페이지를 선택하고
redirect.home인텐트를 클릭합니다. 다음 매개변수 사전 설정을 만듭니다.restart = true
좋습니다. 이제 완전히 작동하는 실제 소매업체 챗봇이 완성되었습니다. 다음 실습에서는 가상 에이전트의 성능을 테스트합니다.
9. 가상 에이전트 테스트
기본 제공 시뮬레이터를 사용하여 가상 상담사의 대화를 테스트할 수 있습니다. 시뮬레이터에서 흐름을 테스트하면 흐름을 탐색하는 동안 시뮬레이터에서 수집한 흐름, 페이지, 매개변수, (DTMF) 이벤트의 개요를 확인할 수 있습니다. 이러한 유형의 정보는 최종 사용자에게 숨겨지므로 통합에서 직접 테스트하는 것보다 더 쉽게 테스트할 수 있습니다. 테스트 사례를 만들고 저장하여 재사용할 수도 있습니다. 시간이 지남에 따라 흐름을 유지관리하거나 수정할 때 이전 작업이 변경사항으로 인해 중단되지 않도록 하려는 경우에 유용합니다.
Google Cloud Storage 또는 로컬에 테스트를 저장하여 이전에 만든 테스트 사례를 내보내고 가져올 수도 있습니다. 테스트를 내보내면 blob 파일이 다운로드됩니다. 시뮬레이터 및 테스트 사례에 대해 자세히 알아보려면 시뮬레이터 / 테스트 사례 문서를 참고하세요.
테스트 사례를 만들기 전에 먼저 나머지 가상 에이전트를 마무리해 보겠습니다.
고객 지원 흐름 만들기
- 고객 지원 흐름으로 이동하여 다음과 같은 인텐트 전환을 만듭니다.
페이지 (흐름 내) | 경로 > 인텐트 | 경로 > 전환 대상 |
Customer Care 시작 |
| 배송 |
Customer Care 시작 |
| 환불 |
Customer Care 시작 |
| 바꾸기 |
Customer Care 시작 |
| 흐름 종료 |
Customer Care 시작 |
| 세션 종료 |

- 배송 페이지에 대해 다음 항목 fulfillment를 만듭니다.
Shipping physical merchandise items can take up to 2 weeks.Is there anything else I can help you with?
- 환불 페이지에 대해 다음 항목 이행을 만듭니다.
We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- 교체 페이지에 대해 다음 항목 이행을 만듭니다.
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- 시작 페이지를 선택하고
redirect.end인텐트를 클릭합니다. 다음 이행을 만듭니다.Thank you for contacting G-Records! Have a nice day! - 시작 페이지를 선택하고
redirect.home인텐트를 클릭합니다. 다음 매개변수 사전 설정을 만듭니다.restart = true
테스트 사례 만들기
- 화면 오른쪽에 있는 에이전트 테스트 버튼을 클릭합니다.
시뮬레이터를 처음 열면 에이전트 환경과 활성 흐름을 선택해야 합니다. 대부분의 경우 임시 환경과 기본 시작 흐름을 사용해야 합니다.
- 유형:
Hi

- 요청:
Which artists are signed with your label? - 다음과 같이 말해 보세요.
The Google Dolls - 다음과 같이 말해 보세요.
I am interested in buying a shirt - 다음과 같이 말해 보세요.
A t-shirt - 다음과 같이 말해 보세요.
Medium - 이제 테스트 사례 저장 버튼을 클릭합니다. 시뮬레이터 상단 (다시 실행 화살표 및 재설정 휴지통 아이콘 옆)에서 확인할 수 있습니다.

- 다음 세부정보를 입력합니다.
- 테스트 사례 이름:
Buy Google Dolls t-shirt size M - 태그: #카탈로그, #셔츠, #티셔츠, #TheGoogleDolls
- 저장을 클릭합니다.
테스트 사례를 더 만들어 보겠습니다.
- 먼저 재설정 (휴지통) 아이콘을 클릭하여 현재 대화상자를 지웁니다.
- 다음 테스트 사례를 만듭니다.
Alice Googler 티셔츠 구매:
>"Buy the Alice Googler t-shirt."
>"XL"
- 테스트 사례 이름:
Buy the Alice Googler t-shirt - 태그:
#catalog, #shirts, #t-shirt, #AliceGoogler
티셔츠 사이즈 M을 구매해 줘. (아티스트 이름은 언급하지 않았지만 밴드 개요, 제품 개요, 셔츠, 셔츠 사이즈 페이지는 건너뛰어야 함)
>"Buy a t-shirt size M"
>"The Google Fighters"
- 테스트 사례 이름:
Buy a t-shirt size M - 태그:
#catalog, #shirts, #t-shirt, #TheGoogleFighters - 설명: (아티스트 이름은 언급되지 않았지만 밴드 개요, 제품 개요, 셔츠 및 셔츠 사이즈 페이지는 건너뛰고 싶음)
G's N' Roses의 음악 구매 (밴드 개요 및 제품 개요 페이지가 건너뛰어짐)
>"Purchase music of G's N' Roses"
>"Live"
>"CD"
- 테스트 사례 이름:
Purchase music of G's N' Roses - 태그:
#catalog, #music, #CD, #GsNRoses, #live - 설명: (밴드 개요 및 제품 개요 페이지는 건너뜁니다.)
가격 정보를 확인합니다.
>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
- 테스트 사례 이름:
Price info - 태그:
#catalog, #music, #tourmovie, #shirts - 설명: 대화의 다양한 지점에서 가격 정보 테스트
미리 녹화된 테스트 사례 테스트
- 왼쪽의 Dialogflow 기본 메뉴에서 관리 > 테스트 사례를 선택합니다.
- 모든 테스트 사례를 선택하고 표 위에 있는 실행 버튼을 누릅니다.
Dialogflow CX는 선택한 모든 테스트 사례를 '골든 테스트 사례'로 저장된 녹음 파일에 대해 실행합니다. 결과가 저장된 방식과 동일하면 테스트가 통과됩니다. - 페이지가 올바르게 구성되지 않았거나 잘못된 페이지로 연결되는 인텐트와 같이 흐름에 변경사항이 있는 경우 테스트가 실패합니다.

- 시뮬레이터에서 다음 질문을 합니다.
How long will shipping take? - 결과를 기록하고 테스트 사례를 태그
#shipping와 함께Shipping로 저장합니다. - 관리 > 테스트 사례 패널로 이동하여 그리드 오른쪽 상단에 있는 실행 버튼을 눌러
Shipping테스트 사례만 실행합니다.
이 테스트는 통과해야 합니다.
- 고객 지원 흐름으로 돌아가 시작 페이지를 선택하고 경로 헤더를 클릭합니다.
그러면 모든 경로를 보여주는 그리드가 있는 화면이 표시됩니다.
redirect.shipping.info route삭제- 관리 > 테스트 사례 패널로 이동하여 그리드 오른쪽 상단에 있는 실행 버튼을 눌러
Shipping테스트 사례만 실행합니다.
이 테스트는 실패해야 합니다.
- 실패한 테스트를 클릭하여 실패 세부정보를 확인할 수 있습니다.
이 경우 테스트가 다음 오류 메시지와 함께 실패했습니다.
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
이는 페이지가 더 이상 흐름에 존재하지 않기 때문입니다. Shipping 페이지가 표시될 것으로 예상했지만 Start 페이지에서 벗어나지 않았습니다. (또는 최종 사용자에게 대체 메시지가 표시됩니다.)
즉, 요청이 누락된 거짓음성 테스트 결과입니다. 테스트가 실패했습니다. 배송 페이지가 표시될 것으로 예상했지만 아무런 변화가 없거나 대체 메시지가 표시되었습니다.
- 고객 지원 흐름으로 돌아가
redirect.shipping.info를 인텐트 경로로 시작 페이지에 추가합니다. 배송 페이지로 전환하고 저장을 누르는 것을 잊지 마세요. - 시뮬레이터에서
I want to swap my item테스트 사례를 기록하고 이 테스트 사례를Swapping#swapping로 저장합니다. - 관리 > 인텐트 > redirect.refund.info를 열고 다음 학습 문구를 추가합니다.
I want to swap this item for a refund
이 학습 문구가 없으면 사용자가 환불을 위해 상품을 변경해 달라고 요청할 때 redirect.swapping.info 인텐트가 실행되지만 상품 변경에 관한 정보를 제공하는 것이 아니라 환불에 관한 정보를 제공해야 합니다.
- 시뮬레이터에서 다음 골든 테스트 사례
I want to swap this item for a refund를 만들고 이 테스트 사례를Swap for Refund#refund로 저장합니다. - 관리 > 인텐트 > redirect.refund.info 인텐트로 돌아가
I want to swap this item for a refund줄을 삭제합니다. - 관리 > 테스트 사례로 돌아가서 환불을 위한 교체 테스트 사례를 선택하고 실행합니다.
최근 테스트가 다음 오류 메시지와 함께 실패했습니다.
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
Page: Page mismatch:
Expected: Refund
Actual: Swapping
즉, 잘못 이해된 요청으로 거짓양성 테스트 결과입니다. 테스트가 실패했습니다. 환불 페이지가 활성화될 것으로 예상했지만 교환 페이지가 활성화되었습니다.
적용 범위
Dialogflow CX에서 테스트 범위는 특정 테스트 모음이 실행될 때 가상 에이전트의 대화 (페이지 및 인텐트)가 실행되는 정도를 설명하는 데 사용되는 측정항목입니다. 테스트 범위가 높은 가상 상담사는 테스트 중에 더 많은 대화가 실행되었으므로 테스트 범위가 낮은 가상 상담사에 비해 감지되지 않은 버그 (예: 잘못 이해된 요청)가 포함될 가능성이 낮습니다. 테스트 범위는 백분율로 측정됩니다.
- 모든 테스트 사례의 테스트 범위 보고서를 보려면 범위를 클릭합니다.
- 전환 탭을 클릭합니다.
그러면 모든 페이지 전환의 테스트 범위가 표시됩니다.

- 인텐트 탭을 클릭합니다.
그러면 모든 인텐트의 테스트 범위가 표시됩니다.

축하합니다. 이제 소매업체 봇의 완전한 실제 사례를 빌드하고 테스트했습니다. 다음 실습 페이지로 이동하여 결론을 읽고 유용한 참고 자료를 찾아보세요.
10. 결론
Dialogflow CX는 채팅 또는 음성 봇과 같은 가상 에이전트를 만들기 위한 대화형 AI 플랫폼 (CAIP)입니다. Dialogflow CX를 사용하면 시각적 봇 빌더, 재사용 가능한 인텐트, 다중 턴 대화를 처리하는 기능을 통해 엔터프라이즈급 대화형 환경을 빠르게 만들 수 있습니다.
이 Codelab에서는 실제 소매업체 가상 상담사를 빌드하는 방법을 알아봤습니다. 다음 개념을 다루었습니다.
- 흐름
- 매개변수, 맞춤 및 시스템 항목
- Pages
- 인텐트 경로 및 조건 경로와 같은 상태 핸들러
- 정적 처리 메시지 및 조건부 응답
- 대체 인텐트
- 시뮬레이터, 테스트 사례, 커버리지

참조
Dialogflow CX에 대해 자세히 알아보려면 다음 블로그와 문서를 참고하세요.