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ý ảo cá nhân) 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ý thông qua cuộc trò chuyện để thực hiện các việc 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 nhà phát triển Trợ lý để dễ dàng tạo và quản lý trải nghiệm đàm thoại 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 bên thứ ba.

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 với 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 Actions SDK (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 học lập trình này.

Hành động mà bạn tạo trong lớp học lập trình này sẽ cho người dùng biết vận mệnh của họ trong cuộc phiêu lưu ở vùng đất thần thoại Gryffinberg, dựa trên sự trợ giúp mà họ 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 Thao tác đàm thoại phức tạp với các chức năng sau:

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

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

dd6f5c61296b8b50.png

eba043f546aa8c51.png

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

  • Cách sử dụng slot để 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 một cảnh
  • Cách thêm một vòng lặp trò chơi
  • Cách thêm đường dẫn hỗ trợ

Bạn cần có

Các điều kiện tiên quyết cho lớp học lập trình này bao gồm:

  • Một IDE/trình chỉnh sửa văn bản mà bạn chọn.
  • Một cửa sổ dòng lệnh để 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 Lớp học lập trình cấp 1 đã hoàn tất.

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

Không bắt buộc: Nhận mã mẫu

Bạn có thể lấy mã dự án cấp 1 hoàn chỉnh (không bắt buộc) từ Kho lưu trữ GitHub của Lớp học lập trình cấp 1 về Trình tạo hành động để có thể làm theo lớp học lập trình này. Bạn cũng có thể xem mã dự án hoàn chỉnh ở cấp độ 2 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 Thao tác đàm thoại đơn giản với một cảnh duy nhất, Start.

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

  • Chuyển sang một cảnh Fortune mới khi người dùng muốn nghe lời tiên tri
  • Hỏi người dùng muốn chọn trợ lý nào cho hành trình của mình
  • Đưa ra lời tiên tri tuỳ chỉnh dựa trên lựa chọn của người dùng

Chuyển cảnh 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ẽ phản hồi người dùng và kết thúc cuộc trò chuyện
  • Xác định hiệu ứng chuyển cảnh 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 cảnh vào cảnh Fortune, hãy làm theo các bước sau:

  1. Mở dự án Actions của bạn từ lớp học lập trình Cấp 1 trong 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 Level 1 Actions trong lớp học lập trình của bạn trong thiết bị đầu cuối.
  2. Tạo một tệp mới có tên 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 trên hành trình của mình, một con rồng, một người phiên dịch hay một chiếc la bàn?" Bạn có thể sử dụng một tính năng gọi là điền khe cắm để thu thập thông tin cần thiết từ người dùng trước khi tiếp tục.

Thao tác của bạn cung cấp thông tin dự đoán cho 3 trợ lý: rồng, người dịch 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 điền thông tin vào ô của một cảnh để xác định thông tin bạn muốn lấy từ người dùng. Khi công cụ NLU phát hiện một kết quả khớp khe trong hoạt động đầu vào của người dùng, công cụ này sẽ trích xuất khe dưới dạng một tham số được nhập, nhờ đó, bạn có thể thực hiện logic với tham số đó trong một cảnh.

Tạo kiểu available_options

Trong phần này, bạn sẽ tạo một loại mới có tên là available_options, trong đó chỉ định 3 lựa chọn mà người dùng có thể chọn (rồng, người dịch và la bàn) để phản hồi câu lệnh. Bạn cũng xác định một vài từ đồng nghĩa cho các lựa chọn này trong trường hợp người dùng nói điều gì đó tương tự. Trong một phần sau, bạn sẽ thêm loại available_options vào một vị trí để chỉ định rằng bạn muốn nhận được 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 một 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 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ác cặp khoá-giá trị thông tin, trong đó khoá là tên của loại và giá trị là từ đồng nghĩa cho khoá đó. Khi bạn xác định khoá, khoá đó sẽ tự động được thêm dưới dạng một giá trị. Với Actions SDK, bạn biểu thị các khoá dưới dạng entities và các giá trị dưới dạng synonyms.

Để thêm 3 lựa 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.

Giờ đây, Thao tác của bạn hiểu rằng available_options là rồng, người dịch và la bàn, đồng thời cũng có thể nhận ra một số từ đồng nghĩa tương ứng.

Định cấu hình tính năng điền khe

Tiếp theo, bạn cần định cấu hình tính năng điền thông tin vào ô trong cảnh Fortune. Để định cấu hình logic điền khe, 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 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ờ đây, bạn đã thêm loại available_options vào vị trí này. Loại này cho biết Thông tin bạn cần thu thập từ người dùng (lựa chọn của họ về trợ lý) trước khi tiếp tục. Bạn cũng đã định cấu hình một lời nhắc trong khe cắm. Lời nhắc này sẽ được thêm vào hàng đợi lời nhắc khi người dùng chuyển đến giai đoạn điền khe cắm của cảnh.

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

Thêm điều kiện

Giờ đây, bạn đã thêm một vị trí yêu cầu người dùng chọn thiết bị trợ thính, bạn có thể thêm một điều kiện để kiểm tra xem dữ liệu vị trí đã được thu thập hay chưa trước khi người dùng có thể tiếp tục cuộc trò chuyện.

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

Để đị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 những lựa chọn mà người dùng nên chọn để điền vào vị trí. Sau khi thu thập thông tin này từ người dùng, Thao tác của bạn phải đưa ra một lời nhắc đề cập đến lựa chọn cụ thể mà họ đã chọn.

Để kiểm thử Thao tác, 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 trình duyệt.
  2. Nhấp hoặc nhập Talk to my test app vào trường Đầu vào rồi nhấn phím Enter.
  3. Nhập Yes vào trường Đầu vào rồi nhấn Enter. Hoặc 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 câu lệnh cho từng trợ lý mà người dùng có thể chọn.

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

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

Tuỳ chỉnh câu 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 một từ nào đó nghe tương tự, Hành động của bạn sẽ đưa ra một câu nói dựa trên lựa chọn đó. Tiếp theo, bạn sẽ thêm 2 lựa chọn còn lại.

Tuỳ chỉnh translatorcompass

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

  1. Trong tệp custom/scenes/Fortune.yaml, hãy thêm 2 đ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, Thao tác của bạn sẽ cung cấp một câu nói tuỳ chỉnh cho người dùng dựa trên lựa chọn mà họ chọn.

Để kiểm thử Thao tác, 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 trình duyệt.
  2. Nhập Talk to my test app vào trường Đầu vào rồi nhấn Enter.
  3. Nhập Yes vào trường Input (Đầu vào) rồi nhấn Enter. Hoặc bạn có thể nhấp vào khối đề xuất .
  4. Nhấp, nhập hoặc nói Translator.

29e17f950bd0dd71.png

Bạn sẽ nhận được câu nói phù hợp cho lựa chọn "người dịch".

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

Trong phần này, bạn sẽ định cấu hình Thao tác để người dùng có thể chọn một lựa chọn khác và nghe một câu nói khác sau khi 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ể 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 Again cảnh

Trong phần này, bạn sẽ tạo một cảnh Again mới và thêm một câu lệnh hỏi người dùng xem họ có muốn chọn một lựa chọn 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 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 cảnh từ cảnh Fortune sang cảnh Again

Sau khi người dùng nhận được lời tiên tri, cuộc trò chuyện cần chuyển sang cảnh Again mới.

Để thêm hiệu ứng chuyển cảnh 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 từng điều kiện, như minh hoạ trong đoạn mã sau:

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, Thao tác của bạn phải đưa ra lời nhắc sau đây cho người dùng sau khi họ nhận được lời tiên tri: "Đó là những gì tôi thấy về bạn. Bạn có muốn chọn một lựa chọn khác và khám phá một tương lai khác không?"

Để kiểm thử Thao tác, 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 trình duyệt.
  2. Nhập Talk to my test app vào trường Đầu vào rồi nhấn Enter.
  3. Nhập Yes vào trường Đầu vào rồi nhấn Enter. Hoặc bạn có thể 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 câu nói tiên đoán cho lựa chọn rồng và lời nhắc Again.

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

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

Để thêm ý định và hiệu ứng chuyển cảnh 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

Giờ đây, Thao tác của bạn sẽ hiểu đượ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 trình duyệt.
  2. Nhập Talk to my test app vào trường Đầu vào rồi nhấn Enter.
  3. Nhập Yes vào trường Đầu vào rồi nhấn Enter. Hoặc bạn có thể nhấp vào khối đề xuất .
  4. Nhấp, nhập hoặc nói một trong các lựa chọn.
  5. Nhập Yes vào trường nhập dữ liệu rồi nhấn Enter.

5d0690332efe2e29.png

Bạn sẽ nhận được câu hỏi "Bạn chọn gì để giúp bạn trên hành trình của mình: một con rồng, một người phiên dịch hay một 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 lựa chọn.
  2. Nhập No vào trường nhập dữ liệu rồi nhấn Enter.

Bạn sẽ nhận được lời nhắc End conversation: "Tôi rất vui khi bạn hài lòng với lựa chọn của mình. Chúc bạn may mắn trên hành trình của mình. Tạm biệt."

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

Giờ đây, bạn đã tạo được lộ trình chính mà hầu hết người dùng thực hiện trong Thao tác của bạn. Tuy nhiên, người dùng có thể phản hồi câu hỏi từ cảnh Fortune "Bạn chọn gì để giúp bạn trong hành trình của mình: một con rồng, một người phiên dịch hay một la bàn?" bằng một lựa chọn không có trong số các lựa chọn được cung cấp.

Trong phần này, bạn sẽ định cấu hình Hành động để hiểu khi người dùng nói "magic", "money", "horse" hoặc "phone", đồng thời nhắc lại người dùng chọn một trong ba lựa chọn ban đầu khi họ chọn một trong các 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 lựa 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 công cụ Xử lý ngôn ngữ tự nhiên của Trợ lý phát hiện thấy một tham số khớp trong hoạt động đầu vào của người dùng, công cụ này sẽ trích xuất giá trị dưới dạng một tham số được nhập để bạn có thể thực hiện logic với tham số đó trong một cảnh. Trong lớp học lập trình này, bạn sẽ định cấu hình Thao tác để trích xuất thông tin trợ giúp mà người dùng chọn và tham khảo lựa chọn đó trong một lời nhắc.

Tạo kiểu unavailable_options

Giờ đây, bạn có thể tạo một loại unavailable_options chứa nhiều lựa chọn khác nhau để Thao tác của bạn có thể xác định dữ liệu đó trong thông tin đầ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 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 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 other_option ý định

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 lựa chọn trong loại unavailable_options. Ý định này sẽ 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 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 parameters và dữ liệu trainingPhrases 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)

