Xây dựng Hành động cho Trợ lý Google bằng SDK Actions (Cấp 2)

1. Tổng quan

Nền tảng dành cho nhà phát triển Trợ lý Google cho phép bạn tạo phần mềm để mở rộng chức năng của Trợ lý Google (một trợ lý cá nhân ảo) trên hơn 1 tỷ thiết bị, bao gồm cả loa thông minh, điện thoại, ô tô, TV, tai nghe và nhiều thiết bị khác. Người dùng tương tác với Trợ lý trong cuộc trò chuyện để hoàn thành công việc, chẳng hạn như mua hàng tạp hoá hoặc đặt xe. Là nhà phát triển, bạn có thể sử dụng nền tảng Trợ lý dành cho nhà phát triển để dễ dàng tạo và quản lý trải nghiệm trò chuyện thú vị và hiệu quả giữa người dùng và dịch vụ thực hiện đơn hàng của riêng bạn.

Lớp học lập trình này đề cập đến các khái niệm ở cấp trung cấp để phát triển bằng Trợ lý Google và dựa trên Hành động được tạo trong lớp học lập trình Tạo hành động cho Trợ lý Google bằng SDK Hành động (Cấp 1). Bạn nên hoàn thành lớp học lập trình Cấp 1 trước khi bắt đầu lớp này.

Hành động mà bạn xây dựng trong lớp học lập trình này sẽ cho người dùng biết vận may của họ trong nhiệm vụ ở một vùng đất thần thoại, Gryffinberg, dựa trên sự hỗ trợ họ lựa chọn.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ tạo một Hành động trò chuyện tinh vi có các hàm sau:

  • Thu thập dữ liệu từ người dùng và sửa đổi các câu lệnh trò chuyện tuỳ thuộc vào giá trị.
  • Bạn sẽ trả lời các câu hỏi nối tiếp để tiếp tục trò chuyện.
  • Tạo vòng lặp trò chơi để người dùng có thể tương tác lại với Hành động sau khi nhận được vận may.

Trước khi bắt đầu xây dựng, bạn có thể tương tác với Hành động trực tiếp trên thiết bị có Trợ lý Google bằng cách nói "Ok Google, trò chuyện với Fate and Fortune". Đường dẫn mặc định qua Hành động này dành cho người dùng cũ sẽ có dạng tương tác sau:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

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

  • Cách sử dụng ô trống để thu thập dữ liệu từ người dùng
  • Cách sử dụng điều kiện để thêm logic vào cảnh
  • Cách thêm vòng lặp trò chơi
  • Cách thêm đường dẫn hỗ trợ

Bạn cần có

Sau đây là các điều kiện tiên quyết để tham gia lớp học lập trình này:

  • IDE/trình chỉnh sửa văn bản mà bạn chọn.
  • Một thiết bị đầu cuối để chạy các lệnh shell có cài đặt NodeJS, npmgit.
  • Một trình duyệt web, chẳng hạn như Google Chrome.
  • Một dự án Hành động đã hoàn thành trong lớp học lập trình cấp 1.

Mặc dù không bắt buộc, nhưng bạn nên làm quen với JavaScript (ES6) để hiểu mã phương thức thực hiện cho lớp học lập trình này.

Không bắt buộc: Lấy mã mẫu

Bạn có thể tuỳ ý lấy mã dự án cấp 1 hoàn chỉnh từ kho lưu trữ GitHub của Lớp học lập trình Actions Builder Cấp 1 để có thể theo dõi lớp học lập trình này. Bạn cũng có thể xem mã dự án cấp 2 đầy đủ trong kho lưu trữ GitHub này.

2. Tiếp tục xây dựng giao diện trò chuyện

Trong lớp học lập trình đầu tiên, bạn đã tạo một Hành động trò chuyện đơn giản có một cảnh duy nhất là Start.

Trong lớp học lập trình này, bạn mở rộng cuộc trò chuyện của Hành động. Trong các phần sau, bạn sẽ định cấu hình Hành động của mình để thực hiện những việc sau:

  • Chuyển sang cảnh mới của Fortune khi người dùng muốn nghe xem bói
  • Hỏi người dùng xem họ muốn chọn trợ lý nào cho hành trình của mình
  • Phân phối may mắn tuỳ chỉnh dựa trên lựa chọn của người dùng

Chuyển đến và tạo cảnh Fortune

