Dialogflow CX: 소매업 가상 에이전트 빌드

1. 시작하기 전에

이 Codelab에서는 대화형 UI를 빌드하기 위한 대화형 AI 플랫폼(CAIP)인 Dialogflow CX를 사용하여 소매 챗봇을 빌드하는 방법을 알아봅니다. Dialogflow CX는 챗봇, 음성 봇, 전화 게이트웨이와 같은 가상 에이전트를 구현할 수 있으며 50개 이상의 언어로 여러 채널을 지원할 수 있습니다.

이 Codelab에서는 소매업체용 웹사이트 챗봇을 빌드하는 방법을 안내합니다. 챗봇을 빌드할 가상의 비즈니스 이름은 G-Records입니다. G-Records는 캘리포니아에 소재한 록 음반사입니다. 이 음반사는 앨리스 구글러, G's N' Roses, The Goo Fighters, The Google Dolls 등 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를 사용 설정해야 합니다.

  1. API를 사용 설정할 프로젝트를 선택하고 계속을 클릭합니다.
  2. API 및 서비스 메뉴를 접고 사용자 인증 정보 만들기를 클릭합니다.
  3. 애플리케이션 데이터를 클릭합니다.
  4. 현재 Kubernetes Engine, App Engine 또는 Cloud Functions를 사용하고 있지 않으므로 아니요, 사용하지 않습니다라고 말합니다.
  5. 완료를 클릭합니다.

사용자 인증 정보 설정

새 Dialogflow CX 에이전트 만들기

새 Dialogflow CX 에이전트를 만들려면 먼저 Dialogflow CX 콘솔을 엽니다.

  1. 이전에 만든 Google Cloud 프로젝트를 선택합니다.
  2. 에이전트 만들기를 클릭합니다.

기본 에이전트 설정 양식을 작성합니다.

  • 어떤 표시 이름이든 선택할 수 있습니다.
  • 위치로 us-central1을 선택합니다.
  • 원하는 시간대를 선택합니다.
  • 기본 언어로 en - English를 선택합니다.

만들기를 클릭합니다.

에이전트 만들기

좋습니다. 준비가 완료되었습니다. 이제 가상 상담사의 모델링을 시작할 수 있습니다.

3. 흐름

복잡한 대화상자에는 여러 가지 대화 주제가 포함되는 경우가 많습니다. G-Records에서 밴드 상품을 판매하기 위해 빌드하는 챗봇의 경우 제품 카탈로그, 결제, 주문 상태, 고객 관리 질문에 관한 대화상자가 있습니다. 이러한 대화 주제를 흐름으로 나눌 수 있습니다.

소매 흐름

흐름을 사용하면 팀에서 개별 대화 경로에 대해 작업할 수 있습니다. 좋은 방법은 흐름을 단순화하여 화면에 맞고 더 모듈화되는 것입니다.

흐름은 Dialogflow CX의 새로운 개념입니다. Dialogflow Essentials에는 흐름과 비슷한 개념인 메가 에이전트가 있습니다. 하지만 Flow는 훨씬 더 자주 사용합니다.

이 실습의 뒷부분에서는 흐름을 종료할 수 있는 상태 핸들러를 사용합니다. 그러면 다음 또는 이전 흐름으로 다시 돌아갑니다. 또는 전체 상담사 세션을 종료할 수 있습니다.

이제 흐름을 만들어 보겠습니다.

흐름 만들기

  1. Dialogflow CX에서 + 아이콘 > 흐름 만들기를 클릭합니다.
  2. 이름을 Catalog로 지정하고 Enter 키를 누릅니다.

흐름 만들기

첫 번째 흐름 카탈로그가 생성되었습니다. 이제 다른 흐름을 만듭니다.

  • Order Process
  • My Order
  • Customer Care

흐름

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

흐름

시뮬레이터

Dialogflow CX 콘솔 오른쪽에 있는 내장 시뮬레이터를 사용하여 가상 상담사를 테스트할 수 있습니다. 대화의 시작 부분이나 특정 흐름에서 대화를 테스트할 수 있습니다.

  1. 화면 오른쪽 상단의 테스트 에이전트 버튼을 클릭합니다.
  2. 상담사와 대화하기 입력란에 Hello를 입력합니다. 가상 상담사가 기본 환영 텍스트로 응답합니다. 안녕하세요. 무엇을 도와드릴까요?

시뮬레이터

이 기본 환영 텍스트를 수정해 보겠습니다.

기본 시작 흐름

먼저 가상 에이전트를 시작하면 트리거되는 인텐트 경로를 만듭니다.

  1. 왼쪽 Build > Flows 사이드바에서 Default Start Flow를 클릭하고 Start 트리 노드를 선택합니다.

그러면 시작 페이지가 열립니다. Build > Pages 사이드바 섹션에서 시작 페이지가 자동으로 선택되었습니다.

  1. 시작 > 경로에서 기본 시작 인텐트를 클릭합니다.

인텐트는 한 차례의 대화에서 최종 사용자의 의도를 분류합니다. Dialogflow CX에서 인텐트는 다음 활성 페이지 또는 처리를 라우팅하는 상태 핸들러의 일부가 될 수 있습니다.

  1. 상담사 말 항목을 모두 삭제하고 다음 새 텍스트를 추가합니다.

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?

대화를 간소화하기 위해 빠른 답장 버튼/추천 칩도 필요합니다.

  1. 대화 옵션 추가 > 맞춤 페이로드를 클릭하고 아래 코드 스니펫을 사용합니다.
  2. 아래의 코드 스니펫을 커스텀 페이로드로 사용하고 저장을 누릅니다.

맞춤 페이로드에 대해 자세히 알아보려면 문서를 참고하세요.

{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }

기본 시작 인텐트

  1. 시뮬레이터에서 시작 인텐트를 테스트해 보세요.

리치 콘텐츠가 표시되지 않는 이유가 궁금할 수 있습니다. 추천 칩과 같은 리치 콘텐츠는 통합에 종속되기 때문입니다. 다음 단계에는 결제 계정이 필요하지만 결제 계정이 없는 경우 건너뛸 수 있습니다.

  1. 왼쪽 사이드바에서 Manage(관리) > Integrations(통합)를 클릭합니다.
  2. Dialogflow 메신저를 선택하고 연결을 클릭합니다.
  3. 팝업에서 사용을 클릭합니다.

통합 사용 설정

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

Dialogflow 메신저 지금 사용해 보기

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

Dialogflow 메신저 지금 사용해 보기

현재로서는 추천 칩을 클릭해도 가상 상담사가 사용자의 의도를 이해하지 못합니다. 이는 아직 가상 상담사가 상태 간에 전환하지 않기 때문입니다. Dialogflow CX에서 페이지를 사용하여 이를 실행할 수 있습니다. 실습을 계속 진행하겠습니다. 먼저 항목인텐트를 만들어 보겠습니다.

4. 항목 유형

항목 유형은 최종 사용자 입력에서 데이터를 추출하는 방법을 제어하는 데 사용됩니다. Dialogflow CX 항목 유형은 Dialogflow ES 항목 유형과 매우 유사합니다. Dialogflow는 여러 일반적인 데이터 유형과 일치시킬 수 있는 사전 정의된 시스템 항목을 제공합니다. 예시로는 날짜, 시간, 색상, 이메일 주소 등을 일치시키는 시스템 항목이 있습니다. 커스텀 데이터와 일치시킬 맞춤 항목을 직접 만들 수도 있습니다.

