Dialogflow CX: Xây dựng nhân viên hỗ trợ ảo trong ngành bán lẻ

1. Trước khi bắt đầu

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tạo một chatbot bán lẻ bằng Dialogflow CX, một Nền tảng AI đàm thoại (CAIP) để tạo giao diện người dùng đàm thoại. Dialogflow CX có thể triển khai các tác nhân ảo, chẳng hạn như chatbot, bot thoại, cổng điện thoại và có thể hỗ trợ nhiều kênh bằng hơn 50 ngôn ngữ.

Lớp học lập trình này sẽ hướng dẫn bạn cách tạo một chatbot trang web cho một nhà bán lẻ. Doanh nghiệp giả định mà chúng ta đang xây dựng chatbot có tên là: G-Records. G-Records là một hãng thu âm nhạc rock, có trụ sở tại California. Hãng đĩa này có 4 ban nhạc rock đã ký hợp đồng: Alice Googler, G's N' Roses, The Goo FightersThe Google Dolls. G-Records đang bán hàng hoá của ban nhạc cho tất cả người hâm mộ nhạc rock.

Khi kết thúc lớp học lập trình này, bạn có thể sử dụng chatbot để đặt áo hoặc nhạc, hoặc bạn có thể hỏi về đơn đặt hàng của mình.

Kết quả cuối cùng

Kiến thức bạn sẽ học được

Bạn sẽ tìm hiểu được những lợi ích của Dialogflow CX so với Dialogflow ES thông qua việc thực hành! Trong đó có những khái niệm sau:

  • Cách tạo một trợ lý ảo Dialogflow CX trong Google Cloud
  • Tìm hiểu cách tạo luồng
  • Tìm hiểu cách tạo thực thể
  • Tìm hiểu cách tạo ý định
  • Tìm hiểu cách tạo các trang và chuyển đổi các trang bằng trình xử lý trạng thái
  • Tìm hiểu cách chuyển đổi trang bằng các tuyến đường theo ý định
  • Tìm hiểu cách chuyển đổi các trang có tham số và tuyến điều kiện
  • Tìm hiểu cách trả về các câu trả lời có điều kiện bằng các hàm hệ thống
  • Tìm hiểu cách tạo thông báo dự phòng
  • Tìm hiểu cách sử dụng trình mô phỏng
  • Tìm hiểu cách tạo trường hợp kiểm thử và phạm vi kiểm thử

Thiết kế cuối cùng của tác nhân Dialogflow CX sẽ có dạng như sau:

Kết quả cuối cùng

Bạn cần có

  • Bạn cần có một danh tính Google / địa chỉ Gmail để tạo một tác nhân Dialogflow CX.
  • Quyền truy cập vào Google Cloud.

2. Thiết lập môi trường

Tạo một dự án trên Google Cloud

Vì Dialogflow CX chạy trong Google Cloud, nên bạn phải tạo một dự án trên Google Cloud. Dự án sắp xếp tất cả tài nguyên của bạn trên Google Cloud. Dự án này bao gồm một nhóm cộng tác viên, các API (và tài nguyên khác) đã bật, công cụ giám sát, thông tin thanh toán, cũng như các chế độ kiểm soát quyền truy cập và xác thực.

Khi tạo một dự án mới, bạn sẽ cần nhập Tên dự án. Bạn sẽ phải liên kết tài khoản này với một Tài khoản thanh toán và Tổ chức hiện có.

Tài khoản thanh toán được dùng để xác định người thanh toán cho một nhóm tài nguyên nhất định và có thể được liên kết với một hoặc nhiều dự án. Mức sử dụng dự án được tính vào tài khoản thanh toán được liên kết. Trong hầu hết các trường hợp, bạn sẽ định cấu hình thông tin thanh toán khi tạo dự án. Để biết thêm thông tin, hãy xem Tài liệu về việc thanh toán. Đảm bảo rằng bạn đã bật tính năng thanh toán cho dự án trên Cloud.

Tạo dự án mới

Bật Dialogflow API

Để sử dụng Dialogflow, bạn phải bật API Dialogflow cho dự án của mình.

  1. Chọn dự án mà bạn muốn bật API, rồi nhấp vào Tiếp tục.
  2. Thu gọn trình đơn API và Dịch vụ rồi nhấp vào Tạo thông tin xác thực
  3. Nhấp vào Dữ liệu ứng dụng
  4. Hãy nói Không, tôi không dùng vì bạn hiện không dùng Kubernetes Engine, App Engine hoặc Cloud Functions.
  5. Nhấp vào Xong

Thiết lập thông tin đăng nhập

Tạo một tác nhân Dialogflow CX mới

Để tạo một đặc vụ Dialogflow CX mới, trước tiên, hãy mở Bảng điều khiển Dialogflow CX:

  1. Chọn dự án Google Cloud mà bạn đã tạo trước đó.
  2. Nhấp vào Tạo trợ lý ảo.

Hoàn tất biểu mẫu cho các chế độ cài đặt cơ bản của nhân viên hỗ trợ:

  • Bạn có thể chọn tên hiển thị bất kỳ.
  • Chọn vị trí: us-central1
  • Chọn múi giờ bạn muốn.
  • Chọn en – Tiếng Anh làm ngôn ngữ mặc định

Nhấp vào Tạo.

Tạo tác nhân

Được rồi, chúng ta đã sẵn sàng. Cuối cùng, chúng ta có thể bắt đầu lập mô hình cho trợ lý ảo của mình.

3. Luồng

Các hộp thoại phức tạp thường liên quan đến nhiều chủ đề trò chuyện. Trong trường hợp chatbot mà chúng tôi đang xây dựng cho G-Records để bán hàng hoá của ban nhạc, chúng tôi sẽ có các hộp thoại về danh mục sản phẩm, việc thanh toán, trạng thái đơn đặt hàng và các câu hỏi về dịch vụ khách hàng. Chúng ta có thể chia các chủ đề trò chuyện này thành các luồng.

Luồng bán lẻ

Luồng cho phép các nhóm làm việc trên từng đường dẫn trò chuyện. Bạn nên đơn giản hoá quy trình để quy trình này dễ dàng vừa với màn hình và có tính mô-đun hơn.

Luồng là một khái niệm mới đối với Dialogflow CX. Dialogflow Essentials có khái niệm về Mega Agent, tương tự như Flows. Tuy nhiên, bạn sẽ sử dụng Flows thường xuyên hơn nhiều.

Sau đó trong phòng thí nghiệm này, chúng ta sẽ sử dụng trình xử lý trạng thái có thể kết thúc một luồng (vì vậy, luồng này sẽ chuyển về luồng tiếp theo hoặc luồng trước đó) hoặc bạn có thể kết thúc toàn bộ phiên của trợ lý ảo.

Hãy bắt đầu tạo một số luồng.

Tạo Flow

  1. Trong Dialogflow CX, hãy nhấp vào biểu tượng + > Tạo luồng.
  2. Chỉ định tên: Catalog rồi nhấn Enter.

Tạo một quy trình

Bạn đã tạo quy trình công việc đầu tiên là Danh mục. Bây giờ, hãy tạo các luồng khác:

  • Order Process
  • My Order
  • Customer Care

Luồng

Trong phần sau của lớp học này, chúng ta sẽ thiết lập trình xử lý trạng thái trang. Điều này sẽ đảm bảo rằng hình ảnh trực quan cuối cùng sẽ có dạng như sau:

Luồng

Trình mô phỏng

Ở bên phải của Dialogflow CX Console, bạn có thể kiểm thử tác nhân ảo bằng trình mô phỏng tích hợp. Bạn có thể kiểm thử cuộc trò chuyện từ đầu hoặc từ một luồng cụ thể.

  1. Nhấp vào nút Test Agent (Kiểm thử đặc vụ) ở trên cùng bên phải màn hình.
  2. Trong trường trò chuyện với nhân viên hỗ trợ, hãy viết: Hello Nhân viên hỗ trợ ảo sẽ trả lời bằng một văn bản chào mừng mặc định: Xin chào! Tôi có thể hỗ trợ gì cho bạn?

Trình mô phỏng

Hãy sửa đổi văn bản chào mừng mặc định này.

Luồng bắt đầu mặc định

Hãy bắt đầu bằng cách tạo một Lộ trình theo ý định sẽ được kích hoạt sau khi bạn chào hỏi trợ lý ảo.

  1. Trong thanh bên Build > Flows (Tạo > Luồng) ở bên trái, hãy nhấp vào Default Start Flow (Luồng bắt đầu mặc định) rồi chọn nút cây Start (Bắt đầu).

Thao tác này sẽ mở trang Bắt đầu. Nó tự động chọn trang Bắt đầu trong phần Build > Pages (Xây dựng > Trang) của thanh bên.

  1. Trong phần Start > Routes (Bắt đầu > Tuyến đường), hãy nhấp vào Default Welcome Intent (Ý định chào mừng mặc định).

