1. نظرة عامة
تتيح لك منصة المطوّرين في "مساعد Google" إنشاء برامج لتوسيع وظائف "مساعد Google"، وهو مساعد شخصي افتراضي، على أكثر من مليار جهاز، بما في ذلك مكبرات الصوت الذكية والهواتف والسيارات وأجهزة التلفزيون وسماعات الرأس وغيرها. يتفاعل المستخدمون مع "مساعد Google" في محادثة لإنجاز مهام، مثل شراء البقالة أو حجز رحلة. بصفتك مطوّرًا، يمكنك استخدام "منصة المطوّرين في مساعد Google" لإنشاء تجارب محادثة ممتعة وفعّالة بين المستخدمين وخدمة التنفيذ التابعة لجهة خارجية وإدارتها بسهولة.
يتناول هذا الدرس العملي المفاهيم المتوسطة المستوى لتطوير التطبيقات باستخدام "مساعد Google" وCloud Functions وCloud Firestore. في هذا الدرس العملي، ستنشئ لعبة باسم "تدريب على التهجئة" تستخدم "مساعد Google" لطلب تهجئة الكلمات من المستخدمين.
ما ستنشئه
في هذا الدرس العملي، ستنشئ لعبة متطورة تتضمّن الوظائف التالية:
- تتلقّى هذه السمة ردودًا إملائية من المستخدم، وتعدّل الطلبات الحوارية استنادًا إلى القيمة.
- الردّ بتلميحات ذات صلة بطريقة كتابة الكلمة، مثل تعريفها أو تكرارها
- إنشاء حلقة ألعاب ليتمكّن المستخدم من التفاعل مع "مساعد Google" مرة أخرى بعد تهجئة الكلمة
قبل البدء في إنشاء إجراء مباشر، يمكنك التفاعل معه على جهازك المزوّد بخدمة "مساعد Google" من خلال قول "Ok Google، أريد التحدّث مع تطبيق Spelling Practice". يبدو المسار التلقائي خلال هذا الإجراء للمستخدم العائد على النحو التالي:
عند الانتهاء من هذا الدرس البرمجي، سيتضمّن الإجراء المكتمل مسار المحادثة التالي:

ما ستتعلمه
- كيفية التفاعل مع Cloud Firestore
- كيفية استخدام الخانات لجمع البيانات من المستخدم
- كيفية معالجة إدخال المستخدم وعرض ردّ
- كيفية استخدام الشروط لإضافة منطق إلى مشهد
- كيفية إضافة حلقة ألعاب
المتطلبات
تشمل المتطلبات الأساسية لهذا الدرس العملي ما يلي:
- متصفّح ويب، مثل Google Chrome
- بيئة تطوير متكاملة لكتابة دوال Cloud Functions
- طريقة دفع يستخدم برنامج التدريب العملي هذا "وظائف السحابة الإلكترونية لبرنامج Firebase" التي تتطلّب أن يكون مشروعك ضمن خطة أسعار Blaze في Firebase ( مزيد من المعلومات).
- وحدة طرفية لتشغيل أوامر shell
- Node.js 10 أو إصدار أحدث
2. الحصول على رمز الدوال
استنسِخ مستودع GitHub من سطر الأوامر:
$ git clone https://github.com/FirebaseExtended/codelab-actions-firestore
3- إنشاء مشروع على Firebase وإعداد تطبيقك
إنشاء مشروع Firebase
- سجِّل الدخول إلى Firebase.
- في "وحدة تحكّم Firebase"، انقر على إضافة مشروع (أو إنشاء مشروع)، ثمّ أطلق اسمًا على مشروعك على Firebase
Spelling-Practice.