Trong phần này, bạn sẽ làm như sau:

  • Xoá câu lệnh hiện có khỏi cảnh Start. Cảnh này sẽ trả lời người dùng và kết thúc cuộc trò chuyện
  • Xác định hiệu ứng chuyển đổi từ cảnh Start sang cảnh Fortune
  • Tạo cảnh Fortune

Để sửa đổi cảnh Start và thêm hiệu ứng chuyển đổi vào cảnh Fortune, hãy làm theo các bước sau:

  1. Mở dự án Actions (Thao tác) trong lớp học lập trình Cấp 1 bằng trình chỉnh sửa văn bản.
  2. Mở tệp custom/scenes/Start.yaml.
  3. Cập nhật handler cho ý định yes để mã của bạn khớp với đoạn mã bên dưới:

Start.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: I understand, stranger. Best of luck on your quest! Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Lưu tệp.

Để tạo một cảnh mới có tên là Fortune, hãy làm theo các bước sau:

  1. Chuyển đến dự án Thao tác cấp 1 của lớp học lập trình trong thiết bị đầu cuối.
  2. Tạo một tệp mới có tên là Fortune.yaml trong thư mục scenes:
touch custom/scenes/Fortune.yaml

Bạn sẽ chỉnh sửa tệp này trong phần tiếp theo.

Xác định logic trò chuyện cho cảnh Fortune

Trong lớp học lập trình này, bạn sẽ định cấu hình cảnh Fortune để hỏi người dùng "Bạn chọn gì để giúp bạn làm nhiệm vụ, rồng, dịch giả hoặc la bàn?" Bạn có thể sử dụng tính năng có tên là lấp đầy ô để thu thập thông tin cần thiết của người dùng trước khi tiếp tục.

Hành động của bạn mang đến may mắn cho ba công cụ hỗ trợ: rồng, dịch giả và la bàn. Để định cấu hình Hành động nhằm xác định 3 lựa chọn này trong dữ liệu đầu vào của người dùng, bạn phải tạo một loại mới.

Bạn có thể sử dụng các loại trong giai đoạn lấp đầy vùng của cảnh để xác định thông tin bạn muốn người dùng cung cấp. Khi phát hiện một ô trùng khớp trong hoạt động đầu vào của người dùng, công cụ NLU sẽ trích xuất ô đó dưới dạng tham số đã nhập để bạn có thể áp dụng logic dựa trên ô đó trong một cảnh.

Tạo loại available_options

Trong phần này, bạn sẽ tạo một kiểu mới có tên là available_options. Kiểu này chỉ định 3 tuỳ chọn mà người dùng có thể chọn (rồng, dịch và la bàn) để phản hồi lời nhắc. Bạn cũng xác định một vài từ đồng nghĩa cho các tuỳ chọn này trong trường hợp người dùng nói điều gì đó tương tự. Trong phần sau, bạn sẽ thêm loại available_options vào một ô để chỉ định rằng bạn muốn lấy lựa chọn của người dùng.

Để tạo loại available_options, hãy làm theo các bước sau:

  1. Tạo thư mục mới có tên là types:
mkdir custom/types
  1. Tạo một tệp mới có tên là available_options.yaml trong thư mục types:
touch custom/types/available_options.yaml
  1. Mở custom/types/available_options.yaml trong trình chỉnh sửa văn bản.

Các loại được định cấu hình dưới dạng cặp thông tin khoá-giá trị, trong đó khoá là tên của loại và giá trị là từ đồng nghĩa với khoá đó. Khi bạn xác định khoá, khoá sẽ tự động được thêm dưới dạng giá trị. Với SDK Hành động, bạn biểu thị các khoá là entities và các giá trị là synonyms.

Để thêm ba tuỳ chọn mà người dùng có thể chọn, hãy làm theo các bước sau:

  1. Thêm entitiessynonyms sau đây vào tệp available_options.yaml:

available_options.yaml

synonym:
  entities:
    dragon:
      synonyms:
      - dragon
      - hydra
      - lizard
    translator:
      synonyms:
      - translator
      - communicator
      - machine
      - decoder
      - translate
    compass:
      synonyms:
      - compass
      - direction
      - guide
      - navigator
  matchType: EXACT_MATCH
  1. Lưu tệp.

Hành động của bạn hiện hiểu rằng available_options là con rồng, dịch giả và la bàn, đồng thời cũng có thể nhận ra một vài từ đồng nghĩa tương ứng.

Định cấu hình lấp đầy vùng