흐름의 페이지를 디자인하기 전에 먼저 모든 맞춤 항목을 준비해 보겠습니다. 다음 항목을 만듭니다.

Dialogflow 항목

항목 만들기

아티스트 항목을 만들어 보겠습니다.

  1. 관리 > 항목 유형을 클릭합니다.
  2. + 만들기를 클릭합니다.
  • 표시 이름: Artist
  • 항목:
  • The Google Dolls (동의어 포함: Google Dolls)
  • The Goo Fighters(동의어: Goo Fighters)
  • G's N' Roses(동의어: Gs and Roses)
  • Alice Googler
  • 고급 옵션을 클릭하고 퍼지 일치를 선택합니다. 밴드 이름을 잘못 입력해도 올바른 항목과 일치할 수 있습니다.
  • 고급 옵션에서 로그에서 삭제도 선택합니다. (밴드 이름의 철자를 잘못 입력하면 로그의 이름이 수정됩니다.)
  1. 저장을 클릭합니다.

Merch 항목의 항목도 필요합니다.

  1. 관리 > 항목 유형을 클릭합니다.
  2. + 만들기를 클릭합니다.
  • 표시 이름: Merch
  • 항목:
  • T-shirt
  • Longsleeve(동의어: Longsleeve shirt)
  • Tour Movie
  • Digital Album (동의어 포함: MP3 Album, MP3)
  • CD(동의어 Disc, Physical CD 포함)
  1. 저장을 클릭합니다.

앨범의 항목도 필요합니다.

  1. 관리 > 항목 유형을 클릭합니다.
  2. + 만들기를 클릭합니다.
  • 표시 이름: Album
  • 항목:
  • Live
  • Greatest Hits(동의어: Hits)
  1. 저장을 클릭합니다.

의류 사이즈의 항목도 필요합니다.

  1. 관리 > 항목 유형을 클릭합니다.
  2. + 만들기를 클릭합니다.
  • 표시 이름: ShirtSize
  • 항목:
  • XS (동의어 포함: Extra Small)
  • S(동의어: Small)
  • M(동의어: Medium)
  • L (동의어 포함: Large)
  • XL(동의어: Extra Large)
  • 2XL(동의어: Extra Extra Large)
  • 3XL
  1. 저장을 클릭합니다.

그리고 일반적으로 영숫자 4자리와 숫자 3자리로 구성된 주문 번호의 항목입니다. (예: ABCD123)

  1. 관리 > 항목 유형을 클릭합니다.
  2. + 만들기를 클릭합니다.
  • 표시 이름: OrderNumber
  • 정규 표현식 항목
  • 항목: [A-Z]{4}[0-9]{3}
  1. 저장을 클릭합니다.

항목 구성은 다음과 유사합니다.

@아티스트: @Artist 법인 유형

@Merch: @Merch Entity Type

@앨범: @앨범 항목 유형

@ShirtSize: @ShirtSize 항목 유형

@OrderNumber: @OrderNumber 항목 유형

맞춤 항목이 준비되면 인텐트를 준비할 수 있습니다. 실습을 계속 진행하겠습니다.

5. 인텐트

인텐트는 한 번의 대화 차례에서 최종 사용자의 의도를 분류합니다. Dialogflow CX에서는 대화형 제어의 빌딩 블록이 아니며 대폭 간소화되었습니다. Dialogflow CX는 사용자가 말하는 내용과 일치하는 인텐트만 사용합니다. Dialogflow ES에서는 모든 항목 (매개변수, 이벤트, 처리 등)을 인텐트에 연결해야 했습니다. Dialogflow CX의 인텐트는 학습 문구만 포함하므로 재사용할 수 있습니다. 더 이상 대화를 제어하지 않습니다. 따라서 인텐트를 만드는 과정은 간단합니다.

인텐트의 학습 문구는 항목을 사용하여 '변수' 입력을 추출할 수 있습니다. 따라서 항목 유형을 미리 만드는 것이 좋습니다. 이는 실습 단계의 이전 페이지에서 수행한 작업입니다.

인텐트 만들기

흐름의 페이지를 디자인하기 전에 먼저 모든 인텐트를 준비해 보겠습니다.

  1. 관리 > 인텐트를 클릭합니다.
  2. + 만들기를 클릭합니다.

다음 세부정보를 사용하세요.

  • 표시 이름: redirect.artists.overview
  • 설명 Artists overview: The bands supported by the label

새 인텐트

아래로 스크롤하여 다음 학습 문구를 만듭니다.

  • Which bands are signed?
  • Which bands
  • Which artists
  • Which artists are part of the record label
  • Who is part of the label
  • From which bands can I buy merchandise
  • Band merchandise
  • Which music do you have?
  • I would like to know who are signed to the label
  • Who are supported by the label
  • From who can I buy shirts
  • What music can I order
  • Can I get an overview of all the artists

학습 문구

  1. 저장을 클릭합니다.
  1. 이제 다른 모든 인텐트를 만들어 보겠습니다. 상상력을 발휘하여 더 많은 학습 문구를 생각해 보세요. 사용자가 인텐트를 트리거할 수 있는 다양한 방법을 다루기 위해 인텐트당 학습 문구를 10개 이상 사용하는 것이 좋습니다. 이 실습의 목적상 샘플이 적어도 상관없습니다.

다음 사항을 확인해 보세요.

  • 학습 문구를 입력하면 Dialogflow CX가 자동으로 항목에 주석을 추가합니다. 그렇지 않은 경우 동의어를 추가하거나 학습 문구를 직접 주석 처리하여 항목을 업데이트해야 할 수 있습니다.
  • 더 짧은 학습 문구: Dialogflow의 NLU 시스템은 더 짧은 학습 문구로도 작동할 수 있으며 여기에 몇 가지 예시가 나와 있습니다.
  • 과도한 학습: 인텐트에 대한 학습 문구가 너무 많으면 과도한 학습이 발생하여 원하는 결과를 얻지 못할 수 있습니다. 일치하는 인텐트가 없는 경우 반복 및 증분 테스트를 사용하고 학습 문구를 추가하는 것이 좋습니다.

표시 이름

학습 문구

redirect.product.overview

"Which products do you sell?", "What merchandise items do you have?", "What are you selling?", "What are the items?", "Which products?" "What merchandise?", "Please tell me what you have"

confirm.artists.overview

"Yeah, let me buy merchandise", "Yes, I want to purchase something", "Yes, I would like to order merchandise from Alice Googler" (참고: 앨리스 Google 직원은 @Artist 항목으로 인식되어야 합니다.), "Ok, let's buy stuff."

redirect.price

"How much does a t-shirt cost?", "What's the price for the tour movie?", "The album is how much?", "I want to know the price of a longsleeve shirt", "What's the price difference?", "What does each product costs?", "What does it cost?", "What is the price?"

redirect.product

"Tour movie", "I am interested in a t-shirt", "Can I buy a digital album?", "I want the CD", "I want to buy something", "Can I purchase a record?", "I want to buy a t-shirt size M of The Google Dolls", "Can I purchase the Alice Googler digital album?"

redirect.product.of.artist

"Yeah, let's shop", "Give me merch of Alice Googler", "Shirts of The Google Dolls that would be nice.", "Yes", "I want The Goo Fighters stuff", "Yes, I want to order merchandise", "Yep, give me items of G's N' Roses", "Go for it", "Anything Alice Googler", "I am a G's N' Roses fan!", "Google Dolls", "Yes of The Google Dolls"

redirect.shirts

