משחק תרגול איות באמצעות Google Assistant ו-Cloud Firestore

1. סקירה כללית

פלטפורמת הפיתוח של Google Assistant מאפשרת ליצור תוכנה להרחבת הפונקציונליות של Google Assistant, עוזרת אישית וירטואלית, ביותר ממיליארד מכשירים, כולל רמקולים חכמים, טלפונים, מכוניות, טלוויזיות, אוזניות ועוד. המשתמשים מנהלים שיחה עם Assistant כדי לבצע פעולות, כמו קניית מצרכים או הזמנת נסיעה. מפתחים יכולים להשתמש בפלטפורמת הפיתוח של Assistant כדי ליצור ולנהל בקלות חוויות שיחה נעימות ויעילות בין משתמשים לבין שירות משלוחים של צד שלישי.

ב-codelab הזה נסביר מושגים ברמת ביניים לפיתוח באמצעות Google Assistant,‏ Cloud Functions ו-Cloud Firestore. ב-codelab הזה תיצרו משחק בשם "תרגול איות" שמשתמש ב-Google Assistant כדי לבקש מהמשתמשים לאיית מילים.

מה תפַתחו

בשיעור הזה תלמדו איך ליצור משחק מורכב עם הפונקציות הבאות:

  • מקבלת תשובות לאיות מהמשתמש, ובהתאם לערך, משנה את ההנחיות לשיחה
  • התשובה מכילה רמזים שקשורים לאיות המילה, כמו ההגדרה שלה או חזרה על המילה
  • יצירת לולאת משחק כדי שהמשתמש יוכל לקיים אינטראקציה עם Assistant שוב אחרי איות המילה

לפני שמתחילים ליצור, אפשר לקיים אינטראקציה עם הפעולה הפעילה במכשיר עם Google Assistant על ידי אמירת "Ok Google, talk to Spelling Practice". נתיב ברירת המחדל דרך הפעולה הזו למשתמש חוזר נראה כך:

בסיום ה-codelab הזה, הפעולה שהשלמתם תכלול את רצף השיחה הבא:

2e9f94dc0ceafc96.png

מה תלמדו

  • איך משתמשים ב-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

  1. נכנסים ל-Firebase.
  2. במסוף Firebase, לוחצים על הוספת פרויקט (או על יצירת פרויקט) ונותנים שם לפרויקט Firebase Spelling-Practice.

66ae8d1894f4477.png

  1. לוחצים על האפשרויות ליצירת פרויקט. אם מוצגת בקשה, מאשרים את התנאים של Firebase. מדלגים על ההגדרה של Google Analytics, כי לא תשתמשו ב-Analytics באפליקציה הזו.

מידע נוסף על פרויקטים ב-Firebase זמין במאמר הסבר על פרויקטים ב-Firebase.

שדרוג לתוכנית התמחור Blaze

כדי להשתמש ב-Cloud Functions for Firebase, צריך לשדרג את הפרויקט ב-Firebase לתוכנית התמחור Blaze, כלומר לקשר לחשבון לחיוב ב-Google Cloud. כדי לעשות זאת, צריך לספק כרטיס אשראי או אמצעי תשלום אחר.

לכל הפרויקטים ב-Firebase, כולל אלה שרשומים לתוכנית Blaze, עדיין יש גישה למכסות שימוש ללא עלות ב-Cloud Functions. השלבים שמפורטים ב-codelab הזה יהיו במסגרת מגבלות השימוש ללא עלות. עם זאת, יופיעו חיובים קטנים ( בסביבות 0.03 $) מ-Cloud Storage, שמשמש לאירוח תמונות ה-build של Cloud Functions.

4. התקנת Firebase CLI

ממשק שורת הפקודה (CLI) של Firebase מאפשר לכם לפרוס את Cloud Functions.

יש כמה אפשרויות להתקנת 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. בספרייה spelling-functions-start, מגדירים את Firebase CLI לשימוש בפרויקט Firebase. מריצים את הפקודה הבאה, בוחרים את מזהה הפרויקט ופועלים לפי ההוראות. כשמופיעה בקשה, אפשר לבחור כל כתובת אימייל חלופית, למשל codelab.
$ firebase use --add

5. ספריית הפונקציות

עכשיו תוסיפו פונקציונליות באמצעות Firebase SDK for Cloud Functions כדי לבנות את הקצה העורפי של המשחק Spelling Practice.

‫Cloud Functions מאפשר לכם להריץ קוד בענן בלי שתצטרכו להגדיר שרת. בשיעור הזה תלמדו איך ליצור פונקציות שמגיבות לאירועים של Firebase Authentication,‏ Cloud Storage ו-Firebase Realtime Database. נתחיל עם אימות.

כשמשתמשים ב-Firebase SDK for Cloud Functions, קוד הפונקציות נמצא בספרייה functions (כברירת מחדל). כדי להקל עליך, כבר יצרנו את הקובץ functions/index.js שבו הקוד שלך יופיע. מומלץ לבדוק את הספרייה functions לפני שממשיכים.

$ cd functions
$ ls

קוד הפונקציות הוא גם אפליקציית Node.js, ולכן הוא צריך package.json שמספק מידע על האפליקציה ומפרט את התלות שלה.

אם אתם לא מכירים את Node.js, כדאי לקרוא עליה לפני שממשיכים ב-codelab.

בקבצים package.json כבר מופיעות שתי תלויות נדרשות: Firebase SDK for 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.

קודם מייבאים את המודולים הנדרשים, ואז כותבים ארבע פונקציות במקום ה-TODO. ממשיכים לשלב הבא של ה-codelab כדי לייבא את המודולים.

6. ייבוא המודולים הנדרשים