Tiếp theo, bạn cần định cấu hình lấp đầy ô trong cảnh Fortune. Để định cấu hình logic lấp đầy vùng, hãy làm theo các bước sau:

  1. Mở custom/scenes/Fortune.yaml trong trình chỉnh sửa văn bản.
  2. Thêm dữ liệu slots sau đây vào tệp Fortune.yaml:

Fortune.yaml

slots:
- commitBehavior:
    writeSessionParam: chosenOptions
  name: chosenOptions
  promptSettings:
    initialPrompt:
      staticPrompt:
        candidates:
        - promptResponse:
            firstSimple:
              variants:
              - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass?
            suggestions:
            - title: Dragon
            - title: Translator
            - title: Compass
  required: true
  type:
    name: available_options
  1. Lưu tệp.

Giờ thì bạn đã thêm loại available_options vào ô để cho Hành động biết thông tin bạn cần thu thập từ người dùng (lựa chọn hỗ trợ của họ) trước khi tiếp tục. Bạn cũng đã định cấu hình một lời nhắc trong vùng. Lời nhắc này sẽ được thêm vào hàng đợi lời nhắc khi người dùng đến giai đoạn lấp đầy vùng của cảnh.

Khi bạn đặt tên cho ô là chosenOptions, trường writeSessionsParam sẽ được cập nhật theo cùng tên ($session.params.chosenOptions). Bạn có thể truy cập tham số này theo tên đó trong lời nhắc và trong phương thức thực hiện thông qua thư viện ứng dụng.

Thêm điều kiện

Giờ đây, khi đã thêm một khung giờ mà người dùng cần chọn phương thức hỗ trợ, bạn có thể thêm một điều kiện để kiểm tra nhằm đảm bảo rằng dữ liệu khung giờ đã được lấy trước khi người dùng có thể tiếp tục trò chuyện.

Trong phần này, bạn thêm điều kiện scene.slots.status == "FINAL" để kiểm tra xem khung giờ đã hoàn tất hay chưa. Sau khi đã lấp đầy tất cả các ô, điều kiện này sẽ thêm một lời nhắc (You picked $session.params.chosenOptions.) vào hàng đợi lời nhắc.

Để định cấu hình điều kiện scene.slots.status == "FINAL", hãy làm theo các bước sau:

  1. Mở custom/scenes/Fortune.yaml trong trình chỉnh sửa văn bản.
  2. Thêm dữ liệu conditionalEvents vào đầu tệp Fortune.yaml:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. Lưu tệp.

Kiểm thử Hành động trong trình mô phỏng

Đến đây, bạn đã xác định được những chế độ mà người dùng nên chọn để lấp đầy khung hình. Sau khi có thông tin này từ người dùng, Hành động của bạn phải đưa ra lời nhắc dẫn chiếu đến phương án cụ thể mà họ đã chọn.

Để kiểm thử Hành động của bạn, hãy làm theo các bước sau:

  1. Trong cửa sổ dòng lệnh, hãy chạy lệnh sau:
gactions deploy preview

Bạn sẽ nhận được kết quả có dạng như sau:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sao chép URL được cung cấp rồi dán vào một trình duyệt.
  2. Nhấp hoặc nhập Talk to my test app vào trường Input (Đầu vào) rồi nhấn phím Enter.
  3. Nhập Yes vào trường Input (Đầu vào) rồi nhấn phím Enter. Ngoài ra, bạn có thể nhấp vào khối đề xuất .

a899d45c542668f6.png

  1. Nhấp, nhập hoặc nói dragon. Bạn sẽ nhận được câu lệnh "Bạn đã chọn rồng".

Trong phần tiếp theo, bạn sẽ tuỳ chỉnh lời nhắc cho từng trợ giúp mà người dùng có thể chọn.

Tuỳ chỉnh lời nhắc bằng cách sử dụng các điều kiện

Trong phần này, bạn sẽ thêm điều kiện cho mỗi lựa chọn mà người dùng có thể chọn và thêm lời nhắc tuỳ chỉnh cho mỗi điều kiện.

Tuỳ chỉnh vận may trong dragon

Để cập nhật điều kiện và tuỳ chỉnh lời nhắc khi người dùng chọn "rồng", hãy làm theo các bước sau:

  1. Mở custom/scenes/Fortune.yaml trong trình chỉnh sửa văn bản.
  2. Thay thế dữ liệu conditionalEvents bằng đoạn mã sau trong tệp Fortune.yaml:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  1. Lưu tệp.