- انقر على خيارات إنشاء المشروع. اقبَل بنود Firebase إذا طُلب منك ذلك. تخطّي إعداد "إحصاءات Google" لأنّك لن تستخدمها لهذا التطبيق
لمزيد من المعلومات عن مشاريع Firebase، اطّلِع على مقالة التعرّف على مشاريع Firebase.
الترقية إلى خطة أسعار Blaze
لاستخدام Cloud Functions for Firebase، عليك ترقية مشروعك على Firebase إلى خطة أسعار Blaze، ما يعني أنّك ستربط حساب فوترة على Google Cloud بمشروعك. يتطلّب ذلك تقديم بطاقة ائتمان أو طريقة دفع أخرى.
لا يزال بإمكان جميع مشاريع Firebase، بما في ذلك تلك التي تستخدم خطة Blaze، الاستفادة من حصص الاستخدام بدون تكلفة في Cloud Functions. ستندرج الخطوات الموضّحة في هذا الدرس التطبيقي حول الترميز ضمن حدود الاستخدام بدون تكلفة. ومع ذلك، ستظهر لك رسوم صغيرة ( حوالي 0.03 دولار أمريكي) من Cloud Storage، الذي يُستخدَم لاستضافة صور إصدارات Cloud Functions.
4. تثبيت Firebase CLI
تتيح لك واجهة سطر الأوامر (CLI) في Firebase نشر "وظائف السحابة الإلكترونية".
تتوفّر عدة خيارات لتثبيت واجهة سطر الأوامر (CLI) في Firebase، وذلك حسب نظام التشغيل وحالة الاستخدام. توضّح الخطوات التالية الخيار الأكثر شيوعًا إذا كنت تستخدم أيضًا Cloud Functions.
- تأكَّد من تثبيت npm الذي يأتي عادةً مع Node.js.
- ثبِّت واجهة سطر الأوامر أو رقِّها من خلال تنفيذ أمر npm التالي:
$ npm -g install firebase-tools
- تأكَّد من تثبيت واجهة سطر الأوامر بشكل صحيح من خلال تنفيذ الأمر التالي:
$ firebase --version
تأكَّد من أنّ إصدار Firebase CLI هو 9.0.0 أو إصدار أحدث ليتضمّن جميع الميزات الحديثة المطلوبة في Cloud Functions. إذا لم يكن الأمر كذلك، شغِّل npm install -g firebase-tools للترقية كما هو موضّح أعلاه.
- امنح الإذن لواجهة سطر الأوامر (CLI) في Firebase من خلال تنفيذ الأمر التالي:
$ firebase login
- من دليل spelling-functions-start، يمكنك إعداد Firebase CLI لاستخدام مشروعك على Firebase. نفِّذ الأمر التالي، واختَر رقم تعريف مشروعك، ثم اتّبِع التعليمات. عندما يُطلب منك ذلك، يمكنك اختيار أي اسم مستعار، مثل
codelabمثلاً.
$ firebase use --add
5- دليل الدوال
ستضيف الآن وظائف باستخدام حزمة تطوير البرامج (SDK) الخاصة بمنصة Firebase لخدمة Cloud Functions من أجل إنشاء الخلفية للعبة Spelling Practice.
تتيح لك Cloud Functions تشغيل الرموز البرمجية في السحابة الإلكترونية بدون الحاجة إلى إعداد خادم. سيوضّح لك هذا الدرس العملي كيفية إنشاء دوال تتفاعل مع أحداث Firebase Authentication وCloud Storage وFirebase Realtime Database. لنبدأ بالمصادقة.
عند استخدام حزمة تطوير البرامج (SDK) الخاصة بوظائف Firebase السحابية، سيتم تخزين رمز الوظائف ضِمن الدليل functions (تلقائيًا). لتسهيل الأمر عليك، أنشأنا مسبقًا الملف functions/index.js الذي سيتم وضع الرمز فيه. يمكنك الاطّلاع على الدليل functions قبل المتابعة.
$ cd functions $ ls
إنّ رمز الدوال هو أيضًا تطبيق Node.js، وبالتالي يحتاج إلى package.json يقدّم بعض المعلومات عن تطبيقك ويسرد التبعيات.
إذا لم تكن على دراية بـ Node.js، ننصحك بالاطّلاع على مزيد من المعلومات حوله قبل مواصلة هذا الدرس العملي.
يتضمّن الملف package.json بالفعل اثنين من التبعيات المطلوبة: حزمة تطوير البرامج (SDK) لخدمة "وظائف السحابة الإلكترونية" من Firebase وحزمة تطوير البرامج (SDK) للمشرف من Firebase. لتثبيتها على الجهاز، شغِّل 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.
عليك أولاً استيراد الوحدات المطلوبة، ثم كتابة أربع دوال بدلاً من TODOs. انتقِل إلى الخطوة التالية من الدرس العملي لاستيراد الوحدات.
6. استيراد الوحدات المطلوبة
يتطلّب هذا الدرس التطبيقي حول الترميز ثلاث وحدات.
- تتيح لنا الوحدة
firebase-functionsكتابة المشغّلات لدوال Cloud Functions - تتيح لنا الوحدة
firebase-adminاستخدام منصة Firebase على خادم لديه إذن وصول المشرف، وذلك مثلاً للكتابة إلى Cloud Firestore. - تنفّذ مكتبة التنفيذ Node.js في حزمة تطوير البرامج (SDK) الخاصة بـ "المهام" معالِجات حزمة تطوير البرامج (SDK) الخاصة بـ "المهام" في "مساعد Google".
- ثبِّت Actions SDK من خلال تنفيذ أمر npm التالي:
$ npm install @assistant/conversation
- في ملف
index.js، استبدِل أول مهمة TODO بما يلي.
تستورد هذه التغييرات كل وحدة من الوحدات المطلوبة.
يمكن أيضًا ضبط حزمة تطوير البرامج (SDK) للمشرف في Firebase تلقائيًا عند نشرها في بيئة 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.
لنضِف الآن منطق النشاط التجاري باستخدام الدوال لدعم "إجراءات مساعد Google".
7. إنشاء دوال
الحصول على تعريفات الكلمات وكتابتها في Cloud Firestore
ستستخدم واجهة برمجة التطبيقات 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 Function يتم تشغيلها كلما تم إنشاء مستند جديد في Cloud Firestore. سيتم استدعاء واجهة برمجة التطبيقات dictionaryapi.dev للحصول على تعريفات الكلمات من خلال الدالة 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 Function تسترد قائمة بكلمات تدريبية على الإملاء من Cloud Firestore لـ "مساعد Google". لهذا الغرض، نستخدم معالج التطبيقات.
في ملف index.js، استبدِل TODO الخاص بـ getSpellingWordList بما يلي.
تُعدّ إضافة هذه الدالة إلى app.handle الخاص طريقة لإتاحة الدالة من "مساعد Google".
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;
});
});
})
الحصول على كلمة من جلسة "مساعد Google"
يمكنك كتابة Cloud Function تعرض الكلمة التالية في قائمة الكلمات.
في ملف index.js، استبدِل TODO الخاص بـ getSpellingWord بما يلي:
index.js
// Returns a spelling practice word to Google Assistant and uses Speech Synthesis Markup Language (SSML) to format the response
app.handle('getSpellingWord', conv => {
if (!conv.session.params.vocabWord.empty) {
conv.session.params.vocabWordIndex+=1;
const ssml = '<speak>' +
'<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word.</audio> ' +
'</speak>';
conv.add(ssml);
}
else
conv.add('Great job! You completed the Spelling practice');
});
السماح للعبة بتكرار الكلمة
يمكنك كتابة Cloud Function تكرّر الكلمة الحالية في اللعبة.
في ملف index.js، استبدِل TODO الخاص بـ repeatSpellingWord بما يلي:
index.js
// Returns current spelling word
app.handle('repeatSpellingWord', conv => {
if (!conv.session.params.vocabWord.empty) {
const ssml = '<speak>' +
'<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word. </audio> ' +
'</speak>';
conv.add(ssml);
}
else
conv.add('Great job! You completed the Spelling practice');
});
الحصول على تعريف الكلمة
يمكنك كتابة دالة Cloud Function تقدّم تعريف الكلمة الحالية في اللعبة.
في ملف index.js، استبدِل TODO الخاص بـ definitionOfSpellingWord بما يلي:
index.js
// Returns spelling word definition from Assistant session parameter
app.handle('definitionOfSpellingWord', conv => {
conv.add( 'It means ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].definition);
});
التحقّق من استجابة المستخدم المتعلقة بالتدقيق الإملائي
يمكنك كتابة Cloud Function تتحقّق من استجابة المستخدم بشأن كيفية تهجئة الكلمة الحالية في اللعبة.
في ملف index.js، استبدِل TODO الخاص بـ verifySpellingWord بما يلي:
index.js
// Verifies user spelling response
app.handle('verifySpellingWord', conv => {
try {
userResponse = conv.intent.params.userresponse.resolved.join("");
if (userResponse.toLowerCase() === conv.session.params.vocabWord[conv.session.params.vocabWordIndex].word.toLowerCase()) {
conv.add('You are correct. Say next to continue.');
}
else {
conv.add('Sorry, wrong answer. The correct answer is ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].answer + ' . Say next to continue.');
}
} catch (error) {
conv.add('Sorry. I did not understand your response' );
}
});
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
نشر جميع الدوال
لن تكون "وظائف السحابة الإلكترونية" نشطة إلا بعد نشرها على 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 ثم انقر على مشروع spelling-practice. افتح لوحة بيانات "الدوال" لعرض نقطة نهاية الدوال.

لقد أكملت إضافة جميع الوظائف المطلوبة. لننتقل الآن إلى إعداد Cloud Firestore.
8. تفعيل Cloud Firestore
عليك تفعيل Cloud Firestore.
في قسم إنشاء في وحدة تحكّم Firebase، انقر على Firestore. بعد ذلك، انقر على إنشاء قاعدة بيانات.

يتم التحكّم في الوصول إلى البيانات في Cloud Firestore من خلال "قواعد الأمان". عليك أولاً وضع بعض القواعد الأساسية على البيانات للبدء. انقر على Firestore، ثم في علامة التبويب "القواعد" في "وحدة تحكّم Firebase"، أضِف القواعد التالية، ثم انقر على نشر.
تمنع القواعد التالية المستخدمين غير المصادق عليهم من القراءة أو الكتابة، وذلك عن طريق حصر إمكانية الوصول إلى البيانات على المستخدمين الذين سجّلوا الدخول.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
//
// WARNING: These rules are insecure! We will replace them with
// more secure rules later in the codelab
//
allow read, write: if request.auth != null;
}
}
}
9. إضافة بيانات الكلمات الإملائية إلى Cloud Firestore
في هذه الخطوة، ستكتب بيانات الكلمات الإملائية في Cloud Firestore حتى تتمكّن من إنشاء قائمة بالكلمات لـ "مساعد Google" (واللعبة).
يتم تنظيم بيانات Cloud Firestore في مجموعات ومستندات وحقول ومجموعات فرعية. سيتم تخزين كل كلمة في اللعبة كمستند خاص بها في مجموعة ذات مستوى أعلى تُسمى wordlist. لكل مستند جديد في مجموعة Firestore، سيتم تشغيل الدالة createSpellingPracticeWord للحصول على تفاصيل الكلمة من خدمة Dictionary API.
إنشاء مجموعة Cloud Firestore
- في وحدة تحكّم Firebase، انتقِل إلى قسم Cloud Firestore.
- انقر على علامة الجمع بدء المجموعة.
- في مربّع النص رقم تعريف المجموعة، أدخِل
wordlist، ثم انقر على التالي.

