1. ภาพรวม
แพลตฟอร์มสำหรับนักพัฒนาแอปของ Google Assistant ช่วยให้คุณสร้างซอฟต์แวร์เพื่อขยายฟังก์ชันการทำงานของ Google Assistant ซึ่งเป็นผู้ช่วยส่วนตัวเสมือนจริงในอุปกรณ์กว่า 1 พันล้านเครื่อง ซึ่งรวมถึงลำโพงอัจฉริยะ โทรศัพท์ รถยนต์ ทีวี หูฟัง และอื่นๆ ผู้ใช้จะสนทนากับ Assistant เพื่อทำสิ่งต่างๆ เช่น ซื้อของชำหรือจองรถ ในฐานะนักพัฒนาแอป คุณสามารถใช้แพลตฟอร์มนักพัฒนาแอปของ Assistant เพื่อสร้างและจัดการประสบการณ์การสนทนาที่น่าพึงพอใจและมีประสิทธิภาพระหว่างผู้ใช้กับบริการจัดการคำสั่งซื้อของบุคคลที่สามของคุณเองได้อย่างง่ายดาย
Codelab นี้ครอบคลุมแนวคิดระดับกลางสำหรับการพัฒนาด้วย Google Assistant, Cloud Functions และ Cloud Firestore ในโค้ดแล็บนี้ คุณจะได้สร้างเกมชื่อ "ฝึกสะกดคำ" ซึ่งใช้ Google Assistant เพื่อขอให้ผู้ใช้สะกดคำ
สิ่งที่คุณจะสร้าง
ในโค้ดแล็บนี้ คุณจะได้สร้างเกมที่ซับซ้อนซึ่งมีฟังก์ชันการทำงานต่อไปนี้
- รับคำตอบการสะกดคำจากผู้ใช้ และแก้ไขพรอมต์การสนทนาตามค่า
- ตอบกลับด้วยคำใบ้ที่เกี่ยวข้องกับการสะกดคำ เช่น คำจำกัดความหรือการพูดคำนั้นซ้ำ
- สร้างลูปเกมเพื่อให้ผู้ใช้โต้ตอบกับ Assistant ได้อีกครั้งหลังจากสะกดคำ
ก่อนเริ่มสร้าง คุณสามารถโต้ตอบกับการดำเนินการที่ใช้งานได้ในอุปกรณ์ที่พร้อมใช้งาน Google Assistant โดยพูดว่า "Ok Google คุยกับแบบฝึกหัดการสะกดคำ" เส้นทางเริ่มต้นผ่านการดำเนินการนี้สำหรับผู้ใช้ที่กลับมาจะมีลักษณะเป็นการโต้ตอบต่อไปนี้
เมื่อทำ Codelab นี้เสร็จแล้ว แอ็กชันที่เสร็จสมบูรณ์จะมีโฟลว์การสนทนาต่อไปนี้

สิ่งที่คุณจะได้เรียนรู้
- วิธีโต้ตอบกับ Cloud Firestore
- วิธีใช้ช่องเพื่อรวบรวมข้อมูลจากผู้ใช้
- วิธีประมวลผลข้อมูลที่ผู้ใช้ป้อนและแสดงคำตอบ
- วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะในฉาก
- วิธีเพิ่ม Game Loop
สิ่งที่คุณต้องมี
ข้อกำหนดเบื้องต้นสำหรับ Codelab นี้มีดังนี้
- เว็บเบราว์เซอร์ เช่น Google Chrome
- IDE สำหรับเขียน Cloud Functions
- วิธีการชำระเงิน Codelab นี้ใช้ Cloud Functions for Firebase ซึ่งกำหนดให้โปรเจ็กต์ของคุณต้องอยู่ในแพ็กเกจราคา Blaze ของ Firebase ( ดูข้อมูลเพิ่มเติม)
- เทอร์มินัลสำหรับเรียกใช้คำสั่ง Shell
- Node.js 10 ขึ้นไป
2. รับโค้ดฟังก์ชัน
โคลนที่เก็บ GitHub จากบรรทัดคำสั่งโดยใช้คำสั่งต่อไปนี้
$ git clone https://github.com/FirebaseExtended/codelab-actions-firestore
3. สร้างโปรเจ็กต์ Firebase และตั้งค่าแอป
สร้างโปรเจ็กต์ Firebase
- ลงชื่อเข้าใช้ Firebase
- ในคอนโซล Firebase ให้คลิกเพิ่มโปรเจ็กต์ (หรือสร้างโปรเจ็กต์) แล้วตั้งชื่อโปรเจ็กต์ Firebase
Spelling-Practice