Giờ đây, khi người dùng nói "rồng" hoặc điều gì đó nghe có vẻ tương tự, Hành động của bạn sẽ cung cấp vận may dựa trên lựa chọn đó. Tiếp theo, bạn sẽ thêm hai lựa chọn còn lại.

Tuỳ chỉnh vận may translatorcompass

Để thêm điều kiện và tuỳ chỉnh lời nhắc khi người dùng nói "translator" hoặc "compass", hãy làm theo các bước sau:

  1. Trong tệp custom/scenes/Fortune.yaml, hãy thêm hai điều kiện còn lại trong điều kiện dragon:

Fortune.yaml

- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  1. Lưu tệp.

Kiểm thử Hành động trong trình mô phỏng

Tại thời điểm này, Hành động của bạn phải cung cấp vận may được tuỳ chỉnh cho người dùng dựa trên phương án mà họ chọn.

Để kiểm thử Hành động của bạn, hãy làm theo các bước sau:

  1. Trong cửa sổ dòng lệnh, hãy chạy lệnh sau:
gactions deploy preview

Bạn sẽ nhận được kết quả có dạng như sau:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sao chép URL được cung cấp rồi dán vào một trình duyệt.
  2. Nhập Talk to my test app vào trường Input (Đầu vào) rồi nhấn phím Enter.
  3. Nhập Có vào trường Nhập và nhấn phím Enter. Ngoài ra, hãy nhấp vào khối đề xuất .
  4. Nhấp, nhập hoặc nói Translator.

29e17f950bd0dd71.pngs

Bạn sẽ nhận được vận may phù hợp cho "người dịch" .

3. Thêm vòng lặp trò chơi

Trong phần này, bạn định cấu hình Hành động của mình để người dùng có thể chọn một tuỳ chọn khác và nghe được một chỉ số may mắn khác sau khi lựa chọn. Thay đổi này tương tự như thông báo "Bạn có muốn chơi lại không?" ở cuối trò chơi. Để tạo vòng lặp này, bạn có thể sử dụng lại các ý định yesno đã tạo trước đó rồi thêm chúng vào một cảnh mới có tên là Again.

Tạo cảnh Again

Trong phần này, bạn sẽ tạo một cảnh Again mới và thêm một lời nhắc để hỏi người dùng xem họ có muốn chọn một chế độ khác hay không.

Để tạo và định cấu hình cảnh Again, hãy làm theo các bước sau:

  1. Tạo một tệp mới có tên là Again.yaml trong thư mục scenes:
touch custom/scenes/Again.yaml
  1. Mở custom/scenes/Again.yaml trong trình chỉnh sửa văn bản.
  2. Thêm dữ liệu onEnter sau vào Again.yaml:

Again.yaml

onEnter:
  staticPrompt:
    candidates:
    - promptResponse:
        firstSimple:
          variants:
          - speech: That is what I see for you. Would you like to choose a different option and explore another future?
        suggestions:
        - title: "Yes"
        - title: "No"
  1. Lưu tệp.

Thêm hiệu ứng chuyển đổi từ cảnh Fortune sang cảnh Again

Sau khi người dùng nhận được biểu tượng may mắn, cuộc trò chuyện cần chuyển sang cảnh mới trong Again.

Để thêm hiệu ứng chuyển đổi từ cảnh Fortune sang cảnh Again, hãy làm theo các bước sau:

  1. Mở custom/scenes/Fortune.yaml trong trình chỉnh sửa văn bản.
  2. Thêm transitionToScene: Again vào mỗi điều kiện, như minh hoạ trong đoạn mã sau đây:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  transitionToScene: Again
  1. Lưu tệp.

Kiểm thử Hành động trong trình mô phỏng

Tại thời điểm này, Hành động của bạn cần đưa ra lời nhắc sau đây cho người dùng sau khi họ nhận được vận may: "Đó là những gì tôi thấy cho bạn. Bạn có muốn chọn một cách khác và khám phá một tương lai khác không?"

Để kiểm thử Hành động của bạn, hãy làm theo các bước sau:

  1. Trong cửa sổ dòng lệnh, hãy chạy lệnh sau:
gactions deploy preview

Bạn sẽ nhận được kết quả có dạng như sau:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sao chép URL được cung cấp rồi dán vào một trình duyệt.
  2. Nhập Talk to my test app vào trường Input (Đầu vào) rồi nhấn phím Enter.
  3. Nhập Yes vào trường Input (Đầu vào) rồi nhấn phím Enter. Ngoài ra, hãy nhấp vào khối đề xuất .
  4. Nhấp, nhập hoặc nói dragon.

