เกมฝึกสะกดคำโดยใช้ Google Assistant และ Cloud Firestore

1. ภาพรวม

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

Codelab นี้ครอบคลุมแนวคิดระดับกลางสำหรับการพัฒนาด้วย Google Assistant, Cloud Functions และ Cloud Firestore ใน Codelab นี้ คุณจะได้สร้างเกมชื่อ "การสะกดคำ" ที่ใช้ Google Assistant เพื่อขอให้ผู้ใช้สะกดคำ

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะได้สร้างเกมที่ซับซ้อนซึ่งมีฟังก์ชันการทำงานดังต่อไปนี้

  • ได้รับการตอบกลับการสะกดคำจากผู้ใช้ และแก้ไขพรอมต์แบบสนทนาได้ ขึ้นอยู่กับค่า
  • ตอบด้วยคำใบ้ที่เกี่ยวข้องกับการสะกดคำ เช่น คำจำกัดความหรือการพูดคำซ้ำ
  • สร้าง Game Loop เพื่อให้ผู้ใช้โต้ตอบกับ Assistant ได้อีกครั้งหลังจากสะกดคําแล้ว

ก่อนเริ่มสร้าง คุณสามารถโต้ตอบกับการดำเนินการแบบเรียลไทม์ในอุปกรณ์ที่พร้อมใช้งาน Google Assistant โดยพูดว่า "Ok Google คุยกับการฝึกสะกด" เส้นทางเริ่มต้นผ่านการดำเนินการนี้สำหรับผู้ใช้ที่กลับมาจะมีลักษณะเหมือนการโต้ตอบต่อไปนี้

เมื่อดำเนินการ Codelab นี้เสร็จแล้ว การดำเนินการที่เสร็จสมบูรณ์จะมีขั้นตอนการสนทนาดังต่อไปนี้

2e9f94dc0ceafc96.png

สิ่งที่คุณจะได้เรียนรู้

  • วิธีโต้ตอบกับ Cloud Firestore
  • วิธีใช้สล็อตเพื่อรวบรวมข้อมูลจากผู้ใช้
  • วิธีประมวลผลอินพุตของผู้ใช้และแสดงผลคำตอบ
  • วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะในฉาก
  • วิธีเพิ่ม Game Loop

สิ่งที่คุณต้องมี

ข้อกำหนดเบื้องต้นสำหรับ Codelab มีดังนี้

  • เว็บเบราว์เซอร์ เช่น Google Chrome
  • IDE สำหรับเขียน Cloud Functions
  • วิธีการชำระเงิน Codelab นี้ใช้ฟังก์ชัน Cloud Functions สำหรับ Firebase ซึ่งกำหนดให้โปรเจ็กต์ต้องอยู่ในแพ็กเกจราคาของ Firebase Blaze ( ดูข้อมูลเพิ่มเติม)
  • เทอร์มินัลสำหรับเรียกใช้คำสั่ง Shell
  • Node.js 10 ขึ้นไป

2. รับรหัสฟังก์ชัน

โคลนที่เก็บ GitHub จากบรรทัดคำสั่งดังนี้

$ git clone https://github.com/FirebaseExtended/codelab-actions-firestore

3. สร้างโปรเจ็กต์ Firebase และตั้งค่าแอป

สร้างโปรเจ็กต์ Firebase

  1. ลงชื่อเข้าใช้ Firebase
  2. ในคอนโซล Firebase ให้คลิกเพิ่มโปรเจ็กต์ (หรือสร้างโปรเจ็กต์) แล้วตั้งชื่อโปรเจ็กต์ Firebase Spelling-Practice

66ae8d1894f4477.png

  1. คลิกตัวเลือกการสร้างโปรเจ็กต์ ยอมรับข้อกำหนดของ Firebase หากได้รับข้อความแจ้ง ข้ามการตั้งค่า Google Analytics เนื่องจากคุณจะไม่ใช้ Analytics สําหรับแอปนี้

ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรเจ็กต์ Firebase ได้ที่ทำความเข้าใจโปรเจ็กต์ Firebase

อัปเกรดเป็นแพ็กเกจราคา Blaze

หากต้องการใช้ฟังก์ชันระบบคลาวด์สำหรับ Firebase คุณจะต้องอัปเกรดโปรเจ็กต์ Firebase เป็นแพ็กเกจราคา Blaze ซึ่งหมายความว่าคุณจะต้องแนบบัญชีสำหรับการเรียกเก็บเงินใน Google Cloud กับโปรเจ็กต์ คุณต้องระบุบัตรเครดิตหรือวิธีการชำระเงินอื่นๆ

โปรเจ็กต์ Firebase ทั้งหมดรวมถึงโปรเจ็กต์ที่อยู่ในแพ็กเกจ Blaze จะยังคงมีสิทธิ์เข้าถึงโควต้าการใช้งานที่ไม่มีค่าใช้จ่ายสำหรับ Cloud Functions ขั้นตอนที่ระบุไว้ใน Codelab นี้จะอยู่ภายในขีดจำกัดการใช้งานแบบไม่มีค่าใช้จ่าย อย่างไรก็ตาม คุณจะเห็นการเรียกเก็บเงินเล็กน้อย ( ประมาณ $0.03) จาก Cloud Storage ซึ่งใช้เพื่อโฮสต์อิมเมจการสร้าง Cloud Functions

4. ติดตั้ง Firebase CLI

Firebase CLI (อินเทอร์เฟซบรรทัดคำสั่ง) ช่วยให้คุณทำให้ฟังก์ชันระบบคลาวด์ใช้งานได้

มีตัวเลือกในการติดตั้ง Firebase CLI หลายวิธี ขึ้นอยู่กับระบบปฏิบัติการและกรณีการใช้งาน ขั้นตอนต่อไปนี้อธิบายถึงตัวเลือกที่พบบ่อยที่สุดหากคุณใช้ Cloud Functions ด้วย

  1. ตรวจสอบว่าคุณได้ติดตั้ง npm ซึ่งโดยทั่วไปจะมาพร้อมกับ Node.js
  2. ติดตั้งหรืออัปเกรด CLI โดยเรียกใช้คำสั่ง npm ต่อไปนี้:
$ npm -g install firebase-tools
  1. ตรวจสอบว่า CLI ได้รับการติดตั้งอย่างถูกต้องโดยเรียกใช้:
$ firebase --version

ตรวจสอบว่าเวอร์ชันของ Firebase CLI เป็น 9.0.0 ขึ้นไปเพื่อให้มีฟีเจอร์ล่าสุดทั้งหมดที่จำเป็นสำหรับ Cloud Functions หากไม่มี ให้เรียกใช้ npm install -g firebase-tools เพื่ออัปเกรดดังที่แสดงด้านบน

  1. ให้สิทธิ์ Firebase CLI โดยเรียกใช้:
$ firebase login
  1. ตั้งค่า Firebase CLI เพื่อใช้โปรเจ็กต์ Firebase จากไดเรกทอรี "ฟังก์ชันการสะกด" เรียกใช้คำสั่งต่อไปนี้ เลือกรหัสโปรเจ็กต์ จากนั้นทำตามวิธีการ เมื่อมีข้อความแจ้ง คุณสามารถเลือกชื่อแทนใดก็ได้ เช่น codelab เป็นต้น
$ firebase use --add

5. ไดเรกทอรีฟังก์ชัน

ในขั้นตอนนี้คุณจะต้องเพิ่มฟังก์ชันโดยใช้ Firebase SDK สำหรับ Cloud Functions เพื่อสร้างแบ็กเอนด์สำหรับเกม การสะกดคำ

Cloud Functions ช่วยให้คุณมีโค้ดที่ทำงานในระบบคลาวด์โดยไม่ต้องตั้งค่าเซิร์ฟเวอร์ Codelab นี้จะแสดงวิธีสร้างฟังก์ชันที่ตอบสนองต่อเหตุการณ์การตรวจสอบสิทธิ์ Firebase, Cloud Storage และเหตุการณ์ฐานข้อมูลเรียลไทม์ของ Firebase มาเริ่มกันที่การตรวจสอบสิทธิ์

เมื่อใช้ Firebase SDK สำหรับฟังก์ชันระบบคลาวด์ โค้ดฟังก์ชันจะอยู่ในไดเรกทอรี functions (โดยค่าเริ่มต้น) เพื่อให้คุณดำเนินการได้ง่ายขึ้น เราได้สร้างไฟล์ functions/index.js ไว้สำหรับเก็บโค้ดของคุณ โปรดตรวจสอบไดเรกทอรี functions ก่อนดำเนินการต่อ

$ cd functions
$ ls

โค้ดฟังก์ชันเป็นแอป Node.js ด้วย จึงต้องใช้ package.json ที่ให้ข้อมูลบางอย่างเกี่ยวกับแอปและแสดงรายการทรัพยากร Dependency

หากคุณไม่คุ้นเคยกับ Node.js โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ Node.js ก่อนที่จะดำเนินการต่อด้วย Codelab

ไฟล์ package.json แสดงรายการทรัพยากร Dependency ที่จำเป็น 2 รายการแล้ว ได้แก่ Firebase SDK สำหรับ Cloud Functions และ 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.

ก่อนอื่น คุณจะต้องนำเข้าโมดูลที่จำเป็น จากนั้นเขียนฟังก์ชัน 4 รายการต่อไปนี้แทนสิ่งที่ต้องทำ ดำเนินการต่อในขั้นตอนถัดไปของ Codelab เพื่อนำเข้าโมดูล

6. นำเข้าโมดูลที่จำเป็น

Codelab นี้ต้องการโมดูล 3 โมดูล

  • โมดูล firebase-functions ช่วยให้เราเขียนทริกเกอร์สำหรับ Cloud Functions ได้
  • โมดูล firebase-admin ช่วยให้เราใช้แพลตฟอร์ม Firebase บนเซิร์ฟเวอร์ที่มีสิทธิ์เข้าถึงระดับผู้ดูแลระบบได้ เช่น เขียนไปยัง Cloud Firestore
  • Actions SDK Node.js Fulfillment Library จะทําหน้าที่ของตัวแฮนเดิล Actions SDK สําหรับ Google Assistant
  1. ติดตั้ง Actions SDK โดยเรียกใช้คำสั่ง npm ต่อไปนี้
$ npm install @assistant/conversation
  1. ในไฟล์ index.js ให้แทนที่สิ่งที่ต้องทำแรกด้วยข้อมูลต่อไปนี้

การเปลี่ยนแปลงเหล่านี้จะนำเข้าแต่ละโมดูลที่จำเป็น

นอกจากนี้ คุณยังกำหนดค่า 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 กัน

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 โดยจะเรียก API dictionaryapi.dev เพื่อรับคำจำกัดความของคำผ่านฟังก์ชัน 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

คุณสามารถเขียน Cloud Function ที่จะแสดงผลคำที่สะกดถัดไปจากรายการคำได้

ในไฟล์ 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);
});

ตรวจสอบคำตอบการสะกดคำของผู้ใช้

คุณเขียน Cloud Function ที่ยืนยันคำตอบของผู้ใช้เกี่ยวกับวิธีสะกดคำปัจจุบันของเกมได้

ในไฟล์ 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 แล้วคลิกโปรเจ็กต์การฝึกสะกดคำ เปิดแดชบอร์ดฟังก์ชันเพื่อดูปลายทางของฟังก์ชัน

332cb0437411a242.png

คุณเพิ่มฟังก์ชันที่จำเป็นทั้งหมดเรียบร้อยแล้ว ตอนนี้เรามาตั้งค่า Cloud Firestore กัน

8. เปิดใช้ Cloud Firestore

คุณจะต้องเปิดใช้ Cloud Firestore

ในส่วนสร้างของคอนโซล Firebase ให้คลิก Firestore จากนั้นคลิกสร้างฐานข้อมูล

5c0b4abf4410ffcf.png

สิทธิ์เข้าถึงข้อมูลใน 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 ระบบจะทริกเกอร์ฟังก์ชัน createการสะกดคำingPracticeWord เพื่อรับรายละเอียดของคำจากบริการ Dictionary API

สร้างคอลเล็กชัน Cloud Firestore

  1. ในคอนโซล Firebase ให้ไปที่ส่วน Cloud Firestore
  2. คลิก + เริ่มคอลเล็กชัน
  3. ในกล่องข้อความรหัสคอลเล็กชัน ให้ป้อน wordlist แล้วคลิกถัดไป

1b4ccadb90f52f02.png

ถัดไป เราจะสร้างเอกสารสำหรับคำหนึ่งๆ ได้แก่ ข้อตกลง

  1. ในกล่องข้อความรหัสเอกสาร ให้ป้อน agreement
  2. ในกล่องข้อความ Field ให้ป้อน word และในกล่องข้อความ Value ให้ป้อน agreement
  3. คลิกบันทึก

379037e011e8511e.png

เมื่อเพิ่มเอกสารนี้ลงใน Cloud Firestore ระบบจะทริกเกอร์ฟังก์ชัน createการสะกดคำingPracticeWord ให้ดึงรายละเอียดคำจำกัดความของคำนั้นๆ เพิ่มคำ (เช่น น่าเกรงขาม, รถยนต์, จริง, บอกเล่า, ดีกว่า, เดินทาง, ... ) โดยการสร้างเอกสารใหม่สำหรับแต่ละคำ

