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 bằng Trợ lý Google, Chức năng đám mây và Cloud Firestore. Trong lớp học lập trình này, bạn sẽ xây dựng một trò chơi có tên là "Luyện chính tả" sử dụng Trợ lý Google để yêu cầu người dùng đánh vần các từ.
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 trò chơi phức tạp có các chức năng sau:
- Nhận phản hồi chính tả của người dùng và sửa đổi lời nhắc trò chuyện tuỳ theo giá trị
- Đưa ra các gợi ý liên quan đến cách đánh vần từ, chẳng hạn như định nghĩa của từ hoặc lặp lại từ đó
- 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 Trợ lý sau khi đánh vần từ
Trước khi bắt đầu tạo, bạn có thể tương tác với Thao tác đ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 Luyện chính tả". Đườ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:
Khi bạn hoàn tất lớp học lập trình này, Thao tác đã hoàn thành của bạn sẽ có quy trình trò chuyện như sau:

Kiến thức bạn sẽ học được
- Cách tương tác với Cloud Firestore
- Cách sử dụng các vị trí để thu thập dữ liệu từ người dùng
- Cách xử lý dữ liệu đầu vào của người dùng và trả về phản hồi
- 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
Bạn cần
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 trình duyệt web, chẳng hạn như Google Chrome
- Một IDE để viết Cloud Functions.
- Một phương thức thanh toán. Lớp học lập trình này sử dụng Cloud Functions cho Firebase. Do đó, dự án của bạn phải sử dụng gói giá Linh hoạt của Firebase ( Tìm hiểu thêm).
- Một thiết bị đầu cuối để chạy các lệnh shell
- Node.js 10 trở lên
2. Lấy mã hàm
Sao chép kho lưu trữ GitHub từ dòng lệnh:
$ git clone https://github.com/FirebaseExtended/codelab-actions-firestore
3. Tạo dự án Firebase và thiết lập ứng dụng
Tạo một dự án Firebase
- Đăng nhập vào Firebase.
- Trong bảng điều khiển của Firebase, hãy nhấp vào Thêm dự án (hoặc Tạo dự án), sau đó đặt tên cho dự án Firebase của bạn là
Spelling-Practice.