b299e9fed9aedb69.png

Bạn sẽ nhận được vận may cho tuỳ chọn con rồng và lời nhắc Again.

Thêm ý định và chuyển đổi sang cảnh Again

Trong phần này, bạn sẽ thêm ý định yesno vào cảnh Again để Hành động của bạn nắm được liệu người dùng có muốn chọn một tuỳ chọn mới hay không. Bạn cũng thêm các hiệu ứng chuyển đổi thích hợp cho ý định yesno. Ý định yes chuyển đổi sang cảnh Fortune, trong khi ý định no chuyển đổi sang cảnh hệ thống End conversation.

Để thêm ý định và hiệu ứng chuyển đổi vào cảnh Again, hãy làm theo các bước sau:

  1. Mở custom/scenes/Again.yaml trong trình chỉnh sửa văn bản.
  2. Thêm dữ liệu intentEvents ở đầu tệp Again.yaml, phía trên OnEnter:

Again.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: It pleases me that you are satisfied with your choice. Best
                of luck on your quest. Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Lưu tệp.

Kiểm thử Hành động trong trình mô phỏng

Bây giờ, Hành động của bạn phải nắm được liệu người dùng muốn chọn một lựa chọn mới hay kết thúc cuộc trò chuyện.

Để kiểm thử ý định yes, hãy làm theo các bước sau:

  1. Trong cửa sổ dòng lệnh, hãy chạy lệnh sau:
gactions deploy preview

Bạn sẽ nhận được kết quả có dạng như sau:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sao chép URL được cung cấp rồi dán vào một trình duyệt.
  2. Nhập Talk to my test app vào trường Input (Đầu vào) rồi nhấn phím Enter.
  3. Nhập Yes vào trường Input (Đầu vào) rồi nhấn phím Enter. Ngoài ra, hãy nhấp vào khối đề xuất .
  4. Nhấp, nhập hoặc nói một trong các tuỳ chọn.
  5. Nhập Yes vào trường Nhập dữ liệu rồi nhấn phím Enter.

5d0690332efe2e29.pngs

Bạn sẽ nhận được câu lệnh: "Bạn chọn gì để giúp bạn làm nhiệm vụ, rồng, dịch giả hay la bàn?"

Để kiểm thử ý định no, hãy làm theo các bước sau:

  1. Nhấp, nhập hoặc nói một trong các tuỳ chọn.
  2. Nhập No vào trường nhập dữ liệu rồi nhấn phím Enter.

Bạn sẽ nhận được câu lệnh của End conversation: "Tôi hài lòng với lựa chọn của bạn. Chúc bạn may mắn trong nhiệm vụ. Tạm biệt."

4. Thêm đường dẫn hỗ trợ

Bạn hiện đã tạo đường dẫn chính mà hầu hết người dùng thực hiện trong Hành động của bạn. Tuy nhiên, người dùng có thể trả lời lời nhắc trong cảnh Fortune: "Bạn chọn gì để giúp bạn làm nhiệm vụ, rồng, dịch giả hoặc la bàn?", bằng cách đưa ra một lựa chọn không phải là một trong các lựa chọn được đưa ra.

Trong phần này, bạn thiết lập Hành động của mình để hiểu thời điểm người dùng nói "magic", "money", "ngựa" hoặc "điện thoại" và để nhắc lại người dùng chọn 1 trong 3 lựa chọn ban đầu khi họ chọn 1 trong 3 lựa chọn này. Để định cấu hình logic này, bạn cần tạo một type mới chứa các lựa chọn khác này và một ý định mới (other_option) được so khớp khi người dùng nói một trong các tuỳ chọn này. Bạn cũng cần chú thích các cụm từ huấn luyện trong ý định other_option để xác định và trích xuất các tham số ý định.

Khi phát hiện một tham số trùng khớp trong hoạt động đầu vào của người dùng, công cụ Xử lý ngôn ngữ tự nhiên của Trợ lý sẽ trích xuất giá trị đó dưới dạng tham số đã nhập để bạn có thể áp dụng logic trong cảnh. Trong lớp học lập trình này, bạn sẽ định cấu hình Hành động để trích xuất nguồn trợ giúp mà người dùng chọn và tham chiếu đến lựa chọn đó trong câu lệnh.

