بازی تمرین املا با استفاده از Google Assistant و Cloud Firestore

۱. مرور کلی

پلتفرم توسعه‌دهندگان دستیار گوگل (Google Assistant) به شما امکان می‌دهد نرم‌افزاری برای گسترش عملکرد دستیار گوگل، یک دستیار شخصی مجازی، در بیش از ۱ میلیارد دستگاه، از جمله بلندگوهای هوشمند، تلفن‌ها، اتومبیل‌ها، تلویزیون‌ها، هدفون‌ها و موارد دیگر ایجاد کنید. کاربران برای انجام کارهایی مانند خرید مواد غذایی یا رزرو تاکسی، با دستیار گوگل در مکالمه مشارکت می‌کنند. به عنوان یک توسعه‌دهنده، می‌توانید از پلتفرم توسعه‌دهندگان دستیار گوگل برای ایجاد و مدیریت آسان تجربیات مکالمه‌ای لذت‌بخش و مؤثر بین کاربران و سرویس تکمیل سفارش شخص ثالث خود استفاده کنید.

این آزمایشگاه کد، مفاهیم سطح متوسط ​​برای توسعه با دستیار گوگل، توابع ابری و فروشگاه ابری را پوشش می‌دهد. در این آزمایشگاه کد، شما یک بازی به نام «تمرین املا» خواهید ساخت که از دستیار گوگل برای درخواست هجی کردن کلمات توسط کاربران استفاده می‌کند.

آنچه خواهید ساخت

در این آزمایشگاه کد، شما یک بازی پیچیده با قابلیت‌های زیر خواهید ساخت:

  • پاسخ‌های املایی را از کاربر دریافت می‌کند و بسته به مقدار، پیام‌های مکالمه را تغییر می‌دهد.
  • با نکاتی مربوط به هجی کردن کلمه، مانند تعریف آن یا تکرار کلمه، پاسخ می‌دهد.
  • یک حلقه بازی ایجاد می‌کند تا کاربر بتواند پس از هجی کردن کلمه، دوباره با دستیار تعامل داشته باشد.

قبل از شروع ساخت، می‌توانید با گفتن «سلام گوگل، با تمرین املا صحبت کن» با اکشن زنده در دستگاه مجهز به دستیار گوگل خود تعامل داشته باشید. مسیر پیش‌فرض از طریق این اکشن برای یک کاربر برگشتی مانند تعامل زیر است:

وقتی این آزمایشگاه کد را تمام کردید، اکشن تکمیل‌شده‌ی شما جریان مکالمه‌ی زیر را خواهد داشت:

2e9f94dc0ceafc96.png

آنچه یاد خواهید گرفت

  • نحوه تعامل با Cloud Firestore
  • نحوه استفاده از اسلات‌ها برای جمع‌آوری داده‌ها از کاربر
  • نحوه پردازش ورودی کاربر و بازگرداندن پاسخ
  • نحوه استفاده از شرط‌ها برای افزودن منطق به صحنه
  • نحوه اضافه کردن حلقه بازی

آنچه نیاز دارید

پیش‌نیازهای این codelab شامل موارد زیر است:

  • یک مرورگر وب، مانند گوگل کروم
  • یک IDE برای نوشتن توابع ابری.
  • یک روش پرداخت. این codelab از توابع ابری برای Firebase استفاده می‌کند که مستلزم آن است که پروژه شما در طرح قیمت‌گذاری Firebase Blaze باشد ( بیشتر بدانید ).
  • یک ترمینال برای اجرای دستورات shell
  • Node.js نسخه ۱۰ یا بالاتر

۲. کد توابع را دریافت کنید

مخزن گیت‌هاب را از خط فرمان کلون کنید:

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

۳. یک پروژه Firebase ایجاد کنید و برنامه خود را تنظیم کنید

ایجاد یک پروژه فایربیس

  1. وارد فایربیس شوید.
  2. در کنسول Firebase، روی Add Project (یا Create a project ) کلیک کنید، سپس نام پروژه Firebase خود را Spelling-Practice قرار دهید.

66ae8d1894f4477.png

  1. روی گزینه‌های ایجاد پروژه کلیک کنید. در صورت درخواست، شرایط Firebase را بپذیرید. از تنظیم Google Analytics صرف نظر کنید، زیرا از Analytics برای این برنامه استفاده نخواهید کرد.

برای کسب اطلاعات بیشتر در مورد پروژه‌های فایربیس، به بخش «درک پروژه‌های فایربیس» مراجعه کنید.

به طرح قیمت‌گذاری Blaze ارتقا دهید

برای استفاده از توابع ابری برای فایربیس، باید پروژه فایربیس خود را به طرح قیمت‌گذاری Blaze ارتقا دهید، به این معنی که یک حساب Google Cloud Billing را به پروژه خود متصل خواهید کرد. این امر مستلزم ارائه کارت اعتباری یا روش پرداخت دیگری است.

تمام پروژه‌های فایربیس، از جمله پروژه‌های موجود در طرح Blaze، همچنان به سهمیه‌های استفاده رایگان برای توابع ابری دسترسی دارند. مراحل ذکر شده در این آزمایشگاه کد در محدوده استفاده رایگان قرار می‌گیرند. با این حال، هزینه‌های کمی ( حدود 0.03 دلار ) از فضای ذخیره‌سازی ابری که برای میزبانی تصاویر ساخت توابع ابری شما استفاده می‌شود، دریافت خواهید کرد.

۴. رابط خط فرمان فایربیس را نصب کنید

رابط خط فرمان (CLI) فایربیس به شما امکان می‌دهد تا توابع ابری خود را مستقر کنید.