- Nhấp vào các lựa chọn tạo dự án. Chấp nhận các điều khoản của Firebase nếu được nhắc. Bỏ qua bước thiết lập Google Analytics vì bạn sẽ không sử dụng Analytics cho ứng dụng này.
Để tìm hiểu thêm về các dự án Firebase, hãy xem bài viết Tìm hiểu về các dự án Firebase.
Nâng cấp lên gói giá linh hoạt
Để sử dụng Cloud Functions cho Firebase, bạn cần nâng cấp dự án Firebase lên gói giá Blaze. Điều này có nghĩa là bạn sẽ đính kèm một tài khoản thanh toán trên Google Cloud vào dự án của mình. Bạn phải cung cấp thẻ tín dụng hoặc phương thức thanh toán khác.
Tất cả dự án Firebase, kể cả những dự án sử dụng gói Blaze, vẫn có hạn mức sử dụng miễn phí cho Cloud Functions. Các bước được nêu trong lớp học lập trình này sẽ nằm trong giới hạn sử dụng miễn phí. Tuy nhiên, bạn sẽ thấy các khoản phí nhỏ ( khoảng 0, 03 USD) từ Cloud Storage.Đây là dịch vụ dùng để lưu trữ các hình ảnh bản dựng của Cloud Functions.
4. Cài đặt Giao diện dòng lệnh (CLI) của Firebase
Giao diện dòng lệnh (CLI) của Firebase cho phép bạn triển khai Cloud Functions.
Có một số lựa chọn để cài đặt Giao diện dòng lệnh (CLI) của Firebase, tuỳ thuộc vào hệ điều hành và trường hợp sử dụng của bạn. Các bước sau đây mô tả lựa chọn phổ biến nhất nếu bạn cũng đang sử dụng Cloud Functions.
- Đảm bảo bạn đã cài đặt npm (thường đi kèm với Node.js).
- Cài đặt hoặc nâng cấp CLI bằng cách chạy lệnh npm sau:
$ npm -g install firebase-tools
- Xác minh rằng bạn đã cài đặt CLI đúng cách bằng cách chạy:
$ firebase --version
Đảm bảo phiên bản Firebase CLI là 9.0.0 trở lên để có tất cả các tính năng mới nhất cần thiết cho Cloud Functions. Nếu không, hãy chạy lệnh npm install -g firebase-tools để nâng cấp như minh hoạ ở trên.
- Uỷ quyền cho Giao diện dòng lệnh (CLI) của Firebase bằng cách chạy:
$ firebase login
- Trong thư mục spelling-functions-start, hãy thiết lập Giao diện dòng lệnh (CLI) của Firebase để sử dụng dự án Firebase của bạn. Chạy lệnh sau, chọn mã dự án của bạn, rồi làm theo hướng dẫn. Khi được nhắc, bạn có thể chọn một Biệt hiệu bất kỳ, chẳng hạn như
codelab.
$ firebase use --add
5. Thư mục functions
Bây giờ, bạn sẽ thêm chức năng bằng cách sử dụng Firebase SDK cho Cloud Functions để tạo phần phụ trợ cho trò chơi Luyện chính tả.
Cloud Functions cho phép bạn có mã chạy trên đám mây mà không cần thiết lập máy chủ. Lớp học lập trình này sẽ hướng dẫn bạn cách tạo các hàm phản hồi các sự kiện Xác thực Firebase, Cloud Storage và Cơ sở dữ liệu thời gian thực Firebase. Hãy bắt đầu với Xác thực.
Khi sử dụng Firebase SDK cho Cloud Functions, mã hàm của bạn sẽ nằm trong thư mục functions (theo mặc định). Để giúp bạn dễ dàng hơn, chúng tôi đã tạo tệp functions/index.js nơi mã của bạn sẽ được đặt. Bạn có thể kiểm tra thư mục functions trước khi tiếp tục.
$ cd functions $ ls
Mã hàm của bạn cũng là một ứng dụng Node.js, do đó cần có một package.json cung cấp một số thông tin về ứng dụng của bạn và liệt kê các phần phụ thuộc.
Nếu bạn chưa quen với Node.js, bạn nên tìm hiểu thêm về nền tảng này trước khi tiếp tục lớp học lập trình.
Tệp package.json đã liệt kê 2 phần phụ thuộc bắt buộc: Firebase SDK cho Cloud Functions và Firebase Admin SDK. Để cài đặt các gói này cục bộ, hãy chạy npm install từ thư mục functions:
$ npm install
Bây giờ, hãy xem tệp index.js:
index.js
/** * Copyright 2021 Google Inc. All Rights Reserved. * ... */ // TODO(DEVELOPER): Import the Cloud Functions for Firebase and Firebase Admin modules here. Also import the Actions SDK here. // TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here. // TODO(DEVELOPER): Write the createSpellingPracticeWord function here. // TODO(DEVELOPER): Write the app Handle getSpellingWordList function here. // TODO(DEVELOPER): Write the app Handle getSpellingWord function here. // TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here. // TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here. // TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.
Trước tiên, bạn sẽ nhập các mô-đun cần thiết, sau đó viết 4 hàm thay cho các TODO. Tiếp tục bước tiếp theo của lớp học lập trình để nhập các mô-đun.
6. Nhập các mô-đun bắt buộc
Lớp học lập trình này yêu cầu 3 mô-đun.
- Mô-đun
firebase-functionscho phép chúng ta viết các điều kiện kích hoạt cho Cloud Functions - Mô-đun
firebase-admincho phép chúng ta sử dụng nền tảng Firebase trên một máy chủ có quyền truy cập của quản trị viên, chẳng hạn như để ghi vào Cloud Firestore. - Thư viện Thực hiện Node.js của Actions SDK thực hiện các trình xử lý Actions SDK cho Trợ lý Google.
- Cài đặt Actions SDK bằng cách chạy lệnh npm sau:
$ npm install @assistant/conversation
- Trong tệp
index.js, hãy thay thế phần TODO đầu tiên bằng nội dung sau.
Những thay đổi này sẽ nhập từng mô-đun bắt buộc.
Ngoài ra, bạn có thể tự động định cấu hình Firebase Admin SDK khi triển khai trên môi trường Cloud Functions hoặc vùng chứa Google Cloud khác. Đây là những gì sẽ xảy ra khi chúng ta gọi admin.initializeApp(); trong các thay đổi bên dưới.
index.js
/**
* Copyright 2021 Google Inc. All Rights Reserved.
* ...
*/
// Import the Actions SDK
const {conversation} = require('@assistant/conversation');
const https = require('https');
const app = conversation();
const cors = require('cors')({origin: true});
// Import the Firebase SDK for Cloud Functions.
const functions = require('firebase-functions');
// Import and initialize the Firebase Admin SDK.
const admin = require('firebase-admin');
admin.initializeApp();
// To access Cloud Firestore
const db = admin.firestore();
// TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here.
// TODO(DEVELOPER): Write the createSpellingPracticeWord function here.
// TODO(DEVELOPER): Write the shuffleWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.
Bây giờ, hãy thêm logic nghiệp vụ bằng cách sử dụng các hàm để hỗ trợ Hành động của Trợ lý.
7. Tạo hàm
Lấy định nghĩa của từ và ghi vào Cloud Firestore
Bạn sẽ sử dụng API công khai dictionaryapi.dev để lấy định nghĩa của từ.
Trong tệp index.js, hãy thay thế TODO cho getWordDetailsFromDictionaryAPI bằng nội dung sau:
index.js
// Retrieves word definition and audio pronunciation from api.dictionaryapi.dev service
// Function uses service provided by https://dictionaryapi.dev/
async function getWordDetailsFromDictionaryAPI(word) {
let responseData="";
let req = https.request({
host: 'api.dictionaryapi.dev',
port: 443,
path:'/api/v2/entries/en/' + word,
method:'GET'
}, (res) => {
res.setEncoding('utf8');
res.on('data', d => {
responseData+=d;
})
res.on('end',function(){
let object = JSON.parse(responseData)
const wordListRef = db.collection('wordlist');
wordListRef.doc(object[0].word).set(
object[0]
);
return responseData;
});
});
req.end();
}
Thêm bộ kích hoạt Cloud Firestore
Tiếp theo, bạn sẽ tạo một Cloud Function kích hoạt bất cứ khi nào một tài liệu mới được tạo trong Cloud Firestore. Thao tác này sẽ gọi API dictionaryapi.dev để lấy định nghĩa của từ thông qua hàm getWordDetailsFromDictionaryAPI mà chúng ta vừa viết ở trên.
Trong tệp index.js, hãy thay thế TODO cho createSpellingPracticeWord bằng nội dung sau:
index.js
// Firestore trigger that fetches word definitions through getWordDetailsFromDictionaryAPI for every new Firestore document
exports.createSpellingPracticeWord = functions.firestore
.document('wordlist/{word}')
.onCreate((snap, context) => {
const newValue = snap.data();
const word = newValue.word;
getWordDetailsFromDictionaryAPI(word);
});
Lấy danh sách các từ cho trò chơi
Bạn có thể viết một Cloud Function để truy xuất danh sách các từ cần luyện chính tả từ Cloud Firestore cho Trợ lý. Để làm việc này, chúng ta sử dụng trình xử lý ứng dụng.
Trong tệp index.js, hãy thay thế TODO cho getSpellingWordList bằng nội dung sau.
Việc thêm hàm này vào app.handle đặc biệt là một cách để truy cập vào hàm này thông qua Trợ lý.
index.js
// Store the list of spelling words in Assistant session
app.handle('getSpellingWordList', conv => {
const wordListRef = db.collection('wordlist').limit(50);
const snapshot = wordListRef;
if (snapshot.empty) {
console.log('No matching documents.');
return;
}
VocabularyList = []
return snapshot.get().then(snapshot => {
snapshot.forEach(doc => {
if (doc.data().word) {
let definition = 'unknown';
let audio = 'unknown';
try {
if(doc.data().hasOwnProperty('meanings')) {
if(doc.data().meanings[0].hasOwnProperty('definitions')) {
definition = doc.data().meanings[0].definitions[0].definition;
}
}
if(doc.data().hasOwnProperty('phonetics')) {
if(doc.data().phonetics.length > 0)
audio = doc.data().phonetics[0].audio;
}
} catch (error) {
console.log(error);
}
let obj = {
word: doc.data().word,
answer: doc.data().word.split("").join(" "),
definition: definition,
audio: audio
}
VocabularyList.push(obj);
}
// Shuffle the array
let currentIndex = VocabularyList.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = VocabularyList[currentIndex];
VocabularyList[currentIndex] = VocabularyList[randomIndex];
VocabularyList[randomIndex] = temporaryValue;
}
conv.session.params.vocabWord = VocabularyList;
conv.session.params.vocabWordIndex = 0;
});
});
})
Lấy một từ từ phiên Trợ lý
Bạn có thể viết một Cloud Function trả về từ chính tả tiếp theo trong danh sách từ.
Trong tệp index.js, hãy thay thế TODO cho getSpellingWord bằng nội dung sau:
index.js
// Returns a spelling practice word to Google Assistant and uses Speech Synthesis Markup Language (SSML) to format the response
app.handle('getSpellingWord', conv => {
if (!conv.session.params.vocabWord.empty) {
conv.session.params.vocabWordIndex+=1;
const ssml = '<speak>' +
'<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word.</audio> ' +
'</speak>';
conv.add(ssml);
}
else
conv.add('Great job! You completed the Spelling practice');
});
Cho phép trò chơi lặp lại từ
Bạn có thể viết một Cloud Function lặp lại từ hiện tại cho trò chơi.
Trong tệp index.js, hãy thay thế TODO cho repeatSpellingWord bằng nội dung sau:
index.js
// Returns current spelling word
app.handle('repeatSpellingWord', conv => {
if (!conv.session.params.vocabWord.empty) {
const ssml = '<speak>' +
'<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word. </audio> ' +
'</speak>';
conv.add(ssml);
}
else
conv.add('Great job! You completed the Spelling practice');
});
Xem định nghĩa của từ
Bạn có thể viết một Cloud Function cung cấp định nghĩa của từ hiện tại cho trò chơi.
Trong tệp index.js, hãy thay thế TODO cho definitionOfSpellingWord bằng nội dung sau:
index.js
// Returns spelling word definition from Assistant session parameter
app.handle('definitionOfSpellingWord', conv => {
conv.add( 'It means ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].definition);
});
Kiểm tra phản hồi chính tả của người dùng
Bạn có thể viết một Cloud Function để xác minh phản hồi của người dùng về cách đánh vần từ hiện tại trong trò chơi.
Trong tệp index.js, hãy thay thế TODO cho verifySpellingWord bằng nội dung sau:
index.js
// Verifies user spelling response
app.handle('verifySpellingWord', conv => {
try {
userResponse = conv.intent.params.userresponse.resolved.join("");
if (userResponse.toLowerCase() === conv.session.params.vocabWord[conv.session.params.vocabWordIndex].word.toLowerCase()) {
conv.add('You are correct. Say next to continue.');
}
else {
conv.add('Sorry, wrong answer. The correct answer is ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].answer + ' . Say next to continue.');
}
} catch (error) {
conv.add('Sorry. I did not understand your response' );
}
});
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
Triển khai tất cả các hàm
Cloud Functions sẽ chỉ hoạt động sau khi bạn triển khai các hàm này cho Firebase.
Từ gốc của thư mục spelling-functions-start, hãy chạy lệnh sau:
$ firebase deploy --only functions
Đây là kết quả đầu ra của bảng điều khiển mà bạn sẽ thấy:
i deploying functions i functions: ensuring necessary APIs are enabled... ⚠ functions: missing necessary APIs. Enabling now... i env: ensuring necessary APIs are enabled... ⚠ env: missing necessary APIs. Enabling now... i functions: waiting for APIs to activate... i env: waiting for APIs to activate... ✔ env: all necessary APIs are enabled ✔ functions: all necessary APIs are enabled i functions: preparing functions directory for uploading... i functions: packaged functions (X.XX KB) for uploading ✔ functions: functions folder uploaded successfully i starting release process (may take several minutes)... i functions: creating function createSpellingPracticeWord(us-central1)... ✔ functions[createSpellingPracticeWord(us-central1)]: Successful create operation. i functions: creating function ActionsOnGoogleFulfillment(us-central1)... ✔ functions[ActionsOnGoogleFulfillment(us-central1)]: Successful create operation. ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/spelling-practice-1234/overview
Ghi lại URL điểm cuối Http của hàm ActionsOnGoogleFulfillment để sử dụng sau này. Để lấy điểm cuối, hãy mở Bảng điều khiển của Firebase rồi nhấp vào dự án spelling-practice. Mở trang tổng quan về Functions để xem điểm cuối của các hàm.

Bạn đã hoàn tất việc thêm tất cả các hàm bắt buộc. Bây giờ, hãy chuyển sang thiết lập Cloud Firestore.
8. Bật Cloud Firestore
Bạn cần bật Cloud Firestore.
Trong mục Tạo của bảng điều khiển Firebase, hãy nhấp vào Firestore. Sau đó, hãy nhấp vào Tạo cơ sở dữ liệu.

Quyền truy cập vào dữ liệu trong Cloud Firestore được kiểm soát bằng Quy tắc bảo mật. Trước tiên, bạn cần đặt một số quy tắc cơ bản về dữ liệu để bắt đầu. Nhấp vào Firestore rồi trong thẻ Quy tắc của bảng điều khiển Firebase, hãy thêm các quy tắc sau rồi nhấp vào Xuất bản.
Các quy tắc sau đây hạn chế quyền truy cập dữ liệu đối với những người dùng đã đăng nhập, ngăn người dùng chưa được xác thực đọc hoặc ghi.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
//
// WARNING: These rules are insecure! We will replace them with
// more secure rules later in the codelab
//
allow read, write: if request.auth != null;
}
}
}
9. Thêm dữ liệu từ chính tả vào Cloud Firestore
Ở bước này, bạn sẽ ghi dữ liệu từ chính tả vào Cloud Firestore để có thể tạo danh sách từ cho Trợ lý (và trò chơi).
Dữ liệu Cloud Firestore được cấu trúc thành các tập hợp, tài liệu, trường và tập hợp con. Mỗi từ trong trò chơi sẽ được lưu trữ dưới dạng một tài liệu riêng trong một tập hợp cấp cao nhất có tên là wordlist. Đối với mỗi tài liệu mới trong bộ sưu tập Firestore, hàm createSpellingPracticeWord sẽ được kích hoạt để lấy thông tin chi tiết về từ từ dịch vụ Dictionary API.
Tạo một bộ sưu tập Cloud Firestore
- Trong bảng điều khiển của Firebase, hãy chuyển đến phần Cloud Firestore.
- Nhấp vào biểu tượng + Bắt đầu thu thập.
- Trong hộp văn bản Mã nhận dạng bộ sưu tập, hãy nhập
wordlist, rồi nhấp vào Tiếp theo.