Tạo loại unavailable_options

Giờ đây, bạn có thể tạo loại unavailable_options chứa nhiều tuỳ chọn để Hành động của bạn có thể xác định dữ liệu đó trong dữ liệu đầu vào của người dùng.

Để tạo loại unavailable_options, hãy làm theo các bước sau:

  1. Tạo một tệp mới có tên là unavailable_options.yaml trong thư mục types:
touch custom/types/unavailable_options.yaml
  1. Mở custom/types/unavailable_options.yaml trong trình chỉnh sửa văn bản.
  2. Thêm dữ liệu synonyms sau đây vào tệp unavailable_options.yaml:

unavailable_options.yaml

synonym:
  entities:
    money:
      synonyms:
      - money
      - cash
      - gold
    horse:
      synonyms:
      - horse
      - stallion
      - steed
    magic:
      synonyms:
      - magic
      - enchanted
      - spells
    phone:
      synonyms:
      - phone
      - cell
      - apps
  matchType: EXACT_MATCH
  1. Lưu tệp.

Tạo ý định other_option

Tiếp theo, bạn tạo một ý định có tên là other_option và thêm các cụm từ huấn luyện bao gồm các tuỳ chọn trong loại unavailable_options. Ý định này được so khớp khi người dùng chọn một lựa chọn có trong loại unavailable_options.

Để tạo và định cấu hình ý định other_option, hãy làm theo các bước sau:

  1. Tạo một tệp mới có tên là other_option.yaml trong thư mục intents:
touch custom/intents/other_option.yaml
  1. Mở custom/intents/other_option.yaml trong trình chỉnh sửa văn bản.
  2. Thêm dữ liệu parameterstrainingPhrases sau đây vào tệp other_option.yaml:

other_option.yaml

parameters:
- name: chosenUnavailableOption
  type:
    name: unavailable_options
trainingPhrases:
- I want to use ($chosenUnavailableOption 'spells' auto=true)
- I really really want to use a ($chosenUnavailableOption 'phone' auto=true)
- ($chosenUnavailableOption 'magic' auto=true)!
- ($chosenUnavailableOption 'cash' auto=true)
- I want to ride a ($chosenUnavailableOption 'horse' auto=true)

Ở đây, bạn chú thích các cụm từ huấn luyện theo cách thủ công bằng các lựa chọn không có sẵn mà bạn đã chỉ định trong phần trước. Tham số ý định chosenUnavailableOption cho phép bạn trích xuất tên của tuỳ chọn và sử dụng lựa chọn đó trong câu lệnh. Bạn sẽ thực hiện việc này trong phần sau.

  1. Lưu tệp.

Thêm ý định other_option vào cảnh Fortune

Bây giờ, bạn đã có ý định other_option. Ý định này có thể xử lý người dùng chỉ định một tuỳ chọn không phải là một trong các tuỳ chọn ban đầu. Trong phần này, bạn sẽ thêm ý định other_option vào cảnh Fortune. Bạn sử dụng tham số ý định để tuỳ chỉnh lời nhắc dựa trên hoạt động đầu vào của người dùng.

Để thêm ý định other_option vào cảnh Fortune, hãy làm theo các bước sau:

  1. Mở custom/scenes/Fortune.yaml trong trình chỉnh sửa văn bản.
  2. Thêm dữ liệu intentEvents sau đây vào giữa dữ liệu conditionalEvents và dữ liệu slots:

Fortune.yaml

intentEvents:
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech:  I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey.
  intent: other_option
  1. Lưu tệp.

Biểu thức $intent.params.chosenUnavailableOption đề cập đến đối tượng tham số ý định và $intent.params.chosenUnavailableOption.original tham chiếu đến giá trị của đối tượng đó. Thuộc tính original đề cập đến dữ liệu đầu vào thô do người dùng chỉ định.

Khi người dùng nói một tuỳ chọn được liệt kê thuộc loại unavailable_options trong cảnh Fortune, ý định other_option sẽ được so khớp và thêm một lời nhắc vào hàng đợi lời nhắc. Vì không có lượt chuyển đổi nào được chỉ định, nên vòng lặp thực thi cảnh sẽ tiếp tục bằng cách đánh giá lại giai đoạn điều kiện. Sau đó, khe chosenOptions sẽ thêm lời nhắc vào hàng đợi lời nhắc và hàng đợi lời nhắc đó sẽ được gửi đến người dùng.