"Shirts", "I want to buy shirts", "I am interested in shirts", "I want a shirt", "Shirts of G's N' Roses please", "Give me shirts of the Google Dolls", "I want to buy shirts of Alice Googler"

redirect.music

"Music", "I want to buy music", "I am interested in music", "Give me music of the Goo Fighters", "Music of Goo Fighters please", "Interested in buying the Alice Googler album", "Purchase Alice Googler music"

redirect.album

"Hits", "Live Album", "I want the Greatest Hits Digital Album", "Give me the Greatest Hits CD", "Hits on MP3"

redirect.shirt.size

"XS", "I have M", "I want Large", "My size is 3XL", "Extra Large is the size"

redirect.my.order

"About my order", "I have a question about my order", "My order is ABCD123, I have a question about my order."

status

redirect.my.order.status

redirect.my.order.canceled

"I want to cancel my order", "I want to cancel order ABCD123", "Please cancel order ABCD123", "Undo my order", "Stop my order", "Cancel"

redirect.shipping.info

"How long will it take?", "How long is shipping?", "How long does shipping take?", "When will I receive it?"

redirect.refund.info

"I want a refund.", "Can I get a refund", "I want to return the CD", "I want to return my t-shirt"

redirect.swapping.info

"I want to swap my item", "Can I change my t-shirt for a larger size?", "Can I change my product?", "I want to swap the CD"

redirect.order.process

"I want to buy a t-shirt of the Google Dolls, size S", "Let me buy the digital CD of Alice Googler", "Get me the tour movie of G's N' Roses", "Buy a longsleeve shirt of The Goo Fighters", "Purchase the Alice Googler t-shirt", "Please order me the Google Dolls CD"

confirm.proceed.order

"Yes", "Yes, please continue", "Yes order", "I want to order", "Yeah", "Yep", "I confirm", "Agree", "Go ahead", "Order", "Buy it", "Purchase", "Okay"

decline.proceed.order

"No", "I rather not", "I don't want it anymore", "Don't order", "Stop", "Not anymore", "Nope", "Go back", "Reset", "Decline", "I don't need it"

redirect.home

"Go back", "Home", "Help", "What else can I ask", "Restart", "Can you tell me what I can order?", "What questions can I ask", "I need help", "Advice please", "Hi", "Hello", "Good day!"

redirect.end

"No that's it, goodbye", "Bye", "Cheers", "End", "That's it", "No more questions", "Exit", "Have a good day", "End Call", "Close"

이제 재사용 가능한 요소(흐름, 항목, 인텐트)가 준비되었으므로 페이지와 상태 핸들러를 만들어 이를 결합할 수 있습니다.

6. 페이지 및 상태 핸들러

Dialogflow CX 대화(세션)를 유한 상태 머신으로 설명하고 시각화할 수 있습니다. 자판기를 예로 들면 유한 상태 머신으로 모델링할 수 있습니다. 다음과 같은 상태가 있습니다. 동전 대기 중, 캔디 선택, 캔디 제공. 일련의 입력이 주어지면 이러한 상태 간에 이동합니다. 예를 들어 동전을 넣으면 자판기가 동전 대기 중에서 캔디 선택으로 이동합니다. 페이지는 Dialogflow CX 가상 에이전트의 이러한 상태를 모델링하는 방법입니다.

최종 사용자가 대화에서 Dialogflow CX와 상호작용할 때 대화는 페이지에서 페이지로 이동하므로 특정 시점에 정확히 하나의 페이지가 현재 페이지이고, 현재 페이지는 활성 페이지로 간주되며, 해당 페이지와 연결된 흐름도 활성 흐름으로 간주됩니다.

흐름에 대해 여러 페이지를 정의합니다. 여기서 통합 페이지에서는 흐름의 대상이 되는 주제에 대한 대화를 모두 처리할 수 있습니다. 모든 흐름에는 특별한 시작 페이지가 있습니다. 흐름이 처음 활성화되면 시작 페이지가 현재 페이지가 됩니다. 각 대화 차례에서 현재 페이지는 동일하게 유지되거나 다른 페이지로 전환됩니다. 이 개념을 사용하면 여러 페이지와 여러 대화 차례로 더 큰 에이전트를 만들 수 있습니다.

페이지에는 실행(정적 항목 대화상자 또는 웹훅), 매개변수, 상태 핸들러가 포함됩니다. 대화 제어는 상태 핸들러를 통해 이루어지므로, 대화의 분기에 관한 조건부 설정을 포함하여 다른 Dialogflow CX 페이지로 전환하는 다양한 전환 경로를 만들 수 있습니다.

대화의 상태는 세 가지 유형의 경로로 페이지 간의 전환을 처리하여 제어됩니다.

  • 인텐트 경로: 인텐트를 일치시켜야 하는 경우 (예: 최종 사용자가 말한 내용에 따라 페이지 변경) (시각적 다이어그램의 파란색 선)
  • 조건 경로: 조건을 확인해야 하는 경우(예: 세션에 저장된 특정 매개변수를 기반으로 페이지 변경) (시각적 다이어그램의 주황색 선)
  • 이벤트 핸들러: 특정 대체 이벤트를 처리해야 하는 경우(예: 최종 사용자를 인텐트 또는 조건 경로 중 하나로 구분하기 위해 입력 없음, 일치 항목 없음을 처리) (시각적 다이어그램의 녹색 선)

대화 발화(즉, 사용자에게 다시 전달되는 콘텐츠 또는 응답)는 정적 또는 동적일 수 있는 처리에 의해 정의됩니다.

  • 정적 fulfillment: 정적 fulfillment 응답이 제공되는 경우
  • 동적 처리: 동적 응답을 위해 처리 웹훅이 호출되는 경우

소매 봇의 경우 몇 가지 인텐트 경로를 만들고 정적 항목 처리 응답을 제공합니다. 이 응답은 페이지가 활성화되는 즉시 사용자에게 표시됩니다. 후반부에서는 상태 경로가 포함된 매개변수를 만들어 상품 주문을 하는 데 필요한 정보를 수집합니다.

페이지 인텐트 경로

기본 시작 흐름에서 페이지 만들기

다음은 기본 시작 흐름의 플로 차트입니다.

카탈로그 연결 페이지

함께 클릭해 보겠습니다.

  1. Build > Default Start Flow를 클릭합니다.
  2. 시작 페이지를 클릭합니다.
  3. 경로 옆에 있는 + 아이콘을 클릭합니다.
  4. redirect.artists.overview 추가
  5. Transition까지 아래로 스크롤하고 Catalog 흐름으로 전환합니다.
  6. 저장을 클릭합니다.
  7. redirect.product.overview 및 이 테이블의 다른 11개 행에 대해 위의 단계를 반복합니다.

페이지(흐름 내)

경로 > 인텐트

경로 > 전환

시작

Default Welcome Intent

-

시작

redirect.artists.overview

흐름: 카탈로그

시작

redirect.product.overview

흐름: 카탈로그

시작

redirect.shirts

흐름: 카탈로그

시작

redirect.music

흐름: 카탈로그

시작

redirect.product

흐름: 카탈로그

시작

redirect.product.of.artist

흐름: 카탈로그

시작

redirect.refund.info

절차: Customer Care

시작

redirect.shipping.info

절차: Customer Care

시작

redirect.swapping.info

절차: Customer Care

시작

redirect.my.order

절차: 내 주문

시작

redirect.my.order.canceled

절차: 내 주문

시작

redirect.my.order.status

절차: 내 주문

시작

redirect.end

페이지: 세션 종료

기본 시작 페이지 경로