- คลิกตัวเลือกการสร้างโปรเจ็กต์ ยอมรับข้อกำหนดของ Firebase หากได้รับแจ้ง ข้ามการตั้งค่า Google Analytics เนื่องจากคุณจะไม่ใช้ Analytics สําหรับแอปนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรเจ็กต์ Firebase ได้ที่ทําความเข้าใจโปรเจ็กต์ Firebase
อัปเกรดเป็นแพ็กเกจราคา Blaze
หากต้องการใช้ Cloud Functions for Firebase คุณจะต้องอัปเกรดโปรเจ็กต์ Firebase เป็นแพ็กเกจราคา Blaze ซึ่งหมายความว่าคุณจะต้องแนบบัญชีสำหรับการเรียกเก็บเงินของ Google Cloud กับโปรเจ็กต์ โดยคุณจะต้องระบุบัตรเครดิตหรือวิธีการชำระเงินอื่นๆ
โปรเจ็กต์ Firebase ทั้งหมด รวมถึงโปรเจ็กต์ในแพ็กเกจ Blaze ยังคงมีสิทธิ์เข้าถึงโควต้าการใช้งานแบบไม่มีค่าใช้จ่ายสำหรับ Cloud Functions ขั้นตอนที่ระบุไว้ในโค้ดแล็บนี้จะอยู่ภายในขีดจำกัดการใช้งานแบบไม่มีค่าใช้จ่าย อย่างไรก็ตาม คุณจะเห็นค่าใช้จ่ายเล็กน้อย ( ประมาณ $0.03) จาก Cloud Storage ซึ่งใช้เพื่อโฮสต์อิมเมจบิลด์ของ Cloud Functions
4. ติดตั้ง Firebase CLI
Firebase CLI (อินเทอร์เฟซบรรทัดคำสั่ง) ช่วยให้คุณสามารถทำให้ Cloud Functions ใช้งานได้
ตัวเลือกในการติดตั้ง Firebase CLI มีหลายตัวเลือก ขึ้นอยู่กับระบบปฏิบัติการและกรณีการใช้งานของคุณ ขั้นตอนต่อไปนี้จะอธิบายตัวเลือกที่พบบ่อยที่สุดหากคุณใช้ Cloud Functions ด้วย
- ตรวจสอบว่าคุณได้ติดตั้ง npm ซึ่งมักจะมาพร้อมกับ Node.js แล้ว
- ติดตั้งหรืออัปเกรด CLI โดยเรียกใช้คำสั่ง npm ต่อไปนี้
$ npm -g install firebase-tools
- ยืนยันว่าได้ติดตั้ง CLI อย่างถูกต้องโดยเรียกใช้คำสั่งต่อไปนี้
$ firebase --version
ตรวจสอบว่า Firebase CLI เป็นเวอร์ชัน 9.0.0 ขึ้นไปเพื่อให้มีฟีเจอร์ล่าสุดทั้งหมดที่จำเป็นสำหรับ Cloud Functions หากไม่ได้ ให้เรียกใช้ npm install -g firebase-tools เพื่ออัปเกรดตามที่แสดงไว้ด้านบน
- ให้สิทธิ์ Firebase CLI โดยเรียกใช้คำสั่งต่อไปนี้
$ firebase login
- จากไดเรกทอรี spelling-functions-start ให้ตั้งค่า Firebase CLI เพื่อใช้โปรเจ็กต์ Firebase เรียกใช้คำสั่งต่อไปนี้ เลือกรหัสโปรเจ็กต์ แล้วทำตามวิธีการ เมื่อได้รับข้อความแจ้ง คุณสามารถเลือกนามแฝงใดก็ได้ เช่น
codelabเป็นต้น
$ firebase use --add
5. ไดเรกทอรีฟังก์ชัน
ตอนนี้คุณจะเพิ่มฟังก์ชันการทำงานโดยใช้ Firebase SDK สำหรับ Cloud Functions เพื่อสร้างแบ็กเอนด์สำหรับเกมฝึกสะกดคำ
Cloud Functions ช่วยให้คุณมีโค้ดที่ทำงานในระบบคลาวด์ได้โดยไม่ต้องตั้งค่าเซิร์ฟเวอร์ Codelab นี้จะแสดงวิธีสร้างฟังก์ชันที่ตอบสนองต่อเหตุการณ์การตรวจสอบสิทธิ์ Firebase, Cloud Storage และฐานข้อมูลเรียลไทม์ของ Firebase มาเริ่มกันที่การตรวจสอบสิทธิ์
เมื่อใช้ Firebase SDK สำหรับ Cloud Functions โค้ดฟังก์ชันจะอยู่ในไดเรกทอรี functions (โดยค่าเริ่มต้น) เราได้สร้างไฟล์ functions/index.js ไว้แล้วเพื่อให้คุณใช้งานได้ง่ายขึ้น ซึ่งเป็นที่ที่คุณจะวางโค้ดของคุณ โปรดตรวจสอบไดเรกทอรี functions ก่อนดำเนินการต่อ
$ cd functions $ ls
โค้ดฟังก์ชันของคุณยังเป็นแอป Node.js ด้วย ดังนั้นจึงต้องมี package.json ที่ให้ข้อมูลบางอย่างเกี่ยวกับแอปและแสดงรายการการอ้างอิง
หากคุณไม่คุ้นเคยกับ Node.js เราขอแนะนำให้คุณศึกษาข้อมูลเพิ่มเติมเกี่ยวกับ Node.js ก่อนที่จะทำ Codelab ต่อ
ไฟล์ package.json แสดงรายการการอ้างอิงที่จำเป็น 2 รายการอยู่แล้ว ได้แก่ Firebase SDK สำหรับ Cloud Functions และ Firebase Admin SDK หากต้องการติดตั้งในเครื่อง ให้เรียกใช้ npm install จากไดเรกทอรี functions
$ npm install
ตอนนี้มาดูไฟล์ 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.
ก่อนอื่นคุณจะต้องนำเข้าโมดูลที่จำเป็น จากนั้นเขียนฟังก์ชัน 4 ฟังก์ชันแทนที่ TODO ทำตามขั้นตอนถัดไปของ Codelab เพื่อนำเข้าโมดูล
6. นำเข้าโมดูลที่จำเป็น
Codelab นี้ต้องใช้ 3 โมดูล
- โมดูล
firebase-functionsช่วยให้เราเขียนทริกเกอร์สำหรับ Cloud Functions ได้ - โมดูล
firebase-adminช่วยให้เราใช้แพลตฟอร์ม Firebase ในเซิร์ฟเวอร์ที่มีสิทธิ์เข้าถึงระดับผู้ดูแลระบบได้ เช่น เพื่อเขียนไปยัง Cloud Firestore - ไลบรารีการจัดการ Node.js ของ Actions SDK จะจัดการตัวแฮนเดิล Actions SDK สำหรับ Google Assistant
- ติดตั้ง Actions SDK โดยเรียกใช้คำสั่ง npm ต่อไปนี้
$ npm install @assistant/conversation
- ในไฟล์
index.jsให้แทนที่ TODO แรกด้วยข้อความต่อไปนี้
การเปลี่ยนแปลงเหล่านี้จะนำเข้าแต่ละโมดูลที่จำเป็น
นอกจากนี้ คุณยังกําหนดค่า Firebase Admin SDK ได้โดยอัตโนมัติเมื่อติดตั้งใช้งานในสภาพแวดล้อม Cloud Functions หรือคอนเทนเนอร์อื่นๆ ของ Google Cloud นี่คือสิ่งที่จะเกิดขึ้นเมื่อเราเรียก admin.initializeApp(); ในการเปลี่ยนแปลงด้านล่าง
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.
ตอนนี้เรามาเพิ่มตรรกะทางธุรกิจโดยใช้ฟังก์ชันเพื่อรองรับการทำงานของ Assistant กัน
7. สร้างฟังก์ชัน
รับคำจำกัดความของคำและเขียนลงใน Cloud Firestore
คุณจะใช้ dictionaryapi.devAPI สาธารณะเพื่อรับคำจำกัดความของคำ
ในไฟล์ index.js ให้แทนที่ TODO สำหรับ getWordDetailsFromDictionaryAPI ด้วยข้อมูลต่อไปนี้
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();
}
เพิ่มทริกเกอร์ Cloud Firestore
จากนั้นคุณจะสร้างฟังก์ชันระบบคลาวด์ที่จะทริกเกอร์ทุกครั้งที่มีการสร้างเอกสารใหม่ใน Cloud Firestore โดยจะเรียกใช้ dictionaryapi.dev API เพื่อรับคำจำกัดความของคำผ่านฟังก์ชัน getWordDetailsFromDictionaryAPI ที่เราเขียนไว้ด้านบน
ในไฟล์ index.js ให้แทนที่ TODO สำหรับ createSpellingPracticeWord ด้วยข้อมูลต่อไปนี้
index.js
// ทริกเกอร์ Firestore ที่ดึงคำจำกัดความผ่าน getWordDetailsFromDictionaryAPI สำหรับเอกสาร Firestore ใหม่ทุกรายการ
exports.createSpellingPracticeWord = functions.firestore
.document('wordlist/{word}')
.onCreate((snap, context) => {
const newValue = snap.data();
const word = newValue.word;
getWordDetailsFromDictionaryAPI(word);
});
รับรายการคำสำหรับเกม
คุณเขียน Cloud Function ที่ดึงรายการคำฝึกสะกดจาก Cloud Firestore สำหรับ Assistant ได้ เราใช้ตัวแฮนเดิลแอปสำหรับกรณีนี้
ในไฟล์ index.js ให้แทนที่ TODO สำหรับ getSpellingWordList ด้วยข้อมูลต่อไปนี้
การเพิ่มฟังก์ชันนี้ลงใน app.handle พิเศษเป็นวิธีทำให้เข้าถึงฟังก์ชันจาก Assistant ได้
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;
});
});
})
รับคำจากเซสชัน Assistant
คุณเขียน Cloud Function ที่แสดงผลคำสะกดถัดไปจากรายการคำได้
ในไฟล์ index.js ให้แทนที่ TODO สำหรับ getSpellingWord ด้วยข้อมูลต่อไปนี้
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');
});
เปิดใช้เกมเพื่อเล่นคำซ้ำ
คุณเขียน Cloud Function ที่เล่นคำปัจจุบันซ้ำสำหรับเกมได้
ในไฟล์ index.js ให้แทนที่ TODO สำหรับ repeatSpellingWord ด้วยข้อมูลต่อไปนี้
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');
});
ดูคำจำกัดความของคำ
คุณสามารถเขียน Cloud Function ที่ให้คำจำกัดความของคำปัจจุบันสำหรับเกมได้
ในไฟล์ index.js ให้แทนที่ TODO สำหรับ definitionOfSpellingWord ด้วยข้อมูลต่อไปนี้
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);
});
ตรวจสอบคำตอบการสะกดของผู้ใช้
คุณเขียน Cloud Function ที่ยืนยันคำตอบของผู้ใช้เกี่ยวกับวิธีสะกดคำปัจจุบันสำหรับเกมได้
ในไฟล์ index.js ให้แทนที่ TODO สำหรับ verifySpellingWord ด้วยข้อมูลต่อไปนี้
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);
ทำให้ฟังก์ชันทั้งหมดใช้งานได้
Cloud Functions จะใช้งานได้หลังจากที่คุณได้ติดตั้งใช้งานไปยัง Firebase แล้วเท่านั้น
จากรูทของไดเรกทอรี spelling-functions-start ให้เรียกใช้คำสั่งต่อไปนี้
$ firebase deploy --only functions
นี่คือเอาต์พุตคอนโซลที่คุณควรเห็น
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
จด URL ปลายทาง HTTP ของฟังก์ชัน ActionsOnGoogleFulfillment ไว้ใช้ในภายหลัง หากต้องการดูปลายทาง ให้เปิด Firebase Console แล้วคลิกโปรเจ็กต์ spelling-practice เปิดแดชบอร์ดฟังก์ชันเพื่อดูปลายทางของฟังก์ชัน