ב-codelab הזה נדרשים שלושה מודולים.

  • מודול firebase-functions מאפשר לנו לכתוב את הטריגרים לפונקציות של Cloud Functions
  • מודול firebase-admin מאפשר לנו להשתמש בפלטפורמת Firebase בשרת עם גישת אדמין, למשל כדי לכתוב ל-Cloud Firestore.
  • ספריית ה-Fulfillment של Node.js ב-Actions SDK ממלאת את ה-handlers של Actions SDK עבור Google Assistant.
  1. מריצים את פקודת ה-npm הבאה כדי להתקין את Actions SDK:
$ npm install @assistant/conversation
  1. בקובץ 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

תשתמשו ב-API הציבורי dictionaryapi.dev כדי לקבל את הגדרות המילים.

בקובץ 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 Functions שמופעלת בכל פעם שנוצר מסמך חדש ב-Cloud Firestore. הפונקציה תקרא ל-dictionaryapi.dev API כדי לקבל הגדרות של מילים באמצעות הפונקציה getWordDetailsFromDictionaryAPI שכתבנו למעלה.

בקובץ index.js, מחליפים את ה-TODO של createSpellingPracticeWord בקוד הבא:

index.js

‫‎// Firestore trigger that fetches word definitions through getWordDetailsFromDictionaryAPI for every new Firestore document

exports.createSpellingPracticeWord = functions.firestore
  .document('wordlist/{word}')
  .onCreate((snap, context) => {
    const newValue = snap.data();
    const word = newValue.word;
    getWordDetailsFromDictionaryAPI(word);
});

קבלת רשימת מילים למשחק

אתם יכולים לכתוב פונקציה של Cloud Functions שמחלצת רשימה של מילים לתרגול איות מ-Cloud Firestore עבור Assistant. לשם כך אנחנו משתמשים ב-app handler.

בקובץ 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 Functions שמחזירה את המילה הבאה ברשימת המילים.

בקובץ 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 Functions שחוזרת על המילה הנוכחית במשחק.

בקובץ 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 Functions שמספקת את ההגדרה של המילה הנוכחית במשחק.

בקובץ 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 Functions שמאמתת את התשובה של המשתמש לגבי האיות של המילה הנוכחית במשחק.

בקובץ 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.

מהרמה הבסיסית (root) של הספרייה 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 ולוחצים על הפרויקט spelling-practice. פותחים את מרכז הבקרה של Functions כדי לראות את נקודת הקצה של הפונקציות.

332cb0437411a242.png

השלמתם את הוספת כל הפונקציות הנדרשות. עכשיו נעבור להגדרת Cloud Firestore.

8. הפעלת Cloud Firestore

צריך להפעיל את Cloud Firestore.

בקטע Build (פיתוח) במסוף Firebase, לוחצים על Firestore. לאחר מכן לוחצים על יצירת מסד נתונים.

5c0b4abf4410ffcf.png

הגישה לנתונים ב-Cloud Firestore נשלטת על ידי כללי אבטחה. קודם צריך להגדיר כמה כללים בסיסיים לגבי הנתונים כדי להתחיל. לוחצים על Firestore ואז בכרטיסייה Rules במסוף Firebase, מוסיפים את הכללים הבאים ולוחצים על Publish.

הכללים הבאים מגבילים את הגישה לנתונים למשתמשים שמחוברים לחשבון, וכך מונעים ממשתמשים לא מאומתים לקרוא או לכתוב נתונים.

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

  1. במסוף Firebase, עוברים לקטע Cloud Firestore.
  2. לוחצים על סמל הפלוס התחלת אוסף.
  3. בתיבת הטקסט מזהה האוסף, מזינים wordlist ולוחצים על הבא.

1b4ccadb90f52f02.png

בשלב הבא ניצור מסמך למילה: agreement

  1. בתיבת הטקסט מזהה המסמך, מזינים agreement.
  2. בתיבת הטקסט Field (שדה), מזינים word, ובתיבת הטקסט Value (ערך), מזינים agreement.
  3. לוחצים על שמירה.

379037e011e8511e.png

כשמוסיפים את המסמך הזה ל-Cloud Firestore, מופעלת הפונקציה createSpellingPracticeWord כדי לאחזר את פרטי ההגדרה של המילה. כדי להוסיף עוד מילים (לדוגמה: awe, car, true, tell, better, commute, …), צריך ליצור מסמך חדש לכל מילה.

10. הגדרה של Google Assistant

בקטעים הבאים מוסבר איך להגדיר את סביבת הפיתוח של Google Assistant וליצור את פרויקט הפעולות.

בדיקת הגדרות ההרשאות ב-Google

כדי לבדוק את הפעולה שאתם יוצרים ב-codelab הזה, אתם צריכים להפעיל את ההרשאות הנדרשות כדי שהסימולטור יוכל לגשת לפעולה. כדי להפעיל הרשאות:

  1. עוברים לדף בקרת הפעילות בחשבון.
  2. אם עדיין לא עשיתם זאת, היכנסו באמצעות חשבון Google.
  3. צריך להפעיל את ההרשאות הבאות:
  • פעילות באינטרנט ובאפליקציות
  • בקטע פעילות באינטרנט ובאפליקציות, מסמנים את תיבת הסימון שליד שמירה של ההיסטוריה והפעילות של Chrome מאתרים, מאפליקציות וממכשירים המשתמשים בשירותי Google.

c988e1e639e6d6e1.png

יצירת פרויקט Actions

פרויקט הפעולות הוא מאגר לפעולה שלכם. כדי ליצור פרויקט Actions בשביל ה-codelab הזה, מבצעים את השלבים הבאים:

  1. פותחים את מסוף הפעולות.
  2. לוחצים על פרויקט חדש.
  3. אישור התנאים וההגבלות

