1. ภาพรวม
แพลตฟอร์มนักพัฒนาซอฟต์แวร์ Google Assistant ช่วยให้คุณสร้างซอฟต์แวร์เพื่อขยายฟังก์ชันการทำงานของ Google Assistant ซึ่งเป็นผู้ช่วยส่วนตัวเสมือนในอุปกรณ์มากกว่า 1 พันล้านเครื่อง รวมถึงลำโพงอัจฉริยะ โทรศัพท์ รถยนต์ ทีวี หูฟัง และอื่นๆ ผู้ใช้ให้ Assistant สนทนาเพื่อทำสิ่งต่างๆ ให้เสร็จสิ้น เช่น ซื้อของชำหรือจองรถ ในฐานะนักพัฒนา คุณสามารถใช้แพลตฟอร์ม Assistant Developer เพื่อสร้างและจัดการประสบการณ์การสนทนาที่น่าพึงพอใจและมีประสิทธิภาพระหว่างผู้ใช้กับบริการเติมเต็มคำสั่งซื้อจากบุคคลที่สามของคุณได้อย่างง่ายดาย
Codelab นี้ครอบคลุมแนวคิดระดับกลางสำหรับการพัฒนาด้วย Google Assistant, Cloud Functions และ Cloud Firestore ใน Codelab นี้ คุณจะสร้างเกมชื่อ "ฝึกสะกดคำ" ที่ใช้ Google Assistant เพื่อขอให้ผู้ใช้สะกดคำ
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะสร้างเกมที่ซับซ้อนพร้อมฟังก์ชันการทำงานต่อไปนี้:
- รับการตอบกลับการสะกดจากผู้ใช้ และปรับเปลี่ยนพร้อมต์การสนทนา ขึ้นอยู่กับค่า
- ตอบสนองด้วยคำใบ้ที่เกี่ยวข้องกับการสะกดคำ เช่น คำจำกัดความหรือการท่องคำซ้ำ
- สร้าง Game Loop เพื่อให้ผู้ใช้สามารถโต้ตอบกับ Assistant ได้อีกครั้งหลังจากสะกดคำแล้ว
ก่อนที่คุณจะเริ่มสร้าง คุณสามารถโต้ตอบกับ แอ็กชัน สดบนอุปกรณ์ที่เปิดใช้งาน Google Assistant ได้โดยพูดว่า "เฮ้ Google คุยกับการฝึกสะกดคำ" เส้นทางเริ่มต้นผ่านการดำเนินการนี้สำหรับผู้ใช้ที่กลับมามีลักษณะเหมือนการโต้ตอบต่อไปนี้:
เมื่อคุณทำ Codelab นี้เสร็จแล้ว การดำเนินการที่เสร็จสมบูรณ์จะมีขั้นตอนการสนทนาดังต่อไปนี้
สิ่งที่คุณจะได้เรียนรู้
- วิธีโต้ตอบกับ Cloud Firestore
- วิธีใช้ slot เพื่อรวบรวมข้อมูลจากผู้ใช้
- วิธีประมวลผลอินพุตของผู้ใช้และตอบกลับ
- วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะให้กับฉาก
- วิธีเพิ่ม Game Loop
สิ่งที่คุณต้องการ
ข้อกำหนดเบื้องต้นสำหรับ Codelab นี้มีดังนี้:
- เว็บเบราว์เซอร์ เช่น Google Chrome
- IDE สำหรับเขียนฟังก์ชันคลาวด์
- วิธีการชำระเงิน Codelab นี้ใช้ฟังก์ชันคลาวด์สำหรับ Firebase ซึ่งกำหนดให้โปรเจ็กต์ของคุณอยู่ในแผนการกำหนดราคา Firebase Blaze ( เรียนรู้เพิ่มเติม )
- เทอร์มินัลสำหรับรันคำสั่งเชลล์
- 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
หากต้องการใช้ฟังก์ชันคลาวด์สำหรับ Firebase คุณจะต้องอัปเกรดโปรเจ็กต์ Firebase เป็น แผนการกำหนดราคา Blaze ซึ่งหมายความว่าคุณจะต้องแนบบัญชีสำหรับการเรียกเก็บเงินของ Google Cloud เข้ากับโปรเจ็กต์ของคุณ โดยคุณจะต้องระบุบัตรเครดิตหรือวิธีการชำระเงินอื่น ๆ
โปรเจ็กต์ Firebase ทั้งหมด รวมถึงโปรเจ็กต์ที่อยู่ในแผน Blaze ยังคงมีสิทธิ์เข้าถึงโควต้าการใช้งานที่ไม่มีค่าใช้จ่ายสำหรับฟังก์ชันคลาวด์ ขั้นตอนที่ระบุไว้ใน Codelab นี้จะอยู่ภายในขีดจำกัดการใช้งานที่ไม่มีค่าใช้จ่าย อย่างไรก็ตาม คุณจะเห็นค่าบริการเล็กน้อย ( ประมาณ 0.03 USD ) จาก Cloud Storage ซึ่งใช้เพื่อโฮสต์อิมเมจบิลด์ของ Cloud Functions
4. ติดตั้ง Firebase CLI
Firebase CLI (อินเทอร์เฟซบรรทัดคำสั่ง) ช่วยให้คุณสามารถปรับใช้ฟังก์ชันคลาวด์ของคุณได้
มีหลาย ตัวเลือกในการติดตั้ง Firebase CLI ขึ้นอยู่กับระบบปฏิบัติการและกรณีการใช้งานของคุณ ขั้นตอนต่อไปนี้จะอธิบายตัวเลือกที่พบบ่อยที่สุดหากคุณใช้ฟังก์ชันคลาวด์ด้วย
- ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง npm ซึ่งโดยทั่วไปจะมาพร้อมกับ Node.js
- ติดตั้งหรืออัพเกรด CLI โดยการรันคำสั่ง npm ต่อไปนี้:
$ npm -g install firebase-tools
- ตรวจสอบว่าติดตั้ง CLI อย่างถูกต้องโดยเรียกใช้:
$ firebase --version
ตรวจสอบให้แน่ใจว่าเวอร์ชันของ Firebase CLI เป็น 9.0.0 หรือใหม่กว่า เพื่อให้มีคุณสมบัติล่าสุดทั้งหมดที่จำเป็นสำหรับฟังก์ชันคลาวด์ ถ้าไม่เช่นนั้น ให้รัน npm install -g firebase-tools เพื่ออัปเกรดดังที่แสดงด้านบน
- อนุญาต Firebase CLI โดยเรียกใช้:
$ firebase login
- จากไดเร็กทอรี Spelling-functions-start ให้ตั้งค่า Firebase CLI เพื่อใช้โปรเจ็กต์ Firebase ของคุณ รันคำสั่งต่อไปนี้ เลือกรหัสโปรเจ็กต์ของคุณ จากนั้นทำตามคำแนะนำ เมื่อได้รับแจ้ง คุณสามารถเลือกนามแฝงใดก็ได้ เช่น
codelab
เป็นต้น
$ firebase use --add
5. ไดเร็กทอรีฟังก์ชัน
ตอนนี้ คุณจะเพิ่มฟังก์ชันการทำงานโดยใช้ Firebase SDK สำหรับฟังก์ชันระบบคลาวด์เพื่อสร้างแบ็กเอนด์สำหรับเกม Spelling Practice
Cloud Functions ช่วยให้คุณมีโค้ดที่ทำงานบนคลาวด์โดยไม่ต้องตั้งค่าเซิร์ฟเวอร์ Codelab นี้จะแสดงวิธีสร้างฟังก์ชันที่ตอบสนองต่อเหตุการณ์ Firebase Authentication, Cloud Storage และ Firebase Realtime Database เริ่มต้นด้วยการรับรองความถูกต้อง
เมื่อใช้ Firebase SDK สำหรับฟังก์ชันคลาวด์ โค้ดฟังก์ชันของคุณจะอยู่ภายใต้ไดเร็กทอรี functions
(โดยค่าเริ่มต้น) เพื่อให้ง่ายขึ้นสำหรับคุณ เราได้สร้างไฟล์ functions/index.js
ที่จะใส่โค้ดของคุณไว้แล้ว อย่าลังเลที่จะตรวจสอบไดเร็กทอรี functions
ชั่นก่อนดำเนินการต่อ
$ cd functions $ ls
รหัสฟังก์ชันของคุณยังเป็นแอป Node.js ดังนั้นจึงจำเป็นต้องมี package.json
ที่ให้ข้อมูลบางอย่างเกี่ยวกับแอปของคุณและแสดงรายการการขึ้นต่อกัน
หากคุณไม่คุ้นเคยกับ Node.js การเรียนรู้เพิ่มเติมเกี่ยวกับ Node.js ก่อนดำเนินการต่อใน Codelab จะช่วยได้
ไฟล์ package.json
แสดงรายการการขึ้นต่อกันที่จำเป็นสองรายการแล้ว: Firebase SDK สำหรับฟังก์ชันคลาวด์ และ Firebase Admin SDK หากต้องการติดตั้งแบบโลคัล ให้รัน npm install
จากไดเร็กทอรี functions
:
$ npm install
ตอนนี้เรามาดูไฟล์ index.js
กันดีกว่า:
ดัชนี 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.
คุณจะต้องนำเข้าโมดูลที่จำเป็นก่อน จากนั้นจึงเขียนฟังก์ชันสี่ฟังก์ชันแทนที่สิ่งที่ต้องทำ ดำเนินการต่อไปยังขั้นตอนถัดไปของ Codelab เพื่อนำเข้าโมดูล
6. นำเข้าโมดูลที่จำเป็น
Codelab นี้ต้องใช้สามโมดูล
- โมดูล
firebase-functions
ช่วยให้เราสามารถเขียนทริกเกอร์สำหรับฟังก์ชันคลาวด์ของเราได้ - โมดูล
firebase-admin
ช่วยให้เราใช้แพลตฟอร์ม Firebase บนเซิร์ฟเวอร์ที่มีสิทธิ์การเข้าถึงของผู้ดูแลระบบ เช่น เขียนไปยัง Cloud Firestore - Actions SDK Node.js Fulfillment Library ตอบสนองตัวจัดการ Actions SDK สำหรับ Google Assistant
- ติดตั้ง Actions SDK โดยการรันคำสั่ง npm ต่อไปนี้:
$ npm install @assistant/conversation
- ในไฟล์
index.js
ให้แทนที่ TODO แรกด้วยข้อมูลต่อไปนี้
การเปลี่ยนแปลงเหล่านี้นำเข้าแต่ละโมดูลที่จำเป็น
นอกจากนี้ Firebase Admin SDK ยังกำหนดค่าได้โดยอัตโนมัติเมื่อใช้งานในสภาพแวดล้อม Cloud Functions หรือคอนเทนเนอร์ Google Cloud อื่นๆ นี่คือสิ่งที่เกิดขึ้นเมื่อเราเรียก admin.initializeApp();
ในการเปลี่ยนแปลงด้านล่าง
ดัชนี 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 Actions
7. สร้างฟังก์ชั่น
รับคำจำกัดความของคำแล้วเขียนไปที่ Cloud Firestore
คุณจะใช้ API สาธารณะ dictionaryapi.dev
เพื่อรับคำจำกัดความของคำ
ในไฟล์ index.js
ให้แทนที่ TODO สำหรับ getWordDetailsFromDictionaryAPI
ด้วยค่าต่อไปนี้:
ดัชนี 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 Function ที่ทริกเกอร์ทุกครั้งที่มีการสร้างเอกสารใหม่ใน Cloud Firestore มันจะเรียก dictionaryapi.dev
API เพื่อรับคำจำกัดความของคำผ่านฟังก์ชัน getWordDetailsFromDictionaryAPI
ที่เราเขียนไว้ด้านบน
ในไฟล์ index.js
ให้แทนที่ TODO สำหรับ createSpellingPracticeWord
ด้วยค่าต่อไปนี้:
ดัชนี 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
ดัชนี 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
คุณสามารถเขียนฟังก์ชันคลาวด์ที่ส่งคืนคำสะกดคำถัดไปจากรายการคำได้
ในไฟล์ index.js
ให้แทนที่ TODO สำหรับ getSpellingWord
ด้วยค่าต่อไปนี้:
ดัชนี 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
ด้วยค่าต่อไปนี้:
ดัชนี 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
ด้วยค่าต่อไปนี้:
ดัชนี 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); });
ตรวจสอบการสะกดคำของผู้ใช้
คุณสามารถเขียนฟังก์ชันคลาวด์ที่ตรวจสอบการตอบสนองของผู้ใช้เกี่ยวกับวิธีการสะกดคำปัจจุบันสำหรับเกมได้
ในไฟล์ index.js
ให้แทนที่ TODO สำหรับ verifySpellingWord
ด้วยข้อมูลต่อไปนี้:
ดัชนี 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);
ปรับใช้ฟังก์ชันทั้งหมดของคุณ
ฟังก์ชันคลาวด์ของคุณจะใช้งานได้หลังจากที่คุณปรับใช้กับ 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 จากนั้นคลิกโครงการ ฝึกสะกดคำ เปิดแดชบอร์ดฟังก์ชันเพื่อดูจุดสิ้นสุดของฟังก์ชัน
คุณได้เพิ่มฟังก์ชันที่จำเป็นทั้งหมดเรียบร้อยแล้ว ตอนนี้เรามาดูการตั้งค่า Cloud Firestore กันดีกว่า
8. เปิดใช้งาน Cloud Firestore
คุณจะต้องเปิดใช้งาน Cloud Firestore
ในส่วน Build ของคอนโซล 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
- ในกล่องข้อความ ฟิลด์ ให้ป้อน
word
และในกล่องข้อความ ค่า ให้ป้อนagreement
- คลิก บันทึก
เมื่อคุณเพิ่มเอกสารนี้ลงใน Cloud Firestore เอกสารจะทริกเกอร์ฟังก์ชัน createSpellingPracticeWord เพื่อดึงรายละเอียดคำจำกัดความของคำนั้น เพิ่มคำอื่นๆ (เช่น ความกลัว รถยนต์ ความจริง บอก ดีกว่า การเดินทาง ...) โดยการสร้างเอกสารใหม่สำหรับแต่ละคำ
10. ตั้งค่า Google Assistant
ส่วนต่อไปนี้อธิบายวิธีตั้งค่าสภาพแวดล้อมการพัฒนา Google Assistant และสร้างโปรเจ็กต์ Actions
ตรวจสอบการตั้งค่าการอนุญาต Google ของคุณ
หากต้องการทดสอบการดำเนินการที่คุณสร้างใน Codelab นี้ คุณต้องเปิดใช้สิทธิ์ที่จำเป็นเพื่อให้เครื่องจำลองสามารถเข้าถึงการดำเนินการของคุณได้ หากต้องการเปิดใช้งานสิทธิ์ ให้ทำตามขั้นตอนเหล่านี้:
- ไปที่หน้า ส่วนควบคุมกิจกรรม
- ลงชื่อเข้าใช้ด้วยบัญชี Google ของคุณ หากคุณยังไม่ได้ดำเนินการ
- เปิดใช้งานการอนุญาตต่อไปนี้:
- กิจกรรมบนเว็บและแอป
- ใต้ กิจกรรมบนเว็บและแอป ให้เลือกช่องทำเครื่องหมายถัดจาก รวมประวัติ Chrome และกิจกรรมจากไซต์ แอป และอุปกรณ์ที่ใช้บริการของ Google
สร้างโครงการการดำเนินการ
โปรเจ็กต์ Actions ของคุณคือคอนเทนเนอร์สำหรับ Action ของคุณ หากต้องการสร้างโปรเจ็กต์ Actions สำหรับ Codelab นี้ ให้ทำตามขั้นตอนเหล่านี้
- เปิด คอนโซลการดำเนินการ
- คลิก โครงการใหม่
- ยอมรับข้อกำหนดในการให้บริการ
- พิมพ์หรือเลือก
spelling-practice-codelab
ที่คุณสร้างโดยใช้ Firebase Console (ชื่อนี้ใช้สำหรับการอ้างอิงภายในของคุณ หลังจากนั้น คุณสามารถตั้งชื่อภายนอกสำหรับโครงการของคุณได้)
- คลิก นำเข้าโครงการ
- ใน Action ประเภทใดที่คุณต้องการสร้าง? หน้าจอ เลือกการ์ด แบบกำหนดเอง
- คลิก ถัดไป
- เลือกการ์ด โครงการเปล่า
- คลิก เริ่มสร้าง
- ป้อน การฝึกสะกดคำ สำหรับชื่อที่แสดงแล้วคลิกบันทึก
ผู้ใช้เริ่มต้นการสนทนาด้วยการดำเนินการของคุณผ่าน การร้องขอ ตัวอย่างเช่น ผู้ใช้สามารถเรียกใช้การดำเนินการของคุณโดยพูดวลีเช่น "Ok Google คุยกับการฝึกสะกดคำ" โดยที่ การฝึกสะกดคำ คือ ชื่อที่แสดง
การดำเนินการของคุณต้องมีชื่อที่แสดงหากคุณต้องการปรับใช้กับการใช้งานจริง อย่างไรก็ตาม เพื่อทดสอบการดำเนินการของคุณ คุณไม่จำเป็นต้องกำหนดชื่อที่แสดง แต่คุณสามารถใช้วลี "พูดคุยกับแอปทดสอบของฉัน" ในเครื่องจำลองเพื่อเรียกใช้การดำเนินการของคุณได้
กำหนดค่าการเติมสินค้า
คุณต้องเชื่อมต่อกับ Assistant ซึ่งเป็นตัวจัดการเหตุการณ์สำหรับ Cloud Functions ที่คุณเขียนและปรับใช้ก่อนหน้านี้ใน Codelab นี้
หากต้องการกำหนดค่าการจัดการคำสั่งซื้อของคุณ ให้ทำตามขั้นตอนเหล่านี้:
- คลิก Webhook ในการนำทางด้านข้าง
- เลือก จุดสิ้นสุด Https เป็นตัวเลือกการเติมเต็ม:
- ป้อน URL ปลายทางของฟังก์ชันของคุณในกล่อง ข้อความปลายทาง HTTPs จากนั้นคลิก บันทึก
ในส่วนถัดไป คุณจะปรับแต่งพรอมต์สำหรับการเรียกใช้หลักของคุณในคอนโซล Actions
ตั้งค่าการร้องขอหลัก
คุณต้องแก้ไข การร้องขอหลัก เพื่อกำหนดสิ่งที่เกิดขึ้นหลังจากที่ผู้ใช้เรียกใช้การดำเนินการของคุณ
ตามค่าเริ่มต้น ตัวสร้างการดำเนินการ จะแจ้งพร้อม ต์ทั่วไปเมื่อมีการทริกเกอร์การเรียกใช้ของคุณ ( "เริ่มสร้างการดำเนินการของคุณโดยกำหนดการเรียกใช้หลัก")
หากต้องการแก้ไขพรอมต์ที่การดำเนินการของคุณส่งกลับไปยังผู้ใช้เมื่อพวกเขาเรียกใช้การดำเนินการของคุณ ให้ทำตามขั้นตอนเหล่านี้:
- คลิก คำขอหลัก ในการนำทาง
- ทำเครื่องหมายที่
Call your webhook
และเพิ่มชื่อตัวจัดการเหตุการณ์getSpellingWordList
ในกล่องข้อความ - ในตัวแก้ไขโค้ด ให้แทนที่ข้อความในช่องคำ
speech
ด้วยข้อความต้อนรับต่อไปนี้:Welcome to Spelling Practice
หมายเหตุ: คุณสามารถใช้การจัดรูปแบบ YAML หรือ JSON เพื่อแก้ไขข้อความแจ้งของคุณได้
- คลิก บันทึก
ทดสอบการร้องขอหลักในเครื่องจำลอง
คอนโซลการดำเนินการมีเครื่องมือเว็บสำหรับทดสอบการดำเนินการของคุณที่เรียกว่า เครื่องจำลอง อินเทอร์เฟซจำลองอุปกรณ์ฮาร์ดแวร์และการตั้งค่าต่างๆ เพื่อให้คุณสามารถสนทนากับ Action ของคุณได้เหมือนกับว่ากำลังทำงานบน Smart Display, โทรศัพท์, ลำโพง หรือ KaiOS
หากต้องการทดสอบการเรียกใช้หลักของ Action ในเครื่องจำลอง ให้ทำตามขั้นตอนเหล่านี้:
- ในแถบนำทางด้านบน คลิก ทดสอบ เพื่อไปที่เครื่องจำลอง
- หากต้องการเรียกใช้การดำเนินการของคุณในเครื่องจำลอง ให้พิมพ์
Talk to Spelling Practice
ในช่องป้อนข้อมูลด้านซ้ายบน จากนั้นกด Enter บนแป้นพิมพ์ของคุณ
เมื่อคุณเรียกใช้คำขอหลักของการดำเนินการ Assistant จะตอบกลับด้วยข้อความต้อนรับที่คุณกำหนดเอง ณ จุดนี้ การสนทนาจะสิ้นสุดลงหลังจากที่ Assistant ตอบกลับด้วยการทักทาย
ดูบันทึกเหตุการณ์
เมื่อคุณอยู่ในแท็บ ทดสอบ แผงทางด้านขวาจะแสดง บันทึกเหตุการณ์ ซึ่งแสดงประวัติการสนทนาเป็นบันทึกเหตุการณ์ บันทึกเหตุการณ์แต่ละรายการจะแสดงเหตุการณ์ที่เกิดขึ้นระหว่างการสนทนาครั้งนั้น หากต้องการดูบันทึกเหตุการณ์ ให้คลิกไอคอนสีเทาก่อนกิจกรรม
ขณะนี้การดำเนินการของคุณมีบันทึกเหตุการณ์หนึ่งรายการ ซึ่งแสดงทั้งอินพุตของผู้ใช้ ( "Talk to Spelling Practice" ) และการตอบกลับของการดำเนินการของคุณ ภาพหน้าจอต่อไปนี้แสดงบันทึกเหตุการณ์ของการดำเนินการของคุณ:
11. สร้างบทสนทนาเพื่อฝึกสะกดคำ
ตอนนี้ คุณได้กำหนดสิ่งที่เกิดขึ้นหลังจากที่ผู้ใช้เรียกใช้การดำเนินการของคุณแล้ว คุณสามารถสร้างบทสนทนาที่เหลือของการดำเนินการของคุณได้ การฝึกสะกดคำ มีสี่ฉาก และคุณต้องเปิดใช้งานแต่ละฉากก่อนจึงจะรันได้ วิธีทั่วไปที่สุดในการเปิดใช้งานฉากคือการกำหนดค่าการดำเนินการของคุณ เพื่อที่ว่าเมื่อผู้ใช้จับคู่จุดประสงค์ของผู้ใช้ภายในฉาก จุดประสงค์นั้นจะกระตุ้นให้เกิดการเปลี่ยนผ่านไปยังฉากอื่นและเปิดใช้งาน
การเปลี่ยนจากการวิงวอนหลักเป็นฉากเริ่มต้น
ในส่วนนี้ คุณจะสร้างฉากใหม่ที่เรียกว่า Start
ซึ่งจะส่งข้อความแจ้งให้ผู้ใช้ถามว่าต้องการเริ่มเล่น Spelling Practice หรือไม่ คุณยังเพิ่มการเปลี่ยนจากการร้องขอหลักไปยังฉาก Start
ใหม่
หากต้องการสร้างฉากนี้และเพิ่มการเปลี่ยน ให้ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทางด้านบน จากนั้นคลิก คำขอหลัก ในการนำทางด้านซ้าย
- ในส่วน การเปลี่ยนภาพ ทางด้านขวา ให้คลิกเมนูแบบเลื่อนลง จากนั้นพิมพ์
Start
ในช่องข้อความ
- คลิก เพิ่ม ซึ่งจะสร้างฉากที่เรียกว่า
Start
และบอกให้ Action เปลี่ยนไปที่ฉากStart
หลังจากที่ Action แจ้งข้อความต้อนรับแก่ผู้ใช้ - คลิก ฉาก ในการนำทางด้านซ้ายเพื่อแสดงรายการฉาก
- ใต้ ฉาก คลิก เริ่ม เพื่อดูฉาก
Start
- คลิก + ในส่วน On Enter ของฉาก
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?
ชิปคำแนะนำเสนอคำแนะนำที่คลิกได้สำหรับผู้ใช้ที่การดำเนินการของคุณประมวลผลเป็นอินพุตของผู้ใช้ ในส่วนนี้ คุณจะเพิ่มชิปคำแนะนำที่ปรากฏด้านล่างข้อความแจ้งที่คุณเพิ่งกำหนดค่า ( Do you want to play
Spelling Practice
?
) เพื่อรองรับผู้ใช้บนอุปกรณ์ที่มีหน้าจอ
หากต้องการเพิ่มชิปข้อเสนอแนะลงในพรอมต์ของฉาก Start
ให้ทำตามขั้นตอนเหล่านี้:
- ในฉาก
Start
ให้คลิกคำแนะนำด้านล่างตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำตัวเดียว - ในฟิลด์
title
ให้แทนที่Suggested Response
ด้วย'Yes'
- ใช้การจัดรูปแบบเดียวกัน เพิ่มชิปคำแนะนำชื่อ
'No'
และ'Help with Phonetics'
ด้วยตนเอง โค้ดของคุณควรมีลักษณะเหมือนกับตัวอย่างต่อไปนี้: - คลิก บันทึก
ทดสอบการกระทำของคุณในเครื่องจำลอง
ณ จุดนี้ การกระทำของคุณควรเปลี่ยนจากการร้องขอหลักเป็นฉาก เริ่มต้น และถามผู้ใช้ว่าต้องการดำเนินการต่อหรือไม่ ชิปคำแนะนำควรปรากฏในจอแสดงผลจำลองด้วย
หากต้องการทดสอบการกระทำของคุณในเครื่องจำลอง ให้ทำตามขั้นตอนเหล่านี้:
- ในแถบนำทาง คลิก ทดสอบ เพื่อนำคุณไปยังเครื่องจำลอง
- หากต้องการทดสอบการกระทำของคุณในเครื่องจำลอง ให้พิมพ์
Talk to Spelling Practice
ในช่องป้อนข้อมูล - กดปุ่ม ตกลง . การกระทำของคุณควรตอบสนองด้วยพรอมต์
Main invocation
และพร้อมท์ฉากStart
ที่เพิ่มเข้ามา "ยินดีต้อนรับสู่การฝึกสะกดคำ ใช้สัทอักษรเพื่อสะกดคำ ตัวอย่างเช่น อัลฟ่าสำหรับ a, bravo สำหรับ b, charlie สำหรับ c ฯลฯ คุณต้องการ ดำเนินการต่อ?" .
ภาพหน้าจอต่อไปนี้แสดงการโต้ตอบนี้:
- คลิกชิปคำแนะนำ
Yes
หรือNo
หรือHelp with Phonetics
เพื่อตอบสนองต่อพร้อมท์ (คุณยังสามารถพูดว่า "ใช่" หรือ "ไม่ใช่" หรือ "ความช่วยเหลือเกี่ยวกับสัทศาสตร์" หรือป้อนYes
หรือNo
หรือHelp with Phonetics
ในช่อง ป้อนข้อมูล )
เมื่อคุณตอบสนองต่อข้อความแจ้ง การดำเนินการของคุณจะตอบกลับด้วยข้อความที่ระบุว่าไม่สามารถเข้าใจ สิ่งที่คุณป้อน: "ขออภัย ฉันไม่เข้าใจ คุณลองอีกครั้งได้ไหม" เนื่องจากคุณยังไม่ได้กำหนดค่าการดำเนินการของคุณให้เข้าใจและตอบสนองต่ออินพุต "ใช่" หรือ "ไม่" การดำเนินการของคุณจึงจับคู่อินพุตของคุณกับความตั้งใจ NO_MATCH
ตามค่าเริ่มต้น จุดประสงค์ของระบบ NO_MATCH
จะให้คำตอบทั่วไป แต่คุณสามารถปรับแต่งการตอบสนองเหล่านี้เพื่อแจ้งให้ผู้ใช้ทราบว่าคุณไม่เข้าใจข้อมูลที่ป้อนของพวกเขา Assistant จะสิ้นสุดการสนทนาของผู้ใช้กับการดำเนินการของคุณหลังจากที่ไม่สามารถจับคู่อินพุตของผู้ใช้ได้สามครั้ง
เพิ่มเจตนาไม่และสัทศาสตร์
ขณะนี้ผู้ใช้สามารถตอบคำถามที่การกระทำของคุณเกิดขึ้นได้แล้ว คุณสามารถกำหนดค่าการดำเนินการของคุณให้เข้าใจคำตอบของผู้ใช้ได้ ( "ใช่" หรือ "ไม่" หรือ "ความช่วยเหลือด้านสัทศาสตร์" ) ในส่วนต่อไปนี้ คุณสร้างความตั้งใจของผู้ใช้ที่ตรงกันเมื่อผู้ใช้พูดว่า "ใช่" หรือ "ไม่" หรือ "ช่วยเหลือเรื่องการออกเสียง" และเพิ่มความตั้งใจเหล่านี้ลงในฉาก Start
เราจะใช้เจตนาของระบบ yes
และจะสร้างเจตนาอื่น ๆ
สร้าง no
เจตนา
ตอนนี้ คุณต้องสร้างการ no
เจตนาที่จะเข้าใจและตอบสนองต่อผู้ใช้เมื่อพวกเขาไม่ต้องการเล่นเกม หากต้องการสร้างจุดประสงค์นี้ ให้ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทาง
- คลิก Intent แบบกำหนดเอง ในการนำทางเพื่อเปิดรายการ Intent
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ Intent
no
ใหม่แล้วกด Enter - คลิก ไม่ เพื่อเปิดหน้า
no
เจตนา - ในส่วน เพิ่มวลีการฝึกอบรม คลิกในกล่องข้อความ ป้อนวลี และป้อนวลีต่อไปนี้:
-
No
-
N
-
I don't want
-
nope
- คลิก บันทึก
เพิ่ม no
เจตนาในฉาก Start
ตอนนี้ การดำเนินการสามารถเข้าใจได้เมื่อผู้ใช้แสดงคำ ว่า "ไม่" หรือบางสิ่งที่คล้ายกับ "ไม่" เช่น "ไม่" คุณต้องเพิ่มการ no
เจตนาของผู้ใช้ในฉาก Start
เนื่องจากผู้ใช้ตอบสนองต่อพรอมต์ Start
(" ยินดีต้อนรับสู่การฝึกสะกดคำ ใช้อักษรสัทอักษรเพื่อสะกดคำ ตัวอย่างเช่น alpha สำหรับ a, bravo สำหรับ b, charlie สำหรับ c ฯลฯ คุณต้องการดำเนินการต่อหรือไม่?" )
เมื่อต้องการเพิ่มเจตนานี้สำหรับฉาก Start
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก เริ่ม ในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Start
ถัดจากการจัดการความตั้งใจของผู้ใช้ - ในส่วน เจตนา ให้เลือก ไม่ ในรายการแบบเลื่อนลง
- คลิก ส่งข้อความแจ้ง และอัปเดตช่องคำ
speech
ด้วยข้อความต่อไปนี้:Good Bye
โค้ดในตัวแก้ไขของคุณควรมีลักษณะคล้ายกับตัวอย่างต่อไปนี้:
candidates: - first_simple: variants: - speech: >- Goodbye.
- ในส่วน การเปลี่ยน ให้เลือก สิ้นสุดการสนทนา จากดรอปดาวน์
- คลิก บันทึก
ทดสอบ no
เจตนาในโปรแกรมจำลอง
ณ จุดนี้ การดำเนินการของคุณเข้าใจเมื่อผู้ใช้ไม่ต้องการเล่นเกมและตอบกลับอย่างเหมาะสม
เมื่อต้องการทดสอบเจตนานี้ในเครื่องจำลอง ให้ทำตามขั้นตอนเหล่านี้:
- ในแถบนำทาง คลิก ทดสอบ
- พิมพ์
Talk to Spelling Practice
ในช่องป้อนข้อมูล แล้วกดEnter
- พิมพ์
No
ในช่อง Input แล้วกด Enter หรือคลิกชิปไม่มีข้อเสนอแนะ
เพิ่มระบบ YES
เจตนาในการ Start
ฉาก
ตอนนี้ เราจะเพิ่มเจตนาของ ระบบ "ใช่" ลงในฉาก Start
เนื่องจากผู้ใช้ตอบว่าใช่ในพรอมต์ Start
(" ยินดีต้อนรับสู่การฝึกสะกดคำ ใช้อักษรสัทอักษรเพื่อสะกดคำ ตัวอย่างเช่น อัลฟ่า สำหรับ a, bravo สำหรับ b, charlie สำหรับ c ฯลฯ คุณต้องการดำเนินการต่อหรือไม่?" )
เมื่อต้องการเพิ่มความตั้งใจของผู้ใช้รายนี้ลงในฉาก Start
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก เริ่ม ในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Start
ถัดจาก การจัดการความตั้งใจของผู้ใช้ - ภายใต้ All System Intents เลือก YES ในเมนูแบบเลื่อนลง Intent
- คลิก โทรหา webhook ของคุณ และอัปเดตกล่องข้อความ
event handler
ด้วยฟังก์ชันที่คุณสร้างไว้ก่อนหน้านี้:getSpellingWordList
- ในส่วน การเปลี่ยน ให้ คลิกรายการแบบเลื่อนลงและเลือก สิ้นสุดการสนทนา
- คลิก บันทึก
ทดสอบเจตนา YES
ในโปรแกรมจำลอง
ณ จุดนี้ การกระทำของคุณเข้าใจว่าเมื่อใดที่ผู้ใช้ต้องการเล่นเกมและส่งกลับการตอบสนองที่เหมาะสม
เมื่อต้องการทดสอบเจตนานี้ในเครื่องจำลอง ให้ทำตามขั้นตอนเหล่านี้:
- ในแถบนำทาง คลิก ทดสอบ
- หากต้องการทดสอบการกระทำของคุณในเครื่องจำลอง ให้พิมพ์
Talk to Spelling Practice
ในช่อง ป้อนข้อมูล แล้วกด Enter - พิมพ์
Yes
ในช่อง ป้อนข้อมูล แล้วกด Enter หรือคลิกชิปข้อเสนอแนะYes
การดำเนินการของคุณจะดึงรายการคำศัพท์ฝึกสะกดคำทั้งหมดและจัดเก็บไว้ในเซสชัน การดำเนินการของคุณจะสิ้นสุดเซสชันเนื่องจากคุณเลือก End conversation
สำหรับความตั้งใจ YES
สร้างเจตนา Phonetics
เมื่อต้องการสร้างความตั้งใจ Phonetics
ให้ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทาง
- คลิก Intent แบบกำหนดเอง ในการนำทางเพื่อเปิดรายการ Intent
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ
phonetics
เจตนาใหม่และกดEnter
- คลิกเจตนา
phonetics
เพื่อเปิดหน้าเจตนาphonetics
- ในส่วนเพิ่มวลีการฝึกอบรม คลิกกล่องข้อความ ป้อนวลี และป้อนวลีต่อไปนี้:
-
how do I spell words
-
phonetics
-
help me with phonetics
-
phonetic alphabet
- คลิก บันทึก
เพิ่มเจตนา phonetics
ลงในฉาก Start
ตอนนี้ การดำเนินการสามารถเข้าใจได้เมื่อผู้ใช้แสดงเจตนา "สัทศาสตร์" คุณสามารถเพิ่มความตั้งใจของผู้ใช้ phonetics
ลงในฉาก Start
ได้ เนื่องจากผู้ใช้ตอบสนองต่อพร้อมท์ Start
(" ยินดีต้อนรับสู่การฝึกสะกดคำ ใช้อักษรสัทศาสตร์เพื่อสะกดคำ ตัวอย่างเช่น alpha สำหรับ a, bravo สำหรับ b, charlie สำหรับ c ฯลฯ คุณต้องการดำเนินการต่อหรือไม่?" )
เมื่อต้องการเพิ่มความตั้งใจของผู้ใช้รายนี้ลงในฉาก Start
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก เริ่ม ในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Start
ถัดจากการจัดการความตั้งใจของผู้ใช้ - เลือก สัทศาสตร์ ในเมนูแบบเลื่อนลง Intent
- ในส่วน การเปลี่ยน ให้ คลิกรายการแบบเลื่อนลงและเลือก สิ้นสุดการสนทนา
- คลิก บันทึก
การเปลี่ยนจากฉากเริ่มต้นเป็นฉากการสะกดคำ
ในส่วนนี้ คุณจะสร้างฉากใหม่ที่เรียกว่า การสะกด ซึ่งจะส่งข้อความแจ้งให้ผู้ใช้สะกดคำโดยใช้สัทอักษร
หากต้องการสร้างฉากนี้และเพิ่มการเปลี่ยน ให้ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทางด้านบน จากนั้นคลิก เริ่ม ฉากในการนำทางด้านซ้าย
- ในส่วน การจัดการความตั้งใจของผู้ใช้ ให้ คลิก
when actions.intent.YES is matched
และทางด้านขวาในส่วน การเปลี่ยน ให้คลิกเมนูแบบเลื่อนลงแล้วพิมพ์Spelling
ในช่องข้อความ - คลิก เพิ่ม ซึ่งจะสร้างฉากที่เรียกว่า
Spelling
และบอกให้การดำเนินการเปลี่ยนไปเป็นฉากSpelling
หลังจากการจับคู่ด้วยเจตนา YES - ขยาย ฉาก ในการนำทางด้านซ้ายเพื่อแสดงรายการฉาก
- ใต้ ฉาก คลิกการสะกดคำเพื่อดูฉาก
Spelling
- คลิก + ในส่วน On Enter ของฉาก
Spelling
- คลิก โทรหา webhook ของคุณ แล้วป้อน getSpellingWord ในกล่องข้อความตัวจัดการเหตุการณ์
- เลือก ส่งข้อความแจ้ง
- แทนที่ประโยคในช่อง
speech
(Enter the response that users will see or hear...
) ด้วย {} ข้อความแจ้งจริงจะถูกเติมโดย webhook
ชิปคำแนะนำเสนอคำแนะนำที่คลิกได้สำหรับผู้ใช้ที่การดำเนินการของคุณประมวลผลเป็นอินพุตของผู้ใช้
เมื่อต้องการเพิ่มชิปข้อเสนอแนะลงในพร้อมท์ของฉาก Spelling
ให้ทำตามขั้นตอนเหล่านี้:
- ในฉาก
Spelling
ให้คลิกคำแนะนำด้านล่างตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำสามชิป - ในฟิลด์
title
ให้แทนที่Suggested Response
ด้วย'Repeat'
- ใช้การจัดรูปแบบเดียวกัน เพิ่มชิปคำแนะนำชื่อ
'Skip'
ด้วยตนเอง - ใช้การจัดรูปแบบเดียวกัน เพิ่มชิปคำแนะนำชื่อ
'Quit'
ด้วยตนเอง โค้ดของคุณควรมีลักษณะเหมือนกับตัวอย่างต่อไปนี้: - คลิก บันทึก
suggestions: - title: 'Repeat' - title: 'Skip' - title: 'Quit'
สร้างเจตนาทำ Repeat
เมื่อต้องการสร้างเจตนา repeat
ตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทาง
- คลิก Intent แบบกำหนดเอง ในการนำทางเพื่อเปิดรายการ Intent
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อเจตนาการ
repeat
ใหม่ แล้วกดEnter
- คลิกเจตนาทำ
repeat
เพื่อเปิดหน้าเจตนาdefinition
- ในส่วน เพิ่มวลีการฝึกอบรม คลิกกล่องข้อความ ป้อนวลี และป้อนวลีต่อไปนี้:
-
one more time please
-
say the word again
-
repeat the word
-
tell me again
-
repeat
- คลิก บันทึก
เพิ่มเจตนา repeat
ในฉาก Spelling
ตอนนี้ การดำเนินการสามารถเข้าใจได้เมื่อผู้ใช้แสดงเจตนา "ซ้ำ" คุณสามารถเพิ่มความตั้งใจของผู้ใช้ repeat
ในฉาก Spelling
ได้ เนื่องจากผู้ใช้ตอบสนองต่อพร้อมท์ Spelling
คำ (" สะกดคำโดยใช้สัทอักษร ")
หากต้องการเพิ่มความตั้งใจของผู้ใช้รายนี้ลงในฉาก Spelling
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก การสะกดคำ ในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spelling
ถัดจาก การจัดการความตั้งใจของผู้ใช้ - เลือก ทำซ้ำ ในเมนูแบบเลื่อนลง Intent
- ทำเครื่องหมายที่ Call webhook ของคุณ แล้วป้อน RepeatSpellingWord ในกล่องข้อความตัวจัดการเหตุการณ์เพื่อรับคำจำกัดความของคำ
- ตรวจสอบ ส่งข้อความแจ้ง
- แทนที่ประโยคในช่อง
speech
(Enter the response that users will see or hear...
) ด้วย '' ข้อความแจ้งจริงจะถูกเติมโดย webhook
เพิ่มชิปคำแนะนำไปที่ "เมื่อจับคู่การทำซ้ำ"
- ใน " เมื่อจับคู่การทำซ้ำ " ใต้การจัดการเจตนาของผู้ใช้ ให้คลิก คำแนะนำ ด้านล่างโปรแกรมแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำสามชิป
- ในฟิลด์
title
ให้แทนที่Suggested Response
ด้วย'Skip'
- ใช้การจัดรูปแบบเดียวกัน เพิ่มชิปคำแนะนำชื่อ
'Quit'
ด้วยตนเอง โค้ดของคุณควรมีลักษณะคล้ายกับตัวอย่างต่อไปนี้:
suggestions: - title: 'Skip' - title: 'Quit'
- คลิก บันทึก
สร้างเจตนารมณ์ definition
เมื่อต้องการสร้างเจตนาของ definition
ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทาง
- คลิก Intent แบบกำหนดเอง ในการนำทางเพื่อเปิดรายการ Intent
- คลิก + (เครื่องหมายบวก) ที่ท้ายรายการความตั้งใจ ตั้งชื่อ
definition
ความตั้งใจใหม่ แล้วกดEnter
- คลิกเจตนาคำ
definition
เพื่อเปิดหน้าdefinition
คำจำกัดความ - ในส่วน เพิ่มวลีการฝึกอบรม คลิกกล่องข้อความ ป้อนวลี และป้อนวลีต่อไปนี้:
-
I would like to know the definition
-
tell me the definition
-
what does it mean
-
meaning
-
definition
-
what is the definition?
- คลิก บันทึก
เพิ่มเจตนาคำ definition
ให้กับฉากการ Spelling
ตอนนี้ การดำเนินการสามารถเข้าใจได้เมื่อผู้ใช้แสดงเจตนา "คำจำกัดความ" คุณสามารถเพิ่มคำ definition
ความตั้งใจของผู้ใช้ลงในฉาก Spelling
ได้ เนื่องจากผู้ใช้ตอบสนองต่อพร้อมท์ Spelling
คำ (" สะกดคำโดยใช้สัทอักษร ")
หากต้องการเพิ่มความตั้งใจของผู้ใช้รายนี้ลงในฉาก Spelling
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก การสะกดคำ ในการนำทาง
- คลิก + (เครื่องหมายบวก) ในฉาก
Spelling
ถัดจาก การจัดการความตั้งใจของผู้ใช้ - เลือก คำจำกัดความ ในรายการแบบเลื่อนลง Intent
- ทำเครื่องหมายที่ Call webhook ของคุณ และป้อน คำจำกัดความของการสะกดคำ ในกล่องข้อความตัวจัดการเหตุการณ์เพื่อรับคำจำกัดความ
- ตรวจสอบ ส่งข้อความแจ้ง
- แทนที่ประโยคในช่อง
speech
(Enter the response that users will see or hear...
) ด้วย ''` ข้อความแจ้งจริงจะถูกเติมโดย webhook
เพิ่มชิปข้อเสนอแนะในการตอบกลับเว็บฮุค
- ในฉาก
Start
ให้คลิก คำแนะนำ ด้านล่างตัวแก้ไขรหัส การกระทำนี้เพิ่มชิปข้อเสนอแนะสามชิป - ในฟิลด์
title
ให้แทนที่Suggested Response
ด้วย'Skip'
- การใช้การจัดรูปแบบเดียวกันเพิ่มชิปข้อเสนอแนะด้วยตนเองชื่อ
'Quit'
รหัสของคุณควรดูเหมือนตัวอย่างต่อไปนี้:
suggestions: - title: 'Skip' - title: 'Quit'
- คลิก บันทึก
สร้างเจตนา skip
หากต้องการสร้างเจตนา skip
ให้ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทาง
- คลิก เจตนา ในการนำทางเพื่อเปิดรายการเจตนา
- คลิก + (เครื่องหมายบวก) ที่ส่วนท้ายของรายการเจตนา ตั้งชื่อเจตนาใหม่
skip
และกดEnter
- คลิกเจตนา
skip
เพื่อเปิดหน้า Intentskip
- ในส่วน การฝึกอบรมวลี คลิกที่กล่องข้อความ วลี และป้อนวลีต่อไปนี้:
-
next word
-
go next
-
next
-
skip
-
skip word
- คลิก บันทึก
เพิ่มความตั้งใจ Skip
ไปยังฉาก Spelling
ตอนนี้การกระทำสามารถเข้าใจได้เมื่อผู้ใช้แสดงเจตนา "ข้าม" คุณสามารถเพิ่มความตั้งใจของผู้ใช้ skip
ข้ามไปยังฉาก Spelling
เนื่องจากผู้ใช้ตอบสนองต่อพรอมต์ Spelling
คำ (" สะกดคำโดยใช้ตัวอักษรสัทศาสตร์ ")
หากต้องการเพิ่มความตั้งใจของผู้ใช้นี้ในฉาก Spelling
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก การสะกดคำ ในการนำทาง
- คลิกที่ เครื่องหมาย + (บวก) ในฉาก
Spelling
ถัดจาก ความตั้งใจของผู้ใช้ Handlin g - เลือก ข้าม ในแบบเลื่อนลงโดยเจตนา
- ในส่วน การเปลี่ยนแปลง ทางด้านขวาคลิกเมนูแบบหล่นลงและเลือก
Spelling
- คลิก บันทึก
สร้าง quit
เลิก
หากต้องการสร้าง Quit
ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทาง
- คลิก เจตนา ในการนำทางเพื่อเปิดรายการเจตนา
- คลิก + (เครื่องหมายบวก) ที่ส่วนท้ายของรายการเจตนา ตั้งชื่อเจตนาใหม่
Quit
แล้วกดEnter
- คลิก
Quit
เลิกเพื่อเปิดหน้าความตั้งใจ นิยาม - ในส่วน การฝึกอบรมวลี คลิกที่กล่องข้อความ วลี และป้อนวลีต่อไปนี้:
-
I quit
-
Goodbye
-
Cancel
-
Exit
-
Quit
- คลิก บันทึก
เพิ่มความ Quit
ที่จะออกไปในฉาก Spelling
ตอนนี้การกระทำสามารถเข้าใจได้เมื่อผู้ใช้แสดงความตั้งใจ "เลิก" คุณสามารถเพิ่มความตั้งใจของผู้ใช้ quit
ใช้ในฉาก Spelling
เนื่องจากผู้ใช้ตอบสนองต่อพรอมต์ Spelling
คำ (" สะกดคำโดยใช้ตัวอักษรสัทศาสตร์ ")
หากต้องการเพิ่มความตั้งใจของผู้ใช้นี้ในฉาก Spelling
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก การสะกดคำ ในการนำทาง
- คลิกที่ เครื่องหมาย + (บวก) ในฉาก
Spelling
ถัดจาก การจัดการความตั้งใจของผู้ใช้ - เลือก ออก จากการดรอปดาวน์เจตนา
- ในส่วน การเปลี่ยนแปลง ทางด้านขวาคลิกเมนูแบบหล่นลงและเลือก
End conversation
- คลิก บันทึก
สร้างประเภท phonetic_alphabet
ในส่วนนี้คุณสร้างประเภทใหม่ที่เรียกว่า phonetic_alphabet
ซึ่งระบุตัวเลือกตัวอักษรสัทศาสตร์ที่ผู้ใช้สามารถเลือกที่จะสะกดคำ นอกจากนี้คุณยังสามารถกำหนดคำพ้องความหมายบางอย่างสำหรับตัวเลือกเหล่านี้ในกรณีที่ผู้ใช้พูดสิ่งที่คล้ายกัน ในส่วนต่อมาคุณเพิ่มประเภท phonetic_alphabet
ลงในสล็อตเพื่อระบุว่าคุณต้องการได้รับการตอบกลับของผู้ใช้
ในการสร้างประเภท phonetic_alphabet
ให้ทำตามขั้นตอนเหล่านี้:
- คลิก พัฒนา ในการนำทาง
- คลิกที่ + (บวกเครื่องหมาย) ภายใต้ ประเภท
- พิมพ์
phonetic_alphabet
แล้วกดEnter
- คลิก
phonetic_alphabet
เพื่อเปิดตัวเลือก - ใน ประเภทนี้จะรองรับค่าประเภทใด ส่วนเลือกตัวเลือก คำและคำพ้องความหมาย
- ป้อนรายการต่อไปนี้และค่าที่เกี่ยวข้องในส่วน เพิ่มรายการ :
ก | Alpha, Apple, Amsterdam |
ข | Bravo, Butter, Baltimore |
ค | Charlie, Cat, Casablanca |
ง | เดลต้าสุนัขเดนมาร์ก |
จ | Echo, Edward, Edison |
ฉ | Foxtrot, Fox, Florida |
ก | กอล์ฟ, จอร์จ, Gallipoli |
ชม. | โรงแรมแฮร์รี่ฮาวานา |
ฉัน | อินเดียหมึกอิตาลี |
เจ | Juliette, Johnny, เยรูซาเล็ม |
เค | กิโลกรัมกษัตริย์กิโลกรัม |
ล | ลิมาความรักลอนดอน |
ม | ไมค์เงินมาดากัสการ์ |
n | พฤศจิกายน, นิวยอร์ก, แนนซี่ |
โอ | ออสการ์, ส้ม, ออสโล |
พี | พ่อปารีสปีเตอร์ |
ถาม | ควิเบกราชินี |
ร | Romeo, Roma, Robert |
ส | เซียร่า, น้ำตาล, ซันติอาโก |
ที | Tango, Tommy, Tripoli |
ยู | เครื่องแบบร่มลุง |
โวลต์ | Victor, น้ำส้มสายชู, วาเลนเซีย |
ว | วิสกี้วิลเลียมวอชิงตัน |
x | เอ็กซ์เรย์ |
ย | Yankee, Yellow, Yorker |
z | Zulu, Zebra, Zurich |
ตารางค่าคีย์ของคุณควรมีลักษณะดังต่อไปนี้:
- คลิก บันทึก
กำหนดค่าการเติมสล็อต
ถัดไปคุณจะต้องกำหนดค่าการเติมช่องในฉากการสะกดคำ ในการกำหนดค่าตรรกะการเติมสล็อตให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก การสะกดคำ ในการนำทาง
- คลิกที่ เครื่องหมาย + (บวก) ในฉาก
Spelling
เพื่อ เติมช่อง - ในฟิลด์ Enter Slot Name ให้เพิ่ม
userresponse
เป็นชื่อสล็อต - ใน แบบเลื่อนลงประเภทเลือก เลือก Phonetic_alphabet เป็นประเภทสล็อต
- ตรวจสอบ สล็อตนี้ยอมรับรายการค่า
- ต้องตรวจสอบสล็อตนี้
- เลือกตัว เลือกการเขียนค่าสล็อตของสล็อต และป้อน userResponse ในกล่องข้อความพารามิเตอร์เซสชัน
- คลิก บันทึก
เพิ่มเงื่อนไขในหน้าจอ Spelling
หากต้องการเพิ่มเงื่อนไขในฉาก Spelling
ให้ทำตามขั้นตอนเหล่านี้:
- คลิกฉาก การสะกดคำ ในการนำทาง
- คลิกที่ เครื่องหมาย + (บวก) ในฉาก
Spelling
ถัดจากเงื่อนไข - ป้อน
scene.slots.status == "FINAL"
เป็นเงื่อนไข - ตรวจสอบ การโทรของคุณ webhook และป้อน คำ Verifyspellingword ในกล่องข้อความตัวจัดการเหตุการณ์เพื่อตรวจสอบการตอบสนองของผู้ใช้
- ตรวจสอบ ส่งพรอมต์
- แทนที่ประโยคในฟิลด์
speech
(Enter the response that users will see or hear...
) ด้วย {} พรอมต์จริงจะถูกเติมโดย WebHook
เพิ่มชิปข้อเสนอแนะในการตอบกลับ webhook
- ในฉาก
Start
ให้คลิก คำแนะนำ ด้านล่างตัวแก้ไขรหัส การกระทำนี้เพิ่มชิปข้อเสนอแนะสามชิป - ในฟิลด์
title
ให้แทนที่Suggested Response
ด้วย'Next'
- การใช้การจัดรูปแบบเดียวกันเพิ่มชิปข้อเสนอแนะด้วยตนเองชื่อ
'Quit'
รหัสของคุณควรดูเหมือนตัวอย่างต่อไปนี้:
suggestions: - title: 'Next' - title: 'Quit'
- คลิก บันทึก
12. ทดสอบการสะกดคำในตัวจำลอง
เพื่อทดสอบการกระทำของคุณในตัวจำลองให้ทำตามขั้นตอนเหล่านี้:
- ในแถบการนำทางคลิก ทดสอบ เพื่อนำคุณไปยังตัวจำลอง
- ในการทดสอบการกระทำของคุณในเครื่องจำลองให้พิมพ์
Talk to Spelling Practice
ในฟิลด์อินพุต - กดปุ่ม ตกลง . การกระทำของคุณควรตอบสนองด้วยพรอมต์
Main invocation
และพรอมต์Start
ที่เพิ่มขึ้น "ยินดีต้อนรับสู่การฝึกสะกดคำใช้ตัวอักษรสัทศาสตร์เพื่อสะกดคำเช่นอัลฟ่าสำหรับ A, Bravo สำหรับ B, Charlie สำหรับ C ฯลฯ คุณต้องการ ดำเนินการต่อ?" . - บอกว่า ใช่ จะดำเนินการต่อ
- ตัวจำลองจะเล่นคำว่าสะกดคำ
- คุณสามารถสะกดคำโดยใช้ตัวอักษรสัทศาสตร์ ตัวอย่างเช่นเพื่อพูด ดีกว่า หรือพิมพ์ "Bravo echo tango tango echo romeo"
- ตัวจำลองจะตอบสนองด้วยการตอบกลับที่ถูกต้องหรือไม่ถูกต้อง
- พูด ถัดไป เพื่อดำเนินการต่อไปในคำต่อไปหรือพูด ออกไป เพื่อออกจากวงเกม
13. ขอแสดงความยินดี
ขอแสดงความยินดีคุณได้สร้างเกมของคุณสำเร็จ การฝึกฝนการสะกดคำ !
ตอนนี้คุณรู้ขั้นตอนสำคัญที่จำเป็นในการสร้างเกมโดยใช้ Cloud Firestore, ฟังก์ชั่นคลาวด์และผู้ช่วย Google Action Action Builder
สิ่งที่คุณครอบคลุม
- วิธีการโต้ตอบกับ Cloud Firestore
- วิธีใช้สล็อตเพื่อรวบรวมข้อมูลจากผู้ใช้
- วิธีประมวลผลอินพุตของผู้ใช้และส่งคืนการตอบกลับ
- วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะในฉาก
- วิธีเพิ่มวงเกม
แหล่งข้อมูลการเรียนรู้เพิ่มเติม
คุณสามารถสำรวจทรัพยากรเหล่านี้เพื่อเรียนรู้เกี่ยวกับการสร้างการกระทำสำหรับผู้ช่วย Google:
- เอกสาร สำหรับการพัฒนาการกระทำสำหรับผู้ช่วย Google
- การดำเนินการในหน้า Google GitHub สำหรับรหัสตัวอย่างและไลบรารี
- ชุมชน Reddit อย่างเป็นทางการสำหรับนักพัฒนาที่ทำงานร่วมกับ Google Assistant
- แนวทางการออกแบบการสนทนา สำหรับแนวทางปฏิบัติและแนวทางที่ดีที่สุดเกี่ยวกับการดำเนินการสนทนา
- รู้เบื้องต้นเกี่ยวกับ Cloud Firestore
ทำความสะอาดโครงการของคุณ [แนะนำ]
เพื่อหลีกเลี่ยงการเรียกเก็บเงินที่เป็นไปได้ขอแนะนำให้ลบโครงการที่คุณไม่ได้ตั้งใจจะใช้ ในการลบโครงการที่คุณสร้างใน codelab นี้ให้ทำตามขั้นตอนเหล่านี้:
- ในการลบโครงการและทรัพยากร Firebase ของคุณให้ทำตามขั้นตอนที่ระบุไว้ในส่วน โครงการปิด (ลบ)
ข้อควรระวัง: ตรวจสอบให้แน่ใจว่าคุณเลือกโครงการที่ถูกต้องสำหรับการลบในหน้า การตั้งค่า ของ Google Cloud Console
- ตัวเลือก: หากต้องการลบโครงการของคุณออกจากคอนโซลการกระทำทันทีให้ทำตามขั้นตอนที่แสดงในส่วน การลบโครงการ หากคุณไม่ทำขั้นตอนนี้เสร็จสิ้นโครงการของคุณจะถูกลบออกโดยอัตโนมัติหลังจากประมาณ 30 วัน
ติดตาม @ActionSongoogle & @FireBase บน Twitter เพื่อติดตามความคืบหน้าของประกาศล่าสุดและทวีตไปที่ #GoogLeio เพื่อแบ่งปันสิ่งที่คุณสร้างขึ้น!