คุณได้เพิ่มฟังก์ชันที่จำเป็นทั้งหมดเสร็จเรียบร้อยแล้ว ตอนนี้เรามาตั้งค่า Cloud Firestore กัน
8. เปิดใช้ Cloud Firestore
คุณจะต้องเปิดใช้ Cloud Firestore
ในส่วนสร้างของคอนโซล Firebase ให้คลิก Firestore จากนั้นคลิกสร้างฐานข้อมูล

การเข้าถึงข้อมูลใน Cloud Firestore จะควบคุมโดยกฎความปลอดภัย ก่อนอื่นคุณต้องตั้งกฎพื้นฐานบางอย่างในข้อมูลเพื่อเริ่มต้นใช้งาน คลิก Firestore แล้วในแท็บกฎของคอนโซล Firebase ให้เพิ่มกฎต่อไปนี้ แล้วคลิกเผยแพร่
กฎต่อไปนี้จะจำกัดการเข้าถึงข้อมูลสำหรับผู้ใช้ที่ลงชื่อเข้าใช้ ซึ่งจะป้องกันไม่ให้ผู้ใช้ที่ไม่ได้รับการตรวจสอบสิทธิ์อ่านหรือเขียน
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. เพิ่มข้อมูลคำสะกดลงใน Cloud Firestore
ในขั้นตอนนี้ คุณจะเขียนข้อมูลคำสะกดไปยัง Cloud Firestore เพื่อให้สร้างรายการคำสำหรับ Assistant (และเกม) ได้
ข้อมูล Cloud Firestore มีโครงสร้างเป็นคอลเล็กชัน เอกสาร ฟิลด์ และคอลเล็กชันย่อย ระบบจะจัดเก็บคำแต่ละคำสำหรับเกมเป็นเอกสารของตัวเองในคอลเล็กชันระดับบนสุดที่ชื่อ wordlist สำหรับเอกสารใหม่ทุกรายการในคอลเล็กชัน Firestore ระบบจะทริกเกอร์ฟังก์ชัน createSpellingPracticeWord เพื่อรับรายละเอียดคำจากบริการ Dictionary API
สร้างคอลเล็กชัน Cloud Firestore
- ในคอนโซล Firebase ให้ไปที่ส่วน Cloud Firestore
- คลิก + เริ่มคอลเล็กชัน
- ในกล่องข้อความรหัสคอลเล็กชัน ให้ป้อน
wordlistแล้วคลิกถัดไป

จากนั้นเราจะสร้างเอกสารสำหรับคำว่า agreement
- ในกล่องข้อความรหัสเอกสาร ให้ป้อน
agreement - ในกล่องข้อความฟิลด์ ให้ป้อน
wordและในกล่องข้อความค่า ให้ป้อนagreement - คลิกบันทึก

เมื่อคุณเพิ่มเอกสารนี้ลงใน Cloud Firestore ฟังก์ชัน createSpellingPracticeWord จะทริกเกอร์เพื่อดึงรายละเอียดคำจำกัดความของคำ เพิ่มคำอื่นๆ (เช่น น่าทึ่ง รถยนต์ จริง บอก ดีกว่า เดินทาง ...) โดยสร้างเอกสารใหม่สำหรับแต่ละคำ
10. ตั้งค่า Google Assistant
ส่วนต่อไปนี้จะอธิบายวิธีตั้งค่าสภาพแวดล้อมการพัฒนา Google Assistant และสร้างโปรเจ็กต์ Actions
ตรวจสอบการตั้งค่าสิทธิ์ของ Google
หากต้องการทดสอบ Action ที่คุณสร้างในโค้ดแล็บนี้ คุณต้องเปิดใช้สิทธิ์ที่จำเป็นเพื่อให้เครื่องจำลองเข้าถึง Action ได้ หากต้องการเปิดใช้สิทธิ์ ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่หน้าส่วนควบคุมกิจกรรม
- ลงชื่อเข้าใช้ด้วยบัญชี Google หากยังไม่ได้ทำ
- เปิดใช้สิทธิ์ต่อไปนี้
- กิจกรรมบนเว็บและแอป
- ในส่วนกิจกรรมบนเว็บและแอป ให้เลือกช่องทำเครื่องหมายข้างรวมประวัติการเข้าชมใน Chrome และกิจกรรมจากเว็บไซต์ แอป และอุปกรณ์ที่ใช้บริการต่างๆ ของ Google

สร้างโปรเจ็กต์ Actions
โปรเจ็กต์ Actions คือคอนเทนเนอร์สำหรับ Action ของคุณ หากต้องการสร้างโปรเจ็กต์ Actions สำหรับโค้ดแล็บนี้ ให้ทำตามขั้นตอนต่อไปนี้
- เปิดคอนโซล Actions
- คลิกโปรเจ็กต์ใหม่
- ยอมรับข้อกำหนดในการให้บริการ

- พิมพ์หรือเลือก
spelling-practice-codelabที่คุณสร้างโดยใช้คอนโซล Firebase (ชื่อนี้มีไว้เพื่อใช้อ้างอิงภายใน คุณจะตั้งชื่อภายนอกสำหรับโปรเจ็กต์ได้ในภายหลัง)

- คลิกนำเข้าโปรเจ็กต์
- ในหน้าจอคุณต้องการสร้างการทำงานประเภทใด ให้เลือกการ์ดกำหนดเอง
- คลิกถัดไป
- เลือกการ์ดโปรเจ็กต์เปล่า
- คลิกเริ่มสร้าง
- ป้อน Spelling Practice สำหรับชื่อที่แสดง แล้วคลิกบันทึก
ผู้ใช้เริ่มการสนทนากับ Action ของคุณผ่านการเรียกใช้ เช่น ผู้ใช้สามารถเรียกใช้การดำเนินการของคุณได้โดยพูดวลีอย่าง "Ok Google คุยกับแบบฝึกหัดการสะกดคำ" ซึ่ง แบบฝึกหัดการสะกดคำคือชื่อที่แสดง
การดำเนินการต้องมีชื่อที่แสดงหากคุณต้องการนำไปใช้ในการผลิต แต่หากต้องการทดสอบการดำเนินการ คุณไม่จำเป็นต้องกำหนดชื่อที่แสดง แต่คุณสามารถใช้วลี "คุยกับแอปทดสอบของฉัน" ในโปรแกรมจำลองเพื่อเรียกใช้การดำเนินการได้
กำหนดค่าการดำเนินการตามคำสั่งซื้อ
คุณต้องเชื่อมต่อตัวแฮนเดิลเหตุการณ์สำหรับ Cloud Functions ที่คุณเขียนและทำให้ใช้งานได้ก่อนหน้านี้ในโค้ดแล็บนี้กับ Assistant
หากต้องการกำหนดค่าการจัดการคำสั่งซื้อ ให้ทำตามขั้นตอนต่อไปนี้
- คลิก Webhook ในการนำทางด้านข้าง
- เลือกปลายทาง Https เป็นตัวเลือกการปฏิบัติตามคำสั่ง