بسته به سیستم عامل و مورد استفاده شما ، گزینه‌های مختلفی برای نصب Firebase CLI وجود دارد. مراحل زیر رایج‌ترین گزینه را در صورتی که از Cloud Functions نیز استفاده می‌کنید، شرح می‌دهد.

  1. مطمئن شوید که npm را که معمولاً با Node.js همراه است، نصب کرده‌اید.
  2. با اجرای دستور npm زیر، رابط خط فرمان (CLI) را نصب یا ارتقا دهید:
$ 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) را برای استفاده از پروژه فایربیس خود تنظیم کنید. دستور زیر را اجرا کنید، شناسه پروژه خود را انتخاب کنید، سپس دستورالعمل‌ها را دنبال کنید. در صورت درخواست، می‌توانید هر نام مستعاری مانند codelab را انتخاب کنید.
$ firebase use --add

۵. دایرکتوری توابع

اکنون با استفاده از Firebase SDK for Cloud Functions، قابلیت‌هایی را برای ساخت backend بازی، یعنی Spelling Practice ، اضافه خواهید کرد.

توابع ابری به شما این امکان را می‌دهند که بدون نیاز به راه‌اندازی سرور، کدی داشته باشید که در فضای ابری اجرا می‌شود. این آزمایشگاه کد به شما نشان می‌دهد که چگونه توابعی بسازید که به رویدادهای Firebase Authentication، Cloud Storage و Firebase Realtime Database واکنش نشان دهند. بیایید با احراز هویت شروع کنیم.

هنگام استفاده از Firebase SDK برای توابع ابری، کد توابع شما (به طور پیش‌فرض) در پوشه functions قرار می‌گیرد. برای سهولت کار، ما قبلاً فایل functions/index.js را که کد شما در آن قرار خواهد گرفت، ایجاد کرده‌ایم. قبل از ادامه، می‌توانید پوشه functions را بررسی کنید.

$ cd functions
$ ls

کد توابع شما نیز یک برنامه Node.js است و بنابراین به یک package.json نیاز دارد که اطلاعاتی در مورد برنامه شما ارائه دهد و وابستگی‌ها را فهرست کند.

اگر با Node.js آشنا نیستید، قبل از ادامه‌ی کدنویسی، یادگیری بیشتر در مورد آن مفید خواهد بود.

فایل 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.

ابتدا ماژول‌های مورد نیاز را وارد می‌کنید، سپس چهار تابع به جای TODOها می‌نویسید. برای وارد کردن ماژول‌ها به مرحله بعدی codelab بروید.

۶. ماژول‌های مورد نیاز را وارد کنید

این آزمایشگاه کد به سه ماژول نیاز دارد.

  • ماژول firebase-functions به ما امکان می‌دهد تا محرک‌های (triggers) توابع ابری خود را بنویسیم.
  • ماژول firebase-admin به ما این امکان را می‌دهد که از پلتفرم Firebase روی سروری با دسترسی ادمین استفاده کنیم، برای مثال برای نوشتن در Cloud Firestore.
  • کتابخانه تکمیل عملیات Node.js، کنترلرهای عملیات SDK را برای دستیار گوگل (Google Assistant) فراهم می‌کند.
  1. با اجرای دستور npm زیر، Actions SDK را نصب کنید:
$ npm install @assistant/conversation
  1. در فایل index.js ، اولین TODO را با کد زیر جایگزین کنید.

این تغییرات تک تک ماژول‌های مورد نیاز را وارد می‌کند.

همچنین، کیت توسعه نرم‌افزاری مدیریت فایربیس (Firebase Admin SDK) می‌تواند هنگام استقرار در محیط توابع ابری (Cloud Functions) یا سایر کانتینرهای ابری گوگل، به‌طور خودکار پیکربندی شود. این همان اتفاقی است که هنگام فراخوانی 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.

حالا بیایید منطق تجاری را با استفاده از توابع برای پشتیبانی از اقدامات دستیار اضافه کنیم.

۷. ایجاد توابع

تعاریف کلمات را دریافت کنید و آنها را در 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 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 Firestore برای دستیار بازیابی کند. برای این کار، ما از app handler استفاده می‌کنیم.

در فایل 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;
    });
  });
})

از جلسه دستیار مطلع شوید

شما می‌توانید یک تابع ابری بنویسید که کلمه املایی بعدی را از لیست کلمات برگرداند.

در فایل 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');
});

بازی را فعال کنید تا کلمه را تکرار کند

شما می‌توانید یک تابع ابری بنویسید که کلمه فعلی بازی را تکرار کند.

در فایل 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');
});

تعریف کلمه را دریافت کنید

شما می‌توانید یک تابع ابری بنویسید که تعریف کلمه فعلی بازی را ارائه دهد.

در فایل 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);

تمام توابع خود را مستقر کنید

توابع ابری شما فقط پس از اینکه آنها را در فایربیس مستقر کردید، فعال خواهند بود.

از ریشه دایرکتوری 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 برویم.

۸. فعال کردن کلود فایراستور

شما باید Cloud Firestore را فعال کنید.

در بخش Build کنسول Firebase، روی Firestore کلیک کنید. سپس، روی Create database کلیک کنید.

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;
    }
  }
}

۹. داده‌های املایی کلمات را به Cloud Firestore اضافه کنید

در این مرحله، داده‌های املایی کلمات را در Cloud Firestore می‌نویسید تا بتوانید فهرستی از کلمات را برای دستیار (و بازی) ایجاد کنید.

داده‌های Cloud Firestore به صورت مجموعه‌ها، اسناد، فیلدها و زیرمجموعه‌ها ساختار یافته‌اند. هر کلمه برای بازی به عنوان سند جداگانه خود در یک مجموعه سطح بالا به نام wordlist ذخیره می‌شود. برای هر سند جدید در مجموعه Firestore، تابع createSpellingPracticeWord برای دریافت جزئیات کلمه از سرویس Dictionary API فعال می‌شود.

یک مجموعه Cloud Firestore ایجاد کنید

  1. در کنسول Firebase، به بخش Cloud Firestore بروید.
  2. روی + شروع جمع‌آوری کلیک کنید.
  3. در کادر متنی شناسه مجموعه ، wordlist را وارد کنید، سپس روی بعدی کلیک کنید.