Kiểm thử Hành động trong trình mô phỏng

Hành động của bạn giờ đây phải phản hồi thích hợp khi người dùng chọn một trong các tuỳ chọn được liệt kê trong loại unavailable_options và chỉ định phương thức hỗ trợ mà người dùng đã chọn. Sau đó, Hành động của bạn phải nhắc lại người dùng chọn một trong các lựa chọn ban đầu (con rồng, dịch giả hoặc la bàn).

Để kiểm tra Hành động của bạn trong trình mô phỏng, hãy làm theo các bước sau:

  1. Trong cửa sổ dòng lệnh, hãy chạy lệnh sau:
gactions deploy preview

Bạn sẽ nhận được kết quả có dạng như sau:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sao chép URL được cung cấp rồi dán vào một trình duyệt.
  2. Nhập Talk to my test app vào trường Input (Đầu vào) rồi nhấn phím Enter.
  3. Nhập Yes vào trường Input (Đầu vào) rồi nhấn phím Enter. Ngoài ra, hãy nhấp vào khối đề xuất .
  4. Nhập magic vào trường Input (Đầu vào) rồi nhấn phím Enter.

3a42c33eca435f32.pngs

Bạn có thể nhận thấy lời nhắc có vẻ không chính xác khi người dùng chọn "magic" vì chữ "a" bài viết được đặt trước nó. Bạn sẽ giải quyết vấn đề này trong các phần sau.

Thêm trình xử lý unavailable_options

Để đặt ký tự "a" trước khi đưa ra các lựa chọn thích hợp cho loại unavailable_options, bạn có thể định cấu hình trình xử lý sự kiện trong logic phương thức thực hiện để kiểm tra xem tuỳ chọn mà người dùng chọn có cần ký tự "a" hay không trước nó. Trước tiên, bạn cần định cấu hình Hành động để gọi trình xử lý từ cảnh Fortune.

Để thêm trình xử lý unavailable_options vào cảnh Fortune, hãy làm theo các bước sau:

  1. Mở custom/scenes/Fortune.yaml trong trình chỉnh sửa văn bản.
  2. Cập nhật tệp Fortune.yaml với dữ liệu intentEvents sau:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Lưu tệp.

Cập nhật và triển khai phương thức thực hiện

Giờ đây, khi đã định cấu hình Hành động để gọi trình xử lý sự kiện unavailable_options, bạn có thể cập nhật trình xử lý này trong phương thức thực hiện và triển khai trình xử lý đó.

Để cập nhật phương thức thực hiện đơn hàng, hãy làm theo các bước sau:

  1. Mở webhooks/ActionsOnGoogleFulfillment/index.js trong trình chỉnh sửa văn bản.
  2. Thêm mã sau vào index.js trong trình xử lý greeting:

index.js

app.handle('unavailable_options', conv => {
  const option = conv.intent.params.chosenUnavailableOption.original;
  const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
  let message = 'I have seen the future and ';
  if(optionsNeedA.has(optionKey)){
    message = message + 'a ';
  }
  message = message + `${option} will not aid you on your journey. `;
  conv.add(message);
});
  1. Thêm mã sau trong const app = conversation({debug:true});:

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Lưu tệp.

Tìm hiểu mã nguồn

Trình xử lý unavailable_options sẽ thực hiện những việc sau:

  • Lấy dữ liệu option từ đối tượng conv và gán option cho thuộc tính original (đây là dữ liệu đầu vào thô từ người dùng)
  • Gán optionKey cho thuộc tính resolved. Đây là khoá cho loại unavailable_options
  • Kiểm tra xem optionKey có phải là một trong các tuỳ chọn cần có chữ "a" hay không; nếu có, tạo thông báo có thêm "a"
  • Thêm tin nhắn qua conv.add(message)

Cập nhật trình xử lý

Để cho phép Hành động sử dụng unavailable_options, hãy thêm trình xử lý unavailable_options vào webhooks/ActionsOnGoogleFulfillment.yaml.

  1. Thêm tên trình xử lý unavailable_options vào ActionsOnGoogleFulfillment.yaml:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Lưu tệp.

Kiểm thử Hành động trong trình mô phỏng

Bây giờ, Hành động của bạn sẽ điều chỉnh lời nhắc dựa trên việc lựa chọn của người dùng trong loại unavailable_options có cần "a" hay không bài viết trước đó.

Để kiểm thử Hành động của bạn, hãy làm theo các bước sau:

  1. Trong cửa sổ dòng lệnh, hãy chạy lệnh sau:
gactions deploy preview

Bạn sẽ nhận được kết quả có dạng như sau:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Sao chép URL được cung cấp rồi dán vào một trình duyệt.
  2. Nhấp hoặc nhập Talk to my test app vào trường Input (Đầu vào) rồi nhấn phím Enter.
  3. Nhập Yes vào trường Input (Đầu vào) rồi nhấn phím Enter. Ngoài ra, hãy nhấp vào khối đề xuất .
  4. Nhập magic vào trường Input (Đầu vào) rồi nhấn phím Enter. Sau đó, nhập horse vào trường Input (Đầu vào) rồi nhấn phím Enter.

54ee24c5c3c56e.png.

Hành động của bạn phải thêm chữ "a" bài viết trước "ngựa" trong khi tạo câu lệnh mà không có "a" bài viết về "phép thuật" lựa chọn.

5. Trực quan hoá Hành động trong bảng điều khiển Actions

SDK Actions có khả năng tương tác với một IDE dựa trên nền tảng web có tên là Actions Builder (Trình tạo hành động). API này được tích hợp vào bảng điều khiển Actions. Bạn có thể đẩy hệ thống tệp trên máy vào bản nháp của Hành động trong bảng điều khiển bằng lệnh gactions push. Bảng điều khiển Actions cung cấp bản trình bày trực quan về cấu hình của Hành động. Việc xem được liên kết trực quan Hành động của bạn có thể hữu ích trong quá trình phát triển và không ảnh hưởng đến phiên bản Hành động được phân phát cho mục đích thử nghiệm.

Để đẩy dự án Actions của bạn và xem dự án đó trong Bảng điều khiển Actions, hãy làm theo các bước sau:

  1. Trong cửa sổ dòng lệnh, hãy chạy lệnh sau để đẩy dự án của bạn đến bảng điều khiển Actions:
gactions push

Bạn sẽ nhận được kết quả có dạng như sau:

✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
  1. Sao chép URL được cung cấp rồi dán vào một trình duyệt.
  2. Trong Bảng điều khiển Actions, hãy nhấp vào Phát triển ở thanh điều hướng trên cùng.
  3. Nhấp vào mũi tên thả xuống bên cạnh Scenes (Cảnh) rồi nhấp vào Start (Bắt đầu). Bạn sẽ thấy bản trình bày trực quan cảnh Start của Hành động, như minh hoạ trong ảnh chụp màn hình sau đây:

cae526c647f8d40f.png

Dọn dẹp dự án [nên dùng]

Để tránh phát sinh các khoản phí có thể phát sinh, bạn nên xóa các dự án bạn không có ý định sử dụng. Để xoá các dự án mà bạn đã tạo trong lớp học lập trình này, hãy làm theo các bước sau:

  1. Để xoá dự án trên đám mây và các tài nguyên, hãy hoàn tất các bước được liệt kê trong phần Tắt (xoá) dự án.
  1. Không bắt buộc: Để xoá dự án ngay lập tức khỏi Bảng điều khiển Actions, hãy hoàn tất các bước được liệt kê trong phần Xoá dự án. Nếu bạn không hoàn tất bước này, dự án của bạn sẽ tự động bị xoá sau khoảng 30 ngày.

6. Xin chúc mừng!

Giờ đây, bạn đã biết các kỹ năng trung cấp cần thiết để xây dựng Hành động cho Trợ lý Google bằng SDK Hành động.

Nội dung bạn đã đề cập

  • Cách phát triển Hành động trò chuyện bằng thư viện phương thức thực hiện Node.js
  • Cách sử dụng ô để thu thập dữ liệu của người dùng
  • Cách sử dụng các điều kiện để thêm logic vào cảnh
  • Cách thêm vòng lặp trò chơi
  • Cách thêm đường dẫn hỗ trợ

Tìm hiểu thêm

Bạn có thể khám phá những tài nguyên sau đây để tìm hiểu về cách xây dựng Hành động cho Trợ lý Google:

Hãy theo dõi chúng tôi trên Twitter @ActionsOnGoogle để luôn cập nhật những thông báo mới nhất của chúng tôi và đăng bài lên #AoGDevs để chia sẻ những công trình mà bạn đã xây dựng!

Bài khảo sát nhận ý kiến phản hồi

Trước khi thoát, vui lòng điền vào bản khảo sát ngắn về trải nghiệm của bạn.