- ป้อน URL ของปลายทางฟังก์ชันในกล่องข้อความปลายทาง HTTPS แล้วคลิกบันทึก

ในส่วนถัดไป คุณจะปรับแต่งพรอมต์สำหรับการเรียกใช้หลักในคอนโซล Actions
ตั้งค่าการเรียกใช้หลัก
คุณต้องแก้ไขการเรียกใช้หลักเพื่อกําหนดสิ่งที่เกิดขึ้นหลังจากที่ผู้ใช้เรียกใช้ Action
โดยค่าเริ่มต้น Actions Builder จะแสดงพรอมต์ทั่วไปเมื่อมีการเรียกใช้ ("เริ่มสร้าง Action โดยกำหนดการเรียกใช้หลัก")
หากต้องการแก้ไขพรอมต์ที่ Action ส่งกลับไปยังผู้ใช้เมื่อเรียกใช้ Action ให้ทำตามขั้นตอนต่อไปนี้
- คลิกการเรียกใช้หลักในการนำทาง

- ตรวจสอบ
Call your webhookและเพิ่มชื่อตัวแฮนเดิลเหตุการณ์getSpellingWordListในกล่องข้อความ - ในเครื่องมือแก้ไขโค้ด ให้แทนที่ข้อความในช่อง
speechด้วยข้อความต้อนรับต่อไปนี้Welcome to Spelling Practice
หมายเหตุ: คุณสามารถใช้การจัดรูปแบบ YAML หรือ JSON เพื่อแก้ไขพรอมต์ได้
- คลิกบันทึก
ทดสอบการเรียกใช้หลักในเครื่องจำลอง
คอนโซล Actions มีเครื่องมือบนเว็บสำหรับทดสอบ Action ซึ่งเรียกว่าเครื่องจำลอง อินเทอร์เฟซจะจำลองอุปกรณ์ฮาร์ดแวร์และการตั้งค่าของอุปกรณ์เหล่านั้น เพื่อให้คุณสนทนากับ Action ได้ราวกับว่า Action นั้นทำงานบนจออัจฉริยะ โทรศัพท์ ลำโพง หรือ KaiOS
หากต้องการทดสอบการเรียกใช้หลักของ Action ในเครื่องจำลอง ให้ทำตามขั้นตอนต่อไปนี้
- คลิกทดสอบในแถบนำทางด้านบนเพื่อไปที่โปรแกรมจำลอง
- หากต้องการเรียกใช้ Action ในเครื่องจำลอง ให้พิมพ์
Talk to Spelling Practiceในช่องป้อนข้อมูลที่ด้านซ้ายบน แล้วกด Enter บนแป้นพิมพ์

เมื่อคุณทริกเกอร์การเรียกใช้หลักของ Action แล้ว Assistant จะตอบกลับด้วยข้อความต้อนรับที่คุณปรับแต่ง ในขั้นตอนนี้ การสนทนาจะสิ้นสุดลงหลังจากที่ Assistant ตอบกลับด้วยคำทักทาย
ดูบันทึกเหตุการณ์
เมื่ออยู่ในแท็บทดสอบ แผงทางด้านขวาจะแสดงบันทึกเหตุการณ์ ซึ่งจะแสดงประวัติการสนทนาเป็นบันทึกเหตุการณ์ บันทึกเหตุการณ์แต่ละรายการจะแสดงเหตุการณ์ที่เกิดขึ้นในระหว่างการสนทนาในรอบนั้น หากต้องการดูบันทึกเหตุการณ์ ให้คลิกไอคอนสีเทาก่อนเหตุการณ์
ปัจจุบันการดำเนินการของคุณมีบันทึกเหตุการณ์ 1 รายการ ซึ่งแสดงทั้งอินพุตของผู้ใช้ ("คุยกับแบบฝึกหัดการสะกดคำ") และการตอบกลับของการดำเนินการ ภาพหน้าจอต่อไปนี้แสดงบันทึกเหตุการณ์ของการดำเนินการ

11. สร้างการสนทนาสำหรับการฝึกสะกดคำ
ตอนนี้คุณได้กำหนดสิ่งที่เกิดขึ้นหลังจากที่ผู้ใช้เรียกใช้การดำเนินการแล้ว คุณก็สามารถสร้างการสนทนาที่เหลือของการดำเนินการได้ แบบฝึกหัดการสะกดคำมี 4 ฉาก และคุณต้องเปิดใช้งานแต่ละฉากก่อนจึงจะเรียกใช้ได้ วิธีที่พบบ่อยที่สุดในการเปิดใช้งานฉากคือการกำหนดค่า Action เพื่อให้เมื่อผู้ใช้ตรงกับความตั้งใจของผู้ใช้ภายในฉาก ความตั้งใจนั้นจะทริกเกอร์การเปลี่ยนไปยังฉากอื่นและเปิดใช้งานฉากนั้น
เปลี่ยนจากคำสั่งเรียกใช้หลักไปยังฉากเริ่มต้น
ในส่วนนี้ คุณจะสร้างฉากใหม่ชื่อ Start ซึ่งจะส่งข้อความแจ้งไปยังผู้ใช้เพื่อถามว่าต้องการเริ่มเล่นแบบฝึกหัดการสะกดคำหรือไม่ นอกจากนี้ คุณยังเพิ่มทรานซิชันจากการเรียกใช้หลักไปยังฉาก Start ใหม่ได้ด้วย
หากต้องการสร้างฉากนี้และเพิ่มทรานซิชัน ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทางด้านบน จากนั้นคลิกการเรียกใช้หลักในการนำทางด้านซ้าย
- ในส่วนการเปลี่ยนฉากทางด้านขวา ให้คลิกเมนูแบบเลื่อนลง แล้วพิมพ์
Startในช่องข้อความ

- คลิกเพิ่ม ซึ่งจะสร้างฉากชื่อ
Startและบอกให้ Action เปลี่ยนไปที่ฉากStartหลังจากที่ Action แสดงข้อความแจ้งต้อนรับต่อผู้ใช้ - คลิกฉากในการนำทางด้านซ้ายเพื่อแสดงรายการฉาก
- ในส่วนฉาก ให้คลิกเริ่มเพื่อดูฉาก
Start - คลิก + ในส่วนเมื่อเข้าของฉาก
Start - เลือกส่งพรอมต์
- แทนที่ประโยคในช่อง
speech(Enter the response that users will see or hear...) ด้วยคำถามที่จะถามผู้ใช้:Use phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?
ชิปคำแนะนำจะแสดงคำแนะนำที่คลิกได้สำหรับผู้ใช้ ซึ่ง Action จะประมวลผลเป็นอินพุตของผู้ใช้ ในส่วนนี้ คุณจะเพิ่มชิปคำแนะนำที่จะปรากฏใต้พรอมต์ที่คุณเพิ่งกำหนดค่า (Do you want to play
Spelling Practice
?) เพื่อรองรับผู้ใช้ในอุปกรณ์ที่มีหน้าจอ
หากต้องการเพิ่มชิปคำแนะนำลงในพรอมต์ของฉาก Start ให้ทำตามขั้นตอนต่อไปนี้
- ในฉาก
Startให้คลิกคำแนะนำใต้ตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำรายการเดียว - ในช่อง
titleให้แทนที่Suggested Responseด้วย'Yes' - ใช้การจัดรูปแบบเดียวกัน แล้วเพิ่มชิปคำแนะนำชื่อ
'No'และ'Help with Phonetics'ด้วยตนเอง โค้ดควรมีลักษณะดังข้อมูลโค้ดต่อไปนี้ - คลิกบันทึก