Tiếp theo, chúng ta sẽ tạo một tài liệu cho từ: agreement
- Trong hộp văn bản Mã nhận dạng tài liệu, hãy nhập
agreement. - Trong hộp văn bản Trường, hãy nhập
wordvà trong hộp văn bản Giá trị, hãy nhậpagreement. - Nhấp vào Lưu.

Khi bạn thêm tài liệu này vào Cloud Firestore, tài liệu này sẽ kích hoạt hàm createSpellingPracticeWord để tìm nạp thông tin chi tiết về định nghĩa của từ. Thêm nhiều từ khác (ví dụ: awe, car, true, tell, better, commute, ...) bằng cách tạo một tài liệu mới cho mỗi từ.
10. Thiết lập Trợ lý Google
Các phần sau đây mô tả cách thiết lập môi trường phát triển Trợ lý Google và tạo dự án Hành động.
Kiểm tra chế độ cài đặt quyền của bạn trên Google
Để kiểm thử Thao tác mà bạn tạo trong lớp học lập trình này, bạn cần bật các quyền cần thiết để trình mô phỏng có thể truy cập vào Thao tác của bạn. Để bật quyền, hãy làm theo các bước sau:
- Truy cập trang Kiểm soát hoạt động.
- Đăng nhập bằng Tài khoản Google của bạn (nếu bạn chưa đăng nhập).
- Bật các quyền sau:
- Hoạt động trên web và ứng dụng
- Trong mục Hoạt động trên web và ứng dụng, hãy chọn hộp đánh dấu bên cạnh mục Bao gồm cả nhật ký duyệt web trên Chrome cũng như hoạt động trên những trang web, ứng dụng và thiết bị sử dụng các dịch vụ của Google.

Tạo một dự án Actions
Dự án Actions là một vùng chứa cho Action của bạn. Để tạo dự án Actions cho lớp học lập trình này, hãy làm theo các bước sau:
- Mở Bảng điều khiển Actions.
- Nhấp vào Dự án mới.
- Chấp nhận điều khoản dịch vụ

- Nhập hoặc chọn
spelling-practice-codelabmà bạn đã tạo bằng Bảng điều khiển của Firebase. (Tên này chỉ để bạn tham khảo nội bộ. Sau này, bạn có thể đặt tên bên ngoài cho dự án của mình.)