b174d45710b8086b.png

  1. מקלידים או בוחרים את spelling-practice-codelab שיצרתם באמצעות מסוף Firebase. (השם מיועד לשימוש פנימי בלבד. בהמשך תוכלו להגדיר שם חיצוני לפרויקט).

a2951de5d2001fac.png

  1. לוחצים על ייבוא פרויקט.
  2. במסך איזה סוג פעולה רוצה ליצור?, בוחרים בכרטיס בהתאמה אישית.
  3. לוחצים על הבא.
  4. בוחרים בכרטיס פרויקט ריק.
  5. לוחצים על Start building (התחלת בנייה).
  6. מזינים Spelling Practice (תרגול איות) בשם לתצוגה ולוחצים על שמירה.

המשתמשים מתחילים את השיחה עם הפעולה שלכם באמצעות הפעלה. לדוגמה, משתמשים יכולים להפעיל את הפעולה שלכם באמצעות אמירת משפט כמו Ok Google, talk to Spelling Practice, כאשר Spelling Practice הוא השם המוצג.

אם רוצים לפרוס את הפעולה בסביבת ייצור, צריך להגדיר לה שם לתצוגה. עם זאת, כדי לבדוק את הפעולה, לא צריך להגדיר את השם לתצוגה. במקום זאת, אפשר להשתמש בביטוי "Talk to my test app" בסימולטור כדי להפעיל את הפעולה.

הגדרת מילוי הזמנות

צריך לחבר ל-Assistant את הפונקציות לטיפול באירועים של Cloud Functions שכתבתם ופרסתם קודם ב-codelab הזה.

כדי להגדיר את תהליך השלמת ההזמנה, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט הצדדי, לוחצים על Webhook.
  2. בוחרים באפשרות נקודת קצה (endpoint) של HTTPS כאפשרות לביצוע:

d523bf003e96e66f.png

  1. מזינים את כתובת ה-URL של נקודת הקצה של הפונקציה בתיבת הטקסט נקודת קצה מסוג HTTPs ולוחצים על שמירה.

be53e2cd0d914d54.png

בקטע הבא, תתאימו אישית את ההצעה לפעולה עבור ההפעלה הראשית במסוף הפעולות.

הגדרת הפעלה ראשית

צריך לערוך את הקריאה הראשית כדי להגדיר מה קורה אחרי שמשתמש מפעיל את הפעולה.

כברירת מחדל, Actions Builder מספק הנחיה כללית כשמופעלת ההפעלה שלכם ("כדי להתחיל ליצור את הפעולה, צריך להגדיר את ההפעלה הראשית").

כדי לשנות את ההודעה שהפעולה שולחת בחזרה למשתמש כשהוא מפעיל את הפעולה:

  1. בתפריט הניווט, לוחצים על Main invocation (הפעלה ראשית).

9ff088c04c995cde.png

  1. מסמנים את התיבה Call your webhook ומוסיפים את שם הגורם המטפל באירועים getSpellingWordList בתיבת הטקסט.
  2. בכלי לעריכת קוד, מחליפים את הטקסט בשדה speech בהודעת הפתיחה הבאה: Welcome to Spelling Practice

הערה: אפשר להשתמש בפורמט YAML או בפורמט JSON כדי לערוך את ההנחיות.

  1. לוחצים על שמירה.

בדיקת ההפעלה הראשית בסימולטור

ב-Actions Console יש כלי אינטרנטי לבדיקת הפעולה שנקרא סימולטור. הממשק מדמה מכשירי חומרה והגדרות שלהם, כך שתוכלו לנהל שיחה עם הפעולה כאילו היא פועלת במסך חכם, בטלפון, ברמקול או ב-KaiOS.

כדי לבדוק את ההפעלה הראשית של הפעולה בסימולטור, פועלים לפי השלבים הבאים:

  1. בסרגל הניווט העליון, לוחצים על בדיקה כדי לעבור לסימולטור.
  2. כדי להפעיל את הפעולה בסימולטור, מקלידים Talk to Spelling Practice בשדה הקלט בפינה הימנית העליונה, ואז מקישים על Enter במקלדת.

651fc8da1ac9aa0a.png

כשמפעילים את הקריאה הראשית של הפעולה, Assistant מגיבה עם הודעת הפתיחה המותאמת אישית. בשלב הזה, השיחה מסתיימת אחרי ש-Assistant מגיבה בהודעת פתיחה.

צפייה ביומני האירועים

בכרטיסייה בדיקה, בחלונית שמשמאל מוצגים יומני האירועים, שבהם מופיעה היסטוריית השיחות כיומני אירועים. בכל יומן אירועים מוצגים האירועים שמתרחשים במהלך התור הזה בשיחה. כדי לראות את יומן האירועים, לוחצים על הסמל האפור שלפני האירוע.

לפעולה שלך יש כרגע יומן אירועים אחד, שבו מוצגים גם הקלט של המשתמש ("Talk to Spelling Practice") וגם התגובה של הפעולה. בצילום המסך הבא מוצג יומן האירועים של הפעולה:

a6fb192f94426824.png

11. איך יוצרים שיחה לתרגול איות

אחרי שהגדרתם מה קורה אחרי שמשתמש מפעיל את הפעולה, אתם יכולים להגדיר את שאר השיחה של הפעולה. לתרגול איות יש ארבעה סצנות, וצריך להפעיל כל סצנה לפני שמריצים אותה. הדרך הנפוצה ביותר להפעיל סצנה היא להגדיר את הפעולה כך שכאשר משתמש מתאים לכוונת משתמש בתוך סצנה, הכוונה הזו מפעילה את המעבר לסצנה אחרת ומפעילה אותה.

מעבר מהפעלה ראשית לסצנת התחלה