10. ตั้งค่า Google Assistant

ส่วนต่อไปนี้จะอธิบายวิธีตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ Google Assistant และสร้างโปรเจ็กต์ Actions

ตรวจสอบการตั้งค่าสิทธิ์ของ Google

ในการทดสอบการดำเนินการที่คุณสร้างใน Codelab นี้ คุณจะต้องเปิดใช้สิทธิ์ที่จำเป็นเพื่อให้เครื่องจำลองเข้าถึงการดำเนินการได้ หากต้องการเปิดใช้สิทธิ์ ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่หน้าส่วนควบคุมกิจกรรม
  2. ลงชื่อเข้าใช้ด้วยบัญชี Google หากยังไม่ได้ทำ
  3. เปิดใช้สิทธิ์ต่อไปนี้
  • กิจกรรมบนเว็บและแอป
  • ในส่วน เว็บและ กิจกรรมบนแอป เลือกช่องทำเครื่องหมายติดกับรวมประวัติการเข้าชมใน Chrome และกิจกรรมจากเว็บไซต์ แอป และอุปกรณ์ที่ใช้บริการต่างๆ ของ Google

C988e1e639e6d6e1.png

สร้างโปรเจ็กต์ Actions

โปรเจ็กต์ Actions เป็นคอนเทนเนอร์สำหรับการดำเนินการ หากต้องการสร้างโปรเจ็กต์การดำเนินการสำหรับ Codelab นี้ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดคอนโซล Actions
  2. คลิกโปรเจ็กต์ใหม่
  3. ยอมรับข้อกำหนดในการให้บริการ

b174d45710b8086b.png

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

A2951de5d2001fac.png

  1. คลิกนำเข้าโปรเจ็กต์
  2. ในหน้าจอคุณต้องการสร้างการดำเนินการประเภทใด ให้เลือกการ์ดกำหนดเอง
  3. คลิกถัดไป
  4. เลือกการ์ดโปรเจ็กต์ว่างเปล่า
  5. คลิกเริ่มสร้าง
  6. ป้อนการฝึกสะกดสำหรับชื่อที่แสดง แล้วคลิกบันทึก

ผู้ใช้เริ่มการสนทนาด้วยการดำเนินการของคุณผ่านการเรียกใช้ ตัวอย่างเช่น ผู้ใช้สามารถเรียกใช้การดำเนินการของคุณได้โดยพูดวลีอย่าง "Ok Google คุยกับ การสะกดคำ" โดยที่การฝึกสะกดเป็นชื่อที่แสดง

การดำเนินการของคุณต้องมีชื่อที่แสดงหากต้องการทำให้ใช้งานได้เป็นเวอร์ชันที่ใช้งานจริง แต่ในการทดสอบการดำเนินการ คุณไม่จำเป็นต้องกำหนดชื่อที่แสดง แต่คุณใช้วลี "พูดกับแอปทดสอบของฉัน" ในเครื่องมือจำลองเพื่อเรียกใช้การดำเนินการได้

กำหนดค่าการจำหน่าย

คุณต้องเชื่อมต่อกับ Assistant ที่มีเครื่องจัดการเหตุการณ์สำหรับ Cloud Functions ที่คุณเขียนและทำให้ใช้งานได้ก่อนหน้านี้ใน Codelab นี้

หากต้องการกำหนดค่าการดำเนินการตามคำสั่งซื้อ ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเว็บฮุคในการนำทางด้านข้าง
  2. เลือกปลายทาง HTTPS เป็นตัวเลือกการดำเนินการตามคำสั่งซื้อ

d523bf003e96e66f.png

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

be53e2cd0d914d54.png

ในส่วนถัดไป คุณจะปรับแต่งข้อความแจ้งสำหรับการเรียกใช้หลักในคอนโซล Actions

ตั้งค่าการเรียกใช้หลัก

คุณต้องแก้ไขการเรียกใช้หลักเพื่อกำหนดสิ่งที่เกิดขึ้นหลังจากผู้ใช้เรียกใช้การดำเนินการของคุณ

โดยค่าเริ่มต้น Actions Builder จะมีข้อความแจ้งทั่วไปเมื่อมีการทริกเกอร์การเรียกใช้ ("เริ่มสร้างการดำเนินการโดยกำหนดการเรียกใช้หลัก")

หากต้องการแก้ไขข้อความแจ้งที่การดำเนินการของคุณส่งกลับไปยังผู้ใช้เมื่อผู้ใช้เรียกใช้การดำเนินการของคุณ ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกการเรียกใช้หลักในการนำทาง

9ff088c04c995cde.png

  1. เลือก Call your webhook แล้วเพิ่มชื่อเครื่องจัดการเหตุการณ์ getSpellingWordList ในช่องข้อความ
  2. ในตัวแก้ไขโค้ด ให้แทนที่ข้อความในช่อง speech ด้วยข้อความต้อนรับต่อไปนี้ Welcome to Spelling Practice

หมายเหตุ: คุณใช้การจัดรูปแบบ YAML หรือ JSON เพื่อแก้ไขพรอมต์ได้

  1. คลิกบันทึก

ทดสอบการเรียกใช้หลักในเครื่องมือจำลอง

คอนโซล Actions มีเครื่องมือบนเว็บสำหรับการทดสอบการดำเนินการของคุณซึ่งเรียกว่าเครื่องมือจำลอง อินเทอร์เฟซจะจำลองอุปกรณ์ฮาร์ดแวร์และการตั้งค่า คุณจึงสนทนากับการดำเนินการได้ราวกับว่ากำลังทำงานใน Smart Display, โทรศัพท์, ลำโพง หรือ KaiOS

หากต้องการทดสอบการเรียกใช้หลักของการดำเนินการในเครื่องมือจำลอง ให้ทำตามขั้นตอนต่อไปนี้

  1. ในแถบนำทางด้านบน ให้คลิกทดสอบเพื่อไปที่เครื่องจำลอง
  2. หากต้องการเรียกใช้การดำเนินการในเครื่องจำลอง ให้พิมพ์ Talk to Spelling Practice ในช่องป้อนข้อมูลที่ด้านซ้ายบน แล้วกด Enter บนแป้นพิมพ์

651fc8da1ac9aa0a.png

เมื่อคุณเรียกใช้การเรียกใช้หลักของการดำเนินการ Assistant จะตอบกลับด้วยข้อความต้อนรับที่คุณกำหนดเอง ในขั้นตอนนี้ การสนทนาจะสิ้นสุดหลังจาก Assistant ตอบกลับด้วยคำทักทาย

ดูบันทึกเหตุการณ์

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

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

A6fb192f94426824.png