기본 시작 흐름은 콜센터에 전화할 때 옵션 메뉴가 작동하는 것처럼 작동합니다. 하지만 이 가상 에이전트에서는 자연어로 학습되고 인텐트에 학습 문구가 포함됩니다. 따라서 상호작용은 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?

다음은 카탈로그 흐름 내의 모든 페이지에 관한 흐름 차트입니다.

카탈로그 연결 페이지

이 흐름의 복잡성을 확인해 보세요.

  • 어떤 아티스트 질문을 건너뛰고 바로 '어떤 상품을 구매할 수 있나요?'라고 물어볼 수 있습니다.
  • 기본 시작 흐름에서 'Google Dolls 티셔츠를 사고 싶어요' 또는 '무엇인가를 사고 싶어요'라고 요청할 수 있습니다. 즉, 가상 상담사가 후속 질문을 통해 이러한 필수 매개변수의 슬롯을 채웁니다. 제품 페이지로 바로 이동합니다.
  • 가격 대화상자는 재사용될 가격 페이지에서 가져옵니다.
  • 둘러보기 동영상의 대화는 가장 단순한 대화처럼 보이지만 실제로는 특별한 작업을 진행합니다. Google에서는 대화의 이 부분을 재사용하므로 최종 사용자가 한 번에 모든 정보를 전문적으로 지정하는 경우 다른 제품 중 하나에 직접 입력할 수도 있습니다.
 > "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"

먼저 페이지 연결부터 시작해 보겠습니다.

  1. Build > Catalog를 클릭합니다.
  2. 시작 페이지를 클릭합니다.
  3. 경로 옆에 있는 + 아이콘을 클릭합니다.
  4. redirect.artists.overview 추가
  5. 전환으로 아래로 스크롤하고 페이지를 선택한 다음 + 새 페이지를 선택합니다.
  6. 페이지 이름 Artist Overview을 사용하고 저장을 누릅니다.

이제 나머지 흐름을 완료하겠습니다.

  1. 이전 단계는 다음 페이지, 인텐트, 처리를 사용하여 반복할 수 있습니다. 이 표를 인계받습니다. Page는 흐름에서 선택할 페이지이며, Routes > Transition To는 만들고 전환할 새 흐름 또는 페이지입니다.

페이지(흐름 내)

경로 > 인텐트

경로 > 전환

카탈로그 시작

redirect.artists.overview

아티스트 개요

카탈로그 시작

redirect.product

제품

카탈로그 시작

redirect.product.overview

제품 개요

카탈로그 시작

redirect.product.of.artist

제품 개요

카탈로그 시작

redirect.shirts

셔츠

카탈로그 시작

redirect.music

음악

카탈로그 시작

redirect.end

세션 종료

카탈로그 시작

redirect.home

종료 흐름

아티스트 개요

redirect.product.of.artist

제품 개요

이제 계속해서 정적 처리를 추가해 보겠습니다.

  1. 카탈로그 흐름에서 아티스트 개요 페이지를 클릭합니다.
  2. 실적 달성 입력 섹션에서 실적 달성 수정을 클릭합니다.
  3. 다음과 같은 정적 처리(상담사 말)를 사용하세요.
  • The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
  1. 저장을 클릭합니다.
  2. 카탈로그 흐름에서 제품 개요 페이지를 클릭합니다.
  3. 실적 달성 입력 섹션에서 실적 달성 수정을 클릭합니다.
  4. 다음과 같은 정적 처리(상담사 안내)를 사용합니다.
  • We sell shirts, music or the tour movie.
  1. 저장을 클릭합니다.

페이지 매개변수

매개변수는 세션 중에 최종 사용자가 제공한 값을 캡처하고 참조하는 데 사용됩니다. 각 매개변수에는 이름과 항목 유형이 있습니다. @Artist@Merch는 상품 주문을 처리하기 위해 수집해야 하는 최소 매개변수입니다. 티셔츠나 롱슬리브의 경우 @ShirtSize도 수집하고 음악을 주문하려면 @Carrier@Album 이름도 필요합니다.

이러한 매개변수는 필수로 표시해야 합니다. 필요한 경우 최종 사용자를 기억하고 올바른 답변을 제공하여 이러한 매개변수를 수집할 수 있도록 맞춤 프롬프트를 제공해야 합니다. Dialogflow CX에는 이 작업에 도움이 되는 몇 가지 메커니즘이 있습니다.

예를 들어 매개변수 섹션에 맞춤 정적 처리 메시지를 제공할 수 있습니다. 매개변수가 필수인 경우 이러한 매개변수 처리가 표시됩니다. 이러한 응답 메시지는 응답 큐에 추가됩니다. 에이전트의 차례에는 여러 개의 fulfillment를 호출할 수 있으며(호출하는 것이 바람직한 경우도 있음), 각 fulfillment는 응답 메시지를 생성할 수 있습니다. Dialogflow는 이러한 응답을 응답 큐에 유지합니다. 페이지 수명 주기와 이러한 처리가 응답 큐에 추가되는 순서에 관한 자세한 내용은 Dialogflow CX 페이지 문서를 참고하세요.

아티스트 개요 페이지에서 매개변수 만들기

페이지 매개변수를 정의해 보겠습니다.

  1. 카탈로그 흐름에서 아티스트 개요 페이지를 클릭합니다.
  2. 매개변수 블록에서 +를 클릭합니다. artist 매개변수를 추가합니다.
  • 표시 이름: artist
  • 법인 유형: @Artist
  • 필수: 선택
  • 로그에서 수정: 선택
  1. 이제 맞춤 매개변수 처리 메시지를 추가하겠습니다. 아직 가상 에이전트가 artist 매개변수를 수집하지 않은 경우 최종 사용자는 이 에이전트 응답이 응답 대기열에 추가됩니다.

From which of these artists would you like to order merchandise?

  1. 풍부한 추천 칩을 제공하는 두 번째 대화상자 옵션을 추가합니다. 대화 옵션 추가를 클릭하고 다음 코드(JSON)를 사용합니다.
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

최종 사용자가 답변을 시도한 횟수에 따라 다양한 대체 처리 프롬프트를 처리할 수 있습니다. 매개변수 이벤트 핸들러를 사용하면 됩니다. 잘못된 매개변수, 발화 내용이 너무 길음, 입력 없음, 1차 시도에 입력 없음, 2차 시도, 일치 항목 없음과 같은 다양한 내장 이벤트 핸들러를 선택할 수 있습니다. 입력 없음과 일치 없음의 차이점은 입력 없음의 경우 사용자가 답변을 제공하지 않은 반면 일치 없음의 경우 사용자가 답변을 제공했지만 Dialogflow CX에서 페이지와 인텐트 일치를 찾을 수 없다는 점입니다.

  1. 이벤트 핸들러 재요청 섹션까지 아래로 스크롤합니다.
  2. 이벤트 핸들러 추가를 클릭하고 이벤트를 선택합니다. No-match default
  3. 다음 이벤트 정적 텍스트 처리를 사용합니다.

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?

  1. 저장을 클릭합니다.
  2. 이벤트 핸들러 추가를 클릭하고 No-input default 이벤트를 선택합니다.
  3. 다음 이벤트 정적 텍스트 처리를 사용합니다.

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?

  1. 저장을 클릭합니다.

페이지 조건 경로