۱b4ccadb90f52f02.png

در مرحله بعد، یک سند برای کلمه «توافق» ایجاد خواهیم کرد.

  1. در کادر متنی شناسه سند ، agreement را وارد کنید.
  2. در کادر متنی Field ، word و در کادر متنی Value، agreement وارد کنید.
  3. روی ذخیره کلیک کنید.

۳۷۹۰۳۷e۰۱۱e۸۵۱۱e.png

وقتی این سند را به Cloud Firestore اضافه می‌کنید، تابع createSpellingPracticeWord شما را برای دریافت جزئیات تعریف کلمه فعال می‌کند. با ایجاد یک سند جدید برای هر کلمه، کلمات بیشتری (مثلاً: awe، car، true، tell، better، commute، ...) اضافه کنید.

۱۰. دستیار گوگل را تنظیم کنید

بخش‌های زیر نحوه تنظیم محیط توسعه دستیار گوگل و ایجاد پروژه اکشن‌های شما را شرح می‌دهند.

تنظیمات مجوز گوگل خود را بررسی کنید

برای آزمایش اکشنی که در این آزمایشگاه کد می‌سازید، باید مجوزهای لازم را فعال کنید تا شبیه‌ساز بتواند به اکشن شما دسترسی داشته باشد. برای فعال کردن مجوزها، این مراحل را دنبال کنید:

  1. به صفحه کنترل‌های فعالیت بروید.
  2. اگر قبلاً این کار را نکرده‌اید، با حساب گوگل خود وارد شوید.
  3. مجوزهای زیر را فعال کنید:
  • فعالیت وب و اپلیکیشن
  • در بخش «فعالیت وب و برنامه» ، کادر کنار «افزودن سابقه و فعالیت Chrome از سایت‌ها، برنامه‌ها و دستگاه‌هایی که از سرویس‌های Google استفاده می‌کنند» را علامت بزنید.

c988e1e639e6d6e1.png

ایجاد یک پروژه اکشن

پروژه Actions شما یک ظرف برای Action شماست. برای ایجاد پروژه Actions خود برای این codelab، این مراحل را دنبال کنید:

  1. کنسول Actions را باز کنید.
  2. روی پروژه جدید کلیک کنید.
  3. شرایط خدمات را بپذیرید

b174d45710b8086b.png

  1. spelling-practice-codelab که با استفاده از کنسول Firebase ایجاد کرده‌اید را تایپ یا انتخاب کنید. (این نام برای ارجاع داخلی شماست. بعداً می‌توانید یک نام خارجی برای پروژه خود تعیین کنید.)

a2951de5d2001fac.png

  1. روی وارد کردن پروژه کلیک کنید.
  2. در صفحه «چه نوع عملیاتی می‌خواهید بسازید؟» ، کارت سفارشی را انتخاب کنید.
  3. روی بعدی کلیک کنید.
  4. کارت پروژه خالی را انتخاب کنید.
  5. روی شروع ساخت کلیک کنید.
  6. برای نمایش نام، عبارت Spelling Practice را وارد کنید و روی ذخیره کلیک کنید.

کاربران از طریق فراخوانی، مکالمه را با اقدام شما آغاز می‌کنند. برای مثال، کاربران می‌توانند با گفتن عبارتی مانند «سلام گوگل، با Spelling Practice صحبت کن» اقدام شما را فراخوانی کنند، که در آن Spelling Practice نام نمایشی است.

اگر می‌خواهید اکشن خود را در محیط عملیاتی پیاده‌سازی کنید، باید یک نام نمایشی برای آن تعیین کنید؛ با این حال، برای آزمایش اکشن خود، نیازی به تعریف نام نمایشی ندارید. در عوض، می‌توانید از عبارت "Talk to my test app" در شبیه‌ساز برای فراخوانی اکشن خود استفاده کنید.

پیکربندی انجام سفارش

شما باید به دستیار، کنترل‌کننده‌های رویداد برای توابع ابری که قبلاً در این آزمایشگاه کد نوشتید و مستقر کردید، متصل شوید.

برای پیکربندی رضایت‌نامه‌تان، مراحل زیر را دنبال کنید:

  1. در نوار ناوبری کناری، روی Webhook کلیک کنید.
  2. نقطه پایانی Https را به عنوان گزینه تکمیل انتخاب کنید:

d523bf003e96e66f.png

  1. آدرس URL مربوط به نقطه پایانی تابع خود را در کادر متنی HTTPs endpoint وارد کنید، سپس روی ذخیره کلیک کنید.

be53e2cd0d914d54.png

در بخش بعدی، اعلان فراخوانی اصلی خود را در کنسول Actions سفارشی خواهید کرد.

تنظیم فراخوانی اصلی

شما باید فراخوانی اصلی را ویرایش کنید تا تعریف کنید که پس از فراخوانی اکشن توسط کاربر چه اتفاقی می‌افتد.

به طور پیش‌فرض، Actions Builder هنگام فعال شدن فراخوانی شما، یک اعلان عمومی ارائه می‌دهد ( "با تعریف فراخوانی اصلی، ساخت اکشن خود را شروع کنید.").

برای تغییر پیامی که اکشن شما هنگام فراخوانی اکشن به کاربر ارسال می‌کند، این مراحل را دنبال کنید:

  1. روی فراخوانی اصلی در نوار ناوبری کلیک کنید.

9ff088c04c995cde.png

  1. گزینه Call your webhook تیک بزنید و نام event handler را به صورت getSpellingWordList در کادر متن اضافه کنید.
  2. در ویرایشگر کد، متن موجود در فیلد speech را با پیام خوشامدگویی زیر جایگزین کنید: Welcome to Spelling Practice