11. สร้างการสนทนาสำหรับการฝึกสะกดคำ

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

การเปลี่ยนจากการเรียกใช้หลักไปยังฉากเริ่มต้น

ในส่วนนี้ คุณจะสร้างฉากใหม่ชื่อ Start ซึ่งจะส่งพรอมต์ให้ผู้ใช้ถามว่าต้องการเริ่มเล่นการฝึกสะกดหรือไม่ นอกจากนี้ คุณยังเพิ่มการเปลี่ยนจากการเรียกใช้หลักไปยังโหมด Start ใหม่ได้ด้วย

ทำตามขั้นตอนต่อไปนี้เพื่อสร้างฉากและเพิ่มการเปลี่ยนฉาก

  1. คลิกพัฒนาในแถบนำทางด้านบน จากนั้นคลิกการเรียกใช้หลักในการนำทางด้านซ้าย
  2. ในส่วนการเปลี่ยนทางด้านขวา ให้คลิกเมนูแบบเลื่อนลง แล้วพิมพ์ Start ในช่องข้อความ

dd4f1807a57f794d.png

  1. คลิกเพิ่ม การดำเนินการนี้จะสร้างฉากชื่อ Start และบอกให้การดำเนินการเปลี่ยนไปเป็นฉาก Start หลังจากที่การดำเนินการส่งข้อความแจ้งต้อนรับแก่ผู้ใช้
  2. คลิกฉากในการนำทางด้านซ้ายเพื่อแสดงรายการฉาก
  3. ในส่วนฉาก ให้คลิกเริ่มเพื่อดูฉาก Start
  4. คลิก + ในส่วนเมื่อเข้าของฉาก Start
  5. เลือกส่งพรอมต์
  6. แทนที่ประโยคในช่อง 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 ให้ทำตามขั้นตอนต่อไปนี้

  1. ในฉาก Start ให้คลิกคำแนะนำใต้ตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำรายการเดียว
  2. ในช่องtitle ให้แทนที่ Suggested Response ด้วย 'Yes'
  3. ใช้การจัดรูปแบบเดียวกันเพื่อเพิ่มชิปคำแนะนำชื่อ 'No' และ 'Help with Phonetics' ด้วยตนเอง โค้ดของคุณควรมีลักษณะเหมือนข้อมูลโค้ดต่อไปนี้
  4. คลิกบันทึก

5ff2ecdc56801b91.png

ทดสอบการดำเนินการในเครื่องมือจำลอง

เมื่อถึงจุดนี้ การดำเนินการของคุณควรเปลี่ยนจากการเรียกใช้หลักเป็นฉากเริ่มต้น แล้วถามผู้ใช้ว่าต้องการดำเนินการต่อหรือไม่ ชิปคำแนะนำควรปรากฏในหน้าจอจำลองด้วย

หากต้องการทดสอบการดำเนินการในเครื่องมือจำลอง ให้ทำตามขั้นตอนต่อไปนี้

  1. ในแถบนำทาง ให้คลิกทดสอบเพื่อไปยังเครื่องจำลอง
  2. หากต้องการทดสอบการดำเนินการในเครื่องจำลอง ให้พิมพ์ Talk to Spelling Practice ในช่องป้อนข้อมูล
  3. กด Enter การดำเนินการของคุณควรตอบกลับด้วยพรอมต์ Main invocation และพรอมต์เพิ่มเติมในโหมด Start ที่ระบุว่า "ยินดีต้อนรับสู่การฝึกสะกดคำ ใช้การออกเสียงตัวอักษรเพื่อสะกดคำ เช่น alpha for a, bravo for b, charlie for c ฯลฯ ต้องการดําเนินการต่อไหม"

ภาพหน้าจอต่อไปนี้แสดงการโต้ตอบนี้

338c9570b02a618e.png

  1. คลิกชิปคำแนะนำ Yes หรือ No หรือ Help with Phonetics เพื่อตอบกลับพรอมต์ (คุณยังสามารถพูดว่า "ใช่" หรือ "ไม่ใช่" หรือ "ความช่วยเหลือเกี่ยวกับการออกเสียง" หรือป้อน Yes หรือ No หรือ Help with Phonetics ในช่องอินพุต)

เมื่อคุณตอบกลับพรอมต์ การดำเนินการของคุณตอบกลับด้วยข้อความที่แจ้งว่าไม่สามารถเข้าใจข้อมูลที่คุณป้อน: "ขออภัย ฉันไม่เข้าใจ ลองอีกครั้งได้ไหม" เนื่องจากคุณยังไม่ได้กำหนดค่าการดำเนินการให้เข้าใจและตอบสนองต่ออินพุต "ใช่" หรือ "ไม่ใช่" การดำเนินการของคุณจึงตรงกับอินพุตของคุณกับ Intent ของ NO_MATCH

โดยค่าเริ่มต้น Intent ของระบบ NO_MATCH จะให้คำตอบทั่วไป แต่คุณสามารถปรับแต่งคำตอบเหล่านี้ให้บอกผู้ใช้ว่าคุณไม่เข้าใจข้อมูลของพวกเขาก็ได้ Assistant จะจบการสนทนาของผู้ใช้ด้วยการดําเนินการของคุณหลังจากที่จับคู่ข้อมูลที่ผู้ใช้ป้อนไม่ได้ 3 ครั้ง

เพิ่ม "ไม่มี" และ "การออกเสียง"

ขณะนี้ผู้ใช้สามารถตอบคำถามที่การดำเนินการของคุณถามแล้ว คุณสามารถกำหนดค่าการดำเนินการให้เข้าใจผู้ใช้ คำตอบ ("ใช่" หรือ "ไม่ใช่" หรือ "ความช่วยเหลือเกี่ยวกับการออกเสียง") ในส่วนต่อไปนี้ คุณสร้าง Intent ของผู้ใช้ที่ตรงกันเมื่อผู้ใช้พูดว่า "ใช่" หรือ "ไม่ใช่" หรือ "ความช่วยเหลือเกี่ยวกับการออกเสียง" และเพิ่ม Intent เหล่านี้ลงในฉาก Start เราจะใช้ Intent ของระบบ yes และจะสร้าง Intent อื่นๆ

สร้าง Intent no

ในตอนนี้ คุณจะต้องสร้าง Intent ของ no เพื่อทำความเข้าใจและตอบกลับผู้ใช้เมื่อไม่อยากเล่นเกม หากต้องการสร้างความตั้งใจนี้ ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกพัฒนาในการนำทาง
  2. คลิก Intent ที่กำหนดเองในการนำทางเพื่อเปิดรายการ Intent
  3. คลิก + (เครื่องหมายบวก) ที่ท้ายรายการ Intent ตั้งชื่อ Intent ใหม่ no แล้วกด Enter
  4. คลิกไม่เพื่อเปิดหน้า Intent no
  5. ในส่วนเพิ่มวลีการฝึกอบรม ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
  • No
  • N
  • I don't want
  • nope