Tại đây, bạn chú thích các cụm từ huấn luyện theo cách thủ công bằng những 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 lựa chọn và sử dụng lựa chọn đó trong một 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

Giờ đây, bạn đã có một ý định, other_option, có thể xử lý trường hợp người dùng chỉ định một lựa chọn không phải là một trong các lựa 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 câu lệnh dựa trên thông tin đầ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 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 đề cập đến giá trị của đối tượng đó. Thuộc tính original đề cập đến dữ liệu đầu vào thô mà người dùng chỉ định.

Khi người dùng nói một lựa chọn có trong 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ó hiệu ứng 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 của mình 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

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

Để kiểm thử Thao tác 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 trình duyệt.
  2. Nhập Talk to my test app vào trường Đầu vào rồi nhấn Enter.
  3. Nhập Yes vào trường Đầu vào rồi nhấn Enter. Hoặc bạn có thể nhấp vào khối đề xuất .
  4. Nhập magic vào trường Đầu vào rồi nhấn Enter.

3a42c33eca435f32.png

Bạn có thể nhận thấy lời nhắc không chính xác khi người dùng chọn "magic" do có mạo từ "a" đứng trước. 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 bài viết "a" trước các lựa chọn thích hợp trong loại unavailable_options, bạn có thể định cấu hình một trình xử lý sự kiện trong logic thực hiện để kiểm tra xem lựa chọn mà người dùng chọn có cần "a" trước đó hay không. Trước tiên, bạn cần định cấu hình Thao tác để 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 bằng 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 yêu cầu thực hiện đơn hàng

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 quá trình thực hiện và triển khai.