توجه: می‌توانید از قالب‌بندی YAML یا JSON برای ویرایش اعلان‌های خود استفاده کنید.

  1. روی ذخیره کلیک کنید.

فراخوانی اصلی را در شبیه‌ساز آزمایش کنید

کنسول Actions یک ابزار وب به نام شبیه‌ساز برای آزمایش Action شما ارائه می‌دهد. این رابط، دستگاه‌های سخت‌افزاری و تنظیمات آنها را شبیه‌سازی می‌کند، بنابراین می‌توانید با Action خود طوری صحبت کنید که انگار روی یک Smart Display، تلفن، بلندگو یا KaiOS در حال اجرا است.

برای آزمایش فراخوانی اصلی اکشن خود در شبیه‌ساز، مراحل زیر را دنبال کنید:

  1. در نوار ناوبری بالا، روی Test کلیک کنید تا به شبیه‌ساز بروید.
  2. برای فراخوانی اکشن خود در شبیه‌ساز، عبارت Talk to Spelling Practice در فیلد ورودی در بالا سمت چپ تایپ کنید، سپس کلید Enter را روی صفحه کلید خود فشار دهید.

651fc8da1ac9aa0a.png

وقتی فراخوانی اصلی اکشن خود را فعال می‌کنید، دستیار با پیام خوشامدگویی سفارشی شما پاسخ می‌دهد. در این مرحله، مکالمه پس از پاسخ دستیار با یک خوشامدگویی پایان می‌یابد.

مشاهده گزارش‌های رویداد

وقتی در برگه «آزمون» هستید، پنل سمت راست، گزارش‌های رویداد را نشان می‌دهد که تاریخچه مکالمه را به صورت گزارش‌های رویداد نمایش می‌دهند. هر گزارش رویداد، رویدادهایی را که در طول آن نوبت از مکالمه اتفاق می‌افتند، نمایش می‌دهد. برای مشاهده گزارش رویداد، روی نماد خاکستری قبل از رویداد کلیک کنید.

اکشن شما در حال حاضر یک گزارش رویداد دارد که هم ورودی کاربر ( "صحبت با تمرین املا" ) و هم پاسخ اکشن شما را نشان می‌دهد. تصویر زیر گزارش رویداد اکشن شما را نشان می‌دهد:

a6fb192f94426824.png

۱۱. برای تمرین املا، مکالمه را بسازید

حالا که مشخص کردید بعد از فراخوانی اکشن توسط کاربر چه اتفاقی می‌افتد، می‌توانید بقیه‌ی مکالمه‌ی اکشن خود را بسازید. Spelling Practice چهار صحنه دارد و شما باید هر صحنه را قبل از اجرا فعال کنید. رایج‌ترین روش برای فعال کردن یک صحنه، پیکربندی اکشن شما است به طوری که وقتی کاربر با یک هدف کاربر در یک صحنه مطابقت دارد، آن هدف باعث انتقال به صحنه‌ی دیگری شده و آن را فعال کند.

انتقال از فراخوانی اصلی به صحنه شروع

در این بخش، شما یک صحنه جدید به نام Start ایجاد می‌کنید که یک اعلان به کاربر ارسال می‌کند و از او می‌پرسد که آیا مایل به شروع بازی Spelling Practice است یا خیر. همچنین یک گذار از فراخوانی اصلی به صحنه Start جدید اضافه می‌کنید.

برای ایجاد این صحنه و اضافه کردن یک گذار به آن، این مراحل را دنبال کنید:

  1. در منوی ناوبری بالا روی «توسعه» کلیک کنید. سپس، در منوی ناوبری سمت چپ روی «فراخوان اصلی» کلیک کنید.
  2. در بخش Transition در سمت راست، روی منوی کشویی کلیک کنید، سپس در فیلد متنی Start تایپ کنید.

dd4f1807a57f794d.png

  1. روی افزودن کلیک کنید. این کار صحنه‌ای به نام Start ) ایجاد می‌کند و به اکشن می‌گوید که پس از نمایش پیام خوشامدگویی به کاربر، به صحنه Start منتقل شود.
  2. برای نمایش لیست صحنه‌ها، روی صحنه‌ها در نوار ناوبری سمت چپ کلیک کنید.
  3. در قسمت Scenes ، روی Start کلیک کنید تا صحنه 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. در نوار ناوبری، روی Test کلیک کنید تا به شبیه‌ساز هدایت شوید.
  2. برای آزمایش عملکرد خود در شبیه‌ساز، عبارت Talk to Spelling Practice را در فیلد ورودی تایپ کنید.
  3. Enter را فشار دهید. اقدام شما باید با اعلان Main invocation و اعلان صحنه Start اضافه شده، "به تمرین املا خوش آمدید. از الفبای آوایی برای هجی کردن کلمه استفاده کنید. به عنوان مثال alpha برای a، bravo برای b، charlie برای c و غیره. آیا می‌خواهید ادامه دهید؟" پاسخ دهد .

تصویر زیر این تعامل را نشان می‌دهد:

338c9570b02a618e.png

  1. برای پاسخ به سوال، روی تراشه پیشنهاد Yes یا No یا Help with Phonetics کلیک کنید. (همچنین می‌توانید بگویید «بله» یا «خیر» یا «کمک در مورد آواشناسی» یا Yes یا No یا Help with Phonetics را در قسمت ورودی وارد کنید.)

وقتی به درخواست پاسخ می‌دهید، اکشن شما با پیامی مبنی بر اینکه نمی‌تواند ورودی شما را درک کند، پاسخ می‌دهد: «ببخشید، متوجه نشدم. می‌توانید دوباره امتحان کنید؟» از آنجایی که هنوز اکشن خود را برای درک و پاسخ به ورودی‌های «بله» یا «خیر» پیکربندی نکرده‌اید، اکشن شما ورودی شما را با یک هدف NO_MATCH مطابقت می‌دهد.