98b0c9a7b67ea9b9.png

  1. คลิกบันทึก

เพิ่ม Intent no ใน Start ฉาก

ตอนนี้การดำเนินการจะเข้าใจเมื่อผู้ใช้แสดงความรู้สึก "no" หรือข้อความที่คล้ายกับ "no" เช่น "nope" คุณต้องเพิ่มความตั้งใจของผู้ใช้ no ลงในฉาก Start เนื่องจากผู้ใช้ตอบสนองต่อข้อความแจ้งของ Start ("ยินดีต้อนรับสู่การฝึกสะกด ใช้การออกเสียงตัวอักษรเพื่อสะกดคำ เช่น alpha for a, bravo for b, charlie for c ฯลฯ คุณต้องการดำเนินการต่อไหม")

หากต้องการเพิ่ม Intent นี้สำหรับฉาก Start ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากเริ่มในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Start ข้างการจัดการความตั้งใจของผู้ใช้
  3. ในส่วน Intent ให้เลือก no ในเมนูแบบเลื่อนลง

51f752e78c8b4942.png

  1. คลิกส่งข้อความแจ้งและอัปเดตช่อง speech ด้วยข้อความ Good Bye

โค้ดในโปรแกรมแก้ไขของคุณควรมีลักษณะเหมือนข้อมูลโค้ดต่อไปนี้

candidates:
  - first_simple:
      variants:
        - speech: >-
             Goodbye.
  1. ในส่วนการเปลี่ยน ให้เลือกสิ้นสุดการสนทนาจากเมนูแบบเลื่อนลง
  2. คลิกบันทึก

ทดสอบ Intent no ในเครื่องจำลอง

ในขั้นตอนนี้ การดำเนินการของคุณจะเข้าใจเมื่อผู้ใช้ไม่ต้องการเล่นเกมและส่งกลับคำตอบที่เหมาะสม

หากต้องการทดสอบ Intent นี้ในเครื่องจำลอง ให้ทำตามขั้นตอนต่อไปนี้

  1. ในแถบนำทาง ให้คลิกทดสอบ
  2. พิมพ์ Talk to Spelling Practice ในช่องป้อนข้อมูลแล้วกด Enter
  3. พิมพ์ No ในช่อง Input แล้วกด Enter หรือคลิกชิปไม่มีคำแนะนำ

7727a456b522f31b.png

เพิ่ม Intent YES ของระบบใน Start โหมด

ต่อไปเราจะเพิ่ม Intent ระบบ "YES" ลงในโหมด Start เนื่องจากผู้ใช้ตอบว่า "ใช่" ในพรอมต์ Start ("ยินดีต้อนรับสู่การฝึกสะกด ใช้การออกเสียงตัวอักษรเพื่อสะกดคำ เช่น alpha for a, bravo for b, charlie for c ฯลฯ คุณต้องการดำเนินการต่อไหม")

หากต้องการเพิ่ม Intent ของผู้ใช้รายนี้ในโหมด Start ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากเริ่มในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Start ข้างการจัดการความตั้งใจของผู้ใช้
  3. ภายใต้ Intent ทั้งหมดของระบบ ให้เลือกใช่ในเมนูแบบเลื่อนลงของ Intent

f6cbe789cde49e8f.png

  1. คลิกเรียกเว็บฮุคและอัปเดตกล่องข้อความ event handler ด้วยฟังก์ชันที่คุณสร้างไว้ก่อนหน้านี้ซึ่งก็คือ getSpellingWordList
  2. ในส่วนการเปลี่ยน ให้คลิกเมนูแบบเลื่อนลงแล้วเลือกจบการสนทนา
  3. คลิกบันทึก

ทดสอบ Intent YES ในเครื่องจำลอง

ในขั้นตอนนี้ การดำเนินการของคุณเข้าใจว่าผู้ใช้ต้องการเล่นเกมเมื่อใดและส่งกลับคำตอบที่เหมาะสม

หากต้องการทดสอบ Intent นี้ในเครื่องจำลอง ให้ทำตามขั้นตอนต่อไปนี้

  1. ในแถบนำทาง ให้คลิกทดสอบ
  2. หากต้องการทดสอบการดำเนินการในเครื่องจำลอง ให้พิมพ์ Talk to Spelling Practice ในช่องอินพุต แล้วกด Enter
  3. พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำ Yes

การดำเนินการของคุณจะดึงรายการคำศัพท์สำหรับฝึกสะกดคำทั้งหมดและจัดเก็บไว้ในเซสชัน จากนั้นการดำเนินการของคุณจะสิ้นสุดเซสชันเนื่องจากคุณเลือกการเปลี่ยน End conversation สำหรับ Intent YES

สร้าง Intent Phonetics

ทำตามขั้นตอนต่อไปนี้เพื่อสร้าง Intent ของ Phonetics

  1. คลิกพัฒนาในการนำทาง
  2. คลิก Intent ที่กำหนดเองในการนำทางเพื่อเปิดรายการ Intent
  3. คลิก + (เครื่องหมายบวก) ที่ท้ายรายการ Intent ตั้งชื่อ Intent ใหม่ phonetics แล้วกด Enter
  4. คลิก Intent phonetics เพื่อเปิดหน้า Intent phonetics
  5. ในส่วน "เพิ่มวลีการฝึกอบรม" ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
  • how do I spell words
  • phonetics
  • help me with phonetics
  • phonetic alphabet

1455bdfca8dae46.png

  1. คลิกบันทึก

เพิ่ม Intent phonetics ใน Start ฉาก

ตอนนี้การดําเนินการจะเข้าใจได้เมื่อผู้ใช้แสดงความตั้งใจ "การออกเสียง" คุณสามารถเพิ่มความตั้งใจของผู้ใช้ phonetics ลงในฉาก Start เนื่องจากผู้ใช้ตอบสนองต่อข้อความแจ้งของ Start ("ยินดีต้อนรับสู่การฝึกสะกด ใช้การออกเสียงตัวอักษรเพื่อสะกดคำ เช่น alpha for a, bravo for b, charlie for c ฯลฯ คุณต้องการดำเนินการต่อไหม")

หากต้องการเพิ่ม Intent ของผู้ใช้รายนี้ในโหมด Start ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากเริ่มในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Start ข้างการจัดการความตั้งใจของผู้ใช้
  3. เลือกการออกเสียงในเมนูแบบเลื่อนลง Intent