매개변수는 페이지 조건부 경로와 함께 사용하면 매우 강력합니다. 조건이 true로 평가되면 연결된 페이지 경로가 호출됩니다. 조건은 매개변수가 특정 값과 일치, 매개변수가 누락되어서는 안 됨, 양식이 작성됨 등 다양합니다. 매개변수조건에 관한 자세한 내용은 Dialogflow CX 문서를 참고하세요.

소매업 가상 에이전트의 경우 일련의 매개변수를 수집해야 하므로 '양식'이 완료되었는지 확인하기 위한 조건을 만들어야 합니다. 양식은 페이지의 최종 사용자로부터 수집해야 하는 매개변수의 목록입니다. 가상 에이전트는 필수 양식 매개변수(페이지 매개변수라고도 함)를 모두 수집할 때까지 여러 차례의 대화를 통해 최종 사용자와 상호작용합니다.

Dialogflow CX는 양식 작성 중에 최종 사용자가 제공하는 매개변수 값을 자동으로 설정합니다. 현재 페이지의 완성된 양식이 작성되었는지 확인하려면 $page.params.status = "FINAL" 조건을 사용합니다.

아티스트 개요 페이지에서 조건부 경로 만들기

아티스트가 확인되면 다음 페이지로 전환되는 조건부 경로를 만들어 보겠습니다.

  1. 아티스트 개요 페이지의 경로 섹션에서 + 아이콘을 클릭합니다.
  2. 상태 섹션까지 아래로 스크롤합니다.
  3. 하나 이상을(를) 선택합니다(또는).
  4. 다음으로 다음과 같은 표현식을 작성합니다.
  • 매개변수: $page.params.status
  • 연산자: =
  • 값: "FINAL"
  1. 이제 경로에서 최종 사용자의 선택을 확인하는 특정 정적 처리 메시지를 만듭니다. Fulfillment 블록까지 아래로 스크롤하여 다음 fulfillment 메시지를 작성합니다.
  • $session.params.artist, great choice! Rock on!
  • You want to rock with $session.params.artist merchandise. Awesome!
  1. 조건이 충족되면 제품 개요 페이지로 전환해야 합니다. 전환 섹션까지 아래로 스크롤하여 다음 페이지를 사용합니다. Product Overview
  2. 저장을 클릭합니다.

매개변수

제품 개요 페이지에서 경로 만들기

이제 매개변수와 조건부 경로를 만드는 방법을 알았으므로 다음 페이지에 더 많은 매개변수를 만들어 보겠습니다.

제품 개요

  1. 제품 개요 페이지에서 artist 매개변수를 만듭니다.
  • 표시 이름: artist
  • 법인 유형: @Artist
  • 필수: 선택
  • 로그에서 수정: 확인
  • 초기 프롬프트 처리: 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"
      }
    ]
  ]
}
  1. merch 매개변수를 만듭니다.
  • 표시 이름: merch
  • 법인 유형: @Merch
  • 필수: 선택
  • 로그에서 수정: 확인
  • 처리: Which merchandise item do you want?
  • 대화 옵션 추가 > 맞춤 페이로드를 클릭합니다.
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • 이벤트 핸들러 > No-match default
  • 이벤트 핸들러 처리: 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
  • 이벤트 핸들러 처리: 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"
            }
          ]
        }
      ]
    ]
  }
  1. artist가 제공되고 merch 항목이 제공될 때 제품 페이지로 전환되는 경로를 만듭니다.
  • 조건:
  • 모든 규칙 일치(AND)
  • 표현식: $session.params.artist != null
  • 표현식: $session.params.merch != null
  • 처리: Alright! $session.params.merch of $session.params.artist, let's go!
  • 전환: 페이지: Product
  1. 사용자가 '셔츠'라고 말할 때의 경로 만들기
  • 인텐트: redirect.shirts
  • 전환: 페이지: Shirts
  1. 사용자가 "음악"이라고 말할 때 사용할 경로를 만듭니다.
  • 인텐트: redirect.music
  • 전환: 페이지: Music
  1. 사용자가 가격 정보를 요청할 때의 경로 만들기
  • 인텐트: redirect.price
  • 전환: 새 페이지 만들기: Price

위 구성을 설정하면 아래 그림과 유사한 시각화가 표시됩니다. 다이어그램에서 인텐트 경로는 파란색이고 조건 경로는 주황색입니다. 그림에는 표시되지 않지만 이벤트 핸들러는 녹색이며 여러 경로 유형이 페이지로 전환되면 선이 회색으로 표시됩니다.

카탈로그 흐름의 시작

이제 인텐트 경로, 매개변수 기반 조건부 경로와 같은 상태 핸들러를 사용하여 흐름, 항목, 인텐트, 페이지를 만드는 방법을 알아봤습니다. 이 실습의 후반부에서는 처리에서 조건부 브랜치를 사용하여 입력에 따라 다양한 대화상자를 제공합니다.

다음 구성을 사용하여 가상 상담사를 완성할 수 있습니다.

셔츠 페이지:

  1. 셔츠 페이지에서 다음 구성을 만듭니다.
  • 항목 fulfillment: Do you want a longsleeve or a t-shirt?
  • 항목 처리 커스텀 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Price 페이지로 전환되는 인텐트 경로 redirect.price를 만듭니다.
  2. 다음 매개변수를 만듭니다.
  • 매개변수: merch - 항목 유형: @Merch, Required, Redact in log
  • 매개변수 > 이벤트 핸들러 > No-match default
  • 매개변수 > 이벤트 핸들러 처리: You can choose between a t-shirt or a longsleeve. Which of these do you want?
  • 매개변수 > 이벤트 핸들러 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  • 매개변수 > 이벤트 핸들러 > No-input default
  • 매개변수 > 이벤트 핸들러 처리: I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want?
  • 매개변수 > 이벤트 핸들러 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  1. 항목 처리를 클릭하고 매개변수 사전 설정으로 아래로 스크롤합니다. 셔츠 페이지가 활성화될 때마다 카테고리 매개변수가 shirts로 설정됩니다.

매개변수

category

shirts

  1. 조건부 경로를 추가합니다.
  • 최소 하나와 일치 규칙(OR)
  • 표현식: $session.params.merch = "T-shirt"
  • 표현식: $session.params.merch = "Longsleeve"
  • 새 페이지로 전환: Shirt Size

가격 페이지:

가격 메시지는 선택한 상품 항목 또는 카테고리 (음악 또는 셔츠)에 따라 다르므로 이 부분은 실습의 뒷부분에서 수정할 것입니다. 현재는 자리표시자만 입력하는 것만으로도 충분합니다.

  1. 가격 페이지에서 다음 구성을 만듭니다.
  • 항목 fulfillment: PRICE TODO

대화의 여러 위치에서 가격을 요청할 수 있으므로 항상 답변을 제공하고 주문을 계속할 수 있도록 대화의 이전 부분으로 다시 전달해야 합니다. 대화상자 트리에는 분기하여 가격 정보를 확인할 수 있는 위치가 5곳 있습니다. (셔츠, 셔츠 사이즈, 음악, 이동통신사, 인텐트 경로를 통한 직접 연결)이므로 뒤로 이동하려면 몇 가지 조건부 경로가 필요합니다.

  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치(AND)
  • 표현식: $session.params.category = "shirts"
  • 표현식: $session.params.merch = "null"
  • 새 페이지로 전환: Shirts
  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치(AND)
  • 표현식: $session.params.category = "shirts"
  • 표현식: $session.params.size = "null"
  • 새 페이지로 전환: Shirt Size
  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치(AND)
  • 표현식: $session.params.category = "music"
  • 표현식: $session.params.album = "null"
  • 새 페이지로 전환: Music
  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치(AND)
  • 표현식: $session.params.category = "music"
  • 표현식: $session.params.merch = "null"
  • 새 페이지로 전환: Carrier
  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치(AND)
  • 표현식: $session.params.category = "null"
  • 새 페이지로 전환: Product Overview