ทดสอบ Action ในเครื่องมือจำลอง
ในขั้นตอนนี้ Action ของคุณควรเปลี่ยนจากการเรียกใช้หลักไปยังฉาก Start และถามผู้ใช้ว่าต้องการดำเนินการต่อหรือไม่ ชิปคำแนะนำควรปรากฏในจอแสดงผลจำลองด้วย
หากต้องการทดสอบ Action ในเครื่องจำลอง ให้ทำตามขั้นตอนต่อไปนี้
- ในแถบนำทาง ให้คลิกทดสอบเพื่อไปยังเครื่องจำลอง
- หากต้องการทดสอบ Action ในโปรแกรมจำลอง ให้พิมพ์
Talk to Spelling Practiceในช่องป้อนข้อมูล - กด Enter การดำเนินการของคุณควรตอบกลับด้วยพรอมต์
Main invocationและพรอมต์ฉากStartที่เพิ่มเข้ามา "ยินดีต้อนรับสู่แบบฝึกหัดการสะกดคำ ใช้ตัวอักษรตามสัทอักษรเพื่อสะกดคำ เช่น อัลฟ่าสำหรับ a บราโวสำหรับ b ชาร์ลีสำหรับ c เป็นต้น คุณต้องการดำเนินการต่อไหม"
ภาพหน้าจอต่อไปนี้แสดงการโต้ตอบนี้

- คลิกชิปคำแนะนำ
YesหรือNoหรือHelp with Phoneticsเพื่อตอบกลับพรอมต์ (คุณยังพูดว่า "ใช่" หรือ "ไม่ใช่" หรือ "ช่วยเรื่องสัทอักษร" หรือป้อนYesหรือNoหรือHelp with Phoneticsในช่องอินพุตได้ด้วย)
เมื่อคุณตอบกลับพรอมต์ การดำเนินการจะตอบกลับด้วยข้อความที่ระบุว่าไม่เข้าใจสิ่งที่คุณป้อน "ขออภัย ฉันไม่เข้าใจสิ่งที่คุณพูด คุณลองอีกครั้งได้ไหม" เนื่องจากคุณยังไม่ได้กำหนดค่า Action ให้เข้าใจและตอบกลับอินพุต "ใช่" หรือ "ไม่" Action จึงจับคู่อินพุตของคุณกับเจตนา NO_MATCH
โดยค่าเริ่มต้น ความตั้งใจของระบบ NO_MATCH จะให้คำตอบทั่วไป แต่คุณสามารถปรับแต่งคำตอบเหล่านี้เพื่อระบุให้ผู้ใช้ทราบว่าคุณไม่เข้าใจสิ่งที่ผู้ใช้ป้อน Assistant จะจบการสนทนาของผู้ใช้กับการดำเนินการของคุณหลังจากที่จับคู่ข้อมูลของผู้ใช้ไม่ได้ 3 ครั้ง
เพิ่มเจตนา "ไม่" และเจตนาที่ใช้การออกเสียง
ตอนนี้ผู้ใช้สามารถตอบคำถามที่การกระทำของคุณถามได้แล้ว คุณจึงสามารถกำหนดค่าการกระทำให้เข้าใจคำตอบของผู้ใช้ ("ใช่" หรือ "ไม่" หรือ "ช่วยเรื่องสัทศาสตร์") ในส่วนต่อไปนี้ คุณจะสร้างความตั้งใจของผู้ใช้ที่ตรงกันเมื่อผู้ใช้พูดว่า "ใช่" หรือ "ไม่" หรือ "ช่วยเรื่องสัทอักษร" และเพิ่มความตั้งใจเหล่านี้ลงในฉาก Start เราจะใช้เจตนาของระบบ yes และจะสร้างเจตนาอื่นๆ
สร้างความตั้งใจ no
ตอนนี้คุณต้องสร้างเจตนา no เพื่อทำความเข้าใจและตอบสนองต่อผู้ใช้เมื่อผู้ใช้ไม่ต้องการเล่นเกม หากต้องการสร้างความตั้งใจนี้ ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทาง
- คลิกความตั้งใจที่กำหนดเองในการนำทางเพื่อเปิดรายการความตั้งใจ
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ Intent ใหม่เป็น
noแล้วกด Enter - คลิกไม่เพื่อเปิดหน้าความตั้งใจ
no - ในส่วนเพิ่มวลีการฝึก ให้คลิกในกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
NoNI don't wantnope

- คลิกบันทึก
เพิ่มnoความตั้งใจไปยังStartฉาก
ตอนนี้ Action สามารถเข้าใจได้เมื่อผู้ใช้พูดว่า"ไม่" หรือพูดอะไรที่คล้ายกับ"ไม่" เช่น "ไม่เอา" คุณต้องเพิ่มความตั้งใจของผู้ใช้ no ลงในฉาก Start เนื่องจากผู้ใช้ตอบกลับพรอมต์ Start ("ยินดีต้อนรับสู่แบบฝึกหัดการสะกดคำ ใช้ตัวอักษรตามสัทอักษรเพื่อสะกดคำ เช่น อัลฟ่าสำหรับ a บราโวสำหรับ b ชาร์ลีสำหรับ c เป็นต้น คุณต้องการดำเนินการต่อไหม")
หากต้องการเพิ่มความตั้งใจนี้สำหรับฉาก Start ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากเริ่มในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Startข้างการจัดการความตั้งใจของผู้ใช้ - ในส่วนเจตนา ให้เลือกไม่ในเมนูแบบเลื่อนลง

- คลิกส่งพรอมต์ แล้วอัปเดตช่อง
speechด้วยข้อความต่อไปนี้Good Bye
โค้ดในเครื่องมือแก้ไขควรมีลักษณะเหมือนข้อมูลโค้ดต่อไปนี้
candidates:
- first_simple:
variants:
- speech: >-
Goodbye.
- ในส่วนการเปลี่ยน ให้เลือกจบการสนทนาจากเมนูแบบเลื่อนลง
- คลิกบันทึก
ทดสอบno Intent ในเครื่องจำลอง
ตอนนี้ Action ของคุณจะเข้าใจเมื่อผู้ใช้ไม่ต้องการเล่นเกมและแสดงคำตอบที่เหมาะสม
หากต้องการทดสอบ Intent นี้ในโปรแกรมจำลอง ให้ทำตามขั้นตอนต่อไปนี้
- คลิกทดสอบในแถบนำทาง
- พิมพ์
Talk to Spelling Practiceในช่องป้อนข้อมูล แล้วกดEnter - พิมพ์
Noในช่องอินพุต แล้วกด Enter หรือคลิกชิป "ไม่มีคำแนะนำ"