Ý định phân loại ý định của người dùng cuối cho một lượt trò chuyện. Trong Dialogflow CX, ý định có thể là một phần của trình xử lý trạng thái để định tuyến trang hoặc yêu cầu thực hiện đang hoạt động tiếp theo

  1. Xoá tất cả mục Nhân viên hỗ trợ nói và thêm văn bản mới này:

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?

Để đơn giản hoá cuộc trò chuyện, chúng ta cũng cần một số nút trả lời nhanh / đề xuất dạng chip.

  1. Nhấp vào Thêm lựa chọn trong hộp thoại > Tải trọng tuỳ chỉnh rồi sử dụng đoạn mã bên dưới.
  2. Sử dụng đoạn mã bên dưới làm Tải trọng tuỳ chỉnh rồi nhấn vào Lưu.

Để đọc thêm về tải trọng tuỳ chỉnh, hãy xem tài liệu.

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

Ý định chào mừng mặc định

  1. Hãy tiếp tục và kiểm thử ý định chào mừng trong trình mô phỏng.

Có lẽ bạn đang thắc mắc tại sao mình không thấy nội dung đa dạng. Điều này là do nội dung đa dạng thức (chẳng hạn như các đề xuất dạng chip) phụ thuộc vào một hoạt động tích hợp. Các bước sau đây yêu cầu bạn phải có tài khoản thanh toán, nhưng bạn có thể bỏ qua nếu không có.

  1. Trong thanh bên trái, hãy nhấp vào Quản lý > Tích hợp.
  2. Chọn Dialogflow Messenger rồi nhấp vào Kết nối.
  3. Trong cửa sổ bật lên, hãy nhấp vào Bật.

Bật tính năng tích hợp

Một cửa sổ bật lên khác sẽ xuất hiện, lần này là mã JavaScript tích hợp mà bạn có thể dán vào trang web của mình để tích hợp thành phần Dialogflow Messenger trên trang web. Vì chưa có trang web, nên chúng ta sẽ kiểm thử trực tiếp tác nhân ảo trong công cụ này.

Dialogflow Messenger Dùng thử ngay

  1. Nhấp vào đường liên kết Dùng thử ngay.
  2. Nhấp vào biểu tượng chatbot ở dưới cùng bên phải để mở cửa sổ trò chuyện. Viết Hello để bắt đầu cuộc trò chuyện.

Dialogflow Messenger Dùng thử ngay

Hiện tại, khi bạn nhấp vào các đề xuất dạng chip, nhân viên hỗ trợ ảo sẽ không hiểu ý bạn. Lý do là vì trợ lý ảo của chúng tôi chưa chuyển đổi giữa các trạng thái. Chúng ta có thể thực hiện việc này trong Dialogflow CX bằng Trang. Hãy tiếp tục với lớp học lập trình này. Trước tiên, chúng ta sẽ tạo một số Thực thểÝ định.

4. Các loại thực thể

Các loại thực thể được dùng để kiểm soát cách trích xuất dữ liệu từ thông tin đầu vào của người dùng cuối. Các loại thực thể Dialogflow CX rất giống với các loại thực thể Dialogflow ES. Dialogflow cung cấp các thực thể hệ thống được xác định trước có thể khớp với nhiều loại dữ liệu phổ biến. Ví dụ: có các thực thể hệ thống để so khớp ngày, giờ, màu sắc, địa chỉ email, v.v. Bạn cũng có thể tạo các thực thể tuỳ chỉnh của riêng mình để so khớp dữ liệu tuỳ chỉnh.

Hãy bắt đầu bằng cách chuẩn bị tất cả các thực thể tuỳ chỉnh trước khi chúng ta có thể thiết kế các trang trong một quy trình. Chúng ta sẽ tạo các thực thể sau:

Thực thể Dialogflow

Tạo thực thể

Hãy tạo một thực thể Nghệ sĩ.

  1. Nhấp vào Quản lý > Loại thực thể
  2. Nhấp vào + Tạo
  • Tên hiển thị: Artist
  • Các thực thể:
  • The Google Dolls (với từ đồng nghĩa: Google Dolls)
  • The Goo Fighters (với từ đồng nghĩa: Goo Fighters)
  • G's N' Roses (với từ đồng nghĩa: Gs and Roses)
  • Alice Googler
  • Nhấp vào Tuỳ chọn nâng cao rồi đánh dấu vào So khớp tương đối. (Nếu bạn viết sai tên ban nhạc, hệ thống vẫn có thể so khớp tên đó với thực thể phù hợp.)
  • Trong phần Tuỳ chọn nâng cao, hãy đánh dấu vào mục Redact in log (Chỉnh sửa trong nhật ký). (Nếu bạn viết sai tên ban nhạc, hệ thống sẽ sửa tên trong nhật ký.)
  1. Nhấp vào Lưu

Chúng ta cũng sẽ cần một thực thể cho mặt hàng Merch:

  1. Nhấp vào Quản lý > Loại thực thể
  2. Nhấp vào + Tạo
  • Tên hiển thị: Merch
  • Các thực thể:
  • T-shirt
  • Longsleeve (với từ đồng nghĩa: Longsleeve shirt)
  • Tour Movie
  • Digital Album (với từ đồng nghĩa: MP3 Album, MP3)
  • CD (với các từ đồng nghĩa Disc, Physical CD)
  1. Nhấp vào Lưu

Chúng ta cũng cần một thực thể cho Album:

  1. Nhấp vào Quản lý > Loại thực thể
  2. Nhấp vào + Tạo
  • Tên hiển thị: Album
  • Các thực thể:
  • Live
  • Greatest Hits (với từ đồng nghĩa: Hits)
  1. Nhấp vào Lưu

Chúng ta cũng cần một thực thể cho kích thước quần áo:

  1. Nhấp vào Quản lý > Loại thực thể
  2. Nhấp vào + Tạo
  • Tên hiển thị: ShirtSize
  • Các thực thể:
  • XS (với từ đồng nghĩa: Extra Small)
  • S (với từ đồng nghĩa: Small)
  • M (với từ đồng nghĩa: Medium)
  • L (với từ đồng nghĩa: Large)
  • XL (với từ đồng nghĩa: Extra Large)
  • 2XL (với từ đồng nghĩa: Extra Extra Large)
  • 3XL
  1. Nhấp vào Lưu

Và một thực thể cho số đơn đặt hàng, thường là 4 ký tự chữ và số và 3 chữ số. (chẳng hạn như ABCD123)

  1. Nhấp vào Quản lý > Loại thực thể
  2. Nhấp vào + Tạo
  • Tên hiển thị: OrderNumber
  • Thực thể biểu thức chính quy
  • Thực thể: [A-Z]{4}[0-9]{3}
  1. Nhấp vào Lưu

Cấu hình thực thể của bạn sẽ có dạng như sau:

@Nghệ sĩ: @Artist Entity Type

@Merch: @Merch Entity Type

@Album: @Album Entity Type

@ShirtSize: Loại thực thể @ShirtSize

@OrderNumber: Loại thực thể @OrderNumber

Sau khi chuẩn bị các thực thể tuỳ chỉnh, chúng ta có thể chuẩn bị các ý định. Hãy tiếp tục thực hiện bài thực hành.

5. Ý định

Ý định phân loại ý định của người dùng cuối cho một lượt trò chuyện. Chúng đã được đơn giản hoá đáng kể trong Dialogflow CX, không còn là một khối xây dựng để kiểm soát cuộc trò chuyện nữa. Dialogflow CX chỉ sử dụng ý định để so khớp những gì người dùng đang nói. Trong Dialogflow ES, bạn phải liên kết mọi thứ với một ý định (tham số, sự kiện, yêu cầu thực hiện, v.v.). Các ý định trong Dialogflow CX chỉ chứa các cụm từ huấn luyện và do đó có thể dùng lại. Gemini không còn kiểm soát cuộc trò chuyện nữa. Vì vậy, quy trình tạo ý định sẽ diễn ra đơn giản:

Các cụm từ huấn luyện trong ý định có thể sử dụng Thực thể để trích xuất dữ liệu đầu vào "biến". Đây là lý do bạn nên tạo các loại thực thể trước. Đây cũng là việc chúng ta đã làm ở trang trước của các bước trong phòng thí nghiệm.

Tạo ý định

Hãy bắt đầu bằng cách chuẩn bị tất cả các ý định trước khi chúng ta có thể thiết kế các trang trong một quy trình.

  1. Nhấp vào Quản lý > Ý định.
  2. Nhấp vào + Tạo

Hãy sử dụng thông tin sau:

  • Tên hiển thị redirect.artists.overview
  • Nội dung mô tả Artists overview: The bands supported by the label

Ý định mới