셔츠 사이즈 페이지:

  1. 셔츠 사이즈 페이지에서 다음 구성을 만듭니다.
  • 항목 fulfillment: What shirt size do you want?
  • 항목 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. Price 페이지로 전환되는 인텐트 경로 redirect.price를 만듭니다.
  2. 다음 매개변수를 만듭니다.
  • 매개변수: shirtsize - 항목 유형: @ShirtSize - Required, Redact In Log
  • 매개변수 > 이벤트 핸들러 > No-match default
  • 매개변수 > 이벤트 핸들러 처리: Please tell me the shirt size, such as XL.
  • 매개변수 > 이벤트 핸들러 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  • 매개변수 > 이벤트 핸들러 > No-input default
  • 매개변수 > 이벤트 핸들러 처리: I couldn't understand the shirt size. What size do you want?
  • 매개변수 > 이벤트 핸들러 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치(AND)
  • 표현식: $page.params.shirtsize != "null"
  • 페이지로 전환: Product

음악 페이지:

  1. 음악 페이지에서 다음 구성을 만듭니다.
  • 항목 fulfillment: We have a Greatest Hits Album or the Live Album. Which one do you want?
  • 항목 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. 페이지: Price로 전환하는 인텐트 경로: redirect.price를 만듭니다.
  2. 다음 매개변수를 만듭니다.
  • 매개변수: album - 항목 유형: @Album - Required, Redact In Log
  • 매개변수 > 이벤트 핸들러 > No-match default
  • 매개변수 > 이벤트 핸들러 처리: You can choose between Greatest Hits and Live Album. Which of these do you want?
  • 매개변수 > 이벤트 핸들러 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  • 매개변수 > 이벤트 핸들러 > No-input default
  • 매개변수 > 이벤트 핸들러 처리: I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want?
  • 매개변수 > 이벤트 핸들러 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  1. 항목 처리를 클릭하고 매개변수 사전 설정으로 스크롤합니다. 음악 페이지가 활성화될 때마다 카테고리 매개변수가 음악으로 설정됩니다.

매개변수

category

music

  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치(AND)
  • 표현식: $page.params.album != "null"
  • 페이지로 전환: Carrier

이동통신사 페이지:

  1. 이동통신사 페이지에서 다음 구성을 만듭니다.
  • 항목 fulfillment: Do you want this album on CD or MP3?
  • 항목 처리 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Price 페이지로 전환되는 인텐트 경로 redirect.price를 만듭니다.
  2. 다음 매개변수를 만듭니다.
  • 매개변수: merch - 항목 유형: @Merch - Required, Redact In Log
  • 매개변수 > 이벤트 핸들러 > No-match default
  • 매개변수 > 이벤트 핸들러 처리: Do you want a physical CD or the digital album?
  • 매개변수 > 이벤트 핸들러 처리: 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "Digital Album"
            }
          ]
        }
      ]
    ]
  }
  • 매개변수 > 이벤트 핸들러 > No-input default
  • 매개변수 > 이벤트 핸들러 처리: I couldn't understand if you mean CD or MP3. Which one do you want?
  • 매개변수 > 이벤트 핸들러 처리: 맞춤 페이로드:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            }
          ]
        }
      ]
    ]
  }
  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치 (AND)
  • 표현식: $page.params.merch != "null"
  • Product 페이지로 전환

제품 페이지:

  1. 다음 매개변수를 만듭니다.

매개변수 표시 이름

매개변수 항목 유형

검토

artist

@Artist

필수, 로그에서 수정

merch

@Merch

필수, 로그에서 수정

  1. artist 매개변수에는 다음과 같은 초기 프롬프트 처리가 필요합니다. 이 프롬프트는 아티스트가 알려지지 않은 경우 표시됩니다. 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"
      }
    ]
  ]
}
  • 또한 처리가 포함된 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.
  1. merch 매개변수에도 재요청 이벤트 핸들러가 필요합니다.
  • 처리가 포함된 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?

다음 경로는 아티스트가 알려지고 사용자가 '투어 영화'를 선택하면 확인 페이지로 전환됩니다.

  1. 조건부 경로를 추가합니다.
  • 모든 규칙 일치 (AND)
  • 표현식: $session.params.artist != null
  • 표현식: $session.params.merch = "Tour Movie"
  • 매개변수 사전 설정 매개변수 추가 > price = 25
  • 새 페이지로 전환: Confirmation

아티스트가 알려져 있고 사용자가 '티셔츠'를 선택하고 셔츠 사이즈가 선택되면 다음 경로는 확인 페이지로 전환됩니다.

  1. 조건부 경로를 추가합니다.
  • 맞춤 표현식: $session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
  • 매개변수 사전 설정 매개변수 추가 > price = 25
  • 페이지로 전환: Confirmation

아티스트가 확인되고 사용자가 '긴팔'을 선택하고 셔츠 사이즈를 선택하면 다음 경로가 확인 페이지로 전환됩니다.

  1. 조건부 경로를 추가합니다.
  • 맞춤 표현식: $session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
  • 매개변수 사전 설정 매개변수 추가 > price = 30
  • Confirmation 페이지로 전환

아티스트가 알려지고 사용자가 'CD'를 선택하고 앨범 이름이 선택되면 다음 경로가 확인 페이지로 전환됩니다.

  1. 조건부 경로를 추가합니다.
  • 맞춤 표현식: $session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
  • 매개변수 사전 설정 매개변수 추가 > price = 15
  • 페이지로 전환: Confirmation

아티스트가 확인되고 사용자가 '디지털 앨범'을 선택하고 앨범 이름이 선택되면 다음 경로가 확인 페이지로 전환됩니다.

  1. 조건부 경로를 추가합니다.
  • 커스텀 표현식: $session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
  • 매개변수 사전 설정 매개변수 추가 > price = 10
  • Confirmation 페이지로 전환

다음으로 누락된 정보를 감지하는 메시지를 사용하여 몇 가지 고급 조건문을 만들어 보겠습니다. 아티스트가 알려져 있고 사용자가 'CD' 또는 '디지털 앨범'을 선택했지만 앨범 이름을 선택하지 않은 경우 다음 경로는 음악 페이지로 다시 전환됩니다.

  1. 조건부 경로를 추가합니다.
  • 맞춤 표현식: $session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null
  • 처리: I would also need to know which album you would like to buy!
  • 페이지로 전환: Music

마지막 경로는 아티스트가 알려져 있고 사용자가 'T-shirt' 또는 'Longsleeve'를 선택했지만 티셔츠 사이즈를 선택하지 않은 경우 확인 페이지로 전환됩니다.

  1. 조건부 경로를 추가합니다.
  • 맞춤 표현식: $session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null
  • 처리: I would also need to know which shirt size you need!
  • 페이지로 전환: Shirt Size

실습의 다음 부분에서는 조건부 처리를 사용하여 입력에 따라 다양한 처리 메시지를 제공합니다.

7. 조건부 응답

일부 응답은 입력에 따라 다른 대화를 반환합니다. 대화가 분기됩니다. 이를 조건부 응답이라고 합니다. 이는 백엔드에서 조건부 응답이 결정된 웹훅 처리를 사용하지 않는 경우에 유용할 수 있습니다. 예를 들면 다음과 같습니다.