به طور پیش‌فرض، هدف سیستمی NO_MATCH پاسخ‌های عمومی ارائه می‌دهد، اما می‌توانید این پاسخ‌ها را طوری تنظیم کنید که به کاربر نشان دهد ورودی او را متوجه نشده‌اید. دستیار پس از اینکه سه بار نتواند ورودی کاربر را مطابقت دهد، مکالمه کاربر را با اقدام شما پایان می‌دهد.

افزودن مفاهیم no و فونتیک

اکنون که کاربران می‌توانند به سوالی که اکشن شما مطرح می‌کند پاسخ دهند، می‌توانید اکشن خود را طوری پیکربندی کنید که پاسخ‌های کاربران ( "بله" یا "خیر" یا "کمک در مورد آواشناسی" ) را درک کند. در بخش‌های بعدی، شما اهداف کاربری ایجاد می‌کنید که با گفتن "بله" یا "خیر" یا "کمک در مورد آواشناسی" توسط کاربر مطابقت دارند و این اهداف را به صحنه Start اضافه می‌کنید. ما از هدف سیستمی yes استفاده خواهیم کرد و اهداف دیگری ایجاد خواهیم کرد.

no قصد و نیتی ایجاد نکنید

حالا، باید یک no intent» ایجاد کنید تا کاربر را در زمانی که نمی‌خواهد بازی را انجام دهد، درک کند و به او پاسخ دهد. برای ایجاد این «intent»، این مراحل را دنبال کنید:

  1. در نوار ناوبری روی «توسعه» کلیک کنید.
  2. برای باز کردن لیست اهداف ، روی اهداف سفارشی در نوار ناوبری کلیک کنید.
  3. روی علامت + (به علاوه) در انتهای لیست intentها کلیک کنید. نام intent جدید را no دهید و Enter را بزنید.
  4. برای باز کردن صفحه no قصد، روی «نه» کلیک کنید.
  5. در بخش افزودن عبارات آموزشی ، روی کادر متن «عبارت را وارد کنید» کلیک کنید و عبارات زیر را وارد کنید:
  • No
  • N
  • I don't want
  • nope

۹۸b0c9a7b67ea9b9.png

  1. روی ذخیره کلیک کنید.

no قصدی به صحنه Start اضافه نکنید

حالا، اکشن می‌تواند بفهمد که کاربر چه زمانی «نه» یا چیزی شبیه به «نه» را بیان می‌کند، مثلاً «نه» . شما باید قصد کاربر از no » را به صحنه Start اضافه کنید، زیرا کاربر در حال پاسخ دادن به اعلان Start است (« به تمرین املا خوش آمدید. از الفبای آوایی برای هجی کردن کلمه استفاده کنید. برای مثال، آلفا برای الف، براوو برای ب، چارلی برای ج و غیره. آیا می‌خواهید ادامه دهید؟» ).

برای افزودن این intent به صحنه Start ، مراحل زیر را دنبال کنید:

  1. روی صحنه شروع در نوار ناوبری کلیک کنید.
  2. روی علامت + (به‌علاوه) در صحنه Start کنار گزینه مدیریت قصد کاربر، کلیک کنید.
  3. در بخش Intent ، از منوی کشویی گزینه خیر را انتخاب کنید.

51f752e78c8b4942.png

  1. روی ارسال پیام‌ها کلیک کنید و فیلد speech را با متن زیر به‌روزرسانی کنید: Good Bye .

کد موجود در ویرایشگر شما باید شبیه قطعه کد زیر باشد:

candidates:
  - first_simple:
      variants:
        - speech: >-
             Goodbye.
  1. در بخش انتقال ، از منوی کشویی، پایان مکالمه را انتخاب کنید.
  2. روی ذخیره کلیک کنید.

تست no قصد در شبیه‌ساز

در این مرحله، اکشن شما متوجه می‌شود که کاربر چه زمانی نمی‌خواهد بازی را انجام دهد و پاسخ مناسب را برمی‌گرداند.

برای آزمایش این intent در شبیه ساز، مراحل زیر را دنبال کنید:

  1. در نوار پیمایش، روی «آزمون» کلیک کنید.
  2. عبارت Talk to Spelling Practice در فیلد ورودی تایپ کنید و Enter را فشار دهید.
  3. در فیلد ورودی، No را تایپ کنید و Enter را فشار دهید. یا می‌توانید روی تراشه‌ی بدون پیشنهاد کلیک کنید.

7727a456b522f31b.png

افزودن اینتنت سیستم YES به صحنه Start

حالا، ما قصد داریم که اینتنت سیستمی "بله" را به صحنه Start اضافه کنیم، زیرا کاربر به اعلان Start پاسخ مثبت می‌دهد (" به تمرین املا خوش آمدید. از الفبای آوایی برای هجی کردن کلمه استفاده کنید. برای مثال alpha برای a، bravo برای b، charlie برای c و غیره. آیا می‌خواهید ادامه دهید؟" ).

برای افزودن این قصد کاربر به صحنه Start ، این مراحل را دنبال کنید:

  1. روی صحنه شروع در نوار ناوبری کلیک کنید.
  2. روی علامت + (به‌علاوه) در صحنه Start کنار گزینه User intent handling کلیک کنید.
  3. در قسمت «تمام اهداف سیستم»، در منوی کشویی «هدف»، گزینه «بله» را انتخاب کنید.

f6cbe789cde49e8f.png

  1. روی «فراخوانی وب‌هوک» کلیک کنید و کادر متنی event handler را با تابعی که قبلاً ایجاد کرده‌اید به‌روزرسانی کنید: getSpellingWordList
  2. در بخش «گذار» ، روی منوی کشویی کلیک کنید و «پایان مکالمه» را انتخاب کنید.
  3. روی ذخیره کلیک کنید.

تست قصد YES در شبیه‌ساز

در این مرحله، اکشن شما متوجه می‌شود که کاربر چه زمانی می‌خواهد بازی را انجام دهد و پاسخ مناسب را برمی‌گرداند.