Di chuyển xuống rồi tạo cụm từ huấn luyện sau đây:

  • 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

Cụm từ huấn luyện

  1. Nhấp vào Lưu.
  1. Bây giờ, hãy tiếp tục và tạo tất cả các ý định khác. Hãy tự mình nghĩ ra nhiều cụm từ huấn luyện hơn. Tốt nhất là bạn nên có ít nhất 10 cụm từ huấn luyện cho mỗi ý định để bao gồm nhiều cách mà người dùng có thể kích hoạt ý định đó. Đối với mục đích của lớp học lập trình này, bạn có ít hơn cũng không sao.

Một số điều cần lưu ý:

  • Xin lưu ý rằng khi bạn nhập cụm từ huấn luyện, Dialogflow CX sẽ tự động chú thích các thực thể của bạn. Nếu không, bạn có thể phải cập nhật thực thể (bằng cách thêm một từ đồng nghĩa) hoặc tự chú thích cụm từ huấn luyện theo cách thủ công.
  • Cụm từ huấn luyện ngắn hơn: Hệ thống NLU của Dialogflow cũng có thể hoạt động với các cụm từ huấn luyện ngắn hơn và chúng tôi đã cung cấp một số ví dụ tại đây.
  • Huấn luyện quá mức: Có quá nhiều cụm từ huấn luyện cho một ý định có thể gây ra tình trạng huấn luyện quá mức và kết quả không mong muốn. Bạn nên sử dụng phương pháp kiểm thử lặp đi lặp lại và gia tăng, đồng thời thêm các cụm từ huấn luyện trong trường hợp không có ý định nào khớp.

Tên hiển thị

Cụm từ huấn luyện

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" (Lưu ý: Alice Googler phải được nhận dạng là một thực thể @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"

Giờ đây, khi các phần tử có thể dùng lại (luồng, thực thể và ý định) đã được chuẩn bị, chúng ta có thể kết hợp các phần tử này bằng cách tạo Trang và Trình xử lý trạng thái.

6. Trang và trình xử lý trạng thái

Một cuộc trò chuyện trên Dialogflow CX (một phiên) có thể được mô tả và hình dung dưới dạng một máy trạng thái hữu hạn. Hãy lấy ví dụ về một máy bán hàng tự động, máy này có thể được mô hình hoá dưới dạng một máy trạng thái hữu hạn. Nó có các trạng thái sau: Đang chờ xu, Chọn kẹo, Tặng kẹo và được cung cấp một bộ dữ liệu đầu vào, nó sẽ chuyển đổi giữa các trạng thái đó. Ví dụ: việc bỏ xu vào máy bán hàng tự động sẽ chuyển máy từ trạng thái Đang chờ xu sang trạng thái Chọn kẹo. Trang là cách chúng ta có thể mô hình hoá các trạng thái này cho một nhân viên hỗ trợ ảo Dialogflow CX.

Khi người dùng cuối tương tác với Dialogflow CX trong một cuộc trò chuyện, cuộc trò chuyện sẽ chuyển từ trang này sang trang khác. Vì vậy, tại một thời điểm bất kỳ, chỉ có một trang là trang hiện tại, trang hiện tại được coi là đang hoạt động và luồng được liên kết với trang đó cũng được coi là đang hoạt động.

Đối với mỗi Flow, bạn xác định nhiều trang, trong đó các trang kết hợp có thể xử lý một cuộc trò chuyện hoàn chỉnh về(các) chủ đề mà Flow được thiết kế. Mỗi quy trình đều có một trang bắt đầu đặc biệt. Khi một luồng ban đầu trở nên hoạt động, trang bắt đầu sẽ trở thành trang hiện tại. Đối với mỗi lượt trò chuyện, trang hiện tại sẽ giữ nguyên hoặc chuyển sang một trang khác. Khái niệm này sẽ cho phép bạn tạo các tác nhân lớn hơn với nhiều trang và nhiều lượt trò chuyện.

Các trang chứa phương thức thực hiện (hộp thoại nhập tĩnh và/hoặc webhook), tham sốtrình xử lý trạng thái. Việc kiểm soát cuộc trò chuyện diễn ra thông qua các trình xử lý trạng thái, cho phép bạn tạo nhiều tuyến chuyển đổi để chuyển sang một trang Dialogflow CX khác, bao gồm cả việc đặt điều kiện (để phân nhánh cuộc trò chuyện).

Trạng thái của cuộc trò chuyện được kiểm soát bằng cách xử lý các quá trình chuyển đổi giữa các trang bằng 3 loại tuyến đường:

  • Lộ trình theo ý định: Khi một ý định cần được so khớp (ví dụ: thay đổi trang dựa trên nội dung mà người dùng cuối nói). (Đường màu xanh dương trong sơ đồ trực quan.)
  • Lộ trình điều kiện: Khi một điều kiện cần được kiểm tra (ví dụ: thay đổi trang dựa trên một số thông số nhất định được lưu trữ trong phiên) (Đường màu cam trong sơ đồ trực quan).
  • Trình xử lý sự kiện: Khi một sự kiện dự phòng nhất định cần được xử lý (ví dụ: xử lý không có dữ liệu đầu vào, không có kết quả trùng khớp, để phân biệt người dùng cuối với một ý định hoặc tuyến điều kiện) (Đường màu xanh lục trong sơ đồ trực quan).

Các câu thoại trong cuộc trò chuyện (tức là nội dung hoặc phản hồi cho người dùng) được xác định bằng việc thực hiện yêu cầu, có thể là tĩnh hoặc động:

  • Static fulfillment (Thực hiện tĩnh): Khi bạn cung cấp một phản hồi thực hiện tĩnh
  • Thực hiện linh hoạt: Khi webhook thực hiện được gọi để đưa ra các phản hồi linh hoạt

Đối với bot bán lẻ, chúng ta sẽ tạo một số tuyến đường theo ý định và cung cấp một số phản hồi thực hiện mục đích nhập tĩnh. Các phản hồi này sẽ được trình bày cho người dùng ngay khi một trang được kích hoạt. Sau đó, chúng ta sẽ tạo các tham số bằng các tuyến điều kiện để thu thập thông tin bạn cần để đặt hàng hoá.

Đường dẫn theo ý định trên trang

Tạo các trang trong Luồng bắt đầu mặc định

Sau đây là biểu đồ quy trình của quy trình bắt đầu mặc định:

Trang được kết nối với danh mục

Hãy cùng nhau nhấp vào đây:

  1. Nhấp vào Build > Default Start Flow (Tạo > Luồng bắt đầu mặc định)
  2. Nhấp vào Trang bắt đầu
  3. Nhấp vào biểu tượng + bên cạnh Tuyến đường
  4. Thêm redirect.artists.overview
  5. Di chuyển xuống phần Chuyển đổi và chuyển đổi sang quy trình Danh mục.
  6. Nhấp vào Lưu
  7. Lặp lại các bước trên cho redirect.product.overview và 11 hàng còn lại trong bảng này:

Trang (Trong luồng)

Tuyến đường > Ý định

Routes > Transition To

Bắt đầu

Default Welcome Intent

-

Bắt đầu

redirect.artists.overview

Flow: Danh mục

Bắt đầu

redirect.product.overview

Flow: Danh mục

Bắt đầu

redirect.shirts

Flow: Danh mục

Bắt đầu

redirect.music

Flow: Danh mục

Bắt đầu

redirect.product

Flow: Danh mục

Bắt đầu

redirect.product.of.artist

Flow: Danh mục

Bắt đầu

redirect.refund.info

Luồng: Chăm sóc khách hàng

Bắt đầu

redirect.shipping.info

Luồng: Chăm sóc khách hàng

Bắt đầu

redirect.swapping.info

Luồng: Chăm sóc khách hàng

Bắt đầu

redirect.my.order

Luồng: Đơn đặt hàng của tôi

Bắt đầu

redirect.my.order.canceled

Luồng: Đơn đặt hàng của tôi

Bắt đầu

redirect.my.order.status

Luồng: Đơn đặt hàng của tôi

Bắt đầu

redirect.end

Trang: Kết thúc phiên

Các tuyến đường mặc định của trang bắt đầu

Luồng bắt đầu mặc định sẽ hoạt động như một trình đơn lựa chọn khi gọi đến trung tâm cuộc gọi. Tuy nhiên, trong nhân viên hỗ trợ ảo này, nhân viên hỗ trợ ảo được huấn luyện bằng Ngôn ngữ tự nhiên, với các cụm từ huấn luyện trong ý định. Do đó, hoạt động tương tác được điều khiển bằng cuộc trò chuyện chứ không phải bằng các lựa chọn DTMF, đồng thời tự nhiên và giống con người hơn.

Các tuyến đường mặc định của trang bắt đầu

Tạo các trang trong Luồng danh mục

Sau đây là bản chép lời cuộc trò chuyện thuộc quy trình Danh mục:

> "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?"

Hộp thoại sẽ khác nhau khi bạn chọn Nhạc hoặc Phim du lịch: Đối với Nhạc, hộp thoại sẽ có dạng như sau:

 > "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?"

Đối với Tour Movie, hộp thoại sẽ có dạng như sau:

 > "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?

Dưới đây là sơ đồ quy trình của tất cả các trang trong quy trình Danh mục:

Trang được kết nối với danh mục

Hãy lưu ý độ phức tạp của quy trình này:

  • Tôi có thể bỏ qua Câu hỏi về nghệ sĩ và hỏi ngay "Những mặt hàng nào đang được bán".
  • Trong quy trình bắt đầu mặc định, tôi có thể hỏi: "Tôi muốn mua áo thun The Google Dolls" hoặc "Tôi muốn mua thứ gì đó". Điều này có nghĩa là trợ lý ảo sẽ đặt các câu hỏi tiếp theo để điền vào các vị trí cho những tham số bắt buộc này. Thao tác này sẽ chuyển thẳng đến Trang sản phẩm.
  • Hộp thoại Giá đến từ trang Giá sẽ được dùng lại.
  • Mặc dù hộp thoại cho Tour Movie có vẻ là hộp thoại đơn giản nhất, nhưng chúng ta sẽ thực hiện một điều đặc biệt với hộp thoại này. Chúng tôi sẽ sử dụng lại phần này của hộp thoại, vì vậy, người dùng cuối cũng có thể nhập trực tiếp phần này cho một trong các sản phẩm khác, nếu họ chuyên về tất cả thông tin cùng một lúc:
 > "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"

Trước tiên, hãy bắt đầu bằng việc kết nối các trang.

  1. Nhấp vào Build > Catalog (Tạo > Danh mục)
  2. Nhấp vào Trang bắt đầu
  3. Nhấp vào biểu tượng + bên cạnh Tuyến đường
  4. Thêm redirect.artists.overview
  5. Di chuyển xuống phần Chuyển đổi, chọn Trang rồi chọn: + Trang mới
  6. Sử dụng tên trang: Artist Overview rồi nhấn vào Lưu

Bây giờ, hãy hoàn tất các bước còn lại trong quy trình:

  1. Bạn có thể lặp lại các bước trước đó với các trang, ý định và yêu cầu thực hiện sau đây. Kiểm soát bảng này. Trang là Trang mà bạn sẽ chọn trong luồng, Tuyến đường > Chuyển sang là luồng hoặc trang mới mà bạn sẽ tạo và chuyển sang.

Trang (Trong luồng)

Tuyến đường > Ý định

Routes > Transition To

Catalog Start

redirect.artists.overview

Tổng quan về nghệ sĩ

Catalog Start

redirect.product

Sản phẩm

Catalog Start

redirect.product.overview

Tổng quan về sản phẩm

Catalog Start

redirect.product.of.artist

Tổng quan về sản phẩm

Catalog Start

redirect.shirts

Áo

Catalog Start

redirect.music

Âm nhạc

Catalog Start

redirect.end

Kết thúc phiên

Catalog Start

redirect.home

Kết thúc Flow

Tổng quan về nghệ sĩ

redirect.product.of.artist

Tổng quan về sản phẩm

Giờ hãy tiếp tục và thêm các yêu cầu thực hiện tĩnh khác.

  1. Trong quy trình Danh mục, hãy nhấp vào trang Tổng quan về nghệ sĩ.
  2. Nhấp vào Chỉnh sửa thông tin thực hiện trong phần Thông tin thực hiện của mục nhập.
  3. Sử dụng các yêu cầu thực hiện tĩnh sau đây (Agent says):
  • The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
  1. Nhấp vào Lưu
  2. Trong quy trình Danh mục, hãy nhấp vào trang Tổng quan về sản phẩm.
  3. Nhấp vào Chỉnh sửa thông tin thực hiện trong phần Thông tin thực hiện của mục nhập.
  4. Sử dụng thông tin hoàn tất tĩnh sau đây (Agent says):
  • We sell shirts, music or the tour movie.
  1. Nhấp vào Lưu.

Thông số trang

Tham số được dùng để ghi lại và tham chiếu các giá trị do người dùng cuối cung cấp trong một phiên. Mỗi tham số có một tên và một loại thực thể. @Artist@Merch là các thông số tối thiểu mà chúng tôi cần thu thập để thực hiện đơn đặt hàng hàng hoá. Đối với áo thun hoặc áo dài tay, bạn cũng muốn thu thập @ShirtSize và trong trường hợp muốn đặt hàng nhạc, bạn cũng cần có tên @Carrier@Album.

Bạn cần đánh dấu các tham số đó là bắt buộc. Và khi cần, bạn nên cung cấp các câu lệnh tuỳ chỉnh để ghi nhớ người dùng cuối, nhằm cung cấp câu trả lời chính xác để có thể thu thập các tham số này. Dialogflow CX có một số cơ chế có thể giúp bạn thực hiện việc này.

Ví dụ: bạn có thể cung cấp thông báo thực hiện tĩnh tuỳ chỉnh trong mục Tham số. Nếu tham số là bắt buộc, thì các phương thức thực hiện tham số này sẽ xuất hiện. Những tin nhắn phản hồi này sẽ được thêm vào hàng đợi phản hồi. Trong lượt của một tác nhân, bạn có thể (và đôi khi nên) gọi nhiều yêu cầu thực hiện, mỗi yêu cầu có thể tạo ra một thông báo phản hồi. Dialogflow duy trì các phản hồi này trong một hàng đợi phản hồi. Để đọc thêm về vòng đời của trang và thứ tự các phương thức thực hiện này sẽ được thêm vào hàng đợi phản hồi, hãy đọc Tài liệu về trang Dialogflow CX.

Tạo các tham số trên trang Tổng quan về nghệ sĩ

Hãy xác định một số thông số trang:

  1. Trong quy trình Danh mục, hãy nhấp vào trang Tổng quan về nghệ sĩ.
  2. Nhấp vào dấu + trong khối Parameters (Tham số). Thêm tham số artist:
  • Tên hiển thị: artist
  • Loại pháp nhân: @Artist
  • Bắt buộc: Đánh dấu
  • Loại bỏ trong nhật ký: Đánh dấu
  1. Bây giờ, chúng ta sẽ thêm một số thông báo thực hiện tham số tuỳ chỉnh. Nếu tham số nghệ sĩ chưa được thu thập bởi tác nhân ảo, thì người dùng cuối sẽ nhận được phản hồi này của tác nhân được thêm vào hàng đợi phản hồi:

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

  1. Thêm một lựa chọn thứ hai trong hộp thoại cung cấp các khối đề xuất phong phú. Nhấp vào Thêm lựa chọn trong hộp thoại rồi sử dụng mã này (ở định dạng JSON):
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

Bạn có thể xử lý các câu lệnh dự phòng khác nhau dựa trên số lần người dùng cuối đã cố gắng trả lời những câu lệnh này. Bạn sẽ thực hiện việc này bằng trình xử lý sự kiện tham số. Có nhiều trình xử lý sự kiện tích hợp để bạn lựa chọn, chẳng hạn như Thông số không hợp lệ, Câu nói quá dài, Không có dữ liệu đầu vào, Không có dữ liệu đầu vào trong lần thử đầu tiên, Lần thử thứ hai hoặc Không khớp. Sự khác biệt giữa không có dữ liệu đầu vào và không có kết quả trùng khớp là khi không có dữ liệu đầu vào, người dùng chưa bao giờ đưa ra câu trả lời, còn khi không có kết quả trùng khớp, người dùng đã đưa ra câu trả lời nhưng Dialogflow CX không thể so khớp ý định này với một trang.

  1. Di chuyển xuống phần Trình xử lý sự kiện nhắc lại.
  2. Nhấp vào Thêm trình xử lý sự kiện rồi chọn sự kiện: No-match default
  3. Sử dụng text fulfillment tĩnh của sự kiện sau:

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. Nhấp vào Lưu
  2. Nhấp vào Thêm trình xử lý sự kiện và chọn sự kiện: No-input default
  3. Sử dụng text fulfillment tĩnh của sự kiện sau:

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. Nhấp vào Lưu

Tuyến điều kiện trang

Các tham số rất mạnh mẽ khi kết hợp với Page Conditional Routes (Tuyến đường có điều kiện của trang). Khi một điều kiện được đánh giá là đúng, tuyến đường trang được liên kết sẽ được gọi. Một điều kiện có thể là Một thông số bằng một giá trị cụ thể, hoặc Một thông số không thể bị thiếu, hoặc Một biểu mẫu đã được hoàn thành và nhiều điều kiện khác. Bạn có thể tìm thêm thông tin về Tham sốĐiều kiện trong Tài liệu Dialogflow CX.