בקטע הזה יוצרים סצנה חדשה בשם Start, ששולחת למשתמש הנחיה עם שאלה אם הוא רוצה להתחיל לשחק בתרגול איות. מוסיפים גם מעבר מהקריאה הראשית לסצנה החדשה של Start.

כדי ליצור את הסצנה הזו ולהוסיף לה מעבר, פועלים לפי השלבים הבאים:

  1. בסרגל הניווט העליון, לוחצים על פיתוח. בתפריט הניווט הימני, לוחצים על Main invocation (הפעלה ראשית).
  2. בקטע מעבר בצד שמאל, לוחצים על התפריט הנפתח ומקלידים Start בשדה הטקסט.

dd4f1807a57f794d.png

  1. לוחצים על הוספה. הפעולה הזו יוצרת סצנה בשם Start, ומורה לפעולה לעבור לסצנה Start אחרי שהפעולה מציגה למשתמש את הודעת הפתיחה.
  2. בתפריט הניווט הימני, לוחצים על סצנות כדי להציג את רשימת הסצנות.
  3. בקטע סצנות, לוחצים על התחלה כדי לראות את הסצנה Start.
  4. בקטע On enter (בכניסה) של סצנת 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, "ברוכים הבאים לתרגול איות. משתמשים באלפבית הפונטי כדי לאיית את המילה. לדוגמה, אלפא בשביל a, בראבו בשביל b, צ'ארלי בשביל c וכו'. רוצה להמשיך?".

בצילום המסך הבא מוצגת האינטראקציה הזו:

338c9570b02a618e.png

  1. לוחצים על הצ'יפ של ההצעה Yes או No או Help with Phonetics כדי להגיב להנחיה. (אפשר גם לומר "Yes" או "No" או "Help with Phonetics" או להזין Yes או No או Help with Phonetics בשדה Input).

כשמשיבים להנחיה, הפעולה משיבה בהודעה שמציינת שהיא לא מבינה את הקלט: "מצטער, לא הבנתי את מה שאמרת. אפשר לנסות שוב?" מכיוון שעדיין לא הגדרת את הפעולה כך שתבין את הקלט "כן" או "לא" ותגיב לו, הפעולה מתאימה את הקלט שלך לכוונת NO_MATCH.

כברירת מחדל, כוונת המערכת NO_MATCH מספקת תשובות כלליות, אבל אתם יכולים להתאים אישית את התשובות האלה כדי לציין למשתמש שלא הבנתם את הקלט שלו. ‫Assistant מסיימת את השיחה של המשתמש עם הפעולה שלכם אחרי שלא הצליחה להתאים קלט של משתמש שלוש פעמים.

הוספת כוונות של תשובה שלילית ופונטיקה

עכשיו המשתמשים יכולים להשיב לשאלה שהפעולה מציגה, ואתם יכולים להגדיר את הפעולה כך שתבין את התשובות של המשתמשים ("כן" או "לא" או "עזרה בפונטיקה"). בקטעים הבאים יוצרים כוונות משתמש שתואמות למקרים שבהם המשתמש אומר "כן" או "לא" או "עזרה בפונטיקה", ומוסיפים את הכוונות האלה לסצנה Start. נשתמש בכוונת המערכת yes וניצור כוונות אחרות.

יצירת כוונה מסוג no

עכשיו צריך ליצור את כוונת המשתמש no כדי להבין את המשתמש ולהגיב לו כשהוא לא רוצה לשחק במשחק. כדי ליצור את הכוונה הזו, מבצעים את השלבים הבאים:

  1. בתפריט הניווט, לוחצים על פיתוח.
  2. בתפריט הניווט, לוחצים על Custom Intents (כוונות מותאמות אישית) כדי לפתוח את רשימת הכוונות.
  3. לוחצים על + (סימן הפלוס) בסוף רשימת הכוונות. נותנים שם ל-Intent החדש no ומקישים על Enter.
  4. לוחצים על לא כדי לפתוח את דף הכוונה no.
  5. בקטע Add training phrases (הוספת ביטויי אימון), לוחצים על תיבת הטקסט Enter Phrase (הזנת ביטוי) ומזינים את הביטויים הבאים:
  • No
  • N
  • I don't want
  • nope

98b0c9a7b67ea9b9.png

  1. לוחצים על שמירה.

הוספת כוונה no לסצנה Start

עכשיו, הפעולה יכולה להבין מתי משתמש אומר "לא" או משהו דומה ל"לא", כמו "לא". צריך להוסיף את כוונת המשתמש no לסצנה Start כי המשתמש מגיב להנחיה Start ("ברוכים הבאים לתרגול איות. משתמשים באלפבית הפונטי כדי לאיית את המילה. לדוגמה, אלפא בשביל a, בראבו בשביל b, צ'ארלי בשביל c וכו'. רוצה להמשיך?").

כדי להוסיף את הכוונה הזו לסצנה Start, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה Start (התחלה) בחלונית הניווט.
  2. לוחצים על + (סמל הפלוס) בסצנה Start לצד 'טיפול בכוונת המשתמש'.
  3. בקטע Intent, בוחרים באפשרות no בתפריט הנפתח.

51f752e78c8b4942.png

  1. לוחצים על Send prompts ומעדכנים את השדה speech עם הטקסט הבא: Good Bye.

הקוד בעורך צריך להיראות כמו קטע הקוד הבא:

candidates:
  - first_simple:
      variants:
        - speech: >-
             Goodbye.
  1. בקטע מעבר, בוחרים באפשרות סיום השיחה מהתפריט הנפתח.
  2. לוחצים על שמירה.

בדיקת כוונת no בסימולטור

בשלב הזה, הפעולה מבינה מתי המשתמש לא רוצה לשחק במשחק ומחזירה את התגובה המתאימה.