- Nhấp vào Nhập dự án.
- Trong màn hình Bạn muốn tạo loại Thao tác nào?, hãy chọn thẻ Tuỳ chỉnh.
- Nhấp vào Tiếp theo.
- Chọn thẻ Dự án trống.
- Nhấp vào Bắt đầu xây dựng.
- Nhập Luyện chính tả cho tên hiển thị rồi nhấp vào lưu.
Người dùng bắt đầu cuộc trò chuyện với Hành động của bạn thông qua lệnh gọi. Ví dụ: người dùng có thể gọi Hành động của bạn bằng cách nói một cụm từ như "Ok Google, nói chuyện với Spelling Practice", trong đó Spelling Practice là tên hiển thị.
Hành động của bạn phải có tên hiển thị nếu bạn muốn triển khai hành động đó cho người dùng; tuy nhiên, để kiểm thử Hành động, bạn không cần xác định tên hiển thị. Thay vào đó, bạn có thể sử dụng cụm từ "Nói chuyện với ứng dụng kiểm thử của tôi" trong trình mô phỏng để gọi Thao tác.
Định cấu hình việc thực hiện đơn hàng
Bạn cần kết nối với Trợ lý các trình xử lý sự kiện cho Cloud Functions mà bạn đã viết và triển khai trước đó trong lớp học lập trình này.
Để thiết lập phương thức thực hiện, hãy làm theo các bước sau:
- Nhấp vào Webhook trong bảng điều hướng bên.
- Chọn Điểm cuối HTTPS làm lựa chọn thực hiện đơn hàng:

- Nhập URL của điểm cuối hàm vào hộp văn bản Điểm cuối HTTPs, rồi nhấp vào Lưu.

Trong phần tiếp theo, bạn sẽ tuỳ chỉnh câu lệnh cho lệnh gọi chính trong Actions Console.
Thiết lập lệnh gọi chính
Bạn phải chỉnh sửa lệnh gọi chính để xác định điều gì sẽ xảy ra sau khi người dùng gọi Hành động của bạn.
Theo mặc định, Actions Builder cung cấp một lời nhắc chung khi lệnh gọi của bạn được kích hoạt ("Bắt đầu tạo Hành động bằng cách xác định lệnh gọi chính").
Để sửa đổi lời nhắc mà Thao tác của bạn gửi lại cho người dùng khi họ gọi Thao tác của bạn, hãy làm theo các bước sau:
- Nhấp vào Lời kêu gọi chính trong phần điều hướng.

- Đánh dấu vào
Call your webhookvà thêm tên trình xử lý sự kiệngetSpellingWordListvào hộp văn bản. - Trong trình chỉnh sửa mã, hãy thay thế văn bản trong trường
speechbằng thông báo chào mừng sau đây:Welcome to Spelling Practice
Lưu ý: Bạn có thể sử dụng định dạng YAML hoặc JSON để chỉnh sửa câu lệnh.
- Nhấp vào Lưu.
Kiểm thử lệnh gọi chính trong trình mô phỏng
Actions Console cung cấp một công cụ web để kiểm thử Hành động của bạn, được gọi là trình mô phỏng. Giao diện này mô phỏng các thiết bị phần cứng và chế độ cài đặt của chúng, nhờ đó bạn có thể trò chuyện với Thao tác của mình như thể Thao tác đó đang chạy trên Màn hình thông minh, điện thoại, loa hoặc KaiOS.
Để kiểm thử lệnh gọi chính của Thao tác trong trình mô phỏng, hãy làm theo các bước sau:
- Trong thanh điều hướng trên cùng, hãy nhấp vào Kiểm thử để chuyển đến trình mô phỏng.
- Để gọi Hành động của bạn trong trình mô phỏng, hãy nhập
Talk to Spelling Practicevào trường nhập liệu ở trên cùng bên trái, sau đó nhấn phím Enter trên bàn phím.

Khi bạn kích hoạt lệnh gọi chính của Thao tác, Trợ lý sẽ phản hồi bằng thông báo chào mừng tuỳ chỉnh của bạn. Tại thời điểm này, cuộc trò chuyện sẽ kết thúc sau khi Trợ lý phản hồi bằng một lời chào.
Xem nhật ký sự kiện
Khi bạn ở thẻ Kiểm thử, bảng điều khiển ở bên phải sẽ cho thấy nhật ký sự kiện. Nhật ký này hiển thị nhật ký cuộc trò chuyện dưới dạng nhật ký sự kiện. Mỗi nhật ký sự kiện sẽ hiển thị các sự kiện xảy ra trong lượt trò chuyện đó. Để xem nhật ký sự kiện, hãy nhấp vào biểu tượng màu xám trước sự kiện.
Hành động của bạn hiện có một nhật ký sự kiện, cho thấy cả thông tin đầu vào của người dùng ("Talk to Spelling Practice") và phản hồi của Hành động. Ảnh chụp màn hình sau đây cho thấy nhật ký sự kiện của Hành động:

11. Xây dựng cuộc trò chuyện cho tính năng Luyện chính tả
Giờ đây, sau khi xác định những gì sẽ xảy ra sau khi người dùng gọi Hành động của bạn, bạn có thể xây dựng phần còn lại của cuộc trò chuyện trong Hành động. Bài tập chính tả có 4 cảnh và bạn phải kích hoạt từng cảnh thì mới có thể chạy. Cách phổ biến nhất để kích hoạt một cảnh là định cấu hình Thao tác để khi người dùng khớp với ý định của người dùng trong một cảnh, ý định đó sẽ kích hoạt quá trình chuyển đổi sang một cảnh khác và kích hoạt cảnh đó.
Chuyển đổi từ lệnh gọi chính sang cảnh bắt đầu
Trong phần này, bạn sẽ tạo một cảnh mới có tên là Start. Cảnh này sẽ gửi một lời nhắc cho người dùng để hỏi xem họ có muốn bắt đầu chơi Bài tập chính tả hay không. Bạn cũng thêm một hiệu ứng chuyển đổi từ lệnh gọi chính sang cảnh Start mới.
Để tạo cảnh này và thêm hiệu ứng chuyển cảnh vào đó, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong trình đơn điều hướng trên cùng. Sau đó, hãy nhấp vào Lệnh gọi chính trong bảng điều hướng bên trái.
- Trong phần Chuyển cảnh ở bên phải, hãy nhấp vào trình đơn thả xuống, rồi nhập
Startvào trường văn bản.