if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif
  • [조건]의 예는 $session.params.user-age >= 21일 수 있습니다. 경로의 조건과 유사한 형식을 사용합니다.
  • [response] 는 정적 텍스트 응답을 받습니다.
  • 조건부 응답은 항상 if로 시작합니다.
  • elifelse 블록은 선택사항입니다.

Dialogflow CX는 기본 제공 시스템 함수를 활용할 수도 있습니다. 예를 들어 날짜 또는 시간 형식을 지정하거나 현재 시간을 표시합니다($sys.func.NOW()).

확인가격 페이지를 수정하여 카탈로그 흐름을 마무리해 보겠습니다.

확인 페이지:

이제 확인 페이지를 빌드합니다. 다음과 같은 요구사항이 있습니다.

  • 상품CD 또는 디지털 앨범인 경우 확인 메시지에는 아티스트, 상품, 앨범, 가격 필드가 표시됩니다.
  • 상품티셔츠 또는 긴팔인 경우 확인에는 아티스트, 상품, 사이즈, 가격 필드가 표시됩니다.
  • 그 외의 경우(즉, merchTour Movie인 경우). 확인에는 아티스트, 상품, 가격 필드가 표시됩니다.
  1. 확인 페이지를 클릭합니다.
  2. fulfillment 수정 > 상담사 응답 > 대화 추가 옵션 > 조건부 응답을 클릭합니다.
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
  1. Create the following Custom payload:
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Yes, confirm"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

Next, create two intent routes:

  1. confirm.proceed.order transitions to: Order Process Flow.
  2. decline.proceed.order transitions to End 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.

  1. In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:

Parameter

Value

artist

null

merch

null

shirtsize

null

category

null

album

null

price

null

restart

true

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.

  1. 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..."
            }
          ]
        }
      ]
    ]
  }
  1. Select the Start Page and click on the redirect.end intent. 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

Conditional Responses

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

  1. Go to the My Order Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

My Order Start

redirect.my.order

My Order

My Order Start

redirect.my.order.status

My Order Status

My Order Start

redirect.my.order.canceled

My Order Cancellation

My Order Start

redirect.end

End Session

My Order Start

redirect.home

End Flow

My Order

redirect.my.order.status

My Order Status

My Order

redirect.my.order.canceled

My Order Cancellation

Default Start Flow

redirect.my.order.canceled

Flow: My Order

Default Start Flow

redirect.my.order.status

Flow: My Order

  1. 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.
  1. 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?
  1. 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?
  1. 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"
      }
    ]
  ]
}
  1. 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"
      }
    ]
  ]
}
  1. 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?
  1. 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?
  1. 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?
  1. 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?
  1. Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"

And:

>"What's the status of order DEFG222"
  1. Select the Start Page and click on the redirect.end intent. Create the following fulfillment: Thank you for contacting G-Records! Have a nice day!
  2. Select the Start Page and click on the redirect.home intent. 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.

  1. 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.

  1. Go to Manage > Intents and select the Default Negative Intent.
  2. Add the following training phrases that will trigger the No-match event.
  • I don't like Alice Googler
  • I am not a fan of G's N' Roses
  • I can't stand the music of the Google Dolls
  1. 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

  1. Click the Default Start Flow, select the sys.no-input-default event 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:

  1. 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.

  1. Click the Default Start Flow, select the sys.no-match-default event handler.

The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.

  1. 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.

  1. 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

  1. Go to the Order Process Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

Order Process Start

redirect.end

End Session

Order Process Start

redirect.home

End Flow

Order Process Start

confirm.proceed.order

New Page: Shipping Details

  1. 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.
  1. 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

firstname

@sys.person

Required

What's your first name?

I'm sorry I missed that. What's the first name?

I'm sorry, I didn't understand. What's the first name?

lastname

@sys.person

Required

What's your last name?

I'm sorry I missed that. What's the last name?

I'm sorry, I didn't understand. What's the last name?

address

@sys.address

Required

What's your address?

I missed that. What's the address?

I'm sorry, I didn't understand. What's the address?

zipcode

@sys.any

Required

What postal code or zipcode do you have?

I'm sorry, what's the zip or postal code? For example: 1234AB or 10001.

I'm sorry, I didn't understand. What's the zip or postal code? For example: 1234AB or 10001.

city

@sys.geo-city

Required

What's the name of the city?

I missed that, what's the name of the city?

I'm sorry, I didn't understand. What's the name of the city?

country

@sys.geo-country

Required

What's the name of the country?

I missed that, what's the name of the country?

I'm sorry, I didn't understand. What's the name of the country?

email

@sys.email

Required

Lastly, what's your email address?

I am sorry. What's the email address? For example name@domain.com.

I am sorry, I didn't understand. What's the email address? For example name@domain.com.

  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Transition to new Page: Payment Details
  1. 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
  1. 다음 인텐트 경로를 만듭니다.
  • 인텐트: 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
  1. 시작 페이지를 선택하고 redirect.end 인텐트를 클릭합니다. 다음 처리를 만듭니다. Thank you for contacting G-Records! Have a nice day!
  2. Start 페이지를 선택하고 redirect.home 인텐트를 클릭합니다. 다음 매개변수 사전 설정 restart = true을 만듭니다.

좋습니다. 이제 완전히 작동하는 실제 소매업체 챗봇이 완성되었습니다. 다음 실습에서는 가상 상담사의 실적을 테스트합니다.

9. 가상 에이전트 테스트

내장 시뮬레이터를 사용하여 가상 상담사의 대화를 테스트할 수 있습니다. 시뮬레이터에서 흐름을 테스트할 경우의 장점은 시뮬레이터가 흐름을 따라가면서 수집한 흐름, 페이지, 매개변수, (DTMF) 이벤트에 대한 개요를 볼 수 있다는 것입니다. 이렇게 하면 통합에서 직접 테스트하는 것보다 쉽게 테스트할 수 있습니다. 이러한 유형의 정보는 최종 사용자에게 표시되지 않기 때문입니다. 테스트 사례를 만들고 저장한 후 재사용할 수도 있습니다. 이는 시간이 지남에 따라 흐름을 유지하거나 수정할 때 변경사항으로 인해 이전 작업이 손상되지 않도록 하려는 경우에 매우 유용합니다.

또한 테스트를 Google Cloud Storage 또는 로컬에 저장하여 이전에 만든 테스트 사례를 내보내고 가져올 수도 있습니다. 테스트를 내보내면 blob 파일이 다운로드됩니다. 시뮬레이터 및 테스트 사례에 대해 자세히 알아보려면 시뮬레이터 / 테스트 사례 문서를 확인하세요.

테스트 사례를 만들기 전에 먼저 나머지 가상 상담사를 완성해 보겠습니다.

고객 지원 흐름 만들기

  1. 고객 지원 흐름으로 이동하여 다음 인텐트 전환을 만듭니다.

페이지 (진행 중)

경로 > 인텐트

경로 > 전환

고객 지원 시작

redirect.shipping.info

배송

고객 지원 시작

redirect.refund.info

환불

고객 지원 시작

redirect.swapping.info

스와핑

고객 지원 시작

redirect.home

종료 흐름

Customer Care 시작

redirect.end

세션 종료