برای آزمایش این intent در شبیه ساز، مراحل زیر را دنبال کنید:

  1. در نوار پیمایش، روی «آزمون» کلیک کنید.
  2. برای آزمایش عملکرد خود در شبیه‌ساز، عبارت Talk to Spelling Practice در فیلد ورودی تایپ کنید و Enter را فشار دهید.
  3. در فیلد ورودی، Yes را تایپ کنید و Enter را فشار دهید. یا، روی تراشه پیشنهاد Yes کلیک کنید.

اکشن شما لیستی از تمام کلمات تمرین املا را دریافت کرده و آنها را در جلسه ذخیره می‌کند. سپس اکشن شما جلسه را پایان می‌دهد زیرا شما گزینه End conversation را برای هدف YES انتخاب کرده‌اید.

ایجاد هدف Phonetics

برای ایجاد هدف Phonetics ، این مراحل را دنبال کنید:

  1. در نوار ناوبری روی «توسعه» کلیک کنید.
  2. برای باز کردن لیست اهداف ، روی اهداف سفارشی در نوار ناوبری کلیک کنید.
  3. روی علامت + (به علاوه) در انتهای لیست intentها کلیک کنید. phonetics intent جدید را نامگذاری کنید و Enter فشار دهید.
  4. برای باز کردن صفحه phonetics اینتنت، روی phonetics اینتنت کلیک کنید.
  5. در بخش افزودن عبارات آموزشی، روی کادر متنی «عبارت را وارد کنید» کلیک کنید و عبارات زیر را وارد کنید:
  • how do I spell words
  • phonetics
  • help me with phonetics
  • phonetic alphabet

۱۴۵۵bdfca8dae46.png

  1. روی ذخیره کلیک کنید.

افزودن هدف phonetics به صحنه Start

اکنون، اکشن می‌تواند بفهمد که کاربر چه زمانی قصد «آواشناسی» را بیان می‌کند. می‌توانید قصد کاربر phonetics را به صحنه Start اضافه کنید، زیرا کاربر در حال پاسخ به اعلان Start است (« به تمرین املا خوش آمدید. از الفبای آواشناسی برای هجی کردن کلمه استفاده کنید. برای مثال alpha برای a، bravo برای b، charlie برای c و غیره. آیا می‌خواهید ادامه دهید؟» ).

برای افزودن این قصد کاربر به صحنه Start ، این مراحل را دنبال کنید:

  1. روی صحنه شروع در نوار ناوبری کلیک کنید.
  2. روی علامت + (به‌علاوه) در صحنه Start کنار گزینه مدیریت قصد کاربر، کلیک کنید.
  3. فونتیک را در منوی کشویی intent انتخاب کنید.

67ee2e08000b2aee.png

  1. در بخش انتقال ، روی منوی کشویی کلیک کنید و پایان مکالمه را انتخاب کنید.
  2. روی ذخیره کلیک کنید.

انتقال از صحنه شروع به صحنه املا

در این بخش، شما یک صحنه جدید به نام Spelling ایجاد می‌کنید که به کاربر اعلانی برای هجی کردن کلمه با استفاده از الفبای فونتیک ارسال می‌کند.

برای ایجاد این صحنه و اضافه کردن یک گذار به آن، این مراحل را دنبال کنید:

  1. در نوار ناوبری بالا روی «توسعه» کلیک کنید. سپس، در نوار ناوبری سمت چپ روی «شروع صحنه» کلیک کنید.
  2. در بخش مدیریت قصد کاربر ، روی when actions.intent.YES is matched کلیک کنید و در سمت راست در بخش انتقال ، روی منوی کشویی کلیک کنید و در فیلد متن، Spelling تایپ کنید.
  3. روی افزودن کلیک کنید. این کار صحنه‌ای به نام Spelling ایجاد می‌کند و به اکشن می‌گوید که پس از تطبیق با هدف YES، به صحنه Spelling منتقل شود.
  4. برای نمایش لیست صحنه‌ها، در نوار ناوبری سمت چپ، گزینه‌ی «صحنه‌ها» را باز کنید.
  5. در قسمت صحنه‌ها ، روی املا کلیک کنید تا صحنه‌ی Spelling را ببینید.
  6. در بخش «ورود» در صحنه‌ی Spelling ، روی + کلیک کنید.
  7. روی «فراخوانی وب‌هوک» کلیک کنید و در کادر متن مدیریت رویداد، عبارت getSpellingWord را وارد کنید.
  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. برای باز کردن لیست اهداف ، روی اهداف سفارشی در نوار ناوبری کلیک کنید.
  3. روی علامت + (به علاوه) در انتهای لیست intentها کلیک کنید. نام intent جدید را repeat و Enter را بزنید.
  4. برای باز کردن صفحه definition intent، روی repeat intent کلیک کنید.
  5. در بخش افزودن عبارات آموزشی ، روی کادر متنی «عبارت را وارد کنید» کلیک کنید و عبارات زیر را وارد کنید:
  • 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 کنار گزینه‌ی «مدیریت قصد کاربر» کلیک کنید.
  3. در منوی کشویی intent، گزینه repeat را انتخاب کنید.

5cfd623b25bedbed.png

  1. گزینه «فراخوانی وب‌هوک» را تیک بزنید و در کادر متنی مدیریت رویداد، عبارت «repeatSpellingWord» را وارد کنید تا تعریف کلمه را دریافت کنید.
  2. ارسال پیام‌ها را علامت بزنید.
  3. جمله‌ی موجود در فیلد speech ( Enter the response that users will see or hear... ) را با '' جایگزین کنید. اعلان اصلی توسط وب‌هوک پر خواهد شد.