כדי לבדוק את הכוונה הזו בסימולטור, פועלים לפי השלבים הבאים:

  1. בסרגל הניווט, לוחצים על בדיקה.
  2. מקלידים Talk to Spelling Practice בשדה הקלט ומקישים על Enter.
  3. מקלידים No בשדה קלט ומקישים על Enter. אפשר גם ללחוץ על ההצעה הקשורה 'לא'.

7727a456b522f31b.png

הוספת כוונה של מערכת YES לסצנה Start

עכשיו נוסיף את כוונת SYSTEMYES לסצנה Start, כי המשתמש עונה 'כן' להנחיה Start ("ברוכים הבאים לתרגול איות. משתמשים באלפבית הפונטי כדי לאיית את המילה. לדוגמה, אלפא בשביל a, בראבו בשביל b, צ'ארלי בשביל c וכו'. רוצה להמשיך?").

כדי להוסיף את כוונת המשתמש הזו לסצנה Start, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה Start (התחלה) בחלונית הניווט.
  2. לוחצים על + (סמל הפלוס) בסצנה Start לצד User intent handling (טיפול בכוונה של המשתמש).
  3. בקטע All System Intents (כל כוונות המערכת), בוחרים באפשרות YES (כן) בתפריט הנפתח של הכוונה.

f6cbe789cde49e8f.png

  1. לוחצים על Call your webhook (הפעלת התגובה לפעולה מאתר אחר) ומעדכנים את תיבת הטקסט event handler עם הפונקציה שיצרתם קודם: getSpellingWordList
  2. בקטע מעבר, לוחצים על התפריט הנפתח ובוחרים באפשרות סיום השיחה.
  3. לוחצים על שמירה.

בדיקת כוונת YES בסימולטור

בשלב הזה, הפעולה מבינה מתי המשתמש רוצה לשחק במשחק ומחזירה את התגובה המתאימה.

כדי לבדוק את הכוונה הזו בסימולטור, פועלים לפי השלבים הבאים:

  1. בסרגל הניווט, לוחצים על בדיקה.
  2. כדי לבדוק את הפעולה בסימולטור, מקלידים Talk to Spelling Practice בשדה Input ומקישים על Enter.
  3. מקלידים Yes בשדה קלט ומקישים על Enter. אפשר גם ללחוץ על הצ'יפ של ההצעה Yes.

הפעולה מאחזרת רשימה של כל המילים לתרגול איות ושומרת אותן בסשן. הפעולה מסיימת את הסשן כי בחרתם במעבר End conversation לכוונת YES.

יצירת כוונה מסוג Phonetics

כדי ליצור את כוונת Phonetics, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט, לוחצים על פיתוח.
  2. בתפריט הניווט, לוחצים על Custom Intents (כוונות מותאמות אישית) כדי לפתוח את רשימת הכוונות.
  3. לוחצים על + (סימן הפלוס) בסוף רשימת הכוונות. נותנים שם ל-Intent החדש phonetics ולוחצים על Enter.
  4. לוחצים על הכוונה phonetics כדי לפתוח את דף הכוונה phonetics.
  5. בקטע 'הוספת ביטויי אימון', לוחצים על תיבת הטקסט הזנת ביטוי ומזינים את הביטויים הבאים:
  • how do I spell words
  • phonetics
  • help me with phonetics
  • phonetic alphabet

1455bdfca8dae46.png

  1. לוחצים על שמירה.

הוספת כוונה phonetics לסצנה Start

עכשיו, הפעולה יכולה להבין מתי משתמש מביע כוונה לשמוע את ההגייה של מילה מסוימת. אפשר להוסיף את כוונת המשתמש phonetics לסצנה Start, כי המשתמש מגיב להנחיה Start ("ברוכים הבאים לתרגול איות. משתמשים באלפבית הפונטי כדי לאיית את המילה. לדוגמה, אלפא בשביל a, בראבו בשביל b, צ'ארלי בשביל c וכו'. רוצה להמשיך?").

כדי להוסיף את כוונת המשתמש הזו לסצנה Start, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה Start (התחלה) בחלונית הניווט.
  2. לוחצים על הסמל + (פלוס) בסצנה Start לצד 'טיפול בכוונה של משתמש'.
  3. בתפריט הנפתח של הכוונה, בוחרים באפשרות פונטיקה.

67ee2e08000b2aee.png

  1. בקטע מעבר, לוחצים על התפריט הנפתח ובוחרים באפשרות סיום השיחה.
  2. לוחצים על שמירה.

מעבר מסצנת ההתחלה לסצנת האיות

בקטע הזה, יוצרים סצנה חדשה בשם Spelling, ששולחת למשתמש הנחיה לאיית את המילה באמצעות האלפבית הפונטי.

כדי ליצור את הסצנה הזו ולהוסיף לה מעבר, פועלים לפי השלבים הבאים:

  1. בסרגל הניווט העליון, לוחצים על פיתוח. לאחר מכן, בתפריט הניווט הימני, לוחצים על התחלת הסצנה.
  2. בקטע User intent handling (טיפול בכוונה של המשתמש), לוחצים על when actions.intent.YES is matched. בצד שמאל, בקטע transition (מעבר), לוחצים על התפריט הנפתח ומקלידים Spelling בשדה הטקסט.
  3. לוחצים על הוספה. הפעולה הזו יוצרת סצנה בשם Spelling, ומורה לפעולה לעבור לסצנה Spelling אחרי ההתאמה לכוונת YES.
  4. מרחיבים את הסצנות בחלונית הניווט הימנית כדי להציג את רשימת הסצנות.
  5. בקטע סצנות, לוחצים על איות כדי לראות את הסצנה Spelling.
  6. בקטע On enter (בכניסה) של סצנת Spelling, לוחצים על +.
  7. לוחצים על Call your webhook ומזינים getSpellingWord בתיבת הטקסט של handler האירוע.
  8. לוחצים על שליחת הנחיות.
  9. מחליפים את המשפט בשדה speech (Enter the response that users will see or hear...) ב-{}. ההנחיה בפועל תאוכלס על ידי תגובה לפעולה מאתר אחר (webhook).