67ee2e08000b2aee.png

  1. ในส่วนการเปลี่ยน ให้คลิกเมนูแบบเลื่อนลงแล้วเลือกจบการสนทนา
  2. คลิกบันทึก

เปลี่ยนจากฉากเริ่มต้นเป็นฉากการสะกด

ในส่วนนี้ คุณจะสร้างโหมดใหม่ที่เรียกว่าการสะกด ซึ่งจะส่งพรอมต์ให้ผู้ใช้สะกดคำด้วยการออกเสียงตามตัวอักษร

ทำตามขั้นตอนต่อไปนี้เพื่อสร้างฉากและเพิ่มการเปลี่ยนฉาก

  1. คลิกพัฒนาในแถบนำทางด้านบน จากนั้นคลิกเริ่มฉากในการนำทางด้านซ้าย
  2. ในส่วนการจัดการความตั้งใจของผู้ใช้ ให้คลิก when actions.intent.YES is matched แล้วคลิกเมนูแบบเลื่อนลงทางด้านขวาในส่วนการเปลี่ยน จากนั้นพิมพ์ Spelling ในช่องข้อความ
  3. คลิกเพิ่ม การดำเนินการนี้จะสร้างฉากชื่อ Spelling และบอกให้การดำเนินการเปลี่ยนไปเป็นฉาก Spelling หลังจากจับคู่กับความตั้งใจ "ใช่"
  4. ขยายฉากในการนำทางด้านซ้ายเพื่อแสดงรายการฉาก
  5. ในส่วนฉาก ให้คลิกการสะกดเพื่อดูฉาก Spelling
  6. คลิก + ในส่วนเมื่อเข้าของฉาก Spelling
  7. คลิกเรียกเว็บฮุค แล้วป้อน getSpellingWord ในช่องข้อความของตัวแฮนเดิลเหตุการณ์
  8. เลือกส่งพรอมต์
  9. แทนที่ประโยคในช่อง speech (Enter the response that users will see or hear...) ด้วย {} ระบบจะป้อนข้อมูลข้อความแจ้งจริงโดยเว็บฮุค

ชิปคำแนะนำจะเสนอคำแนะนำที่คลิกได้ให้ผู้ใช้ซึ่งการดำเนินการของคุณประมวลผลเป็นอินพุตของผู้ใช้

หากต้องการเพิ่มชิปคำแนะนำในพรอมต์ของฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้

  1. ในฉาก Spelling ให้คลิกคำแนะนำใต้ตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ
  2. ในช่องtitle ให้แทนที่ Suggested Response ด้วย 'Repeat'
  3. โดยใช้การจัดรูปแบบเดียวกันเพื่อเพิ่มชิปคำแนะนำที่มีชื่อว่า 'Skip' ด้วยตนเอง
  4. โดยใช้การจัดรูปแบบเดียวกันเพื่อเพิ่มชิปคำแนะนำที่มีชื่อว่า 'Quit' ด้วยตนเอง โค้ดของคุณควรมีลักษณะเหมือนข้อมูลโค้ดต่อไปนี้
  5. คลิกบันทึก
suggestions:
      - title: 'Repeat'
      - title: 'Skip'
      - title: 'Quit'

e1d437f714ea1539.png

สร้าง Intent Repeat

ทำตามขั้นตอนต่อไปนี้เพื่อสร้าง Intent ของ repeat

  1. คลิกพัฒนาในการนำทาง
  2. คลิก Intent ที่กำหนดเองในการนำทางเพื่อเปิดรายการ Intent
  3. คลิก + (เครื่องหมายบวก) ที่ท้ายรายการ Intent ตั้งชื่อ Intent ใหม่ repeat แล้วกด Enter
  4. คลิก Intent repeat เพื่อเปิดหน้า Intent definition
  5. ในส่วนเพิ่มวลีการฝึกอบรม ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
  • one more time please
  • say the word again
  • repeat the word
  • tell me again
  • repeat

e61f0b9f80510bc9.png

  1. คลิกบันทึก

เพิ่ม Intent repeat ใน Spelling ฉาก

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

หากต้องการเพิ่ม Intent ของผู้ใช้รายนี้ในโหมด Spelling ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากการสะกดคำในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Spelling ข้างการจัดการความตั้งใจของผู้ใช้
  3. เลือกทำซ้ำในเมนูแบบเลื่อนลงของ Intent

5cfd623b25bedbed.png

  1. เลือกเรียกเว็บฮุค แล้วป้อน repeatSpellingWord ในช่องข้อความของเครื่องจัดการเหตุการณ์เพื่อดูคำจำกัดความของคำ
  2. เลือกส่งพรอมต์
  3. แทนที่ประโยคในช่อง speech (Enter the response that users will see or hear...) ด้วย "" ระบบจะป้อนข้อมูลข้อความแจ้งจริงโดยเว็บฮุค

เพิ่มชิปคำแนะนำลงใน "เมื่อมีการจับคู่การเกิดซ้ำ"

  1. ใน "เมื่อมีการจับคู่การเกิดซ้ำ" ในส่วน "การจัดการความตั้งใจของผู้ใช้" ให้คลิกคำแนะนำด้านล่างตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ
  2. ในช่องtitle ให้แทนที่ Suggested Response ด้วย 'Skip'
  3. ใช้การจัดรูปแบบเดียวกันเพื่อเพิ่มชิปคำแนะนำที่มีชื่อว่า 'Quit' ด้วยตนเอง โค้ดควรมีลักษณะดังตัวอย่างต่อไปนี้
suggestions:
      - title: 'Skip'
      - title: 'Quit'

ab40e4b0c432b97c.png

  1. คลิกบันทึก

สร้าง Intent definition

ทำตามขั้นตอนต่อไปนี้เพื่อสร้าง Intent ของ definition

  1. คลิกพัฒนาในการนำทาง
  2. คลิก Intent ที่กำหนดเองในการนำทางเพื่อเปิดรายการ Intent
  3. คลิก + (เครื่องหมายบวก) ที่ท้ายรายการ Intent ตั้งชื่อ Intent ใหม่ definition แล้วกด Enter
  4. คลิก Intent definition เพื่อเปิดหน้า Intent definition
  5. ในส่วนเพิ่มวลีการฝึกอบรม ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
  • I would like to know the definition
  • tell me the definition
  • what does it mean
  • meaning
  • definition
  • what is the definition?

c1b88a9c0b1ac082.png

  1. คลิกบันทึก

เพิ่ม Intent definition ใน Spelling ฉาก

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

หากต้องการเพิ่ม Intent ของผู้ใช้รายนี้ในโหมด Spelling ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากการสะกดคำในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Spelling ข้างการจัดการความตั้งใจของผู้ใช้
  3. เลือกคำจำกัดความในเมนูแบบเลื่อนลงของ Intent