Để cập nhật thông tin 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 vào 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 về mã

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à chỉ định option cho thuộc tính original. Đây là dữ liệu đầu vào thô của người dùng
  • Chỉ định 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 những lựa chọn cần có "a" hay không; nếu có, hãy 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 Thao tác 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

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

Để kiểm thử Thao tác, 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 trình duyệt.
  2. Nhấp hoặc nhập Talk to my test app vào trường Đầu vào rồi nhấn phím Enter.
  3. Nhập Yes vào trường Đầu vào rồi nhấn Enter. Hoặc bạn có thể nhấp vào khối đề xuất .
  4. Nhập magic vào trường Đầu vào rồi nhấn Enter. Sau đó, nhập horse vào trường Đầu vào rồi nhấn Enter.

54ee24c5c3c56e.png

Thao tác của bạn nên thêm mạo từ "a" trước lựa chọn "horse" (con ngựa), trong khi tạo câu lệnh mà không có mạo từ "a" cho lựa chọn "magic" (phép thuật).

5. Hình dung Thao tác trong bảng điều khiển Actions

Actions SDK có khả năng tương tác với một IDE dựa trên web có tên là Actions Builder được tích hợp vào Actions Console. Bạn có thể đẩy hệ thống tệp cục bộ 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 thông tin trực quan về cấu hình của Hành động. Việc xem Hành động của bạn được lập bản đồ một cách trực quan 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 để kiểm thử.

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

  1. Trong thiết bị đầu cuối, hãy chạy lệnh sau để đẩy dự án của bạn lê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 trình duyệt.
  2. Trong Bảng điều khiển Actions, hãy nhấp vào Phát triển trong 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 Cảnh rồi nhấp vào Bắt đầu. Bạn sẽ thấy một bản trình bày trực quan về cảnh Start của Thao tác, như minh hoạ trong ảnh chụp màn hình sau:

cae526c647f8d40f.png

Dọn dẹp dự án của bạn [nên dùng]

Để tránh phát sinh các khoản phí có thể có, bạn nên xoá những dự án mà bạn không đị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à tài nguyên, hãy hoàn thành các bước được liệt kê trong phần Tắt (xoá) dự án.
  1. Không bắt buộc: Để xoá ngay dự án của bạn khỏi Actions Console, 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 đã nắm được những kỹ năng trung cấp cần thiết để tạo Hành động cho Trợ lý Google bằng Actions SDK.

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

  • Cách phát triển Thao tác trò chuyện bằng thư viện thực hiện Node.js
  • Cách sử dụng các vị trí để 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 một 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 này để tìm hiểu về cách tạo Hành động cho Trợ lý Google:

Theo dõi chúng tôi trên Twitter @ActionsOnGoogle để nắm bắt những thông báo mới nhất của chúng tôi, đồng thời đăng bài lên Twitter bằng thẻ #AoGDevs để chia sẻ những gì bạn đã tạo!

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

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