- Nhấp vào Thêm. Thao tác này sẽ tạo ra một cảnh có tên là
Startvà yêu cầu Action chuyển sang cảnhStartsau khi Action gửi lời chào đến người dùng. - Nhấp vào Cảnh trong bảng điều hướng bên trái để hiện danh sách cảnh.
- Trong phần Cảnh, hãy nhấp vào Bắt đầu để xem cảnh
Start. - Nhấp vào dấu + trong mục Khi vào của cảnh
Start. - Chọn Gửi câu lệnh.
- Thay thế câu trong trường
speech(Enter the response that users will see or hear...) bằng một câu hỏi để hỏi người dùng:Use phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?
Các đề xuất dạng chip cung cấp những đề xuất mà người dùng có thể nhấp vào để Hành động của bạn xử lý dưới dạng thông tin đầu vào của người dùng. Trong phần này, bạn sẽ thêm các đề xuất dạng chip xuất hiện bên dưới câu lệnh mà bạn vừa định cấu hình (Do you want to play
Spelling Practice
?) để hỗ trợ người dùng trên các thiết bị có màn hình.
Để thêm các chip đề xuất vào lời nhắc của cảnh Start, hãy làm theo các bước sau:
- Trong cảnh
Start, hãy nhấp vào các đề xuất bên dưới trình chỉnh sửa mã. Thao tác này sẽ thêm một khối đề xuất. - Trong trường
title, hãy thay thếSuggested Responsebằng'Yes'. - Sử dụng cùng một định dạng, hãy thêm một chip đề xuất có tiêu đề
'No'và'Help with Phonetics'theo cách thủ công. Mã của bạn sẽ có dạng như đoạn mã sau: - Nhấp vào Lưu.

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ẽ chuyển từ lệnh gọi chính sang cảnh Bắt đầu và hỏi người dùng xem họ có muốn tiếp tục hay không. Khối đề xuất cũng sẽ xuất hiện trong màn hình mô phỏng.
Để kiểm thử Thao tác trong trình mô phỏng, hãy làm theo các bước sau:
- Trong thanh điều hướng, hãy nhấp vào Kiểm thử để chuyển đến trình mô phỏng.
- Để kiểm thử Thao tác của bạn trong trình mô phỏng, hãy nhập
Talk to Spelling Practicevào trường Nhập. - Nhấn phím Enter. Hành động của bạn sẽ phản hồi bằng câu lệnh
Main invocationvà câu lệnh cảnhStartđược thêm vào, "Chào mừng bạn đến với phần Luyện tập chính tả. Dùng bảng chữ cái ngữ âm để đánh vần từ. Ví dụ: alpha cho a, bravo cho b, charlie cho c, v.v. Bạn có muốn tiếp tục không?".
Ảnh chụp màn hình sau đây cho thấy hoạt động tương tác này:

- Nhấp vào nút
YeshoặcNohoặcHelp with Phoneticsđể phản hồi câu lệnh. (Bạn cũng có thể nói "Có" hoặc "Không" hoặc "Trợ giúp về ngữ âm" hoặc nhậpYeshoặcNohoặcHelp with Phoneticsvào trường Đầu vào.)
Khi bạn phản hồi lời nhắc, Thao tác của bạn sẽ phản hồi bằng một thông báo cho biết rằng Thao tác đó không hiểu được thông tin đầu vào của bạn: "Rất tiếc, tôi không hiểu bạn nói gì. Bạn thử lại được không?" Vì bạn chưa định cấu hình Hành động để hiểu và phản hồi đầu vào "Có" hoặc "Không", nên Hành động của bạn sẽ so khớp đầu vào của bạn với ý định NO_MATCH.
Theo mặc định, ý định hệ thống NO_MATCH sẽ đưa ra các phản hồi chung, nhưng bạn có thể tuỳ chỉnh các phản hồi này để cho người dùng biết rằng bạn không hiểu nội dung họ nhập. Trợ lý sẽ kết thúc cuộc trò chuyện của người dùng với Hành động của bạn sau khi không thể so khớp thông tin đầu vào của người dùng 3 lần.
Thêm ý định không và ý định ngữ âm
Giờ đây, người dùng có thể trả lời câu hỏi mà Hành động của bạn đưa ra, bạn có thể định cấu hình Hành động để hiểu câu trả lời của người dùng ("Có" hoặc "Không" hoặc "Giúp phát âm"). Trong các phần sau, bạn sẽ tạo ý định của người dùng được so khớp khi người dùng nói "Có" hoặc "Không" hoặc "Giúp phát âm" và thêm các ý định này vào cảnh Start. Chúng ta sẽ sử dụng ý định hệ thống yes và tạo các ý định khác.
Tạo no ý định
Bây giờ, bạn cần tạo ý định no để hiểu và phản hồi người dùng khi họ không muốn chơi trò chơi. Để tạo ý định này, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong phần điều hướng.
- Nhấp vào Custom Intents (Ý định tuỳ chỉnh) trong trình đơn điều hướng để mở danh sách ý định.
- Nhấp vào + (dấu cộng) ở cuối danh sách ý định. Đặt tên cho ý định mới là
norồi nhấn Enter. - Nhấp vào không để mở trang ý định
no. - Trong mục Thêm cụm từ huấn luyện, hãy nhấp vào hộp văn bản Nhập cụm từ rồi nhập các cụm từ sau:
NoNI don't wantnope

- Nhấp vào Lưu.
Thêm ý định no vào cảnh Start
Giờ đây, Hành động có thể hiểu khi người dùng nói "không" hoặc một từ tương tự như "không", chẳng hạn như "không". Bạn cần thêm ý định của người dùng no vào cảnh Start vì người dùng đang phản hồi lời nhắc Start ("Chào mừng bạn đến với phần Luyện chính tả. Dùng bảng chữ cái ngữ âm để đánh vần từ. Ví dụ: alpha cho a, bravo cho b, charlie cho c, v.v. Bạn có muốn tiếp tục không?").
Để thêm ý định này cho cảnh Start, hãy làm theo các bước sau:
- Nhấp vào cảnh Bắt đầu trong phần điều hướng.
- Nhấp vào + (dấu cộng) trong cảnh
Startbên cạnh phần Xử lý ý định của người dùng. - Trong phần Ý định, hãy chọn không trong trình đơn thả xuống.

- Nhấp vào Gửi câu lệnh rồi cập nhật trường
speechbằng văn bản sau:Good Bye.
Mã trong trình chỉnh sửa sẽ có dạng như đoạn mã sau:
candidates:
- first_simple:
variants:
- speech: >-
Goodbye.
- Trong phần Chuyển đổi, hãy chọn Kết thúc cuộc trò chuyện trong trình đơn thả xuống.
- Nhấp vào Lưu.
Kiểm thử ý định no trong trình mô phỏng
Tại thời điểm này, Hành động của bạn sẽ hiểu được khi nào người dùng không muốn chơi trò chơi và trả về phản hồi thích hợp.
Để kiểm thử ý định này trong trình mô phỏng, hãy làm theo các bước sau:
- Trong thanh điều hướng, hãy nhấp vào Kiểm thử.
- Nhập
Talk to Spelling Practicevào trường Nhập rồi nhấnEnter. - Nhập
Novào trường Đầu vào rồi nhấn Enter. Hoặc nhấp vào khối Không có đề xuất.

Thêm ý định YES của hệ thống vào cảnh Start
Bây giờ, chúng ta sẽ thêm ý định SYSTEM "YES" vào cảnh Start, vì người dùng đang trả lời có cho lời nhắc Start ("Chào mừng bạn đến với phần Luyện chính tả. Dùng bảng chữ cái ngữ âm để đánh vần từ. Ví dụ: alpha cho a, bravo cho b, charlie cho c, v.v. Bạn có muốn tiếp tục không?").
Để thêm ý định của người dùng này vào cảnh Start, hãy làm theo các bước sau:
- Nhấp vào cảnh Bắt đầu trong phần điều hướng.
- Nhấp vào biểu tượng + (dấu cộng) trong cảnh
Startbên cạnh Xử lý ý định của người dùng. - Trong phần All System Intents (Tất cả ý định hệ thống), hãy chọn YES trong trình đơn thả xuống ý định.