646bdcac3ad3eb0c.png

  1. เลือกเรียกเว็บฮุค และป้อน definitionOfSpellingWord ในช่องข้อความของตัวแฮนเดิลเหตุการณ์เพื่อดูคำจำกัดความของคำ
  2. เลือกส่งพรอมต์
  3. แทนที่ประโยคในช่อง speech (Enter the response that users will see or hear...) ด้วย "" ระบบจะป้อนข้อมูลข้อความแจ้งจริงโดยเว็บฮุค

เพิ่มชิปคำแนะนำในการตอบสนองของเว็บฮุค

  1. ในฉาก Start ให้คลิกคำแนะนำด้านล่างตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ
  2. ในช่องtitle ให้แทนที่ Suggested Response ด้วย 'Skip'
  3. ใช้การจัดรูปแบบเดียวกันเพื่อเพิ่มชิปคำแนะนำที่มีชื่อว่า 'Quit' ด้วยตนเอง โค้ดควรมีลักษณะดังตัวอย่างต่อไปนี้
suggestions:
      - title: 'Skip'
      - title: 'Quit'

25227545839d933f.png

  1. คลิกบันทึก

สร้าง Intent skip

ทำตามขั้นตอนต่อไปนี้เพื่อสร้าง Intent ของ skip

  1. คลิกพัฒนาในการนำทาง
  2. คลิก Intent ในการนำทางเพื่อเปิดรายการ Intent
  3. คลิก + (เครื่องหมายบวก) ที่ท้ายรายการ Intent ตั้งชื่อ Intent ใหม่ skip แล้วกด Enter
  4. คลิก Intent skip เพื่อเปิดหน้า Intent skip
  5. ในส่วนเพิ่มวลีการฝึกอบรม ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
  • next word
  • go next
  • next
  • skip
  • skip word

d1c4908a3d7882f8.png

  1. คลิกบันทึก

เพิ่ม Intent Skip ใน Spelling ฉาก

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

หากต้องการเพิ่ม Intent ของผู้ใช้รายนี้ในโหมด Spelling ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากการสะกดคำในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Spelling ข้างแฮนเดิลความตั้งใจของผู้ใช้
  3. เลือกข้ามในเมนูแบบเลื่อนลงของความตั้งใจ

5465f97542217964.png

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

C8072485ca82bd3f.png

  1. คลิกบันทึก

สร้าง Intent quit

ทำตามขั้นตอนต่อไปนี้เพื่อสร้าง Intent ของ Quit

  1. คลิกพัฒนาในการนำทาง
  2. คลิก Intent ในการนำทางเพื่อเปิดรายการ Intent
  3. คลิก + (เครื่องหมายบวก) ที่ท้ายรายการ Intent ตั้งชื่อ Intent ใหม่ Quit แล้วกด Enter
  4. คลิก Intent Quit เพื่อเปิดหน้า Intent คำจำกัดความ
  5. ในส่วนเพิ่มวลีการฝึกอบรม ให้คลิกกล่องข้อความป้อนวลี แล้วป้อนวลีต่อไปนี้
  • I quit
  • Goodbye
  • Cancel
  • Exit
  • Quit

9916f77b8766541e.png

  1. คลิกบันทึก

เพิ่ม Intent Quit ใน Spelling ฉาก

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

หากต้องการเพิ่ม Intent ของผู้ใช้รายนี้ในโหมด Spelling ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากการสะกดคำในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Spelling ข้างการจัดการความตั้งใจของผู้ใช้
  3. เลือกออกในเมนูแบบเลื่อนลงของความตั้งใจ

5f62fb18a3653d66.png

  1. ในส่วนการเปลี่ยนทางด้านขวา ให้คลิกเมนูแบบเลื่อนลงแล้วเลือก End conversation 1ffbe35a7bbbb4b0.png
  2. คลิกบันทึก

สร้างประเภท phonetic_alphabet

ในส่วนนี้ คุณจะได้สร้างประเภทใหม่ชื่อ phonetic_alphabet ซึ่งระบุตัวเลือกการออกเสียงตัวอักษรที่ผู้ใช้เลือกที่จะสะกดคำได้ นอกจากนี้ คุณยังสามารถกำหนดคำพ้องความหมาย 2-3 คำสำหรับตัวเลือกเหล่านี้ได้ด้วยเผื่อในกรณีที่มีผู้ใช้พูดคำอื่นที่คล้ายกัน ในส่วนต่อไป ให้เพิ่มประเภท phonetic_alphabet ลงในช่องเพื่อระบุว่าคุณต้องการรับการตอบกลับของผู้ใช้

หากต้องการสร้างประเภท phonetic_alphabet ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกพัฒนาในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในส่วนประเภท
  3. พิมพ์ phonetic_alphabet แล้วกด Enter
  4. คลิก phonetic_alphabet เพื่อเปิดตัวเลือก
  5. ในส่วนประเภทนี้จะรองรับค่าประเภทใด ให้เลือกตัวเลือกคำและคำพ้องความหมาย
  6. ป้อนข้อมูลต่อไปนี้และค่าที่เกี่ยวข้องในส่วนเพิ่มรายการ

a

อัลฟ่า, แอปเปิ้ล, อัมสเตอร์ดัม

ไชโย, เนย, บัลติมอร์

ชาร์ลี, แมว, คาซาบลังกา

เดลต้า, สุนัข, เดนมาร์ก

echo, Edward, Edison

จิ้งจอก ฟ็อกซ์ ฟลอริดา

กอล์ฟ, จอร์จ, กัลลิโปลี

ชั่วโมง

โรงแรม, แฮร์รี่, ฮาวานา

1

อินเดีย, หมึก, italia

จูเลียต จอห์นนี เยรูซาเล็ม

พัน

กิโลกรัม คิง, กิโลกรัม

ลิมา, ความรัก, ลอนดอน

นาที

ไมค์, เงิน, มาดากัสการ์

พฤศจิกายน, นิวยอร์ก, แนนซี่

o

ออสการ์, ส้ม, ออสโล

น.

papa, ปารีส, peter

ไตรมาส

ควิเบก ควีน

โรมิโอ, โรม, โรเบิร์ต

วินาที

เซียร์รา, น้ำตาล, ซันติอาโก

แทงโก้ ทอมมี่ ตรีโปลี

u

เครื่องแบบ, ร่ม, ลุง

v

victor, น้ำส้มสายชู, บาเลนเซีย

สัปดาห์

วิสกี้, วิลเลียม, วอชิงตัน

x

เอ็กซ์เรย์

yankee, สีเหลือง, ยอร์กเกอร์

Z

ซูลู, ม้าลาย, ซูริค