Đối với trợ lý ảo bán lẻ, chúng ta cần thu thập một chuỗi các tham số, do đó, chúng ta cần tạo một điều kiện để kiểm tra xem "biểu mẫu" đã được hoàn tất hay chưa. Biểu mẫu là một danh sách các thông số cần được thu thập từ người dùng cuối cho trang. Trợ lý ảo tương tác với người dùng cuối trong nhiều lượt trò chuyện cho đến khi thu thập được tất cả các tham số biểu mẫu bắt buộc (còn gọi là tham số trang).

Dialogflow CX tự động đặt các giá trị tham số do người dùng cuối cung cấp trong quá trình điền biểu mẫu. Để kiểm tra xem biểu mẫu hoàn chỉnh của trang hiện tại đã được điền hay chưa, hãy sử dụng điều kiện sau: $page.params.status = "FINAL"

Tạo các tuyến đường có điều kiện trên trang Tổng quan về nghệ sĩ

Hãy tạo một tuyến đường có điều kiện, tuyến đường này sẽ chuyển sang trang tiếp theo sau khi nghệ sĩ được xác định:

  1. Trong trang Tổng quan về nghệ sĩ, hãy nhấp vào biểu tượng + trong phần Lộ trình.
  2. Di chuyển xuống mục Tình trạng.
  3. Chọn Ít nhất một (HOẶC)
  4. Tiếp theo, chúng ta sẽ viết một biểu thức
  • Tham số: $page.params.status
  • Nhà mạng: =
  • Giá trị: "FINAL"
  1. Bây giờ, chúng ta sẽ tạo một thông báo thực hiện tĩnh cụ thể trên tuyến đường, xác nhận lựa chọn của người dùng cuối. Di chuyển xuống khối Fulfillment (Thực hiện) và viết các thông báo thực hiện sau:
  • $session.params.artist, great choice! Rock on!
  • You want to rock with $session.params.artist merchandise. Awesome!
  1. Khi điều kiện này đúng, bạn nên chuyển sang trang Tổng quan về sản phẩm. Di chuyển xuống phần Chuyển đổi rồi sử dụng trang sau: Product Overview
  2. Nhấp vào Lưu.

Thông số

Tạo các tuyến đường trên trang Tổng quan về sản phẩm

Giờ đây, khi đã biết cách tạo các tham số và tuyến đường có điều kiện, hãy tạo thêm các tham số cho những trang sau:

Tổng quan về sản phẩm

  1. Tạo tham số artist trong trang Tổng quan về sản phẩm:
  • Tên hiển thị: artist
  • Loại pháp nhân: @Artist
  • Bắt buộc: Đánh dấu
  • Loại bỏ trong nhật ký: Đánh dấu
  • Hoàn thành lời nhắc ban đầu: 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"
      }
    ]
  ]
}
  • Trình xử lý sự kiện > 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?
  • Tải trọng tuỳ chỉnh:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • Trình xử lý sự kiện > 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?
  • Tải trọng tuỳ chỉnh:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. Tạo tham số merch:
  • Tên hiển thị: merch
  • Loại pháp nhân: @Merch
  • Bắt buộc: Đánh dấu
  • Loại bỏ trong nhật ký: Đánh dấu
  • Thực hiện đơn hàng: Which merchandise item do you want?
  • Nhấp vào: Thêm lựa chọn trong hộp thoại > Tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • Trình xử lý sự kiện > No-match default
  • Hoàn tất trình xử lý sự kiện: We sell Shirts, Music or the Tour movie. Which of these items do you want?
  • Tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • Trình xử lý sự kiện > No-input default
  • Hoàn tất trình xử lý sự kiện: 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?
  • Tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  1. Tạo một tuyến đường sẽ chuyển sang trang Product (Sản phẩm) khi artist được cung cấp và mục merch được cung cấp.
  • Điều kiện:
  • Khớp với mọi quy tắc (VÀ)
  • Biểu thức: $session.params.artist != null
  • Biểu thức: $session.params.merch != null
  • Thực hiện đơn hàng: Alright! $session.params.merch of $session.params.artist, let's go!
  • Chuyển đổi: Trang: Product
  1. Tạo một tuyến đường khi người dùng nói "Áo sơ mi"
  • Ý định: redirect.shirts
  • Chuyển đổi: Trang: Shirts
  1. Tạo một tuyến đường khi người dùng nói "Nhạc"
  • Ý định: redirect.music
  • Chuyển đổi: Trang: Music
  1. Tạo một tuyến đường khi người dùng yêu cầu thông tin về giá
  • Ý định: redirect.price
  • Chuyển đổi: Tạo trang mới: Price

Khi đã thiết lập cấu hình ở trên, bạn sẽ thấy một hình ảnh trực quan tương tự như hình bên dưới. Xin lưu ý rằng các tuyến đường theo ý định có màu xanh dương trong sơ đồ và các tuyến đường theo điều kiện có màu cam. Mặc dù không được mô tả, nhưng trình xử lý sự kiện có màu xanh lục và khi nhiều loại tuyến đường chuyển đổi sang một trang, đường kẻ sẽ có màu xám.

Điểm bắt đầu của quy trình Danh mục

Đến đây, bạn đã học được cách tạo Flow, Entity, IntentPage bằng Trình xử lý trạng thái như: Lộ trình theo ý địnhLộ trình có điều kiện dựa trên Tham số. Trong phần sau của lớp học lập trình này, chúng ta sẽ sử dụng tính năng phân nhánh có điều kiện trong quá trình thực hiện để cung cấp các đoạn hội thoại khác nhau dựa trên thông tin đầu vào.

Bạn có thể sử dụng các cấu hình sau để hoàn tất tác nhân ảo của chúng tôi.

Trang áo sơ mi:

  1. Tạo các cấu hình sau trong Trang Áo sơ mi:
  • Hoàn tất mục: Do you want a longsleeve or a t-shirt?
  • Tải trọng tuỳ chỉnh khi thực hiện mục nhập:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Tạo một Intent Route: redirect.price có hiệu ứng chuyển đổi sang Trang Price
  2. Tạo tham số sau:
  • Thông số: merch – Loại pháp nhân: @Merch, RequiredRedact in log
  • Tham số > Trình xử lý sự kiện > No-match default
  • Tham số > Hoàn thành trình xử lý sự kiện: You can choose between a t-shirt or a longsleeve. Which of these do you want?
  • Tham số > Trình xử lý sự kiện Hoàn thành tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  • Tham số > Trình xử lý sự kiện > No-input default
  • Tham số > Hoàn thành trình xử lý sự kiện: I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want?
  • Tham số > Trình xử lý sự kiện Hoàn thành tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  1. Nhấp vào mục thực hiện mục nhập và di chuyển xuống Giá trị đặt sẵn của tham số, mỗi khi trang Áo sơ mi hoạt động, tham số danh mục sẽ được đặt thành shirts:

Tham số

Giá trị

category

shirts

  1. Thêm tuyến có điều kiện:
  • Khớp ít nhất một quy tắc (OR)
  • Biểu thức: $session.params.merch = "T-shirt"
  • Biểu thức: $session.params.merch = "Longsleeve"
  • Chuyển sang trang mới: Shirt Size

Trang giá:

Vì thông báo về giá sẽ tuỳ thuộc vào mặt hàng hoặc danh mục hàng hoá đã chọn (nhạc hoặc áo sơ mi), nên chúng ta sẽ sửa phần này sau trong phòng thí nghiệm. Hiện tại, bạn chỉ cần nhập một trình giữ chỗ là đủ.

  1. Tạo các cấu hình sau trong Trang Giá:
  • Hoàn tất mục: PRICE TODO

Vì bạn có thể yêu cầu cung cấp giá ở nhiều nơi trong cuộc trò chuyện, nên trợ lý luôn phải đưa ra câu trả lời và chuyển bạn trở lại phần trước của cuộc trò chuyện để tiếp tục đặt hàng. Có 5 vị trí trong cây thoại mà bạn có thể rẽ nhánh để lấy thông tin về giá. (Shirt, Shirt Size, Music, Carrier và cũng trực tiếp thông qua Intent Route), do đó, chúng ta sẽ cần một số tuyến đường có điều kiện để quay lại:

  1. Thêm một tuyến có điều kiện:
  • Khớp với mọi quy tắc (VÀ)
  • Biểu thức: $session.params.category = "shirts"
  • Biểu thức: $session.params.merch = "null"
  • Chuyển sang trang mới: Shirts
  1. Thêm tuyến có điều kiện:
  • Khớp với mọi quy tắc (VÀ)
  • Biểu thức: $session.params.category = "shirts"
  • Biểu thức: $session.params.size = "null"
  • Chuyển sang trang mới: Shirt Size
  1. Thêm tuyến có điều kiện:
  • Khớp với Mọi quy tắc (VÀ)
  • Biểu thức: $session.params.category = "music"
  • Biểu thức: $session.params.album = "null"
  • Chuyển sang trang mới: Music
  1. Thêm tuyến có điều kiện:
  • Khớp với Mọi quy tắc (VÀ)
  • Biểu thức: $session.params.category = "music"
  • Biểu thức: $session.params.merch = "null"
  • Chuyển sang trang mới: Carrier
  1. Thêm tuyến có điều kiện:
  • Khớp với mọi quy tắc (VÀ)
  • Biểu thức: $session.params.category = "null"
  • Chuyển sang trang mới: Product Overview