اضافه کردن چیپ‌های پیشنهادی به «وقتی تکرار مطابقت دارد»

  1. در بخش « هنگامی که تکرار مطابقت دارد » در بخش «مدیریت قصد کاربر»، روی «پیشنهادات» در پایین ویرایشگر کد کلیک کنید. این عمل سه تراشه پیشنهاد اضافه می‌کند.
  2. در فیلد title ، Suggested Response » را با 'Skip' جایگزین کنید.
  3. با استفاده از همان قالب‌بندی، به صورت دستی یک تراشه پیشنهادی با عنوان 'Quit' اضافه کنید. کد شما باید شبیه قطعه کد زیر باشد:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

ab40e4b0c432b97c.png

  1. روی ذخیره کلیک کنید.

ایجاد definition هدف

برای ایجاد هدف definition ، مراحل زیر را دنبال کنید:

  1. در نوار ناوبری روی «توسعه» کلیک کنید.
  2. برای باز کردن لیست اهداف ، روی اهداف سفارشی در نوار ناوبری کلیک کنید.
  3. روی علامت + (به علاوه) در انتهای لیست intentها کلیک کنید. definition intent جدید را نامگذاری کرده و Enter را فشار دهید.
  4. برای باز کردن صفحه definition هدف، روی هدف 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. روی ذخیره کلیک کنید.

افزودن قصد definition به صحنه Spelling

اکنون، اکشن می‌تواند بفهمد که کاربر چه زمانی قصد «تعریف» را بیان می‌کند. می‌توانید قصد definition کاربر را به صحنه Spelling اضافه کنید، زیرا کاربر در حال پاسخ به اعلان Spellingکلمه را با استفاده از الفبای آوایی هجی کنید ») است.

برای افزودن این قصد کاربر به صحنه Spelling ، این مراحل را دنبال کنید:

  1. روی صحنه‌ی املا در نوار ناوبری کلیک کنید.
  2. روی علامت + (به‌علاوه) در صحنه‌ی Spelling کنار گزینه‌ی «مدیریت قصد کاربر» کلیک کنید.
  3. تعریف را در منوی کشویی intent انتخاب کنید.