เพิ่มความตั้งใจของระบบ YES ไปยังฉาก Start
ตอนนี้เราจะเพิ่มความตั้งใจของระบบ "ใช่" ลงในฉาก Start เนื่องจากผู้ใช้ตอบว่าใช่ในพรอมต์ Start ("ยินดีต้อนรับสู่การฝึกสะกดคำ ใช้ตัวอักษรตามสัทอักษรเพื่อสะกดคำ เช่น อัลฟ่าสำหรับ a บราโวสำหรับ b ชาร์ลีสำหรับ c เป็นต้น คุณต้องการดำเนินการต่อไหม")
หากต้องการเพิ่มเจตนาของผู้ใช้ลงในฉาก Start ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากเริ่มในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Startข้าง การจัดการความตั้งใจของผู้ใช้ - ในส่วนเจตนาของระบบทั้งหมด ให้เลือกใช่ในเมนูแบบเลื่อนลงของเจตนา

- คลิกเรียกใช้เว็บฮุค แล้วอัปเดตกล่องข้อความ
event handlerด้วยฟังก์ชันที่คุณสร้างไว้ก่อนหน้านี้:getSpellingWordList - ในส่วนการเปลี่ยนเส้นทาง ให้คลิกเมนูแบบเลื่อนลง แล้วเลือกจบการสนทนา
- คลิกบันทึก
ทดสอบYES Intent ในเครื่องจำลอง
ตอนนี้ Action ของคุณจะเข้าใจเมื่อผู้ใช้ต้องการเล่นเกมและจะแสดงคำตอบที่เหมาะสม
หากต้องการทดสอบ Intent นี้ในโปรแกรมจำลอง ให้ทำตามขั้นตอนต่อไปนี้
- คลิกทดสอบในแถบนำทาง
- หากต้องการทดสอบ Action ในเครื่องจำลอง ให้พิมพ์
Talk to Spelling Practiceในช่องอินพุต แล้วกด Enter - พิมพ์
Yesในช่องอินพุต แล้วกด Enter หรือคลิกชิปคำแนะนำYes
Action จะดึงรายการคำฝึกสะกดทั้งหมดและจัดเก็บไว้ในเซสชัน จากนั้น Action จะสิ้นสุดเซสชันเนื่องจากคุณเลือกการเปลี่ยนEnd conversationสำหรับเจตนา YES
สร้างความตั้งใจ Phonetics
หากต้องการสร้างความตั้งใจ Phonetics ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทาง
- คลิกความตั้งใจที่กำหนดเองในการนำทางเพื่อเปิดรายการความตั้งใจ
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ Intent ใหม่เป็น
phoneticsแล้วกดEnter - คลิกเจตนา
phoneticsเพื่อเปิดหน้าเจตนาphonetics - ในส่วนเพิ่มวลีการฝึก ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
how do I spell wordsphoneticshelp me with phoneticsphonetic alphabet

- คลิกบันทึก
เพิ่มphoneticsความตั้งใจไปยังStartฉาก
ตอนนี้ Action สามารถเข้าใจได้เมื่อผู้ใช้แสดงเจตนา"สัทอักษร" คุณเพิ่มความตั้งใจของผู้ใช้ phonetics ลงในฉาก Start ได้ เนื่องจากผู้ใช้ตอบกลับพรอมต์ Start ("ยินดีต้อนรับสู่แบบฝึกหัดการสะกดคำ ใช้ตัวอักษรตามสัทอักษรเพื่อสะกดคำ เช่น อัลฟ่าสำหรับ a บราโวสำหรับ b ชาร์ลีสำหรับ c เป็นต้น คุณต้องการดำเนินการต่อไหม")
หากต้องการเพิ่มเจตนาของผู้ใช้ลงในฉาก Start ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากเริ่มในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Startข้างการจัดการความตั้งใจของผู้ใช้ - เลือกสัทอักษรในเมนูแบบเลื่อนลงของเจตนา

- ในส่วนการเปลี่ยน ให้คลิกเมนูแบบเลื่อนลง แล้วเลือกจบการสนทนา
- คลิกบันทึก
เปลี่ยนจากฉากเริ่มต้นเป็นฉากการสะกด
ในส่วนนี้ คุณจะสร้างฉากใหม่ชื่อ Spelling ซึ่งจะส่งพรอมต์ให้ผู้ใช้สะกดคำโดยใช้อักษรตามเสียง
หากต้องการสร้างฉากนี้และเพิ่มทรานซิชัน ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทางด้านบน จากนั้นคลิกฉากเริ่มในการนำทางด้านซ้าย
- ในส่วนการจัดการความตั้งใจของผู้ใช้ ให้คลิก
when actions.intent.YES is matchedและทางด้านขวาในส่วนการเปลี่ยนเส้นทาง ให้คลิกเมนูแบบเลื่อนลงแล้วพิมพ์Spellingในช่องข้อความ - คลิกเพิ่ม ซึ่งจะสร้างฉากชื่อ
Spellingและบอกให้ Action เปลี่ยนไปที่ฉากSpellingหลังจากจับคู่กับความตั้งใจ YES - ขยายฉากในการนำทางด้านซ้ายเพื่อแสดงรายการฉาก
- ในส่วนฉาก ให้คลิกการสะกดคำเพื่อดูฉาก
Spelling - คลิก + ในส่วนเมื่อเข้าของฉาก
Spelling - คลิกเรียกใช้ Webhook แล้วป้อน getSpellingWord ในกล่องข้อความตัวแฮนเดิลเหตุการณ์
- เลือกส่งพรอมต์
- แทนที่ประโยคในฟิลด์
speech(Enter the response that users will see or hear...) ด้วย {} เว็บฮุคจะป้อนพรอมต์จริง
ชิปคำแนะนำจะแสดงคำแนะนำที่คลิกได้สำหรับผู้ใช้ ซึ่ง Action จะประมวลผลเป็นอินพุตของผู้ใช้
หากต้องการเพิ่มชิปคำแนะนำลงในพรอมต์ของฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้
- ในฉาก
Spellingให้คลิกคำแนะนำใต้ตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ - ในช่อง
titleให้แทนที่Suggested Responseด้วย'Repeat' - ใช้รูปแบบเดียวกัน แล้วเพิ่มชิปคำแนะนำชื่อ
'Skip'ด้วยตนเอง - ใช้รูปแบบเดียวกัน แล้วเพิ่มชิปคำแนะนำชื่อ
'Quit'ด้วยตนเอง โค้ดควรมีลักษณะดังข้อมูลโค้ดต่อไปนี้ - คลิกบันทึก
suggestions:
- title: 'Repeat'
- title: 'Skip'
- title: 'Quit'

สร้างความตั้งใจ Repeat
หากต้องการสร้างความตั้งใจ repeat ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทาง
- คลิกความตั้งใจที่กำหนดเองในการนำทางเพื่อเปิดรายการความตั้งใจ
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ Intent ใหม่เป็น
repeatแล้วกดEnter - คลิกเจตนา
repeatเพื่อเปิดหน้าเจตนาdefinition - ในส่วนเพิ่มวลีการฝึก ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
one more time pleasesay the word againrepeat the wordtell me againrepeat

- คลิกบันทึก
เพิ่มrepeatความตั้งใจไปยังSpellingฉาก
ตอนนี้ Action สามารถเข้าใจได้เมื่อผู้ใช้แสดงเจตนา"เล่นซ้ำ" คุณเพิ่มเจตนาของผู้ใช้ repeat ลงในฉาก Spelling ได้เนื่องจากผู้ใช้ตอบกลับพรอมต์ Spelling ("สะกดคำโดยใช้อักษรตามเสียง")
หากต้องการเพิ่มเจตนาของผู้ใช้ลงในฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากการสะกดคำในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spellingข้าง การจัดการความตั้งใจของผู้ใช้ - เลือกทำซ้ำในเมนูแบบเลื่อนลงของเจตนา