Trang kích cỡ áo sơ mi:

  1. Tạo các cấu hình sau trong Trang Kích cỡ áo:
  • Hoàn tất mục: What shirt size do you want?
  • Tải trọng tuỳ chỉnh khi thực hiện mục nhập:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. Tạo một Lộ trình theo ý định: redirect.price có hiệu ứng chuyển đổi sang Trang Price.
  2. Tạo tham số sau:
  • Tham số: shirtsize – Loại thực thể: @ShirtSizeRequired, Redact In Log
  • Tham số > Trình xử lý sự kiện > No-match default
  • Tham số > Hoàn thành trình xử lý sự kiện: Please tell me the shirt size, such as XL.
  • Tham số > Trình xử lý sự kiện Hoàn thành tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  • Tham số > Trình xử lý sự kiện > No-input default
  • Tham số > Hoàn thành trình xử lý sự kiện: I couldn't understand the shirt size. What size do you want?
  • Tham số > Trình xử lý sự kiện Hoàn thành tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. Thêm tuyến có điều kiện:
  • Khớp với Mọi quy tắc (VÀ)
  • Biểu thức: $page.params.shirtsize != "null"
  • Chuyển đổi sang Trang: Product

Trang âm nhạc:

  1. Tạo các cấu hình sau trong Trang Nhạc:
  • Hoàn tất mục: We have a Greatest Hits Album or the Live Album. Which one do you want?
  • Tải trọng tuỳ chỉnh khi thực hiện mục nhập:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Tạo một Intent Route (Tuyến đường theo ý định): redirect.price với một hiệu ứng chuyển đổi sang Trang: Price.
  2. Tạo tham số sau:
  • Tham số: album – Loại thực thể: @AlbumRequired, Redact In Log
  • Tham số > Trình xử lý sự kiện > No-match default
  • Tham số > Hoàn thành trình xử lý sự kiện: You can choose between Greatest Hits and Live Album. Which of these do you want?
  • Tham số > Trình xử lý sự kiện Hoàn thành tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  • Tham số > Trình xử lý sự kiện > No-input default
  • Tham số > Hoàn thành trình xử lý sự kiện: I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want?
  • Tham số > Trình xử lý sự kiện Hoàn thành tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  1. Nhấp vào mục thực hiện yêu cầu và di chuyển xuống phần Giá trị đặt trước của tham số. Mỗi khi trang Nhạc hoạt động, tham số danh mục sẽ được đặt thành music:

Tham số

Giá trị

category

music

  1. Thêm tuyến có điều kiện:
  • Khớp với mọi quy tắc (VÀ)
  • Biểu thức: $page.params.album != "null"
  • Chuyển đổi sang Trang: Carrier

Trang của hãng vận chuyển:

  1. Tạo các cấu hình sau trong Trang Hãng vận chuyển:
  • Hoàn tất mục: Do you want this album on CD or MP3?
  • Tải trọng tuỳ chỉnh khi thực hiện mục nhập:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Tạo một Lộ trình theo ý định: redirect.price chuyển sang Trang Price.
  2. Tạo tham số sau:
  • Tham số: merch – Loại thực thể: @MerchRequired, Redact In Log
  • Tham số > Trình xử lý sự kiện > No-match default
  • Tham số > Hoàn thành trình xử lý sự kiện: Do you want a physical CD or the digital album?
  • Tham số > Hoàn thành trình xử lý sự kiện: Tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "Digital Album"
            }
          ]
        }
      ]
    ]
  }
  • Tham số > Trình xử lý sự kiện > No-input default
  • Tham số > Hoàn thành trình xử lý sự kiện: I couldn't understand if you mean CD or MP3. Which one do you want?
  • Tham số > Hoàn thành trình xử lý sự kiện: Tải trọng tuỳ chỉnh:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            }
          ]
        }
      ]
    ]
  }
  1. Thêm tuyến có điều kiện:
  • Khớp với mọi quy tắc (VÀ)
  • Biểu thức: $page.params.merch != "null"
  • Chuyển đổi sang Trang: Product

Trang sản phẩm:

  1. Tạo các tham số sau:

Tên hiển thị của thông số

Loại thực thể tham số

Kiểm tra

artist

@Artist

Bắt buộc, Loại bỏ trong nhật ký

merch

@Merch

Bắt buộc, Loại bỏ trong nhật ký

  1. Tham số artist cần có yêu cầu ban đầu sau đây và sẽ xuất hiện khi không xác định được nghệ sĩ. 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"
      }
    ]
  ]
}
  • Ngoài ra, hãy thêm một trình xử lý sự kiện No-input default có tính năng thực hiện: I couldn't understand what you just said. Ask me which artists are signed.
  • Và trình xử lý sự kiện No-match default có tính năng thực hiện: I missed that. Please ask me which artists are signed.
  1. Tham số merch cũng cần các trình xử lý sự kiện nhắc lại.
  • Thêm trình xử lý sự kiện No-input default có tính năng thực hiện: I couldn't understand what you just said. Which merchandise item do you want?
  • Và trình xử lý sự kiện No-match default có tính năng thực hiện: I missed that. Which merchandise item do you want?

Tuyến đường tiếp theo sẽ chuyển sang trang xác nhận khi nghệ sĩ được biết đến và người dùng chọn "Phim về chuyến lưu diễn".

  1. Thêm tuyến có điều kiện:
  • Khớp với mọi quy tắc (VÀ)
  • Biểu thức: $session.params.artist != null
  • Biểu thức: $session.params.merch = "Tour Movie"
  • Chế độ đặt sẵn của thông số Thêm thông số > price = 25
  • Chuyển sang trang mới: Confirmation

Tuyến đường tiếp theo sẽ chuyển sang trang xác nhận khi nghệ sĩ được biết đến và người dùng chọn "Áo phông" và kích cỡ áo được chọn.

  1. Thêm tuyến có điều kiện:
  • Biểu thức tuỳ chỉnh: $session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
  • Chế độ đặt sẵn của thông số Thêm thông số > price = 25
  • Chuyển sang trang: Confirmation

Lộ trình tiếp theo sẽ chuyển sang trang xác nhận khi nghệ sĩ được biết đến và người dùng chọn "Áo dài tay" và chọn kích cỡ áo.

  1. Thêm tuyến có điều kiện:
  • Biểu thức tuỳ chỉnh: $session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
  • Chế độ đặt sẵn của thông số Thêm thông số > price = 30
  • Chuyển sang trang: Confirmation

Tuyến đường tiếp theo sẽ chuyển sang trang xác nhận khi tên nghệ sĩ đã được xác định và người dùng chọn "CD" cũng như tên album.

  1. Thêm tuyến có điều kiện:
  • Biểu thức tuỳ chỉnh: $session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
  • Chế độ đặt sẵn của thông số Thêm thông số > price = 15
  • Chuyển sang trang: Confirmation

Tuyến đường tiếp theo sẽ chuyển sang trang xác nhận khi hệ thống biết tên nghệ sĩ và người dùng chọn "Album kỹ thuật số" và tên album.

  1. Thêm tuyến có điều kiện:
  • Biểu thức tuỳ chỉnh: $session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
  • Chế độ đặt sẵn của thông số Thêm thông số > price = 10
  • Chuyển sang trang: Confirmation

Tiếp theo, chúng ta sẽ tạo một số điều kiện nâng cao bằng các câu lệnh phát hiện thông tin bị thiếu. Tuyến đường tiếp theo sẽ chuyển về trang nhạc khi nghệ sĩ đã được xác định và người dùng chọn "Đĩa CD" hoặc "Đĩa nhạc kỹ thuật số" nhưng chưa chọn tên đĩa nhạc.

  1. Thêm tuyến có điều kiện:
  • Biểu thức tuỳ chỉnh: $session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null
  • Thực hiện đơn hàng: I would also need to know which album you would like to buy!
  • Chuyển sang trang: Music

Và tuyến đường cuối cùng sẽ chuyển sang trang xác nhận khi nghệ sĩ đã được xác định và người dùng chọn "Áo thun" hoặc "Áo dài tay", nhưng chưa chọn kích cỡ áo thun.

  1. Thêm một tuyến có điều kiện:
  • Biểu thức tuỳ chỉnh: $session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null
  • Thực hiện đơn hàng: I would also need to know which shirt size you need!
  • Chuyển sang trang: Shirt Size