بعد ذلك، سننشئ مستندًا للكلمة: اتفاقية
- في مربّع النص معرّف المستند، أدخِل
agreement. - في مربّع النص الحقل، أدخِل
word، وفي مربّع النص القيمة، أدخِلagreement. - انقر على حفظ.

عند إضافة هذا المستند إلى Cloud Firestore، سيؤدي ذلك إلى تشغيل الدالة createSpellingPracticeWord لجلب تفاصيل تعريف الكلمة. أضِف المزيد من الكلمات (مثل: رائع، سيارة، حقيقي، أخبر، أفضل، تنقّل، ...) من خلال إنشاء مستند جديد لكل كلمة.
10. إعداد "مساعد Google"
توضّح الأقسام التالية كيفية إعداد بيئة تطوير "مساعد Google" وإنشاء مشروع "الإجراءات".
التحقّق من إعدادات أذوناتك على Google
لاختبار الإجراء الذي تنشئه في هذا الدرس العملي، عليك تفعيل الأذونات اللازمة حتى يتمكّن المحاكي من الوصول إلى الإجراء. لتفعيل الأذونات، اتّبِع الخطوات التالية:
- انتقِل إلى صفحة عناصر التحكّم في النشاط.
- سجِّل الدخول باستخدام حسابك على Google، إذا لم يسبق لك إجراء ذلك.
- فعِّل الأذونات التالية:
- النشاط على الويب وفي التطبيقات
- ضمن النشاط على الويب وفي التطبيقات، ضَع علامة في المربّع بجانب تضمين سجلّ Chrome والأنشطة التي تتم على المواقع والتطبيقات والأجهزة التي تستخدم خدمات Google.

إنشاء مشروع "الإجراءات"
مشروع "الإجراءات" هو حاوية للإجراء. لإنشاء مشروع "أوامر Google" في هذا الدرس العملي، اتّبِع الخطوات التالية:
- افتح وحدة تحكّم الإجراءات.
- انقر على مشروع جديد.
- قبول بنود الخدمة

- اكتب أو اختَر
spelling-practice-codelabالذي أنشأته باستخدام "وحدة تحكّم Firebase". (الاسم مخصّص للرجوع إليه عند الحاجة. يمكنك لاحقًا ضبط اسم خارجي لمشروعك.)

- انقر على استيراد مشروع.
- في شاشة ما نوع الإجراء الذي تريد إنشاءه؟، اختَر بطاقة مخصّص.
- انقر على التالي.
- انقر على بطاقة مشروع فارغ.
- انقر على بدء الإنشاء.
- أدخِل تدريب على الإملاء في حقل الاسم المعروض وانقر على "حفظ".
يبدأ المستخدمون المحادثة مع "الإجراء" من خلال الاستدعاء. على سبيل المثال، يمكن للمستخدمين استدعاء مهمّتك من خلال قول عبارة مثل "Ok Google، أريد التحدّث مع تطبيق Spelling Practice"، حيث Spelling Practice هو الاسم المعروض.
يجب أن تتضمّن مهمّتك اسمًا معروضًا إذا كنت تريد نشرها في مرحلة الإنتاج، ولكن لا تحتاج إلى تحديد الاسم المعروض لاختبار مهمّتك. بدلاً من ذلك، يمكنك استخدام العبارة "التحدّث إلى تطبيق الاختبار" في المحاكي لتفعيل الإجراء.
ضبط إعدادات تنفيذ الطلبات
عليك ربط معالجات الأحداث في "وظائف السحابة الإلكترونية" التي كتبتها ونشرتها سابقًا في هذا الدرس العملي المبرمَج بـ "مساعد Google".
لإعداد عملية التنفيذ، اتّبِع الخطوات التالية:
- انقر على Webhook في قائمة التنقّل الجانبية.
- اختَر نقطة نهاية Https كخيار التنفيذ:

- أدخِل عنوان URL لنقطة نهاية الدالة في مربّع النص نقطة نهاية HTTPs، ثم انقر على حفظ.