- Nhấp vào Gọi webhook của bạn và cập nhật hộp văn bản
event handlerbằng hàm mà bạn đã tạo trước đó:getSpellingWordList - Trong phần Chuyển đổi, hãy nhấp vào trình đơn thả xuống rồi chọn Kết thúc cuộc trò chuyện.
- Nhấp vào Lưu.
Kiểm thử ý định YES trong trình mô phỏng
Tại thời điểm này, Thao tác của bạn sẽ hiểu được thời điểm người dùng muốn chơi trò chơi và trả về phản hồi thích hợp.
Để kiểm thử ý định này trong trình mô phỏng, hãy làm theo các bước sau:
- Trong thanh điều hướng, hãy nhấp vào Kiểm thử.
- Để kiểm thử Thao tác của bạn trong trình mô phỏng, hãy nhập
Talk to Spelling Practicevào trường Đầu vào rồi nhấn Enter. - Nhập
Yesvào trường Đầu vào rồi nhấn Enter. Hoặc nhấp vào khối đề xuấtYes.
Thao tác của bạn tìm nạp danh sách tất cả các từ cần luyện chính tả và lưu trữ chúng trong phiên. Sau đó, Thao tác của bạn sẽ kết thúc phiên vì bạn đã chọn hiệu ứng chuyển đổi End conversation cho ý định YES.
Tạo Phonetics ý định
Để tạo ý định Phonetics, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong phần điều hướng.
- Nhấp vào Custom Intents (Ý định tuỳ chỉnh) trong trình đơn điều hướng để mở danh sách ý định.
- Nhấp vào + (dấu cộng) ở cuối danh sách ý định. Đặt tên cho ý định mới
phoneticsrồi nhấnEnter. - Nhấp vào ý định
phoneticsđể mở trang ý địnhphonetics. - Trong phần Thêm cụm từ huấn luyện, hãy nhấp vào hộp văn bản Nhập cụm từ rồi nhập các cụm từ sau:
how do I spell wordsphoneticshelp me with phoneticsphonetic alphabet

- Nhấp vào Lưu.
Thêm ý định phonetics vào cảnh Start
Giờ đây, Thao tác có thể hiểu được thời điểm người dùng thể hiện ý định "phiên âm". Bạn có thể thêm ý định của người dùng phonetics vào cảnh Start, vì người dùng đang phản hồi lời nhắc Start ("Chào mừng bạn đến với phần Luyện chính tả. Dùng bảng chữ cái ngữ âm để đánh vần từ. Ví dụ: alpha cho a, bravo cho b, charlie cho c, v.v. Bạn có muốn tiếp tục không?").
Để thêm ý định của người dùng này vào cảnh Start, hãy làm theo các bước sau:
- Nhấp vào cảnh Bắt đầu trong phần điều hướng.
- Nhấp vào dấu + (dấu cộng) trong cảnh
Startbên cạnh mục Xử lý ý định của người dùng. - Chọn phonetics trong trình đơn thả xuống về ý định.

- Trong phần Chuyển đổi, hãy nhấp vào trình đơn thả xuống rồi chọn Kết thúc cuộc trò chuyện.
- Nhấp vào Lưu.
Chuyển từ cảnh Bắt đầu sang cảnh Chính tả
Trong phần này, bạn sẽ tạo một cảnh mới có tên là Spelling (Chính tả). Cảnh này sẽ gửi lời nhắc cho người dùng để họ đánh vần từ bằng bảng chữ cái ngữ âm.
Để tạo cảnh này và thêm hiệu ứng chuyển cảnh vào đó, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong trình đơn điều hướng trên cùng. Sau đó, hãy nhấp vào Cảnh bắt đầu trong bảng điều hướng bên trái.
- Trong phần Xử lý ý định của người dùng, hãy nhấp vào
when actions.intent.YES is matchedvà ở bên phải trong phần chuyển đổi, hãy nhấp vào trình đơn thả xuống rồi nhậpSpellingvào trường văn bản. - Nhấp vào Thêm. Thao tác này sẽ tạo một cảnh có tên là
Spellingvà yêu cầu Thao tác chuyển sang cảnhSpellingsau khi khớp với ý định CÓ. - Mở rộng Cảnh trong trình đơn điều hướng bên trái để hiện danh sách cảnh.
- Trong phần Cảnh, hãy nhấp vào Spelling (Chính tả) để xem cảnh
Spelling. - Nhấp vào dấu + trong mục Khi vào của cảnh
Spelling. - Nhấp vào Gọi webhook của bạn rồi nhập getSpellingWord vào hộp văn bản trình xử lý sự kiện.
- Chọn Gửi câu lệnh.
- Thay thế câu trong trường
speech(Enter the response that users will see or hear...) bằng {}. Lời nhắc thực tế sẽ được điền sẵn bằng webhook.
Các đề xuất dạng chip cung cấp những đề xuất mà người dùng có thể nhấp vào để Hành động của bạn xử lý dưới dạng thông tin đầu vào của người dùng.
Để thêm các chip đề xuất vào lời nhắc của cảnh Spelling, hãy làm theo các bước sau:
- Trong cảnh
Spelling, hãy nhấp vào các đề xuất bên dưới trình chỉnh sửa mã. Thao tác này sẽ thêm 3 nút đề xuất. - Trong trường
title, hãy thay thếSuggested Responsebằng'Repeat'. - Sử dụng cùng một định dạng, hãy thêm một chip đề xuất có tiêu đề
'Skip'theo cách thủ công. - Sử dụng cùng một định dạng, hãy thêm một chip đề xuất có tiêu đề
'Quit'theo cách thủ công. Mã của bạn sẽ có dạng như đoạn mã sau: - Nhấp vào Lưu.
suggestions:
- title: 'Repeat'
- title: 'Skip'
- title: 'Quit'

Tạo Repeat ý định
Để tạo ý định repeat, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong phần điều hướng.
- Nhấp vào Custom Intents (Ý định tuỳ chỉnh) trong trình đơn điều hướng để mở danh sách ý định.
- Nhấp vào + (dấu cộng) ở cuối danh sách ý định. Đặt tên cho ý định mới
repeatrồi nhấnEnter. - Nhấp vào ý định
repeatđể mở trang ý địnhdefinition. - Trong phần Thêm cụm từ huấn luyện, hãy nhấp vào hộp văn bản Nhập cụm từ rồi nhập các cụm từ sau:
one more time pleasesay the word againrepeat the wordtell me againrepeat