Trong phần tiếp theo của phòng thí nghiệm, chúng ta sẽ sử dụng các điều kiện thực hiện để đưa ra các thông báo thực hiện khác nhau tuỳ thuộc vào thông tin đầu vào.

7. Phản hồi có điều kiện

Một số câu trả lời sẽ trả về một đoạn hội thoại khác dựa trên thông tin đầu vào. Các đoạn hội thoại sẽ phân nhánh, chúng ta gọi đây là câu trả lời có điều kiện. Điều này có thể trở nên thú vị khi bạn không sử dụng các phương thức thực hiện webhook, trong đó các phản hồi có điều kiện được xác định ở phần phụ trợ. Ví dụ:

if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif
  • Ví dụ về [điều kiện] có thể là: $session.params.user-age >= 21. Nó sử dụng định dạng tương tự như các điều kiện trong các tuyến đường.
  • [response] sẽ lấy phản hồi bằng văn bản tĩnh
  • Phản hồi có điều kiện luôn bắt đầu bằng if
  • Bạn không bắt buộc phải dùng các khối elifelse

Dialogflow CX cũng có thể sử dụng các hàm hệ thống tích hợp sẵn. Ví dụ: để định dạng ngày hoặc giờ, hoặc để hiển thị giờ hiện tại ($sys.func.NOW())

Hãy hoàn tất quy trình Catalog (Danh mục) bằng cách sửa các trang Confirmation (Xác nhận) và Price (Giá).

Trang xác nhận:

Bây giờ, chúng ta sẽ tạo trang xác nhận. Mã này có các yêu cầu sau:

  • Nếu hàng hoáđĩa CD hoặc Album kỹ thuật số. Chúng tôi sẽ hiển thị các trường sau trong thông tin xác nhận: nghệ sĩ, hàng hoá, đĩa nhạcgiá.
  • Nếu hàng hoáÁo thun hoặc Áo dài tay. Chúng tôi sẽ cho thấy các trường sau trong thông tin xác nhận: artist, merch, sizeprice.
  • Else (và do đó nếu merchTour Movie). Chúng tôi sẽ hiển thị các trường sau trong thông tin xác nhận: nghệ sĩ, hàng hoágiá.
  1. Nhấp vào trang Xác nhận.
  2. Nhấp vào Chỉnh sửa yêu cầu thực hiện > Phản hồi của trợ lý ảo > Thêm lựa chọn hộp thoại > Phản hồi có điều kiện:
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. Tạo Intent Route sau đây
  • Ý định: confirm.proceed.order
  • Nhân viên hỗ trợ nói: Thank you for your order! Your merchandise will be shipped today!
  • Thêm lựa chọn trong hộp thoại > Văn bản: Here's the order number: ABCD123.
  • Thêm lựa chọn trong đoạn hội thoại > Văn bản: Have a good day!
  • Chuyển đổi: End Session
  1. Chọn Trang Bắt đầu rồi nhấp vào ý định redirect.end. Tạo yêu cầu thực hiện sau: Thank you for contacting G-Records! Have a nice day!
  2. Chọn Trang Bắt đầu rồi nhấp vào ý định redirect.home. Tạo chế độ đặt sẵn tham số sau: restart = true

Tuyệt vời! Đến đây, chúng ta đã có một chatbot hoàn chỉnh của nhà bán lẻ trong thế giới thực! Trong phòng thí nghiệm tiếp theo, chúng ta sẽ kiểm tra hiệu suất của trợ lý ảo!

9. Kiểm thử trợ lý ảo

Bạn có thể sử dụng trình mô phỏng tích hợp để kiểm thử các cuộc đối thoại của trợ lý ảo. Ưu điểm của việc kiểm thử các luồng trong trình mô phỏng là bạn sẽ thấy thông tin tổng quan rõ ràng về các luồng, trang, thông số và sự kiện (DTMF) mà trình mô phỏng đã thu thập trong khi bạn thực hiện các luồng. Điều này giúp việc kiểm thử dễ dàng hơn so với việc kiểm thử trực tiếp trong một quy trình tích hợp, vì những loại thông tin đó sẽ bị ẩn đối với người dùng cuối. Bạn thậm chí có thể tạo các trường hợp kiểm thử, lưu và sử dụng lại các trường hợp kiểm thử đó. Điều này rất hợp lý, vì khi bạn duy trì hoặc chỉnh sửa các luồng theo thời gian, bạn cần đảm bảo rằng không có thay đổi nào làm hỏng công việc trước đó của bạn.

Bạn cũng có thể xuất và nhập các trường hợp kiểm thử đã tạo trước đó bằng cách lưu trữ các kiểm thử trong Google Cloud Storage hoặc cục bộ. Khi xuất một bài kiểm tra, hệ thống sẽ tải một tệp blob xuống. Để tìm hiểu thêm về trình mô phỏng và các trường hợp kiểm thử, hãy xem Tài liệu về trình mô phỏng / trường hợp kiểm thử.

Trước khi tạo một số trường hợp kiểm thử, trước tiên, hãy hoàn tất phần còn lại của trợ lý ảo:

Tạo quy trình Chăm sóc khách hàng

  1. Chuyển đến quy trình Chăm sóc khách hàng và tạo các chuyển đổi ý định sau:

Trang (Trong luồng)

Tuyến đường > Ý định

Routes > Transition To

Bắt đầu sử dụng dịch vụ chăm sóc khách hàng

redirect.shipping.info

Giao hàng

Bắt đầu sử dụng dịch vụ chăm sóc khách hàng

redirect.refund.info

Hoàn tiền

Bắt đầu sử dụng dịch vụ chăm sóc khách hàng

redirect.swapping.info

Hoán đổi

Bắt đầu sử dụng dịch vụ chăm sóc khách hàng

redirect.home

Kết thúc Flow

Bắt đầu sử dụng dịch vụ chăm sóc khách hàng

redirect.end

Kết thúc phiên

Luồng chăm sóc khách hàng

  1. Tạo các mục sau đây để hoàn tất cho trang Vận chuyển:
  • Shipping physical merchandise items can take up to 2 weeks.
  • Is there anything else I can help you with?
  1. Tạo các mục sau đây để hoàn tất cho trang Hoàn tiền:
  • 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. Tạo các mục thực hiện sau đây cho Trang Hoán đổi:
  • 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. Chọn Trang Bắt đầu rồi nhấp vào ý định redirect.end. Tạo yêu cầu thực hiện sau: Thank you for contacting G-Records! Have a nice day!
  2. Chọn Trang Bắt đầu rồi nhấp vào ý định redirect.home. Tạo chế độ đặt sẵn tham số sau: restart = true

Tạo các trường hợp kiểm thử

  1. Nhấp vào nút Test Agent (Kiểm thử đặc vụ) ở bên phải màn hình.

Khi mở trình mô phỏng lần đầu tiên, bạn cần chọn một môi trường tác nhân và luồng hoạt động. Trong hầu hết các trường hợp, bạn nên sử dụng môi trường bản nháp và quy trình bắt đầu mặc định.

  1. Loại: Hi

Luồng chăm sóc khách hàng

  1. Hỏi: Which artists are signed with your label?
  2. Hãy nói: The Google Dolls
  3. Hãy nói: I am interested in buying a shirt
  4. Hãy nói: A t-shirt
  5. Hãy nói: Medium
  6. Bây giờ, hãy nhấp vào nút lưu trường hợp kiểm thử. Bạn có thể tìm thấy biểu tượng này ở đầu trình mô phỏng (bên cạnh mũi tên làm lại và biểu tượng thùng rác đặt lại)

Luồng chăm sóc khách hàng

  1. Cung cấp các thông tin sau:
  • Tên trường hợp kiểm thử: Buy Google Dolls t-shirt size M
  • Thẻ: #catalog, #shirts, #t-shirt, #TheGoogleDolls
  1. Nhấp vào Lưu

Hãy tạo thêm các trường hợp kiểm thử.

  1. Trước tiên, hãy xoá hộp thoại hiện tại bằng cách nhấp vào biểu tượng Đặt lại (thùng rác).
  2. Tạo các trường hợp kiểm thử sau:

Mua áo thun Alice Googler:

>"Buy the Alice Googler t-shirt."
>"XL"
  • Tên trường hợp kiểm thử: Buy the Alice Googler t-shirt
  • Thẻ: #catalog, #shirts, #t-shirt, #AliceGoogler

Mua áo phông cỡ M: (Lưu ý rằng tên Nghệ sĩ chưa được đề cập, nhưng bạn muốn bỏ qua trang tổng quan về ban nhạc, trang tổng quan về sản phẩm, trang áo sơ mi và trang kích thước áo sơ mi)