צ'יפים של הצעות מספקים למשתמש הצעות שאפשר ללחוץ עליהן, והפעולה מעבדת אותן כקלט משתמש.

כדי להוסיף צ'יפים של הצעות להנחיה של סצנת Spelling, פועלים לפי השלבים הבאים:

  1. בסצנה Spelling, לוחצים על ההצעות שמתחת לעורך הקוד. הפעולה הזו מוסיפה שלושה צ'יפים של הצעות.
  2. בשדה title, מחליפים את Suggested Response ב-'Repeat'.
  3. באותו פורמט, מוסיפים ידנית צ'יפ הצעה בשם 'Skip'.
  4. באותו פורמט, מוסיפים ידנית צ'יפ הצעה בשם 'Quit'. הקוד שלכם צריך להיראות כמו קטע הקוד הבא:
  5. לוחצים על שמירה.
suggestions:
      - title: 'Repeat'
      - title: 'Skip'
      - title: 'Quit'

e1d437f714ea1539.png

יצירת כוונה מסוג Repeat

כדי ליצור את כוונת repeat, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט, לוחצים על פיתוח.
  2. בתפריט הניווט, לוחצים על Custom Intents (כוונות מותאמות אישית) כדי לפתוח את רשימת הכוונות.
  3. לוחצים על + (סימן הפלוס) בסוף רשימת הכוונות. נותנים שם ל-Intent החדש repeat ולוחצים על Enter.
  4. לוחצים על כוונת המשתמש repeat כדי לפתוח את דף כוונת המשתמש definition.
  5. בקטע Add training phrases (הוספת ביטויי אימון), לוחצים על תיבת הטקסט Enter Phrase (הזנת ביטוי) ומזינים את הביטויים הבאים:
  • one more time please
  • say the word again
  • repeat the word
  • tell me again
  • repeat

e61f0b9f80510bc9.png

  1. לוחצים על שמירה.

הוספת כוונה repeat לסצנה Spelling

מעכשיו, הפעולה יכולה להבין מתי משתמש מביע כוונה לחזור על הפעולה. אפשר להוסיף את כוונת המשתמש repeat לסצנה Spelling, כי המשתמש מגיב להנחיה Spelling ("תאיית את המילה באמצעות אלפבית פונטי").

כדי להוסיף את כוונת המשתמש הזו לסצנה Spelling, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה איות בחלונית הניווט.
  2. לוחצים על + (סמל הפלוס) בסצנה Spelling לצד User intent handling (טיפול בכוונה של המשתמש).
  3. בתפריט הנפתח של הכוונה, בוחרים באפשרות חזרה.

5cfd623b25bedbed.png

  1. מסמנים את התיבה Call your webhook ומזינים repeatSpellingWord בתיבת הטקסט של handler האירוע כדי לקבל את ההגדרה של המילה.
  2. מסמנים את התיבה שליחת הנחיות.
  3. מחליפים את המשפט בשדה speech (Enter the response that users will see or hear...) ב-'. ההנחיה בפועל תאוכלס על ידי webhook.

הוספת צ'יפים של הצעות ל'כשהתבנית חוזרת'

  1. בקטע When Repeat is matched (כשהמשתמש חוזר על עצמו) בקטע User Intent handling (טיפול בכוונה של המשתמש), לוחצים על suggestions (הצעות) מתחת לעורך הקוד. הפעולה הזו מוסיפה שלושה צ'יפים של הצעות.
  2. בשדה title, מחליפים את Suggested Response ב-'Skip'.
  3. באותו פורמט, מוסיפים ידנית צ'יפ הצעה עם הכותרת 'Quit'.קטע הקוד אמור להיראות כך:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

ab40e4b0c432b97c.png

  1. לוחצים על שמירה.

יצירת כוונה מסוג definition

כדי ליצור את כוונת definition, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט, לוחצים על פיתוח.
  2. בתפריט הניווט, לוחצים על Custom Intents (כוונות מותאמות אישית) כדי לפתוח את רשימת הכוונות.
  3. לוחצים על + (סימן הפלוס) בסוף רשימת הכוונות. נותנים שם ל-Intent החדש definition ולוחצים על Enter.
  4. לוחצים על הכוונה definition כדי לפתוח את דף הכוונה definition.
  5. בקטע Add training phrases (הוספת ביטויי אימון), לוחצים על תיבת הטקסט Enter Phrase (הזנת ביטוי) ומזינים את הביטויים הבאים:
  • I would like to know the definition
  • tell me the definition
  • what does it mean
  • meaning
  • definition
  • what is the definition?

c1b88a9c0b1ac082.png

  1. לוחצים על שמירה.

הוספת כוונה definition לסצנה Spelling

עכשיו, הפעולה יכולה להבין מתי משתמש מביע כוונה לקבל הגדרה. אפשר להוסיף את כוונת המשתמש definition לסצנה Spelling, כי המשתמש מגיב להנחיה Spelling ("תאיית את המילה באמצעות אלפבית פונטי").

כדי להוסיף את כוונת המשתמש הזו לסצנה Spelling, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה איות בחלונית הניווט.
  2. לוחצים על + (סמל הפלוס) בסצנה Spelling לצד User intent handling (טיפול בכוונה של המשתמש).
  3. בתפריט הנפתח של הכוונה, בוחרים באפשרות הגדרה.