في القسم التالي، ستخصّص الطلب الرئيسي في "وحدة تحكّم الإجراءات".
إعداد طلب التفعيل الرئيسي
عليك تعديل طلب التفعيل الرئيسي لتحديد ما يحدث بعد أن يفعّل المستخدم الإجراء.
يوفّر Actions Builder تلقائيًا طلبًا عامًا عند تفعيل طلب الاستدعاء ("ابدأ إنشاء الإجراء من خلال تحديد طلب الاستدعاء الرئيسي").
لتعديل الطلب الذي يرسله تطبيقك إلى المستخدم عندما يستدعي تطبيقك، اتّبِع الخطوات التالية:
- انقر على الاستدعاء الرئيسي في شريط التنقّل.

- ضَع علامة في المربّع
Call your webhookوأضِف اسم معالج الأحداثgetSpellingWordListفي مربّع النص. - في محرِّر الرموز، استبدِل النص في الحقل
speechبرسالة الترحيب التالية:Welcome to Spelling Practice
ملاحظة: يمكنك استخدام تنسيق YAML أو JSON لتعديل الطلبات.
- انقر على حفظ.
اختبار طلب التفعيل الرئيسي في المحاكي
توفّر وحدة تحكّم "الإجراءات" أداة على الويب لاختبار الإجراء، وهي المحاكي. تحاكي الواجهة الأجهزة والبرامج وإعداداتها، ما يتيح لك التحدّث مع "الإجراء" كما لو كان يعمل على شاشة ذكية أو هاتف أو مكبّر صوت أو KaiOS.
لاختبار عملية الاستدعاء الرئيسية للإجراء في المحاكي، اتّبِع الخطوات التالية:
- في شريط التنقّل العلوي، انقر على اختبار للانتقال إلى المحاكي.
- لاستدعاء الإجراء في المحاكي، اكتب
Talk to Spelling Practiceفي حقل الإدخال في أعلى يمين الصفحة، ثم اضغط على Enter في لوحة المفاتيح.

عندما تبدأ عملية الاستدعاء الرئيسية للإجراء، يردّ "مساعد Google" برسالة الترحيب المخصّصة. في هذه المرحلة، تنتهي المحادثة بعد أن يردّ "مساعد Google" برسالة ترحيب.
عرض سجلّات الأحداث
عندما تكون في علامة التبويب اختبار، تعرض اللوحة على يسار الشاشة سجلات الأحداث التي تعرض سجلّ المحادثات كسجلات أحداث. يعرض كل سجلّ أحداث الأحداث التي تحدث خلال دور المحادثة هذا. لعرض سجلّ الأحداث، انقر على الرمز الرمادي قبل الحدث.
تتضمّن مهمّتك حاليًا سجلّ أحداث واحدًا يعرض كلاً من طلب المستخدم ("التحدّث مع تطبيق Spelling Practice") وردّ مهمّتك. تعرض لقطة الشاشة التالية سجلّ أحداث مهمّتك:

11. إنشاء المحادثة الخاصة بـ "تمارين الإملاء"
بعد تحديد ما يحدث بعد أن يستدعي المستخدم الإجراء، يمكنك إنشاء بقية محادثة الإجراء. تتضمّن لعبة تدريب على الإملاء أربعة مشاهد، ويجب تفعيل كل مشهد قبل تشغيله. الطريقة الأكثر شيوعًا لتفعيل مشهد هي ضبط "الإجراء" بحيث يؤدي تطابق نية المستخدم مع مشهد معيّن إلى بدء الانتقال إلى مشهد آخر وتفعيله.
الانتقال من الاستدعاء الرئيسي إلى مشهد البداية
في هذا القسم، يمكنك إنشاء مشهد جديد باسم Start، والذي يرسل طلبًا إلى المستخدم يسأله عمّا إذا كان يريد بدء تشغيل Spelling Practice. يمكنك أيضًا إضافة انتقال من عملية الاستدعاء الرئيسية إلى المشهد الجديد Start.
لإنشاء هذا المشهد وإضافة انتقال إليه، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل العلوي. بعد ذلك، انقر على طلب العرض الرئيسي في شريط التنقّل الأيمن.
- في قسم الانتقال على يسار الصفحة، انقر على القائمة المنسدلة، ثم اكتب
Startفي حقل النص.

- انقر على إضافة. سيؤدي ذلك إلى إنشاء مشهد باسم
Start، وسيطلب من الإجراء الانتقال إلى المشهدStartبعد أن يقدّم الإجراء رسالة الترحيب إلى المستخدم. - انقر على المشاهد في شريط التنقّل الأيمن لعرض قائمة المشاهد.
- ضمن المشاهد، انقر على بدء للاطّلاع على مشهد
Start. - انقر على + في قسم عند الدخول من مشهد
Start. - انقر على إرسال الطلبات.
- استبدِل الجملة في الحقل
speech(Enter the response that users will see or hear...) بسؤال لطرحه على المستخدم:Use phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?
تقدّم شرائح الاقتراحات اقتراحات قابلة للنقر للمستخدم يعالجها الإجراء كمدخلات من المستخدم. في هذا القسم، يمكنك إضافة شرائح اقتراحات تظهر أسفل الطلب الذي أعددته للتو (Do you want to play
Spelling Practice
?) لمساعدة المستخدمين على الأجهزة التي تتضمّن شاشات.
لإضافة شرائح اقتراحات إلى طلب Start المشهد، اتّبِع الخطوات التالية:
- في مشهد
Start، انقر على الاقتراحات أسفل أداة تعديل الرموز. يضيف هذا الإجراء شريحة اقتراح واحدة. - في الحقل
title، استبدِلSuggested Responseبـ'Yes'. - باستخدام التنسيق نفسه، أضِف يدويًا شريحة اقتراح بعنوان
'No'و'Help with Phonetics'. يجب أن يبدو الرمز البرمجي على النحو التالي: - انقر على حفظ.

اختبار الإجراء في المحاكي
في هذه المرحلة، يجب أن ينتقل الإجراء من طلب التفعيل الرئيسي إلى مشهد البدء وأن يسأل المستخدم عمّا إذا كان يريد المتابعة. يجب أن تظهر شرائح الاقتراحات أيضًا في الشاشة المحاكية.
لاختبار الإجراء في المحاكي، اتّبِع الخطوات التالية:
- في شريط التنقّل، انقر على اختبار للانتقال إلى المحاكي.
- لاختبار الإجراء في المحاكي، اكتب
Talk to Spelling Practiceفي حقل "الإدخال". - اضغط على Enter. يجب أن يستجيب تطبيقك بطلب
Main invocationوطلب المشهد المضافStart، "أهلاً بك في تطبيق "تدريب على الإملاء". استخدِم الأبجدية الصوتية لتوضيح أحرف الكلمة. على سبيل المثال، ألفا للحرف أ، وبرافو للحرف ب، وتشارلي للحرف ج، وما إلى ذلك. هل تريد المتابعة؟"
تعرض لقطة الشاشة التالية هذا التفاعل:

- انقر على شريحة الاقتراح
YesأوNoأوHelp with Phoneticsللردّ على الطلب. (يمكنك أيضًا قول "نعم" أو "لا" أو "مساعدة في الصوتيات" أو إدخالYesأوNoأوHelp with Phoneticsفي حقل الإدخال).
عند الردّ على الطلب، ستردّ مهمّتك برسالة تشير إلى أنّها لم تفهم إدخالك: "لم أفهم طلبك. هل يمكنك المحاولة مجددًا؟" بما أنّك لم تُعدِّل بعد إعدادات تطبيقك ليفهم الردود "نعم" أو "لا" ويتفاعل معها، فإنّ تطبيقك يطابق ردّك مع هدف NO_MATCH.
بشكلٍ تلقائي، يقدّم الغرض من النظام NO_MATCH ردودًا عامة، ولكن يمكنك تخصيص هذه الردود للإشارة إلى المستخدم بأنّك لم تفهم طلبه. يُنهي "مساعد Google" محادثة المستخدم مع مهمّتك بعد أن يتعذّر عليه مطابقة إدخال المستخدم ثلاث مرات.
إضافة نية "لا" ونيات صوتية
بعد أن أصبح بإمكان المستخدمين الردّ على السؤال الذي يطرحه الإجراء، يمكنك ضبط الإجراء لفهم ردود المستخدمين ("نعم" أو "لا" أو "مساعدة في الصوتيات"). في الأقسام التالية، ستنشئ نوايا المستخدمين التي تتم مطابقتها عندما يقول المستخدم "نعم" أو "لا" أو "مساعدة في الصوتيات"، وستضيف هذه النوايا إلى المشهد Start. سنستخدم الغرض من النظام yes وسننشئ أغراضًا أخرى.
إنشاء نية no
الآن، عليك إنشاء الغرض no لفهم المستخدم والردّ عليه عندما لا يريد لعب اللعبة. لإنشاء هذه النية، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل.
- انقر على النيّات المخصّصة في شريط التنقّل لفتح قائمة النيّات.
- انقر على + (علامة الجمع) في نهاية قائمة النوايا. أدخِل اسمًا للنية الجديدة
noواضغط على Enter. - انقر على لا لفتح صفحة الغرض
no. - في قسم إضافة عبارات تدريب، انقر في مربّع النص إدخال عبارة وأدخِل العبارات التالية:
NoNI don't wantnope

- انقر على حفظ.
إضافة no نية إلى المشهد Start
يمكن الآن للإجراء فهم ما إذا كان المستخدم يعبّر عن "لا" أو عبارة مشابهة، مثل "لا أريد". عليك إضافة نية المستخدم no إلى المشهد Start لأنّ المستخدم يستجيب لطلب Start ("مرحبًا بك في تطبيق "تدريب على الإملاء". استخدِم الأبجدية الصوتية لتوضيح أحرف الكلمة. على سبيل المثال، ألفا للحرف أ، وبرافو للحرف ب، وتشارلي للحرف ج، وما إلى ذلك. هل تريد المتابعة؟").
لإضافة هذه النية إلى مشهد Start، اتّبِع الخطوات التالية:
- انقر على مشهد البدء في شريط التنقّل.
- انقر على + (علامة الجمع) في المشهد
Startبجانب "التعامل مع نية المستخدم". - في قسم النية، اختَر لا في القائمة المنسدلة.

- انقر على إرسال الطلبات وعدِّل الحقل
speechبالنص التالي:Good Bye.
يجب أن يبدو الرمز في أداة التعديل على النحو التالي:
candidates:
- first_simple:
variants:
- speech: >-
Goodbye.
- في قسم الانتقال، اختَر إنهاء المحادثة من القائمة المنسدلة.
- انقر على حفظ.
اختبار هدف no في المحاكي
في هذه المرحلة، تفهم مهمّتك أنّ المستخدم لا يريد لعب اللعبة وتعرض الردّ المناسب.
لاختبار هذه النية في المحاكي، اتّبِع الخطوات التالية:
- في شريط التنقّل، انقر على اختبار.
- اكتب
Talk to Spelling Practiceفي حقل الإدخال واضغط علىEnter. - اكتب
Noفي حقل الإدخال واضغط على Enter. بدلاً من ذلك، انقر على شريحة "لا يوجد اقتراح".

إضافة غرض YES النظام إلى مشهد Start
الآن، سنضيف الغرض SYSTEM "YES" إلى مشهد Start، لأنّ المستخدم يجيب بنعم على طلب Start ("مرحبًا بك في تطبيق Spelling Practice. استخدِم الأبجدية الصوتية لتوضيح أحرف الكلمة. على سبيل المثال، ألفا للحرف أ، وبرافو للحرف ب، وتشارلي للحرف ج، وما إلى ذلك. هل تريد المتابعة؟").
لإضافة نية المستخدم هذه إلى مشهد Start، اتّبِع الخطوات التالية:
- انقر على مشهد البدء في شريط التنقّل.
- انقر على + (علامة الجمع) في مشهد
Startبجانب التعامل مع نية المستخدم. - ضمن "جميع أغراض النظام"، اختَر نعم في القائمة المنسدلة للأغراض.

- انقر على استدعاء الرد التلقائي على الويب وعدِّل مربع النص
event handlerباستخدام الدالة التي أنشأتها سابقًا:getSpellingWordList - في قسم الانتقال، انقر على القائمة المنسدلة واختَر إنهاء المحادثة.
- انقر على حفظ.
اختبار هدف YES في المحاكي
في هذه المرحلة، يفهم الإجراء متى يريد المستخدم لعب اللعبة ويعرض الرد المناسب.
لاختبار هذه النية في المحاكي، اتّبِع الخطوات التالية:
- في شريط التنقّل، انقر على اختبار.
- لاختبار الإجراء في المحاكي، اكتب
Talk to Spelling Practiceفي حقل الإدخال واضغط على Enter. - اكتب
Yesفي الحقل الإدخال واضغط على Enter. يمكنك بدلاً من ذلك النقر على شريحة الاقتراحYes.
يجلب الإجراء قائمة بجميع الكلمات التي يجب التدرب على تهجئتها ويخزّنها في الجلسة. بعد ذلك، ينهي الإجراء الجلسة لأنّك اخترت الانتقال إلى End conversation للغرض YES.
إنشاء نية Phonetics
لإنشاء الغرض Phonetics، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل.
- انقر على النيّات المخصّصة في شريط التنقّل لفتح قائمة النيّات.
- انقر على + (علامة الجمع) في نهاية قائمة النوايا. امنح الغرض الجديد اسمًا
phoneticsواضغط علىEnter. - انقر على هدف
phoneticsلفتح صفحة هدفphonetics. - في قسم "إضافة عبارات التدريب"، انقر على مربّع النص إدخال عبارة وأدخِل العبارات التالية:
how do I spell wordsphoneticshelp me with phoneticsphonetic alphabet