- ตรวจสอบเรียกใช้เว็บฮุคและป้อน repeatSpellingWord ในกล่องข้อความตัวแฮนเดิลเหตุการณ์เพื่อรับคำจำกัดความของคำ
- เลือกส่งพรอมต์
- แทนที่ประโยคในฟิลด์
speech(Enter the response that users will see or hear...) ด้วย " " เว็บฮุคจะป้อนข้อมูลพรอมต์จริง
เพิ่มชิปคำแนะนำใน "เมื่อตรงกับคำว่า "ทำซ้ำ""
- ในส่วน "เมื่อพบการทำซ้ำ" ภายใต้การจัดการความตั้งใจของผู้ใช้ ให้คลิกคำแนะนำใต้ตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ
- ในช่อง
titleให้แทนที่Suggested Responseด้วย'Skip' - ใช้การจัดรูปแบบเดียวกัน แล้วเพิ่มชิปคำแนะนำชื่อ
'Quit'ด้วยตนเอง โค้ดควรมีลักษณะเหมือนข้อมูลโค้ดต่อไปนี้
suggestions:
- title: 'Skip'
- title: 'Quit'

- คลิกบันทึก
สร้างความตั้งใจ definition
หากต้องการสร้างความตั้งใจ definition ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทาง
- คลิกความตั้งใจที่กำหนดเองในการนำทางเพื่อเปิดรายการความตั้งใจ
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ Intent ใหม่เป็น
definitionแล้วกดEnter - คลิกเจตนา
definitionเพื่อเปิดหน้าเจตนาdefinition - ในส่วนเพิ่มวลีการฝึก ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
I would like to know the definitiontell me the definitionwhat does it meanmeaningdefinitionwhat is the definition?

- คลิกบันทึก
เพิ่มdefinitionความตั้งใจไปยังSpellingฉาก
ตอนนี้ Action สามารถเข้าใจได้เมื่อผู้ใช้แสดงความตั้งใจที่จะค้นหา"คำจำกัดความ" คุณเพิ่มเจตนาของผู้ใช้ definition ลงในฉาก Spelling ได้เนื่องจากผู้ใช้ตอบกลับพรอมต์ Spelling ("สะกดคำโดยใช้อักษรตามเสียง")
หากต้องการเพิ่มเจตนาของผู้ใช้ลงในฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากการสะกดคำในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spellingข้าง การจัดการความตั้งใจของผู้ใช้ - เลือกคำจำกัดความในเมนูแบบเลื่อนลงของเจตนา

- ตรวจสอบเรียกใช้เว็บฮุคและป้อน definitionOfSpellingWord ในกล่องข้อความตัวแฮนเดิลเหตุการณ์เพื่อดูคำจำกัดความของคำ
- เลือกส่งพรอมต์
- แทนที่ประโยคในฟิลด์
speech(Enter the response that users will see or hear...) ด้วย "`" เว็บฮุคจะป้อนพรอมต์จริง
เพิ่มชิปคำแนะนำลงในการตอบกลับของเว็บฮุค
- ในฉาก
Startให้คลิกคำแนะนำใต้ตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ - ในช่อง
titleให้แทนที่Suggested Responseด้วย'Skip' - ใช้การจัดรูปแบบเดียวกัน แล้วเพิ่มชิปคำแนะนำชื่อ
'Quit'ด้วยตนเอง โค้ดควรมีลักษณะเหมือนข้อมูลโค้ดต่อไปนี้
suggestions:
- title: 'Skip'
- title: 'Quit'

- คลิกบันทึก
สร้างความตั้งใจ skip
หากต้องการสร้างความตั้งใจ skip ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทาง
- คลิกเจตนาในการนําทางเพื่อเปิดรายการเจตนา
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ Intent ใหม่เป็น
skipแล้วกดEnter - คลิกเจตนา
skipเพื่อเปิดหน้าเจตนาskip - ในส่วนเพิ่มวลีการฝึก ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
next wordgo nextnextskipskip word

- คลิกบันทึก
เพิ่มSkipความตั้งใจไปยังSpellingฉาก
ตอนนี้ Action สามารถเข้าใจได้เมื่อผู้ใช้แสดงเจตนา"ข้าม" คุณเพิ่มเจตนาของผู้ใช้ skip ลงในฉาก Spelling ได้เนื่องจากผู้ใช้ตอบกลับพรอมต์ Spelling ("สะกดคำโดยใช้อักษรตามเสียง")
หากต้องการเพิ่มเจตนาของผู้ใช้ลงในฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากการสะกดคำในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spellingข้างการจัดการความตั้งใจของผู้ใช้ - เลือกข้ามในเมนูแบบเลื่อนลงของเจตนา

- ในส่วนการเปลี่ยนฉากทางด้านขวา ให้คลิกเมนูแบบเลื่อนลงแล้วเลือก
Spelling

- คลิกบันทึก
สร้างความตั้งใจ quit
หากต้องการสร้างความตั้งใจ Quit ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทาง
- คลิกเจตนาในการนําทางเพื่อเปิดรายการเจตนา
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ Intent ใหม่เป็น
Quitแล้วกดEnter - คลิกเจตนา
Quitเพื่อเปิดหน้าเจตนาคำจำกัดความ - ในส่วนเพิ่มวลีการฝึก ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
I quitGoodbyeCancelExitQuit

- คลิกบันทึก
เพิ่มQuitความตั้งใจไปยังSpellingฉาก
ตอนนี้ Action สามารถเข้าใจได้เมื่อผู้ใช้แสดงความตั้งใจที่จะ"เลิก" คุณเพิ่มเจตนาของผู้ใช้ quit ลงในฉาก Spelling ได้เนื่องจากผู้ใช้ตอบกลับพรอมต์ Spelling ("สะกดคำโดยใช้อักษรตามเสียง")
หากต้องการเพิ่มเจตนาของผู้ใช้ลงในฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากการสะกดคำในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spellingข้าง การจัดการความตั้งใจของผู้ใช้ - เลือกเลิกในเมนูแบบเลื่อนลงของเจตนา

- ในส่วนการเปลี่ยนฉากทางด้านขวา ให้คลิกเมนูแบบเลื่อนลงแล้วเลือก
End conversation
- คลิกบันทึก
สร้างประเภทphonetic_alphabet
ในส่วนนี้ คุณจะสร้างประเภทใหม่ที่ชื่อ phonetic_alphabet ซึ่งจะระบุตัวเลือกอักษรตามเสียงที่ผู้ใช้เลือกเพื่อสะกดคำได้ นอกจากนี้ คุณยังกำหนดคำพ้องความหมาย 2-3 คำสำหรับตัวเลือกเหล่านี้ได้ในกรณีที่ผู้ใช้พูดคำที่คล้ายกัน ในส่วนถัดไป คุณจะเพิ่มประเภท phonetic_alphabet ลงในช่องเพื่อระบุว่าต้องการรับคำตอบของผู้ใช้
หากต้องการสร้างประเภท phonetic_alphabet ให้ทำตามขั้นตอนต่อไปนี้
- คลิกพัฒนาในการนำทาง
- คลิก + (เครื่องหมายบวก) ในส่วนประเภท
- พิมพ์
phonetic_alphabetแล้วกดEnter - คลิก
phonetic_alphabetเพื่อเปิดตัวเลือก - ในส่วนค่าประเภทนี้จะรองรับค่าประเภทใด ให้เลือกตัวเลือกคำและคำพ้องความหมาย
- ป้อนรายการและค่าที่เกี่ยวข้องต่อไปนี้ในส่วนเพิ่มรายการ
a | alpha, apple, amsterdam |
b | bravo, butter, baltimore |
ค | charlie, cat, casablanca |
d | delta, dog, denmark |
จ | echo, edward, edison |
f | foxtrot, fox, florida |
g | golf, george, gallipoli |
ชั่วโมง | hotel, harry, havana |
i | india, ink, italia |
j | juliette, johnny, jerusalem |
k | kilo, king, kilogramme |
l | lima, love, london |
นาที | mike, money, madagascar |
n | พฤศจิกายน นิวยอร์ก แนนซี |
o | oscar, orange, oslo |
p | papa, paris, peter |
q | quebec, queen |
r | romeo, roma, robert |
วินาที | sierra, sugar, santiago |
t | tango, tommy, tripoli |
u | uniform, umbrella, uncle |
v | victor, vinegar, Valencia |
w | วิสกี้ วิลเลียม วอชิงตัน |
x | เอกซเรย์ |
y | yankee, yellow, yorker |
z | zulu, zebra, zurich |
ตารางคีย์-ค่าควรมีลักษณะดังนี้