고객 지원 절차

  1. 배송 페이지에 다음과 같은 항목 처리를 만듭니다.
  • Shipping physical merchandise items can take up to 2 weeks.
  • Is there anything else I can help you with?
  1. 환불 페이지에 다음과 같은 항목 처리를 만듭니다.
  • 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?
  1. 교환 페이지에 다음과 같은 항목 처리를 만듭니다.
  • 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?
  1. Start 페이지를 선택하고 redirect.end 인텐트를 클릭합니다. 다음 처리를 만듭니다. Thank you for contacting G-Records! Have a nice day!
  2. Start 페이지를 선택하고 redirect.home 인텐트를 클릭합니다. 다음 매개변수 사전 설정 restart = true을 만듭니다.

테스트 사례 만들기

  1. 화면 오른쪽에 있는 에이전트 테스트 버튼을 클릭합니다.

시뮬레이터를 처음 열면 에이전트 환경과 활성 흐름을 선택해야 합니다. 대부분의 경우 초안 환경과 기본 시작 흐름을 사용해야 합니다.

  1. 유형: Hi

고객 지원 흐름

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

고객 지원 절차

  1. 다음 세부정보를 제공합니다.
  • 테스트 사례 이름: Buy Google Dolls t-shirt size M
  • 태그: #catalog, #shirts, #t-shirt, #TheGoogleDolls
  1. 저장을 클릭합니다.

테스트 사례를 더 만들어 보겠습니다.

  1. 먼저 재설정 (스래시 빈) 아이콘을 클릭하여 현재 대화상자를 지웁니다.
  2. 다음 테스트 사례를 만듭니다.

앨리스 Google 직원 티셔츠를 구매하세요.

>"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
  • 설명: (아티스트 이름은 언급되지 않았지만 밴드 개요, 제품 개요, 셔츠, 셔츠 사이즈 페이지는 건너뛰는 것이 좋습니다.)

Guns 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
  • 설명: 대화상자의 다양한 부분에 관한 가격 정보를 테스트합니다.

사전 녹음된 테스트 사례 테스트

  1. 왼쪽의 Dialogflow 기본 메뉴에서 관리 > 테스트 사례를 선택합니다.
  2. 모든 테스트 사례를 선택하고 표 위의 실행 버튼을 누릅니다.

Dialogflow CX는 '최적의 테스트 사례'로 저장된 기록에 선택한 모든 테스트 사례를 실행합니다. 결과가 저장 방식과 동일하면 테스트가 통과됩니다. - 올바르게 구성되지 않은 페이지나 잘못된 페이지로 연결된 인텐트와 같이 흐름에 변경사항이 있으면 테스트가 실패합니다.

테스트 사례

  1. 시뮬레이터에서 다음 질문을 합니다. How long will shipping take?
  2. 결과를 기록하고 테스트 사례를 Shipping로 저장하고 태그를 #shipping로 지정합니다.
  3. 관리 > 테스트 사례 패널로 이동하여 그리드의 오른쪽 상단에 있는 실행 버튼을 눌러 Shipping 테스트 사례만 실행합니다.

이 테스트는 통과해야 합니다.

  1. 고객 지원 흐름으로 돌아가 시작 페이지를 선택하고 경로 헤더를 클릭합니다.

그러면 모든 경로를 보여주는 그리드가 포함된 화면이 표시됩니다.

  1. redirect.shipping.info route 삭제
  2. Manage(관리) > Test Cases(테스트 사례) 패널로 이동한 후 그리드 오른쪽 상단의 Run(실행) 버튼을 눌러 Shipping 테스트 사례만 실행합니다.

이 테스트는 실패해야 합니다.

  1. 실패한 테스트를 클릭하면 실패 세부정보를 확인할 수 있습니다.

이 경우 아래 오류 메시지와 함께 테스트가 실패했습니다.

Page: Page mismatch:
Expected: Shipping
Actual: Start Page

이는 페이지가 더 이상 흐름에 존재하지 않기 때문입니다. Shipping 페이지가 있을 것으로 예상했으나 Start 페이지에서 벗어나지 않았습니다. (또는 최종 사용자가 대체 메시지를 받게 됩니다.)

즉, 누락된 요청, 거짓음성 테스트 결과입니다. 테스트에 실패했습니다. 배송 페이지가 표시될 것으로 예상했지만 아무 일도 일어나지 않거나 대체 메시지가 표시되었습니다.

  1. 고객 지원 흐름으로 돌아가 redirect.shipping.info를 인텐트 경로로 시작 페이지에 추가합니다. 배송 페이지로 전환하고 저장을 클릭하는 것을 잊지 마세요.
  2. 시뮬레이터에서 다음 테스트 사례(I want to swap my item)를 기록하고 이 테스트 사례를 Swapping #swapping로 저장합니다.
  3. 관리 > 인텐트 > redirect.refund.info를 열고 다음 학습 문구를 추가합니다. I want to swap this item for a refund

이 학습 문구가 없으면 사용자가 환불을 위해 상품을 변경해 달라고 요청하면 redirect.swapping.info 인텐트가 실행되지만 Google에서는 상품 변경에 관한 정보를 제공하고 싶지 않고 환불에 관한 정보를 제공하고 싶습니다.

  1. 시뮬레이터에서 다음 골든 테스트 사례 I want to swap this item for a refund를 만들고 이 테스트 사례를 Swap for Refund #refund로 저장합니다.
  2. 관리 > 인텐트 > redirect.refund.info 인텐트로 돌아가 I want to swap this item for a refund 줄을 삭제합니다.
  3. 관리 > 테스트 사례로 돌아가 환불을 위한 교환 테스트 사례를 선택하고 실행합니다.

다음 오류 메시지와 함께 최근 테스트가 실패했습니다.

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에서 테스트 범위는 특정 테스트 모음이 실행될 때 가상 에이전트의 대화(페이지 및 인텐트)가 실행되는 정도를 설명하는 데 사용되는 측정항목입니다. 테스트 범위가 넓은(비율로 측정) 버추얼 어조는 테스트 중에 더 많은 대화가 실행되었음을 의미하므로 테스트 범위가 좁은 버추얼 어조에 비해 감지되지 않은 버그(예: 이해되지 않은 요청 누락)가 포함될 가능성이 낮습니다.

  1. 모든 테스트 사례의 테스트 범위 보고서를 보려면 범위를 클릭합니다.
  2. 전환 탭을 클릭합니다.

그러면 모든 페이지 전환의 테스트 범위가 표시됩니다.

전환 노출 범위

  1. 인텐트 탭을 클릭합니다.

그러면 모든 인텐트의 테스트 적용 범위가 표시됩니다.

인텐트 노출 범위

축하합니다. 이제 소매업체 봇의 완전한 실제 사례를 빌드하고 테스트했습니다. 다음 실습 페이지로 이동하여 결론을 읽고 유용한 참고 자료를 찾아보겠습니다.

10. 결론

Dialogflow CX는 채팅 또는 보이스봇과 같은 가상 에이전트를 만드는 대화형 AI 플랫폼(CAIP)입니다. Dialogflow CX를 사용하면 시각적 봇 빌더, 재사용 가능한 인텐트, 여러 번의 대화를 처리하는 기능을 통해 엔터프라이즈 수준의 대화형 환경을 신속하게 만들 수 있습니다.

이 Codelab에서는 실제 소매업체의 가상 상담사를 빌드하는 방법을 알아봤습니다. 다음 개념을 다뤘습니다.

  • 흐름
  • 매개변수, 맞춤 항목, 시스템 항목
  • Pages
  • 인텐트 경로 및 조건 경로와 같은 상태 핸들러
  • 정적 처리 메시지 및 조건부 응답
  • 대체 인텐트
  • 시뮬레이터, 테스트 사례, 적용 범위

최종 결과

참조

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