- Nhấp vào Lưu.
Thêm ý định repeat vào cảnh Spelling
Giờ đây, Thao tác có thể hiểu được thời điểm người dùng thể hiện ý định "lặp lại". Bạn có thể thêm ý định của người dùng repeat vào cảnh Spelling, vì người dùng đang phản hồi lời nhắc Spelling ("Đánh vần từ bằng bảng chữ cái ngữ âm").
Để thêm ý định của người dùng này vào cảnh Spelling, hãy làm theo các bước sau:
- Nhấp vào cảnh Chính tả trong phần điều hướng.
- Nhấp vào biểu tượng + (dấu cộng) trong cảnh
Spellingbên cạnh Xử lý ý định của người dùng. - Chọn repeat trong trình đơn thả xuống về ý định.

- Đánh dấu vào Gọi webhook của bạn rồi nhập repeatSpellingWord vào hộp văn bản trình xử lý sự kiện để nhận định nghĩa của từ.
- Chọn Gửi câu lệnh.
- Thay thế câu trong trường
speech(Enter the response that users will see or hear...) bằng "'. Câu lệnh thực tế sẽ được điền sẵn bằng webhook.
Thêm các nút đề xuất vào "Khi Repeat được so khớp"
- Trong phần "Khi Repeat được so khớp" trong mục Xử lý ý định của người dùng, hãy nhấp vào đề xuất bên dưới trình chỉnh sửa mã. Thao tác này sẽ thêm 3 nút đề xuất.
- Trong trường
title, hãy thay thếSuggested Responsebằng'Skip'. - Sử dụng cùng một định dạng, hãy thêm một chip đề xuất có tiêu đề
'Quit'theo cách thủ công.Mã của bạn sẽ có dạng như đoạn mã sau:
suggestions:
- title: 'Skip'
- title: 'Quit'

- Nhấp vào Lưu.
Tạo definition ý định
Để tạo ý định definition, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong phần điều hướng.
- Nhấp vào Custom Intents (Ý định tuỳ chỉnh) trong trình đơn điều hướng để mở danh sách ý định.
- Nhấp vào + (dấu cộng) ở cuối danh sách ý định. Đặt tên cho ý định mới
definitionrồi nhấnEnter. - Nhấp vào ý định
definitionđể mở trang ý địnhdefinition. - Trong phần Thêm cụm từ huấn luyện, hãy nhấp vào hộp văn bản Nhập cụm từ rồi nhập các cụm từ sau:
I would like to know the definitiontell me the definitionwhat does it meanmeaningdefinitionwhat is the definition?

- Nhấp vào Lưu.
Thêm ý định definition vào cảnh Spelling
Giờ đây, Hành động có thể hiểu được khi người dùng thể hiện ý định "định nghĩa". Bạn có thể thêm ý định của người dùng definition vào cảnh Spelling, vì người dùng đang phản hồi lời nhắc Spelling ("Đánh vần từ bằng bảng chữ cái ngữ âm").
Để thêm ý định của người dùng này vào cảnh Spelling, hãy làm theo các bước sau:
- Nhấp vào cảnh Chính tả trong phần điều hướng.
- Nhấp vào biểu tượng + (dấu cộng) trong cảnh
Spellingbên cạnh Xử lý ý định của người dùng. - Chọn định nghĩa trong trình đơn thả xuống về ý định.

- Chọn Gọi webhook của bạn rồi nhập definitionOfSpellingWord vào hộp văn bản trình xử lý sự kiện để nhận định nghĩa của từ.
- Chọn Gửi câu lệnh.
- Thay thế câu trong trường
speech(Enter the response that users will see or hear...) bằng "". Lời nhắc thực tế sẽ được điền sẵn bằng webhook.
Thêm các khối gợi ý vào phản hồi webhook
- Trong cảnh
Start, hãy nhấp vào gợi ý bên dưới trình chỉnh sửa mã. Thao tác này sẽ thêm 3 nút đề xuất. - Trong trường
title, hãy thay thếSuggested Responsebằng'Skip'. - Sử dụng cùng một định dạng, hãy thêm một chip đề xuất có tiêu đề
'Quit'theo cách thủ công.Mã của bạn sẽ có dạng như đoạn mã sau:
suggestions:
- title: 'Skip'
- title: 'Quit'

- Nhấp vào Lưu.
Tạo skip ý định
Để tạo ý định skip, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong phần điều hướng.
- Nhấp vào Ý định trong trình đơn điều hướng để mở danh sách ý định.
- Nhấp vào + (dấu cộng) ở cuối danh sách ý định. Đặt tên cho ý định mới
skiprồi nhấnEnter. - Nhấp vào ý định
skipđể mở trang ý địnhskip. - Trong phần Thêm cụm từ huấn luyện, hãy nhấp vào hộp văn bản Nhập cụm từ rồi nhập các cụm từ sau:
next wordgo nextnextskipskip word

- Nhấp vào Lưu.
Thêm ý định Skip vào cảnh Spelling
Giờ đây, Thao tác có thể hiểu được khi người dùng thể hiện ý định "bỏ qua". Bạn có thể thêm ý định của người dùng skip vào cảnh Spelling, vì người dùng đang phản hồi lời nhắc Spelling ("Đánh vần từ bằng bảng chữ cái ngữ âm").
Để thêm ý định của người dùng này vào cảnh Spelling, hãy làm theo các bước sau:
- Nhấp vào cảnh Chính tả trong phần điều hướng.
- Nhấp vào biểu tượng + (dấu cộng) trong cảnh
Spellingbên cạnh Xử lý ý định của người dùng. - Chọn bỏ qua trong trình đơn thả xuống về ý định.

- Trong phần Chuyển cảnh ở bên phải, hãy nhấp vào trình đơn thả xuống rồi chọn
Spelling.

- Nhấp vào Lưu.
Tạo quit ý định
Để tạo ý định Quit, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong phần điều hướng.
- Nhấp vào Ý định trong trình đơn điều hướng để mở danh sách ý định.
- Nhấp vào + (dấu cộng) ở cuối danh sách ý định. Đặt tên cho ý định mới
Quitrồi nhấnEnter. - Nhấp vào ý định
Quitđể mở trang ý định định nghĩa. - Trong phần Thêm cụm từ huấn luyện, hãy nhấp vào hộp văn bản Nhập cụm từ rồi nhập các cụm từ sau:
I quitGoodbyeCancelExitQuit

- Nhấp vào Lưu.
Thêm ý định Quit vào cảnh Spelling
Giờ đây, Thao tác có thể hiểu được khi người dùng thể hiện ý định "thoát". Bạn có thể thêm ý định của người dùng quit vào cảnh Spelling, vì người dùng đang phản hồi lời nhắc Spelling ("Đánh vần từ bằng bảng chữ cái ngữ âm").
Để thêm ý định của người dùng này vào cảnh Spelling, hãy làm theo các bước sau:
- Nhấp vào cảnh Chính tả trong phần điều hướng.
- Nhấp vào biểu tượng + (dấu cộng) trong cảnh
Spellingbên cạnh Xử lý ý định của người dùng. - Chọn quit trong trình đơn thả xuống về ý định.