646bdcac3ad3eb0c.png

  1. מסמנים את התיבה Call your webhook (הפעלת ה-webhook) ומזינים את הערך definitionOfSpellingWord בתיבת הטקסט של handler האירוע כדי לקבל את הגדרת המילה.
  2. מסמנים את התיבה שליחת הנחיות.
  3. מחליפים את המשפט בשדה speech (Enter the response that users will see or hear...) ב-‘‘`. ההנחיה בפועל תאוכלס על ידי webhook.

הוספת צ'יפים של הצעות לתגובת ה-webhook

  1. בסצנה Start, לוחצים על הצעות מתחת לעורך הקוד. הפעולה הזו מוסיפה שלושה צ'יפים של הצעות.
  2. בשדה title, מחליפים את Suggested Response ב-'Skip'.
  3. באותו פורמט, מוסיפים ידנית צ'יפ הצעה עם הכותרת 'Quit'.קטע הקוד אמור להיראות כך:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

25227545839d933f.png

  1. לוחצים על שמירה.

יצירת כוונה מסוג skip

כדי ליצור את כוונת skip, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט, לוחצים על פיתוח.
  2. בתפריט הניווט, לוחצים על Intents (כוונות) כדי לפתוח את רשימת הכוונות.
  3. לוחצים על + (סימן הפלוס) בסוף רשימת הכוונות. נותנים שם ל-Intent החדש skip ולוחצים על Enter.
  4. לוחצים על הכוונה skip כדי לפתוח את דף הכוונה skip.
  5. בקטע Add training phrases (הוספת ביטויי אימון), לוחצים על תיבת הטקסט Enter Phrase (הזנת ביטוי) ומזינים את הביטויים הבאים:
  • next word
  • go next
  • next
  • skip
  • skip word

d1c4908a3d7882f8.png

  1. לוחצים על שמירה.

הוספת כוונה Skip לסצנה Spelling

עכשיו, הפעולה יכולה להבין מתי משתמש מביע כוונה "לדלג". אפשר להוסיף את כוונת המשתמש skip לסצנה Spelling, כי המשתמש מגיב להנחיה Spelling ("תאיית את המילה באמצעות אלפבית פונטי").

כדי להוסיף את כוונת המשתמש הזו לסצנה Spelling, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה איות בחלונית הניווט.
  2. לוחצים על + (סמל הפלוס) בסצנה Spelling לצד User intent handling (טיפול בכוונה של המשתמש).
  3. בתפריט הנפתח של כוונת החיפוש, בוחרים באפשרות דילוג.

5465f97542217964.png

  1. בקטע מעבר בצד שמאל, לוחצים על התפריט הנפתח ובוחרים באפשרות Spelling .

c8072485ca82bd3f.png

  1. לוחצים על שמירה.

יצירת כוונה מסוג quit

כדי ליצור את כוונת Quit, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט, לוחצים על פיתוח.
  2. בתפריט הניווט, לוחצים על Intents (כוונות) כדי לפתוח את רשימת הכוונות.
  3. לוחצים על + (סימן הפלוס) בסוף רשימת הכוונות. נותנים שם ל-Intent החדש Quit ולוחצים על Enter.
  4. לוחצים על הכוונה Quit כדי לפתוח את דף הכוונה definition.
  5. בקטע Add training phrases (הוספת ביטויי אימון), לוחצים על תיבת הטקסט Enter Phrase (הזנת ביטוי) ומזינים את הביטויים הבאים:
  • I quit
  • Goodbye
  • Cancel
  • Exit
  • Quit

9916f77b8766541e.png

  1. לוחצים על שמירה.

הוספת כוונה Quit לסצנה Spelling

עכשיו, הפעולה יכולה להבין מתי משתמש מביע כוונה "לצאת". אפשר להוסיף את כוונת המשתמש quit לסצנה Spelling, כי המשתמש מגיב להנחיה Spelling ("תאיית את המילה באמצעות אלפבית פונטי").

כדי להוסיף את כוונת המשתמש הזו לסצנה Spelling, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה איות בחלונית הניווט.
  2. לוחצים על + (סמל הפלוס) בסצנה Spelling לצד User intent handling (טיפול בכוונה של המשתמש).
  3. בתפריט הנפתח של הכוונה, בוחרים באפשרות יציאה.

5f62fb18a3653d66.png

  1. בקטע מעבר בצד שמאל, לוחצים על התפריט הנפתח ובוחרים באפשרות End conversation . 1ffbe35a7bbbb4b0.png
  2. לוחצים על שמירה.

יצירת סוג phonetic_alphabet

בקטע הזה יוצרים סוג חדש שנקרא phonetic_alphabet, שמציין את האפשרויות של האלפבית הפונטי שהמשתמשים יכולים לבחור כדי לאיית את המילה. אפשר גם להגדיר כמה מילים נרדפות לאפשרויות האלה, למקרה שמשתמש יגיד משהו דומה. בקטע מאוחר יותר, מוסיפים את הסוג phonetic_alphabet למשבצת כדי לציין שרוצים לקבל את התגובה של המשתמש.

כדי ליצור את הסוג phonetic_alphabet, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט, לוחצים על פיתוח.
  2. לוחצים על + (סמל הפלוס) בקטע סוגים.
  3. מקלידים phonetic_alphabet ומקישים על Enter.
  4. לוחצים על phonetic_alphabet כדי לפתוח את האפשרויות.
  5. בקטע What kind of values will this Type support? (אילו סוגי ערכים ייתמכו בסוג הזה?), בוחרים באפשרות Words and synonyms (מילים ומילים נרדפות).
  6. בקטע Add entries (הוספת רשומות), מזינים את הרשומות הבאות ואת הערכים התואמים:

a

alpha, apple, amsterdam

b

bravo, butter, baltimore

c

charlie, cat, casablanca

d

delta, dog, denmark

e

echo, edward, edison

f

foxtrot, fox, florida

g

golf, george, gallipoli

h

hotel, harry, havana

i

india, ink, italia

j

juliette, johnny, jerusalem

k

kilo, king, kilogramme

l

lima, love, london

m

mike, money, madagascar

n

november, new york, nancy

o

oscar, orange, oslo

p

papa, paris, peter

q

quebec, queen

r

romeo, roma, robert

s

sierra, sugar, santiago

t

tango, tommy, tripoli

u

uniform, umbrella, uncle

v

victor, vinegar, Valencia

w

whiskey, william, washington

x

x-ray

y

yankee, yellow, yorker

z

zulu, zebra, zurich

טבלת זוגות מפתח/ערך צריכה להיראות כך:

5b5a5cd9fa557e1b.png

  1. לוחצים על שמירה.

הגדרת מילוי משבצות

בשלב הבא, צריך להגדיר את מילוי המשבצות בסצנת האיות. כדי להגדיר את הלוגיקה של מילוי המשבצות:

  1. לוחצים על הסצנה איות בחלונית הניווט.
  2. לוחצים על + (סימן הפלוס) בסצנה Spelling של מילוי משבצות.
  3. בשדה Enter slot name (הזנת שם משבצת), מוסיפים את userresponse כשם המשבצת.
  4. בתפריט הנפתח Select type, בוחרים באפשרות phonetic_alphabet כסוג המשבצת.
  5. מסמנים את התיבה This slot accepts a list of values (המשבצת הזו מקבלת רשימת ערכים).
  6. מסמנים את האפשרות This slot is required (חובה להשתמש במשבצת הזו).
  7. בוחרים באפשרות התאמה אישית של כתיבת ערך המשבצת ומזינים userresponse בתיבת הטקסט של פרמטר הסשן.

ba57a419877a07f3.png

  1. לוחצים על שמירה.

הוספת תנאי למסך Spelling

כדי להוסיף תנאי לסצנה Spelling, פועלים לפי השלבים הבאים:

  1. לוחצים על הסצנה איות בחלונית הניווט.
  2. לוחצים על + (סמל הפלוס) בסצנה Spelling לצד 'תנאי'.
  3. מזינים את scene.slots.status == "FINAL" כתנאי
  4. מסמנים את התיבה Call your webhook ומזינים verifySpellingWord בתיבת הטקסט של event handler כדי לאמת את תגובת המשתמש.
  5. מסמנים את התיבה שליחת הנחיות.
  6. מחליפים את המשפט בשדה speech (Enter the response that users will see or hear...) ב-{}. ההנחיה בפועל תאוכלס על ידי תגובת ה-webhook.

הוספת צ'יפים של הצעות לתגובת ה-webhook

  1. בסצנה Start, לוחצים על הצעות מתחת לעורך הקוד. הפעולה הזו מוסיפה שלושה צ'יפים של הצעות.
  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, "ברוכים הבאים לתרגול איות. משתמשים באלפבית הפונטי כדי לאיית את המילה. לדוגמה, אלפא בשביל a, בראבו בשביל b, צ'ארלי בשביל c וכו'. רוצה להמשיך?".
  4. אומרים כן כדי להמשיך
  5. הסימולטור ישמיע מילה כדי לאיית אותה
  6. אפשר לאיית את המילה באמצעות אלפבית פונטי. לדוגמה, כדי להקליד או להגיד better, אומרים או מקלידים "bravo echo tango tango echo romeo".
  7. הסימולטור יגיב בתשובה הנכונה או בתשובה לא נכונה.
  8. אומרים הבא כדי להמשיך למילה הבאה או אומרים יציאה כדי לצאת מהמשחק.

13. מזל טוב

איזה יופי, יצרת בהצלחה את המשחק Spelling Practice!

עכשיו אתם יודעים מהם השלבים העיקריים שנדרשים כדי ליצור משחק באמצעות Cloud Firestore,‏ Cloud Functions ו-Action Builder של Google Assistant.

מה נכלל בכיסוי

  • איך משתמשים ב-Cloud Firestore
  • איך משתמשים במשבצות כדי לאסוף נתונים מהמשתמש
  • איך לעבד קלט של משתמש ולהחזיר תגובה
  • איך משתמשים בתנאים כדי להוסיף לוגיקה לסצנה
  • איך מוסיפים game loop

מקורות מידע נוספים ללמידה

כדי ללמוד איך ליצור פעולות ל-Google Assistant, אפשר לעיין במקורות המידע הבאים:

פינוי מקום בפרויקט [מומלץ]

כדי להימנע מחיובים אפשריים, מומלץ להסיר פרויקטים שלא מתכוונים להשתמש בהם. כדי למחוק את הפרויקטים שיצרתם ב-codelab הזה, פועלים לפי השלבים הבאים:

  1. כדי למחוק את הפרויקט והמשאבים ב-Firebase, צריך לבצע את השלבים שמפורטים בקטע השבתה (מחיקה) של פרויקטים.

זהירות: חשוב לוודא שבחרתם את הפרויקט הנכון למחיקה בדף הגדרות במסוף Google Cloud.

  1. אופציונלי: כדי להסיר את הפרויקט מיד מ-Actions Console, מבצעים את השלבים שמפורטים בקטע מחיקת פרויקט. אם לא תבצעו את השלב הזה, הפרויקט יוסר אוטומטית אחרי כ-30 יום.

כדאי לעקוב אחרי ‎@ActionsOnGoogle ו-‎@Firebase בטוויטר כדי להתעדכן בהכרזות האחרונות שלנו, ולצייץ עם ההאשטאג ‎ #GoogleIO כדי לשתף את מה שיצרתם!