646bdcac3ad3eb0c.png

  1. گزینه «Call your webhook» را تیک بزنید و عبارت definitionOfSpellingWord را در کادر متنی مدیریت رویداد وارد کنید تا تعریف کلمه را دریافت کنید.
  2. ارسال پیام‌ها را علامت بزنید.
  3. جمله‌ی موجود در فیلد speech ( Enter the response that users will see or hear... ) را با ''` جایگزین کنید. اعلان اصلی توسط وب‌هوک پر خواهد شد.

تراشه‌های پیشنهادی را به پاسخ وب‌هوک اضافه کنید

  1. در صحنه Start ، روی پیشنهادات زیر ویرایشگر کد کلیک کنید. این عمل سه تراشه پیشنهاد اضافه می‌کند.
  2. در فیلد title ، Suggested Response » را با 'Skip' جایگزین کنید.
  3. با استفاده از همان قالب‌بندی، به صورت دستی یک تراشه پیشنهادی با عنوان 'Quit' اضافه کنید. کد شما باید شبیه قطعه کد زیر باشد:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

25227545839d933f.png

  1. روی ذخیره کلیک کنید.

ایجاد قصد skip

برای ایجاد قصد skip ، این مراحل را دنبال کنید:

  1. در نوار ناوبری روی «توسعه» کلیک کنید.
  2. برای باز کردن لیست intentها، روی Intents در نوار ناوبری کلیک کنید.
  3. روی علامت + (به علاوه) در انتهای لیست intentها کلیک کنید. نام intent جدید را skip و Enter را بزنید.
  4. برای باز کردن صفحه مربوط به رد کردن هدف، روی گزینه skip skip کلیک کنید.
  5. در بخش افزودن عبارات آموزشی ، روی کادر متنی «عبارت را وارد کنید» کلیک کنید و عبارات زیر را وارد کنید:
  • next word
  • go next
  • next
  • skip
  • skip word

d1c4908a3d7882f8.png

  1. روی ذخیره کلیک کنید.

افزودن قصد Skip به صحنه Spelling

اکنون، اکشن می‌تواند بفهمد که کاربر چه زمانی قصد «رد کردن» را بیان می‌کند. می‌توانید قصد skip کاربر را به صحنه‌ی Spelling اضافه کنید، زیرا کاربر در حال پاسخ به پیام Spellingکلمه را با استفاده از الفبای آوایی هجی کنید ») است.

برای افزودن این قصد کاربر به صحنه Spelling ، این مراحل را دنبال کنید:

  1. روی صحنه‌ی املا در نوار ناوبری کلیک کنید.
  2. روی علامت + (به‌علاوه) در صحنه‌ی Spelling کنار User intent handlinglin g کلیک کنید.
  3. در منوی کشویی intent، گزینه skip (رد شدن) را انتخاب کنید.

5465f97542217964.png

  1. در بخش Transition در سمت راست، روی منوی کشویی کلیک کنید و Spelling انتخاب کنید.

c8072485ca82bd3f.png

  1. روی ذخیره کلیک کنید.

ایجاد قصد quit

برای ایجاد قصد Quit ، این مراحل را دنبال کنید:

  1. در نوار ناوبری روی «توسعه» کلیک کنید.
  2. برای باز کردن لیست intentها، روی Intents در نوار ناوبری کلیک کنید.
  3. Click + (plus sign) at the end of the list of intents. Name the new intent Quit and press Enter .
  4. Click the Quit intent to open the definition intent page.
  5. In the Add training phrases section, click the Enter Phrase text box and enter the following phrases:
  • I quit
  • Goodbye
  • Cancel
  • Exit
  • Quit

9916f77b8766541e.png

  1. روی ذخیره کلیک کنید.

Add Quit intent to Spelling scene

Now, the Action can understand when a user is expressing a "quit" intent. You can add the quit user intent to the Spelling scene, since the user is responding to the Spelling prompt (" Spell the word using phonetic alphabet ").

To add this user intent to the Spelling scene, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene next to User intent handling .
  3. Select quit in the intent drop-down.

5f62fb18a3653d66.png

  1. In the Transition section on the right, click the drop-down menu and select End conversation . 1ffbe35a7bbbb4b0.png
  2. روی ذخیره کلیک کنید.

Create phonetic_alphabet type

In this section, you create a new type called phonetic_alphabet , which specifies the phonetic alphabet options the users can choose to spell the word. You can also define a few synonyms for these options in case a user says something similar. In a later section, you add the phonetic_alphabet type to a slot to specify that you want to obtain the user's response.

To create the phonetic_alphabet type, follow these steps:

  1. Click Develop in the navigation.
  2. Click the + (plus sign) under Types .
  3. Type phonetic_alphabet and press Enter .
  4. Click phonetic_alphabet to open the options.
  5. In the What kind of values will this Type support? section, select the Words and synonyms option
  6. Enter the following entries and corresponding values in the Add entries section:

الف

alpha, apple, amsterdam

ب

bravo, butter, baltimore

ج

charlie, cat, casablanca

د

delta, dog, denmark

ای

echo, edward, edison

ف

foxtrot, fox, florida

گرم

golf, george, gallipoli

ح

hotel, harry, havana

من

india, ink, italia

جی

juliette, johnny, jerusalem

ک

kilo, king, kilogramme

ل

lima, love, london

متر

mike, money, madagascar

ن

november, new york, nancy

ای

oscar, orange, oslo

ص

papa, paris, peter

س

quebec, queen

ر

romeo, roma, robert

ها

sierra, sugar, santiago

تی

tango, tommy, tripoli

تو

uniform, umbrella, uncle

وی

victor, vinegar, Valencia

دبلیو

whiskey, william, washington

ایکس

اشعه ایکس

ی

yankee, yellow, yorker

ز

zulu, zebra, zurich

Your key-value table should look like the following:

5b5a5cd9fa557e1b.png

  1. روی ذخیره کلیک کنید.

پیکربندی پر کردن اسلات

Next, you need to configure slot filling in the Spelling scene. To configure the slot-filling logic, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene for Slot filling .
  3. In the Enter slot name field, add userresponse as the slot name.
  4. In the Select type drop-down, select phonetic_alphabet as the slot type.
  5. Check This slot accepts a list of values
  6. Check This slot is required .
  7. Select Customize slot value writeback option and enter userresponse in the session parameter textbox.

ba57a419877a07f3.png

  1. روی ذخیره کلیک کنید.

Add Condition to Spelling screen

To add Condition to the Spelling scene, follow these steps:

  1. Click the Spelling scene in the navigation.
  2. Click the + (plus sign) in the Spelling scene next to Condition.
  3. Enter scene.slots.status == "FINAL" as condition
  4. Check the Call your webhook and enter verifySpellingWord in the event handler textbox to verify the user response.
  5. Check Send prompts.
  6. Replace the sentence in the speech field ( Enter the response that users will see or hear... ) with {} . The actual prompt will be populated by webhook.

Add suggestion chips to the webhook response

  1. In the Start scene, click suggestions below the code editor. This action adds three suggestion chips.
  2. In the title field, replace Suggested Response with 'Next' .
  3. Using the same formatting, manually add a suggestion chip titled 'Quit' .Your code should look like the following snippet:
suggestions:
      - title: 'Next'
      - title: 'Quit'

ac3d7a9366ebc1b1.png

  1. روی ذخیره کلیک کنید.

12. Test Spelling Practice in the simulator

برای آزمایش اکشن خود در شبیه‌ساز، مراحل زیر را دنبال کنید:

  1. In the navigation bar, click Test to take you to the simulator.
  2. To test your Action in the simulator, type Talk to Spelling Practice in the Input field.
  3. Press Enter . Your Action should respond with the Main invocation prompt and the added Start scene prompt, "Welcome to Spelling Practice. Use the phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?" .
  4. Say Yes to continue
  5. Simulator will play a word sound to spell
  6. You can spell the word using phonetic alphabets. For example, for better say or type "bravo echo tango tango echo romeo"
  7. Simulator will respond with either the correct or incorrect response.
  8. Say next to continue to the next word or say quit to exit the game loop.

۱۳. تبریک

Congratulations, you've successfully built your game, Spelling Practice !

You now know the key steps required to build a game using Cloud Firestore, Cloud Functions, and Google Assistant Action Builder.

آنچه را که پوشش دادید

  • How to interact with Cloud Firestore
  • نحوه استفاده از اسلات‌ها برای جمع‌آوری داده‌ها از کاربر
  • نحوه پردازش ورودی کاربر و بازگرداندن پاسخ
  • نحوه استفاده از شرط‌ها برای افزودن منطق به صحنه
  • نحوه اضافه کردن حلقه بازی

Additional learning resources

برای یادگیری نحوه ساخت اکشن‌ها برای دستیار گوگل می‌توانید این منابع را بررسی کنید:

پروژه خود را پاکسازی کنید [توصیه می‌شود]

برای جلوگیری از هزینه‌های احتمالی، توصیه می‌شود پروژه‌هایی را که قصد استفاده از آنها را ندارید، حذف کنید. برای حذف پروژه‌هایی که در این آزمایشگاه کد ایجاد کرده‌اید، این مراحل را دنبال کنید:

  1. To delete your Firebase project and resources, complete the steps listed in the Shutting down (deleting) projects section.

Caution: Ensure that you select the correct project for deletion on the Google Cloud Console's Settings page.

  1. Optional: To immediately remove your project from the Actions console, complete the steps listed in the Deleting a project section. If you don't complete this step, your project will automatically be removed after approximately 30 days.

Follow @ActionsOnGoogle & @Firebase on Twitter to stay tuned to our latest announcements and tweet to #GoogleIO to share what you have built!