- Trong phần Chuyển cảnh ở bên phải, hãy nhấp vào trình đơn thả xuống rồi chọn
End conversation.
- Nhấp vào Lưu.
Tạo kiểu phonetic_alphabet
Trong phần này, bạn sẽ tạo một loại mới có tên là phonetic_alphabet. Loại này chỉ định các lựa chọn bảng chữ cái ngữ âm mà người dùng có thể chọn để đánh vần từ. Bạn cũng có thể xác định một số 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 phonetic_alphabet vào một vị trí để chỉ định rằng bạn muốn nhận được câu trả lời của người dùng.
Để tạo loại phonetic_alphabet, hãy làm theo các bước sau:
- Nhấp vào Phát triển trong phần điều hướng.
- Nhấp vào biểu tượng + (dấu cộng) trong phần Loại.
- Nhập
phonetic_alphabetrồi nhấnEnter. - Nhấp vào biểu tượng
phonetic_alphabetđể mở các lựa chọn. - Trong phần Loại này sẽ hỗ trợ những loại giá trị nào?, hãy chọn mục Từ và từ đồng nghĩa
- Nhập các mục sau và giá trị tương ứng trong phần Thêm mục:
a | alpha, apple, amsterdam |
b | bravo, butter, baltimore |
c | charlie, cat, casablanca |
d | delta, dog, denmark |
e | echo, edward, edison |
f | foxtrot, fox, florida |
g | golf, george, gallipoli |
h | hotel, harry, havana |
i | india, ink, italia |
j | juliette, johnny, jerusalem |
k | kilo, king, kilogramme |
l | lima, love, london |
m | mike, money, madagascar |
n | november, new york, nancy |
o | oscar, orange, oslo |
p | papa, paris, peter |
q | quebec, queen |
r | romeo, roma, robert |
s | sierra, sugar, santiago |
t | tango, tommy, tripoli |
u | uniform, umbrella, uncle |
v | victor, vinegar, Valencia |
w | whiskey, william, washington |
x | x-ray |
y | yankee, yellow, yorker |
z | zulu, zebra, zurich |
Bảng khoá-giá trị của bạn sẽ có dạng như sau:

- Nhấp vào Lưu.
Định cấu hình tính năng điền chỗ trống
Tiếp theo, bạn cần định cấu hình tính năng điền chỗ trống trong cảnh Spelling. Để định cấu hình logic điền chỗ trống, hãy làm theo các bước sau:
- Nhấp vào cảnh Chính tả trong phần điều hướng.
- Nhấp vào + (dấu cộng) trong cảnh
Spellingđể Điền vào vị trí. - Trong trường Nhập tên vị trí, hãy thêm
userresponselàm tên vị trí. - Trong trình đơn thả xuống Chọn loại, hãy chọn phonetic_alphabet làm loại vị trí.
- Chọn Vị trí này chấp nhận một danh sách các giá trị
- Đánh dấu vào Đây là một vị trí bắt buộc.
- Chọn tuỳ chọn Tuỳ chỉnh tính năng ghi lại giá trị của vị trí rồi nhập userresponse vào hộp văn bản tham số phiên.

- Nhấp vào Lưu.
Thêm điều kiện vào màn hình Spelling
Để thêm Điều kiện vào cảnh Spelling, hãy làm theo các bước sau:
- Nhấp vào cảnh Chính tả trong phần điều hướng.
- Nhấp vào + (dấu cộng) trong cảnh
Spellingbên cạnh Điều kiện. - Nhập
scene.slots.status == "FINAL"làm điều kiện - Kiểm tra Gọi webhook của bạn và nhập verifySpellingWord vào hộp văn bản trình xử lý sự kiện để xác minh phản hồi của người dùng.
- Đánh dấu vào Gửi câu lệnh.
- Thay thế câu trong trường
speech(Enter the response that users will see or hear...) bằng {}. Lệnh thực tế sẽ được điền sẵn bằng webhook.
Thêm các khối gợi ý vào phản hồi webhook
- Trong cảnh
Start, hãy nhấp vào gợi ý bên dưới trình chỉnh sửa mã. Thao tác này sẽ thêm 3 nút đề xuất. - Trong trường
title, hãy thay thếSuggested Responsebằng'Next'. - Sử dụng cùng một định dạng, hãy thêm một chip đề xuất có tiêu đề
'Quit'theo cách thủ công.Mã của bạn sẽ có dạng như đoạn mã sau:
suggestions:
- title: 'Next'
- title: 'Quit'

- Nhấp vào Lưu.
12. Kiểm thử bài tập chính tả trong trình mô phỏng
Để kiểm thử Thao tác trong trình mô phỏng, hãy làm theo các bước sau:
- Trong thanh điều hướng, hãy nhấp vào Kiểm thử để chuyển đến trình mô phỏng.
- Để kiểm thử Thao tác của bạn trong trình mô phỏng, hãy nhập
Talk to Spelling Practicevào trường Nhập. - Nhấn phím Enter. Hành động của bạn sẽ phản hồi bằng câu lệnh
Main invocationvà câu lệnh cảnhStartđược thêm vào, "Chào mừng bạn đến với phần Luyện tập chính tả. Dùng bảng chữ cái ngữ âm để đánh vần từ. Ví dụ: alpha cho a, bravo cho b, charlie cho c, v.v. Bạn có muốn tiếp tục không?". - Nói Có để tiếp tục
- Trình mô phỏng sẽ phát âm thanh của một từ để đánh vần
- Bạn có thể đánh vần từ bằng bảng chữ cái ngữ âm. Ví dụ: để nói hoặc nhập better, hãy nói hoặc nhập "bravo echo tango tango echo romeo"
- Trình mô phỏng sẽ phản hồi bằng câu trả lời đúng hoặc sai.
- Nói tiếp theo để tiếp tục đến từ tiếp theo hoặc nói thoát để thoát khỏi vòng lặp trò chơi.
13. Xin chúc mừng
Xin chúc mừng! Bạn đã tạo thành công trò chơi Luyện chính tả!
Giờ đây, bạn đã biết các bước chính cần thiết để tạo một trò chơi bằng Cloud Firestore, Cloud Functions và Google Assistant Action Builder.
Nội dung bạn đã học
- Cách tương tác với Cloud Firestore
- Cách sử dụng các vị trí để thu thập dữ liệu từ người dùng
- Cách xử lý dữ liệu đầu vào của người dùng và trả về phản hồi
- 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
Tài nguyên học tập bổ sung
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:
- Tài liệu để phát triển Hành động cho Trợ lý Google
- Trang GitHub của Actions on Google để xem mã mẫu và thư viện
- Cộng đồng Reddit chính thức dành cho các nhà phát triển làm việc với Trợ lý Google
- Nguyên tắc thiết kế cuộc trò chuyện để biết các phương pháp hay nhất và nguyên tắc liên quan đến Thao tác đàm thoại
- Giới thiệu về Cloud Firestore
Dọn dẹp dự án của bạn [nên dùng]
Để tránh bị tính phí, 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:
- Để xoá dự án và tài nguyên Firebase, hãy hoàn tất các bước được nêu trong phần Tắt (xoá) dự án.
Thận trọng: Đảm bảo rằng bạn chọn đúng dự án để xoá trên trang Cài đặt của Google Cloud Console.
- 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.
Theo dõi @ActionsOnGoogle và @Firebase trên Twitter để nắm bắt những thông báo mới nhất của chúng tôi và đăng tweet kèm hashtag #GoogleIO để chia sẻ những gì bạn đã tạo!