- คลิกบันทึก
กำหนดค่าการแสดงโฆษณาในช่อง
จากนั้นคุณต้องกำหนดค่าการป้อนข้อมูลช่องในฉากการสะกดคำ หากต้องการกำหนดค่าตรรกะการป้อนข้อมูลในช่อง ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากการสะกดคำในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spellingสำหรับการป้อนข้อมูลในช่อง - ในช่องป้อนชื่อช่อง ให้เพิ่ม
userresponseเป็นชื่อช่อง - ในเมนูแบบเลื่อนลงเลือกประเภท ให้เลือก phonetic_alphabet เป็นประเภทช่อง
- ดู This slot accepts a list of values
- เลือกต้องระบุช่องนี้
- เลือกตัวเลือกปรับแต่งการเขียนทับค่าช่อง แล้วป้อน userresponse ในกล่องข้อความพารามิเตอร์เซสชัน

- คลิกบันทึก
เพิ่มเงื่อนไขไปยังหน้าจอ Spelling
หากต้องการเพิ่มเงื่อนไขในฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้
- คลิกฉากการสะกดคำในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spellingข้างเงื่อนไข - ป้อน
scene.slots.status == "FINAL"เป็นเงื่อนไข - ตรวจสอบเรียกใช้เว็บฮุค แล้วป้อน verifySpellingWord ในกล่องข้อความตัวแฮนเดิลเหตุการณ์เพื่อยืนยันการตอบกลับของผู้ใช้
- เลือกส่งพรอมต์
- แทนที่ประโยคใน
speechฟิลด์ (Enter the response that users will see or hear...) ด้วย {} เว็บฮุกจะป้อนข้อความแจ้งจริง
เพิ่มชิปคำแนะนำลงในการตอบกลับของเว็บฮุค
- ในฉาก
Startให้คลิกคำแนะนำใต้ตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ - ในช่อง
titleให้แทนที่Suggested Responseด้วย'Next' - ใช้การจัดรูปแบบเดียวกัน แล้วเพิ่มชิปคำแนะนำชื่อ
'Quit'ด้วยตนเอง โค้ดควรมีลักษณะเหมือนข้อมูลโค้ดต่อไปนี้
suggestions:
- title: 'Next'
- title: 'Quit'

- คลิกบันทึก
12. ทดสอบการฝึกตัวสะกดในโปรแกรมจำลอง
หากต้องการทดสอบ Action ในเครื่องจำลอง ให้ทำตามขั้นตอนต่อไปนี้
- ในแถบนำทาง ให้คลิกทดสอบเพื่อไปยังเครื่องจำลอง
- หากต้องการทดสอบ Action ในโปรแกรมจำลอง ให้พิมพ์
Talk to Spelling Practiceในช่องป้อนข้อมูล - กด Enter การดำเนินการของคุณควรตอบกลับด้วยพรอมต์
Main invocationและพรอมต์ฉากStartที่เพิ่มเข้ามา "ยินดีต้อนรับสู่แบบฝึกหัดการสะกดคำ ใช้ตัวอักษรตามสัทอักษรเพื่อสะกดคำ เช่น อัลฟ่าสำหรับ a บราโวสำหรับ b ชาร์ลีสำหรับ c เป็นต้น คุณต้องการดำเนินการต่อไหม" - พูดว่าใช่เพื่อดำเนินการต่อ
- โปรแกรมจำลองจะเล่นเสียงคำเพื่อสะกด
- คุณสะกดคำโดยใช้อักษรตามการออกเสียงได้ เช่น หากต้องการพิมพ์ better ให้พูดหรือพิมพ์ "bravo echo tango tango echo romeo"
- โปรแกรมจำลองจะตอบกลับด้วยคำตอบที่ถูกต้องหรือไม่ถูกต้อง
- พูดว่าถัดไปเพื่อไปยังคำถัดไป หรือพูดว่าออกเพื่อออกจากลูปเกม
13. ขอแสดงความยินดี
ขอแสดงความยินดี คุณสร้างเกม Spelling Practice สำเร็จแล้ว
ตอนนี้คุณทราบขั้นตอนสำคัญที่จำเป็นในการสร้างเกมโดยใช้ Cloud Firestore, Cloud Functions และ Google Assistant Action Builder แล้ว
สิ่งที่คุณครอบคลุม
- วิธีโต้ตอบกับ Cloud Firestore
- วิธีใช้ช่องเพื่อรวบรวมข้อมูลจากผู้ใช้
- วิธีประมวลผลข้อมูลที่ผู้ใช้ป้อนและแสดงคำตอบ
- วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะในฉาก
- วิธีเพิ่ม Game Loop
แหล่งข้อมูลการเรียนรู้เพิ่มเติม
คุณสามารถสำรวจแหล่งข้อมูลต่อไปนี้เพื่อดูข้อมูลเกี่ยวกับการสร้างการทำงานสำหรับ Google Assistant
- เอกสารประกอบสำหรับการพัฒนา Actions สำหรับ Google Assistant
- หน้า GitHub ของ Actions on Google สำหรับโค้ดตัวอย่างและไลบรารี
- ชุมชน Reddit อย่างเป็นทางการสำหรับนักพัฒนาแอปที่ทำงานร่วมกับ Google Assistant
- หลักเกณฑ์การออกแบบการสนทนาสำหรับแนวทางปฏิบัติแนะนำและหลักเกณฑ์เกี่ยวกับ Conversational Action
- ข้อมูลเบื้องต้นเกี่ยวกับ Cloud Firestore
ล้างข้อมูลโปรเจ็กต์ [แนะนำ]
ขอแนะนำให้นำโปรเจ็กต์ที่คุณไม่ได้ตั้งใจจะใช้ออกเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่อาจเกิดขึ้น หากต้องการลบโปรเจ็กต์ที่คุณสร้างในโค้ดแล็บนี้ ให้ทำตามขั้นตอนต่อไปนี้
- หากต้องการลบโปรเจ็กต์และทรัพยากร Firebase ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนการปิด (ลบ) โปรเจ็กต์
ข้อควรระวัง: โปรดตรวจสอบว่าคุณเลือกโปรเจ็กต์ที่ถูกต้องเพื่อลบในหน้าการตั้งค่าของ Google Cloud Console
- ไม่บังคับ: หากต้องการนำโปรเจ็กต์ออกจาก Actions Console ทันที ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนการลบโปรเจ็กต์ หากไม่ทำขั้นตอนนี้ให้เสร็จสมบูรณ์ ระบบจะนำโปรเจ็กต์ของคุณออกโดยอัตโนมัติหลังจากผ่านไปประมาณ 30 วัน
ติดตาม @ActionsOnGoogle และ @Firebase บน Twitter เพื่อรับทราบประกาศล่าสุดของเรา และทวีตถึง #GoogleIO เพื่อแชร์สิ่งที่คุณสร้างขึ้น