- انقر على حفظ.
إضافة phonetics نية إلى المشهد Start
يمكن الآن للإجراء فهم متى يعبّر المستخدم عن نية "صوتية". يمكنك إضافة نية المستخدم phonetics إلى مشهد Start، لأنّ المستخدم يستجيب لطلب Start ("مرحبًا بك في لعبة التدريب على الإملاء. استخدِم الأبجدية الصوتية لتوضيح أحرف الكلمة. على سبيل المثال، ألفا للحرف أ، وبرافو للحرف ب، وتشارلي للحرف ج، وما إلى ذلك. هل تريد المتابعة؟").
لإضافة نية المستخدم هذه إلى مشهد Start، اتّبِع الخطوات التالية:
- انقر على مشهد البدء في شريط التنقّل.
- انقر على علامة الجمع (+) في المشهد
Startبجانب "التعامل مع نية المستخدم". - اختَر علم الأصوات من القائمة المنسدلة "النية".

- في قسم الانتقال، انقر على القائمة المنسدلة واختَر إنهاء المحادثة.
- انقر على حفظ.
الانتقال من مشهد "البدء" إلى مشهد "التهجئة"
في هذا القسم، يمكنك إنشاء مشهد جديد باسم Spelling، والذي يرسل طلبًا إلى المستخدم لتهجئة الكلمة باستخدام الأبجدية الصوتية.
لإنشاء هذا المشهد وإضافة انتقال إليه، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل العلوي. بعد ذلك، انقر على بدء المشهد في شريط التنقّل الأيمن.
- في قسم التعامل مع نية المستخدم، انقر على
when actions.intent.YES is matched، ثم انقر على القائمة المنسدلة في قسم الانتقال على اليسار واكتبSpellingفي حقل النص. - انقر على إضافة. يؤدي ذلك إلى إنشاء مشهد باسم
Spelling، ويطلب من الإجراء الانتقال إلى المشهدSpellingبعد المطابقة مع النية YES. - وسِّع المشاهد في قائمة التنقّل اليمنى لعرض قائمة المشاهد.
- ضمن المشاهد، انقر على "التدقيق الإملائي" للاطّلاع على المشهد
Spelling. - انقر على + في قسم عند الدخول من مشهد
Spelling. - انقر على استدعاء خطاف الويب وأدخِل getSpellingWord في مربّع نص معالج الأحداث.
- انقر على إرسال الطلبات.
- استبدِل الجملة في حقل
speech(Enter the response that users will see or hear...) بـ {}. سيتم ملء الطلب الفعلي من خلال الرد التلقائي على الويب.
تقدّم شرائح الاقتراحات اقتراحات قابلة للنقر للمستخدم يعالجها الإجراء كمدخلات من المستخدم.
لإضافة شرائح اقتراحات إلى طلب Spelling المشهد، اتّبِع الخطوات التالية:
- في مشهد
Spelling، انقر على الاقتراحات أسفل أداة تعديل الرموز. يضيف هذا الإجراء ثلاث رقائق اقتراحات. - في الحقل
title، استبدِلSuggested Responseبـ'Repeat'. - باستخدام التنسيق نفسه، أضِف يدويًا شريحة اقتراح بعنوان
'Skip'. - باستخدام التنسيق نفسه، أضِف يدويًا شريحة اقتراح بعنوان
'Quit'. يجب أن يبدو الرمز البرمجي على النحو التالي: - انقر على حفظ.
suggestions:
- title: 'Repeat'
- title: 'Skip'
- title: 'Quit'

إنشاء نية Repeat
لإنشاء الغرض repeat، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل.
- انقر على النيّات المخصّصة في شريط التنقّل لفتح قائمة النيّات.
- انقر على + (علامة الجمع) في نهاية قائمة النوايا. امنح الغرض الجديد اسمًا
repeatواضغط علىEnter. - انقر على رمز
repeatالغرض لفتح صفحة رمزdefinitionالغرض. - في قسم إضافة عبارات تدريب، انقر على مربّع النص إدخال عبارة وأدخِل العبارات التالية:
one more time pleasesay the word againrepeat the wordtell me againrepeat

- انقر على حفظ.
إضافة repeat نية إلى المشهد Spelling
أصبح بإمكان "أداة إنشاء الإجراءات" الآن فهم متى يعبّر المستخدم عن نيّة "التكرار". يمكنك إضافة نية المستخدم repeat إلى المشهد Spelling، لأنّ المستخدم يستجيب لطلب Spelling ("تهجئة الكلمة باستخدام الأبجدية الصوتية").
لإضافة نية المستخدم هذه إلى مشهد Spelling، اتّبِع الخطوات التالية:
- انقر على مشهد التدقيق الإملائي في شريط التنقّل.
- انقر على + (علامة الجمع) في مشهد
Spellingبجانب التعامل مع نية المستخدم. - اختَر تكرار في القائمة المنسدلة الخاصة بالنوايا.