ตารางคีย์-ค่าของคุณควรมีลักษณะดังต่อไปนี้

5b5a5cd9fa557e1b.png

  1. คลิกบันทึก

กำหนดค่าการเติมช่องโฆษณา

ขั้นตอนต่อไป คุณต้องกำหนดค่าการเติมช่องโฆษณาในโหมดการสะกด หากต้องการกำหนดค่าตรรกะการเติมช่องโฆษณา ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากการสะกดคำในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Spelling สำหรับการเติมช่อง
  3. ในช่องป้อนชื่อช่อง ให้เพิ่ม userresponse เป็นชื่อช่อง
  4. ในรายการแบบเลื่อนลงเลือกประเภท ให้เลือกประเภทช่องโฆษณาเป็น phonetic_alphabet
  5. เลือกช่องนี้ยอมรับรายการค่า
  6. เลือกต้องระบุช่องนี้
  7. เลือกตัวเลือกปรับแต่งการเขียนตอบค่าช่อง แล้วป้อน userresponse ในช่องข้อความพารามิเตอร์เซสชัน

ba57a419877a07f3.png

  1. คลิกบันทึก

เพิ่มเงื่อนไขไปยังหน้าจอ Spelling

หากต้องการเพิ่มเงื่อนไขลงในฉาก Spelling ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกฉากการสะกดคำในการนำทาง
  2. คลิก + (เครื่องหมายบวก) ในฉาก Spelling ข้างเงื่อนไข
  3. ป้อน scene.slots.status == "FINAL" เป็นเงื่อนไข
  4. เลือกเรียกเว็บฮุค แล้วป้อน verifyการสะกดคำ ในช่องข้อความของตัวแฮนเดิลเหตุการณ์เพื่อยืนยันคำตอบของผู้ใช้
  5. เลือกส่งพรอมต์
  6. แทนที่ประโยคในช่อง speech (Enter the response that users will see or hear...) ด้วย {} ระบบจะป้อนข้อมูลข้อความแจ้งจริงโดยเว็บฮุค

เพิ่มชิปคำแนะนำในการตอบสนองของเว็บฮุค

  1. ในฉาก Start ให้คลิกคำแนะนำด้านล่างตัวแก้ไขโค้ด การดำเนินการนี้จะเพิ่มชิปคำแนะนำ 3 รายการ
  2. ในช่องtitle ให้แทนที่ Suggested Response ด้วย 'Next'
  3. ใช้การจัดรูปแบบเดียวกันเพื่อเพิ่มชิปคำแนะนำที่มีชื่อว่า 'Quit' ด้วยตนเอง โค้ดควรมีลักษณะดังตัวอย่างต่อไปนี้
suggestions:
      - title: 'Next'
      - title: 'Quit'

ac3d7a9366ebc1b1.png

  1. คลิกบันทึก

12. ทดสอบการสะกดคำในเครื่องมือจำลอง

หากต้องการทดสอบการดำเนินการในเครื่องมือจำลอง ให้ทำตามขั้นตอนต่อไปนี้

  1. ในแถบนำทาง ให้คลิกทดสอบเพื่อไปยังเครื่องจำลอง
  2. หากต้องการทดสอบการดำเนินการในเครื่องจำลอง ให้พิมพ์ Talk to Spelling Practice ในช่องป้อนข้อมูล
  3. กด Enter การดำเนินการของคุณควรตอบกลับด้วยพรอมต์ Main invocation และพรอมต์เพิ่มเติมในโหมด Start ที่ระบุว่า "ยินดีต้อนรับสู่การฝึกสะกดคำ ใช้การออกเสียงตัวอักษรเพื่อสะกดคำ เช่น alpha for a, bravo for b, charlie for c ฯลฯ ต้องการดําเนินการต่อไหม"
  4. พูดว่าใช่เพื่อดำเนินการต่อ
  5. โปรแกรมจำลองจะเล่นเสียงคำเพื่อสะกดคำ
  6. คุณสามารถสะกดคำโดยใช้ตัวอักษรการออกเสียง เช่น หากพูดว่าดีกว่า ให้พูดหรือพิมพ์ว่า "bravo echo tango tango echo romeo"
  7. เครื่องจำลองจะตอบสนองด้วยคำตอบที่ถูกต้องหรือไม่ถูกต้อง
  8. พูดว่า next เพื่อดำเนินการต่อไปยังคำถัดไปหรือพูดว่า Qut เพื่อออกจาก Game Loop

13. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างเกมเรียบร้อยแล้ว การฝึกสะกดคำ!

ตอนนี้คุณได้ทราบขั้นตอนสำคัญที่จำเป็นในการสร้างเกมโดยใช้ Cloud Firestore, Cloud Functions และ Google Assistant Action Builder แล้ว

สิ่งที่คุณได้พูดคุยกัน

  • วิธีโต้ตอบกับ Cloud Firestore
  • วิธีใช้สล็อตเพื่อรวบรวมข้อมูลจากผู้ใช้
  • วิธีประมวลผลอินพุตของผู้ใช้และแสดงผลคำตอบ
  • วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะในฉาก
  • วิธีเพิ่ม Game Loop

แหล่งข้อมูลการเรียนรู้เพิ่มเติม

คุณดูแหล่งข้อมูลเหล่านี้เพื่อศึกษาการสร้าง Actions สำหรับ Google Assistant ได้

ล้างข้อมูลโปรเจ็กต์ [แนะนำ]

ขอแนะนำให้นำโปรเจ็กต์ที่คุณไม่ได้ตั้งใจจะใช้ออกเพื่อหลีกเลี่ยงค่าใช้จ่ายที่อาจเกิดขึ้น ทำตามขั้นตอนต่อไปนี้เพื่อลบโปรเจ็กต์ที่คุณสร้างใน Codelab นี้

  1. หากต้องการลบโปรเจ็กต์และทรัพยากร Firebase ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนการปิดระบบ (ลบ) โปรเจ็กต์

ข้อควรระวัง: โปรดเลือกโปรเจ็กต์ที่ถูกต้องสำหรับการลบในหน้าการตั้งค่าของ Google Cloud Console

  1. ไม่บังคับ: หากต้องการนำโปรเจ็กต์ออกจากคอนโซล Actions ทันที ให้ทำตามขั้นตอนที่แสดงในส่วนการลบโปรเจ็กต์ หากไม่ทำขั้นตอนนี้ ระบบจะนำโปรเจ็กต์ของคุณออกโดยอัตโนมัติหลังจากผ่านไปประมาณ 30 วัน

ติดตาม @ActionsOnGoogle และ @Firebase บน Twitter เพื่อติดตามประกาศล่าสุดของเราและทวีตถึง #GoogleIO เพื่อแชร์สิ่งที่คุณสร้าง