>"Buy a t-shirt size M"
>"The Google Fighters"
  • Tên trường hợp kiểm thử: Buy a t-shirt size M
  • Thẻ: #catalog, #shirts, #t-shirt, #TheGoogleFighters
  • Nội dung mô tả: (Lưu ý rằng tên nghệ sĩ chưa được đề cập, nhưng bạn muốn bỏ qua trang tổng quan về ban nhạc, trang tổng quan về sản phẩm, trang áo sơ mi và kích cỡ áo sơ mi)

Mua nhạc của G's N' Roses (Lưu ý: Thao tác này sẽ bỏ qua trang tổng quan về ban nhạc và trang tổng quan về sản phẩm)

>"Purchase music of G's N' Roses"
>"Live"
>"CD"
  • Tên trường hợp kiểm thử: Purchase music of G's N' Roses
  • Thẻ: #catalog, #music, #CD, #GsNRoses, #live
  • Nội dung mô tả: (Lưu ý: thao tác này sẽ bỏ qua trang tổng quan về các dải tần và trang tổng quan về sản phẩm)

Kiểm tra thông tin về giá:

>"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"
  • Tên trường hợp kiểm thử: Price info
  • Thẻ: #catalog, #music, #tourmovie, #shirts
  • Nội dung mô tả: Kiểm tra thông tin giá tại nhiều điểm trong hộp thoại

Thử nghiệm các trường hợp kiểm thử được ghi sẵn

  1. Chọn Quản lý > Trường hợp thử nghiệm trong trình đơn chính của Dialogflow ở bên trái.
  2. Chọn tất cả các trường hợp kiểm thử rồi nhấn nút Chạy ở phía trên bảng.

Dialogflow CX sẽ chạy tất cả các trường hợp kiểm thử đã chọn dựa trên bản ghi được lưu dưới dạng "Trường hợp kiểm thử mẫu". Nếu kết quả giống như cách bạn đã lưu, thì các kiểm thử sẽ được thông qua. – Nếu có thay đổi trong các luồng như Trang được định cấu hình không đúng cách hoặc ý định đưa bạn đến các trang không chính xác, thì các bài kiểm thử sẽ không thành công.

Các trường hợp kiểm thử

  1. Trong trình mô phỏng, hãy đặt câu hỏi sau: How long will shipping take?
  2. Ghi lại kết quả và lưu trường hợp kiểm thử dưới dạng Shipping bằng thẻ: #shipping.
  3. Chuyển đến bảng điều khiển Manage > Test Cases (Quản lý > Trường hợp kiểm thử) rồi nhấn nút Run (Chạy) ở trên cùng bên phải của lưới để chỉ chạy trường hợp kiểm thử Shipping.

Bài kiểm thử này sẽ thành công.

  1. Quay lại quy trình Chăm sóc khách hàng, chọn trang Bắt đầu rồi nhấp vào tiêu đề Đường đi.

Thao tác này sẽ hiển thị một màn hình có lưới cho thấy tất cả các tuyến đường.

  1. Xoá redirect.shipping.info route
  2. Chuyển đến bảng điều khiển Manage > Test Cases (Quản lý > Trường hợp kiểm thử) rồi nhấn nút Run (Chạy) ở trên cùng bên phải của lưới để chỉ chạy trường hợp kiểm thử Shipping.

Bài kiểm thử này sẽ không thành công.

  1. Bạn có thể nhấp vào bài kiểm thử không thành công để xem thông tin chi tiết về lỗi.

Trong trường hợp này, kiểm thử không thành công với thông báo lỗi bên dưới:

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

Lý do là vì trang đó không còn tồn tại trong quy trình nữa. Chúng tôi dự kiến sẽ thấy Trang Shipping, nhưng thay vào đó, chúng tôi không bao giờ rời khỏi Trang Start. (hoặc người dùng cuối của bạn sẽ nhận được một thông báo dự phòng.)

Nói cách khác, đây là một yêu cầu bị bỏ lỡ, một kết quả kiểm thử Âm tính giả. Thử nghiệm không thành công. Chúng tôi dự kiến sẽ thấy trang Vận chuyển, nhưng không có gì xảy ra hoặc một thông báo dự phòng xuất hiện.

  1. Quay lại Quy trình hỗ trợ khách hàng và thêm redirect.shipping.info làm tuyến đường ý định vào Trang Bắt đầu. Đừng quên chuyển sang trang Vận chuyển rồi nhấn vào Lưu.
  2. Trong trình mô phỏng, hãy ghi lại trường hợp kiểm thử sau: I want to swap my item, lưu trường hợp kiểm thử này dưới dạng Swapping #swapping.
  3. Mở Quản lý > Ý định > redirect.refund.info rồi thêm cụm từ huấn luyện sau: I want to swap this item for a refund

Nếu không có cụm từ huấn luyện đó, khi người dùng yêu cầu đổi mặt hàng để được hoàn tiền, yêu cầu đó sẽ kích hoạt ý định redirect.swapping.info. Tuy nhiên, chúng tôi không muốn cung cấp thông tin về việc đổi mặt hàng mà muốn cung cấp thông tin về việc hoàn tiền.

  1. Tạo trường hợp kiểm thử tham chiếu sau đây: I want to swap this item for a refund trong trình mô phỏng và lưu trường hợp kiểm thử này dưới dạng Swap for Refund #refund
  2. Quay lại ý định Quản lý > Ý định > redirect.refund.info rồi xoá dòng I want to swap this item for a refund.
  3. Quay lại phần Quản lý > Trường hợp kiểm thử, chọn trường hợp kiểm thử Đổi trả để hoàn tiền rồi Chạy trường hợp đó.

Thử nghiệm gần đây nhất của bạn không thành công, với thông báo lỗi bên dưới:

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

Nói cách khác, đây là một yêu cầu bị hiểu sai, một kết quả kiểm thử Dương tính giả. Thử nghiệm không thành công. Chúng tôi dự kiến sẽ thấy trang Hoàn tiền, nhưng trang Đổi lại xuất hiện.

Phạm vi tổng hợp dữ liệu

Trong Dialogflow CX, phạm vi kiểm thử là một chỉ số dùng để mô tả mức độ thực thi hộp thoại của trợ lý ảo (Trang và Ý định) khi một bộ kiểm thử cụ thể chạy. Một trợ lý ảo có độ bao phủ kiểm thử cao (được đo bằng tỷ lệ phần trăm) đã thực hiện nhiều cuộc trò chuyện hơn trong quá trình kiểm thử. Điều này cho thấy trợ lý ảo đó ít có khả năng chứa các lỗi chưa được phát hiện (chẳng hạn như các yêu cầu bị hiểu sai) so với một trợ lý ảo có độ bao phủ kiểm thử thấp.

  1. Để xem báo cáo về mức độ kiểm thử cho tất cả các trường hợp kiểm thử, hãy nhấp vào Mức độ kiểm thử.
  2. Nhấp vào thẻ Chuyển cảnh.

Thao tác này sẽ cho bạn biết mức độ kiểm thử cho tất cả các hiệu ứng chuyển trang.

Phạm vi áp dụng hiệu ứng chuyển cảnh

  1. Nhấp vào thẻ Ý định.

Thao tác này sẽ cho bạn biết mức độ sử dụng bài kiểm thử cho tất cả các ý định.

Mức độ phù hợp của ý định

Chúc mừng bạn, đến đây là bạn đã xây dựng và kiểm thử xong một ví dụ hoàn chỉnh về bot bán lẻ trong thực tế! Hãy chuyển sang trang tiếp theo của phòng thí nghiệm để đọc kết luận và tìm một số tài liệu tham khảo hữu ích!

10. Kết luận

Dialogflow CX là một Nền tảng AI đàm thoại (CAIP) để tạo các nhân viên hỗ trợ ảo như chatbot hoặc bot thoại. Dialogflow CX giúp nhóm của bạn đẩy nhanh quá trình tạo trải nghiệm đàm thoại ở cấp doanh nghiệp thông qua trình tạo bot trực quan, các ý định có thể sử dụng lại và khả năng giải quyết các cuộc trò chuyện nhiều lượt.

Trong lớp học lập trình này, bạn đã tìm hiểu cách tạo một trợ lý ảo bán lẻ thực tế. Chúng tôi đã đề cập đến những khái niệm sau:

  • Luồng
  • Tham số, Thực thể tuỳ chỉnh và thực thể hệ thống
  • Pages
  • Trình xử lý trạng thái như Tuyến đường theo ý định và Tuyến đường theo điều kiện
  • Thông báo tĩnh về việc thực hiện và phản hồi có điều kiện
  • Ý định dự phòng
  • Trình mô phỏng, các trường hợp kiểm thử và mức độ phù hợp

Kết quả cuối cùng

Tài liệu tham khảo

Để tìm hiểu thêm về Dialogflow CX, hãy xem các blog và tài liệu sau đây!