- ضَع علامة في المربّع استدعاء برنامج معالجة الويب وأدخِل repeatSpellingWord في مربّع النص الخاص بمعالج الأحداث للحصول على تعريف الكلمة.
- ضَع علامة في المربّع إرسال الطلبات.
- استبدِل الجملة في الحقل
speech(Enter the response that users will see or hear...) بعلامة الاقتباس المفردة ('). سيتم ملء الطلب الفعلي من خلال الرد التلقائي على الويب.
إضافة شرائح اقتراحات إلى "عند مطابقة التكرار"
- في قسم عند مطابقة Repeat ضمن "التعامل مع نية المستخدم"، انقر على الاقتراحات أسفل أداة تعديل الرموز. يضيف هذا الإجراء ثلاث رقائق اقتراحات.
- في الحقل
title، استبدِلSuggested Responseبـ'Skip'. - باستخدام التنسيق نفسه، أضِف يدويًا شريحة اقتراح بعنوان
'Quit'.يجب أن يبدو الرمز البرمجي الخاص بك مثل المقتطف التالي:
suggestions:
- title: 'Skip'
- title: 'Quit'

- انقر على حفظ.
إنشاء نية definition
لإنشاء الغرض definition، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل.
- انقر على النيّات المخصّصة في شريط التنقّل لفتح قائمة النيّات.
- انقر على + (علامة الجمع) في نهاية قائمة النوايا. امنح الغرض الجديد اسمًا
definitionواضغط علىEnter. - انقر على هدف
definitionلفتح صفحة هدفdefinition. - في قسم إضافة عبارات تدريب، انقر على مربّع النص إدخال عبارة وأدخِل العبارات التالية:
I would like to know the definitiontell me the definitionwhat does it meanmeaningdefinitionwhat is the definition?

- انقر على حفظ.
إضافة definition نية إلى المشهد Spelling
أصبح بإمكان "الإجراء" الآن فهم ما إذا كان المستخدم يعبّر عن نيّة "معرفة تعريف". يمكنك إضافة نية المستخدم definition إلى المشهد Spelling، لأنّ المستخدم يستجيب لطلب Spelling ("تهجئة الكلمة باستخدام الأبجدية الصوتية").
لإضافة نية المستخدم هذه إلى مشهد Spelling، اتّبِع الخطوات التالية:
- انقر على مشهد التدقيق الإملائي في شريط التنقّل.
- انقر على + (علامة الجمع) في مشهد
Spellingبجانب التعامل مع نية المستخدم. - اختَر تعريف من القائمة المنسدلة الخاصة بالنوايا.

- ضَع علامة في المربّع بجانب استدعاء خطاف الويب وأدخِل definitionOfSpellingWord في مربّع نص معالج الأحداث للحصول على تعريف الكلمة.
- ضَع علامة في المربّع إرسال الطلبات.
- استبدِل الجملة في الحقل
speech(Enter the response that users will see or hear...) بـ ‘‘`. سيتم ملء الطلب الفعلي من خلال الرد التلقائي على الويب.
إضافة شرائح اقتراحات إلى ردّ Webhook
- في مشهد
Start، انقر على الاقتراحات أسفل أداة تعديل الرموز. يضيف هذا الإجراء ثلاث رقائق اقتراحات. - في الحقل
title، استبدِلSuggested Responseبـ'Skip'. - باستخدام التنسيق نفسه، أضِف يدويًا شريحة اقتراح بعنوان
'Quit'.يجب أن يبدو الرمز البرمجي الخاص بك مثل المقتطف التالي:
suggestions:
- title: 'Skip'
- title: 'Quit'

- انقر على حفظ.
إنشاء نية skip
لإنشاء الغرض skip، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل.
- انقر على النوايا في شريط التنقّل لفتح قائمة النوايا.
- انقر على + (علامة الجمع) في نهاية قائمة النوايا. امنح الغرض الجديد اسمًا
skipواضغط علىEnter. - انقر على هدف
skipلفتح صفحة هدفskip. - في قسم إضافة عبارات تدريب، انقر على مربّع النص إدخال عبارة وأدخِل العبارات التالية:
next wordgo nextnextskipskip word

- انقر على حفظ.
إضافة Skip نية إلى المشهد Spelling
أصبح بإمكان "الإجراء" الآن فهم متى يعبّر المستخدم عن نيّة "التخطّي". يمكنك إضافة نية المستخدم skip إلى المشهد Spelling، لأنّ المستخدم يستجيب لطلب Spelling ("تهجئة الكلمة باستخدام الأبجدية الصوتية").
لإضافة نية المستخدم هذه إلى مشهد Spelling، اتّبِع الخطوات التالية:
- انقر على مشهد التدقيق الإملائي في شريط التنقّل.
- انقر على + (علامة الجمع) في المشهد
Spellingبجانب التعامل مع نية المستخدم. - اختَر تخطّي في القائمة المنسدلة الخاصة بالنوايا.

- في قسم الانتقال على يسار الشاشة، انقر على القائمة المنسدلة واختَر
Spelling.

- انقر على حفظ.
إنشاء نية quit
لإنشاء الغرض Quit، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل.
- انقر على النوايا في شريط التنقّل لفتح قائمة النوايا.
- انقر على + (علامة الجمع) في نهاية قائمة النوايا. امنح الغرض الجديد اسمًا
Quitواضغط علىEnter. - انقر على رمز
Quitلفتح صفحة تعريف الغرض. - في قسم إضافة عبارات تدريب، انقر على مربّع النص إدخال عبارة وأدخِل العبارات التالية:
I quitGoodbyeCancelExitQuit

- انقر على حفظ.
إضافة Quit نية إلى المشهد Spelling
أصبح بإمكان "الإجراء" الآن فهم متى يعبّر المستخدم عن نيّة "إنهاء". يمكنك إضافة نية المستخدم quit إلى المشهد Spelling، لأنّ المستخدم يستجيب لطلب Spelling ("تهجئة الكلمة باستخدام الأبجدية الصوتية").
لإضافة نية المستخدم هذه إلى مشهد Spelling، اتّبِع الخطوات التالية:
- انقر على مشهد التدقيق الإملائي في شريط التنقّل.
- انقر على + (علامة الجمع) في مشهد
Spellingبجانب التعامل مع نية المستخدم. - اختَر إنهاء في القائمة المنسدلة الخاصة بالقصد.

- في قسم الانتقال على يسار الشاشة، انقر على القائمة المنسدلة واختَر
End conversation.
- انقر على حفظ.
إنشاء نوع phonetic_alphabet
في هذا القسم، يمكنك إنشاء نوع جديد باسم phonetic_alphabet، والذي يحدّد خيارات الأبجدية الصوتية التي يمكن للمستخدمين اختيارها لتهجئة الكلمة. يمكنك أيضًا تحديد بعض المرادفات لهذه الخيارات في حال قال المستخدم شيئًا مشابهًا. في قسم لاحق، ستضيف النوع phonetic_alphabet إلى خانة لتحديد أنّك تريد الحصول على رد المستخدم.
لإنشاء النوع phonetic_alphabet، اتّبِع الخطوات التالية:
- انقر على تطوير في شريط التنقّل.
- انقر على + (علامة الجمع) ضمن الأنواع.
- اكتب
phonetic_alphabetواضغط علىEnter. - انقر على
phonetic_alphabetلفتح الخيارات. - في قسم ما هو نوع القيم التي سيتيحها هذا النوع؟، اختَر الخيار الكلمات والمرادفات.
- أدخِل الإدخالات التالية والقيم المقابلة لها في قسم إضافة إدخالات:
a | alpha, apple, amsterdam |
b | bravo, butter, baltimore |
c | charlie, cat, casablanca |
d | delta, dog, denmark |
. | echo, edward, edison |
f | فوكستروت، ثعلب، فلوريدا |
g | golf, george, gallipoli |
ح | hotel, harry, havana |
i | india, ink, italia |
j | juliette, johnny, jerusalem |
k | كيلو، ملك، كيلوغرام |
l | lima, love, london |
م | mike, money, madagascar |
ن | نوفمبر، نيويورك، نانسي |
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 | الأشعة السينية |
y | yankee, yellow, yorker |
z | زولو، حمار وحشي، زيورخ |
يجب أن يبدو جدول المفتاح والقيمة على النحو التالي:

- انقر على حفظ.
ضبط ملء الخانات
بعد ذلك، عليك ضبط ميزة "ملء الخانات" في مشهد "التدقيق الإملائي". لضبط منطق ملء الخانات، اتّبِع الخطوات التالية:
- انقر على مشهد التدقيق الإملائي في شريط التنقّل.
- انقر على + (علامة الجمع) في مشهد
Spellingمن أجل ملء الخانات. - في الحقل إدخال اسم الفتحة، أضِف
userresponseكاسم للفتحة. - في القائمة المنسدلة اختيار النوع، اختَر phonetic_alphabet كنوع الفتحة.
- ضَع علامة في المربّع تقبل هذه الخانة قائمة بالقيم.
- ضَع علامة في المربّع هذه الخانة مطلوبة.
- اختَر الخيار تخصيص عملية إعادة كتابة قيمة موضع الإعلان وأدخِل userresponse في مربّع نص مَعلمة الجلسة.

- انقر على حفظ.
إضافة شرط إلى شاشة Spelling
لإضافة "شرط" إلى مشهد Spelling، اتّبِع الخطوات التالية:
- انقر على مشهد التدقيق الإملائي في شريط التنقّل.
- انقر على + (علامة الجمع) في مشهد
Spellingبجانب "الشرط". - أدخِل
scene.slots.status == "FINAL"كشرط - ضَع علامة في المربّع الاتصال بخطاف الويب وأدخِل verifySpellingWord في مربّع نص معالج الأحداث للتحقّق من استجابة المستخدم.
- ضَع علامة في المربّع إرسال الطلبات.
- استبدِل الجملة في الحقل
speech(Enter the response that users will see or hear...) بـ {}. سيتم ملء الطلب الفعلي من خلال الرد التلقائي على الويب.
إضافة شرائح اقتراحات إلى ردّ Webhook
- في مشهد
Start، انقر على الاقتراحات أسفل أداة تعديل الرموز. يضيف هذا الإجراء ثلاث رقائق اقتراحات. - في الحقل
title، استبدِلSuggested Responseبـ'Next'. - باستخدام التنسيق نفسه، أضِف يدويًا شريحة اقتراح بعنوان
'Quit'.يجب أن يبدو الرمز البرمجي الخاص بك مثل المقتطف التالي:
suggestions:
- title: 'Next'
- title: 'Quit'

- انقر على حفظ.
12. اختبار ميزة "التدريب على الإملاء" في المحاكي
لاختبار الإجراء في المحاكي، اتّبِع الخطوات التالية:
- في شريط التنقّل، انقر على اختبار للانتقال إلى المحاكي.
- لاختبار الإجراء في المحاكي، اكتب
Talk to Spelling Practiceفي حقل "الإدخال". - اضغط على Enter. يجب أن يستجيب تطبيقك بطلب
Main invocationوطلب المشهد المضافStart، "أهلاً بك في تطبيق "تدريب على الإملاء". استخدِم الأبجدية الصوتية لتوضيح أحرف الكلمة. على سبيل المثال، ألفا للحرف أ، وبرافو للحرف ب، وتشارلي للحرف ج، وما إلى ذلك. هل تريد المتابعة؟" - قُل نعم للمتابعة
- سيشغّل المحاكي صوت كلمة لتحديد حروفها
- يمكنك تهجئة الكلمة باستخدام الأبجديات الصوتية. على سبيل المثال، بالنسبة إلى better، قُل أو اكتب "bravo echo tango tango echo romeo".
- سيقدّم المحاكي إجابة صحيحة أو غير صحيحة.
- قُل التالي للمتابعة إلى الكلمة التالية أو خروج للخروج من حلقة اللعبة.
13. تهانينا
تهانينا، لقد أنشأت لعبتك Spelling Practice بنجاح.
أصبحت الآن على دراية بالخطوات الرئيسية المطلوبة لإنشاء لعبة باستخدام Cloud Firestore وCloud Functions و"أداة إنشاء الإجراءات" في "مساعد Google".
المواضيع التي تناولتها
- كيفية التفاعل مع Cloud Firestore
- كيفية استخدام الخانات لجمع البيانات من المستخدم
- كيفية معالجة إدخال المستخدم وعرض ردّ
- كيفية استخدام الشروط لإضافة منطق إلى مشهد
- كيفية إضافة حلقة ألعاب
مراجع تعلُّم إضافية
يمكنك استكشاف الموارد التالية للتعرّف على كيفية إنشاء "مهام مع مساعد Google":
- المستندات الخاصة بتطوير "المهام مع مساعد Google"
- صفحة GitHub الخاصة بـ "المهام على Google" للحصول على عيّنات من الرموز والمكتبات
- منتدى Reddit الرسمي للمطوّرين الذين يعملون مع "مساعد Google"
- إرشادات تصميم المحادثات للتعرّف على أفضل الممارسات والإرشادات المتعلّقة بالإجراءات الحوارية
- مقدمة عن Cloud Firestore
تنظيف مشروعك [يُنصح به]
لتجنُّب تحمّل رسوم محتملة، ننصحك بإزالة المشاريع التي لا تنوي استخدامها. لحذف المشاريع التي أنشأتها في هذا الدرس العملي، اتّبِع الخطوات التالية:
- لحذف مشروعك ومواردك على Firebase، أكمل الخطوات الواردة في قسم إيقاف المشاريع (حذفها).
تنبيه: تأكَّد من اختيار المشروع الصحيح لحذفه في صفحة الإعدادات على Google Cloud Console.
- اختياري: لإزالة مشروعك على الفور من وحدة تحكّم "الإجراءات"، أكمِل الخطوات الواردة في قسم حذف مشروع. إذا لم تُكمل هذه الخطوة، ستتم إزالة مشروعك تلقائيًا بعد 30 يومًا تقريبًا.
تابِع حسابَي @ActionsOnGoogle و @Firebase على Twitter لتبقى على اطّلاع على آخر إعلاناتنا، ويمكنك مشاركة ما أنشأته من خلال التغريد باستخدام الهاشتاغ #GoogleIO.