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


أهداف الدورة التعليمية
- كيفية إنشاء مشروع في "وحدة تحكّم المهام"
- كيفية استخدام أداة gactions لإرسال مشروع الإجراء وسحبه بين "وحدة تحكّم المهام" ونظام الملفات على الجهاز
- كيفية إرسال طلب إلى المستخدم بعد أن يستدعي الإجراء
- كيفية معالجة إدخال المستخدم وعرض ردّ
- كيفية اختبار الإجراء في محاكي الإجراءات
- كيفية تنفيذ عملية توصيل الطلب باستخدام محرِّر Cloud Functions
المتطلبات
يجب أن تتوفّر الأدوات التالية في بيئتك:
- بيئة تطوير متكاملة (IDE) أو محرِّر نصوص من اختيارك
- وحدة طرفية لتشغيل أوامر واجهة الأوامر لـ Node.js وnpm
- متصفّح ويب، مثل Google Chrome
2. إعداد
توضّح الأقسام التالية كيفية إعداد بيئة التطوير وإنشاء مشروع "مهام Google".
التحقّق من إعدادات الأذونات في Google
لاختبار الإجراء الذي تنشئه في هذا الدرس التطبيقي حول الترميز، عليك تفعيل الأذونات اللازمة ليتمكّن المحاكي من الوصول إلى الإجراء.
لتفعيل الأذونات، اتّبِع الخطوات التالية:
- انتقِل إلى عناصر التحكّم في النشاط.
- سجِّل الدخول باستخدام حسابك على Google إذا لم يسبق لك ذلك.
- فعِّل الأذونات التالية:
- النشاط على الويب وفي التطبيقات
- ضمن النشاط على الويب وفي التطبيقات، ضَع علامة في المربّع بجانب تضمين سجلّ Chrome والأنشطة من المواقع الإلكترونية والتطبيقات والأجهزة التي تستخدم خدمات Google**.**
إنشاء مشروع على Actions on Google
مشروع الإجراءات هو حاوية لإجرائك.
لإنشاء مشروع "مهام Google" لهذا الدرس التطبيقي حول الترميز، اتّبِع الخطوات التالية:
- افتح وحدة تحكّم المهام.
- انقر على مشروع جديد.
- أدخِل اسم المشروع، مثل
actions-codelab. (الاسم مخصّص لمرجعك الداخلي. يمكنك لاحقًا ضبط اسم خارجي لمشروعك.)

- انقر على إنشاء مشروع.
- في شاشة ما نوع الإجراء الذي تريد إنشاءه؟، اختَر بطاقة مخصّص.
- انقر على التالي.
- في شاشة كيف تريد إنشاء المشروع؟، اختَر بطاقة مشروع فارغ.
- انقر على بدء الإنشاء.
احفظ رقم تعريف المشروع الخاص بـ Action.
رقم تعريف المشروع هو معرّف فريد لـ "الإجراء". ستحتاج إلى رقم تعريف المشروع لتنفيذ عدة خطوات في هذا الدرس التطبيقي حول الترميز.
لاسترداد رقم تعريف المشروع، اتّبِع الخطوات التالية:
- في وحدة تحكّم المهام، انقر على النقاط الثلاث العمودية (أدرِج الرمز هنا).
- انقر على إعدادات المشروع.

- انسخ رقم تعريف المشروع**.**
ربط حساب فوترة
إذا لم يكن لديك حساب فوترة، عليك إنشاء حساب وربطه بمشروعك في Google Cloud لنشر عملية التنفيذ لاحقًا باستخدام Cloud Functions.
لربط حساب فوترة بمشروعك، اتّبِع الخطوات التالية:
- انتقِل إلى صفحة فوترة Google Cloud Platform.
- انقر على إضافة حساب فوترة أو إنشاء حساب.
- أدخِل معلومات الدفع.
- انقر على بدء الفترة التجريبية المجانية أو إرسال وتفعيل الفوترة.
- انتقِل إلى صفحة فوترة Google Cloud Platform.
- انقر على علامة التبويب مشاريعي.
- انقر على النقاط الثلاث ضمن الإجراءات بجانب مشروع "الإجراءات" للدرس التطبيقي حول الترميز.
- انقر على تغيير الفوترة.
- في القائمة المنسدلة، اختَر حساب الفوترة الذي أعددته.
- انقر على ضبط الحساب.
لتجنُّب تحمُّل أي رسوم، اتّبِع الخطوات الواردة في قسم "تنظيف مشروعك" في نهاية هذا الدرس التطبيقي حول الترميز.
تثبيت واجهة سطر الأوامر gactions
في هذا الدرس التطبيقي حول الترميز، يمكنك استخدام أداة واجهة سطر الأوامر (CLI) الخاصة بـ gactions لمزامنة مشروع "الإجراءات" بين وحدة تحكّم المهام ونظام الملفات على جهازك.
لتثبيت واجهة سطر الأوامر gactions، اتّبِع التعليمات الواردة في مقالة تثبيت أداة سطر الأوامر gactions.
تنزيل مشروع Actions
ابدأ بتطوير مهمّتك من خلال تنزيل مشروع المهام من "وحدة تحكّم المهام".
لتنزيل مشروعك على Actions، اتّبِع الخطوات التالية:
- لإنشاء دليل جديد والانتقال إليه، نفِّذ الأمرَين التاليَين:
mkdir myproject cd myproject
- لنسخ إعدادات مشروع Actions إلى نظام الملفات على الجهاز، نفِّذ الأمر التالي:
gactions pull --project-id <projectID>
فهم بنية الملف
يتم تمثيل مشروع Actions الذي تنزّله من "وحدة تحكّم المهام" في بنية ملف YAML. تعرض الصورة التالية تمثيلاً عالي المستوى لبنية الملف:

تتألف بنية الملف مما يلي:
-
actions/: يمثّل مشروعك على Actions. يستدعي النظامactions.yamlعند استدعاء الإجراء، والذي يستدعي بعد ذلك ملفcustom/global/actions.intent.MAIN.yaml. -
custom/: الدليل الذي ستعمل فيه لتعديل عملك. global/: يحتوي هذا الدليل على أهداف النظام التي تضيفها المنصة إلى مشروعك تلقائيًا. ستتعرّف على المزيد من المعلومات حول الأهداف الخاصة بالنظام لاحقًا في هذا الدرس التطبيقي حول الترميز.-
manifest.yaml: ملف يحتوي على معلومات يمكن نقلها أو غير مرتبطة بمشروع معيّن ويمكن نقلها بين المشاريع. -
settings/: تمثّل إعدادات مشروع على "مهام Google"، مثل الاسم المعروض واللغة التلقائية والفئة.
3- بدء محادثة
يبدأ المستخدمون المحادثة مع الإجراء من خلال الاستدعاء. على سبيل المثال، إذا كان لديك إجراء باسم MovieTime، يمكن للمستخدمين استدعاء الإجراء من خلال قول عبارة مثل "Ok Google، أريد التحدّث إلى MovieTime"، حيث يكون MovieTime هو الاسم المعروض. يجب أن يكون لإجرائك اسم معروض إذا أردت نشره في مرحلة الإنتاج، ولكن لا تحتاج إلى تحديد الاسم المعروض لاختبار الإجراء. بدلاً من ذلك، يمكنك استخدام العبارة "التحدّث إلى تطبيقي التجريبي" في المحاكي لاستدعاء الإجراء. يمكنك الاطّلاع على مزيد من المعلومات عن المحاكي لاحقًا في هذا القسم.
يجب تعديل الاستدعاء الرئيسي لتحديد ما يحدث بعد أن يستدعي المستخدم الإجراء.
By default, your Action provides a generic prompt when your invocation is triggered ("Start building your Action by defining main invocation.").
في القسم التالي، يمكنك تخصيص الطلب الخاص بعبارة التفعيل الرئيسية في ملف custom/global/actions.intent.MAIN.yaml.
إعداد الاستدعاء الرئيسي
يمكنك تعديل طلب الاستدعاء الرئيسي في ملف actions.intent.MAIN.yaml.
لتعديل الطلب الذي يرسله الإجراء إلى المستخدم عندما يفعّل الإجراء، اتّبِع الخطوات التالية:
- افتح
custom/global/actions.intent.MAIN.yamlفي محرِّر النصوص. - استبدِل النص في حقل
speech(Start building your action...) برسالة الترحيب التالية:A wondrous greeting, adventurer! Welcome to the mythical land of Gryffinberg! Based on your clothes, you are not from around these lands. It looks like you're on your way to an epic journey.
actions.intent.MAIN.yaml
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: A wondrous greeting, adventurer! Welcome to the mythical land of
Gryffinberg! Based on your clothes, you are not from around these lands.
It looks like you're on your way to an epic journey.
transitionToScene: actions.scene.END_CONVERSATION
- احفظ الملف.
اختبار العبارة الرئيسية لتفعيل الإجراء في المحاكي
توفّر "وحدة تحكّم المهام" أداة ويب لاختبار مهمتك تُسمى المحاكي. تحاكي الواجهة الأجهزة وإعداداتها، ما يتيح لك التحدّث مع الإجراء كما لو كان يعمل على شاشة ذكية أو هاتف أو مكبّر صوت أو KaiOS.
عند استدعاء الإجراء، من المفترض أن يستجيب الآن بالطلب المخصّص الذي أضفته ("أهلاً بك في مغامرتك الجديدة!...").
يمكنك استخدام الأمر gactions deploy preview لاختبار الإجراء في وحدة التحكّم بدون تحديث إصدار مشروع الإجراءات. عند تشغيل هذا الأمر، لن يتم نشر أي من التغييرات التي تجريها في نظام الملفات المحلي على الإصدارات المنشورة من مشروع الإجراءات، ولكن يمكنك اختبارها على إصدار مبكر حصري.
لاختبار عبارة التفعيل الرئيسية لـ Action في المحاكي، اتّبِع الخطوات التالية:
- لنشر مشروعك في وحدة تحكّم المهام من أجل اختباره، نفِّذ الأمر التالي في الوحدة الطرفية:
gactions deploy preview
من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- انسخ عنوان URL المقدَّم والصقه في المتصفّح.
- لاستدعاء الإجراء في المحاكي، اكتب
Talk to my test appفي حقل الإدخال واضغط علىEnter.

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

إذا نقرت على السهم المتّجه للأسفل بجانب Talk to my test app في سجلّ الأحداث، يمكنك الاطّلاع على الأحداث التي وقعت في ذلك الجزء من المحادثة، مرتّبة زمنيًا:
-
userInput: يتوافق مع إدخال المستخدم ("التحدّث إلى تطبيقي التجريبي") interactionMatch: يتوافق مع ردّ الاستدعاء الرئيسي لـ Action، والذي تم تشغيله من خلال إدخال المستخدم. إذا وسّعت هذا الصف بالنقر على السهم، يمكنك الاطّلاع على الطلب الذي أضفته للطلب الرئيسي (A wondrous greeting, adventurer!...)-
endConversation: يتوافق مع الانتقال المحدّد في نيةMain invocation، والذي ينهي المحادثة حاليًا. ستتعرّف على المزيد من المعلومات حول الانتقالات في القسم التالي من هذا الدرس التطبيقي حول الترميز.
توفّر سجلّات الأحداث إحصاءات حول طريقة عمل الإجراء، وهي أدوات مفيدة لتصحيح أخطاء الإجراء في حال واجهت أي مشاكل. للاطّلاع على تفاصيل حدث معيّن، انقر على السهم بجانب اسم الحدث، كما هو موضّح في لقطة الشاشة التالية:

4. إنشاء محادثة الإجراء
بعد تحديد ما يحدث بعد أن يستدعي المستخدم الإجراء، يمكنك إنشاء بقية محادثة الإجراء. قبل مواصلة هذا الدرس التطبيقي حول الترميز، تعرَّف على المصطلحات التالية لفهم كيفية عمل محادثة الإجراء:
يمكن أن يتضمّن الإجراء مشهدًا واحدًا أو أكثر، وعليك تفعيل كل مشهد قبل تشغيله. يحتوي الإجراء الذي تنشئه في هذا الدرس التطبيقي حول الترميز على مشهد واحد فقط بعنوان Start. الطريقة الأكثر شيوعًا لتفعيل مشهد هي ضبط الإجراء بحيث عندما يتطابق إدخال المستخدم مع نية ضمن مشهد، تؤدي هذه النية إلى الانتقال إلى مشهد آخر وتفعيله.
على سبيل المثال، تخيَّل إجراءً افتراضيًا يقدّم للمستخدم حقائق عن الحيوانات. عندما يستدعي المستخدم هذا الإجراء، تتم مطابقة نية Main invocation ويتم تشغيل الانتقال إلى مشهد باسم Facts. يؤدي هذا الانتقال إلى تنشيط المشهد Facts، والذي يرسل المطالبة التالية إلى المستخدم: Would you like to hear a fact about cats or dogs? ضمن المشهد Facts توجد نية مخصصة تسمى Cat، والتي تحتوي على عبارات تدريب قد يقولها المستخدم لسماع حقيقة عن القطط، مثل "أريد أن أسمع حقيقة عن القطط" أو "قطة". عندما يطلب المستخدم سماع معلومة عن القطط، تتم مطابقة نية Cat، ويتم الانتقال إلى مشهد باسم Cat fact.. يتم تفعيل مشهد Cat fact وإرسال طلب إلى المستخدم يتضمّن معلومة عن القطط.

الشكل 1: سير المحادثة المعتاد في إجراء تم إنشاؤه باستخدام حزمة تطوير البرامج (SDK) الخاصة بـ "المهام".
تشكّل المَشاهد والنيّات وعمليات الانتقال معًا منطق المحادثة وتحدّد المسارات المختلفة التي يمكن للمستخدم اتّباعها من خلال محادثة مهمّتك. في القسم التالي، ستنشئ مشهدًا وتحدّد كيفية تفعيله بعد أن يستدعي المستخدم الإجراء.
الانتقال من الاستدعاء الرئيسي إلى المشهد
في هذا القسم، يمكنك إنشاء مشهد جديد باسم Start، والذي يرسل طلبًا إلى المستخدم يسأله عما إذا كان يريد معرفة حظه. يمكنك أيضًا إضافة انتقال من الطلب الرئيسي إلى مشهد Start الجديد.
لإنشاء هذا المشهد وإضافة تأثير انتقال إليه، اتّبِع الخطوات التالية:
- افتح
custom/global/actions.intent.MAIN.yamlفي محرِّر النصوص. - استبدِل النص في حقل
transitionToScene(actions.scene.END_CONVERSATION) بما يلي:transitionToScene: Start
actions.intent.MAIN.yaml
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: Welcome to the mythical land of Gryffinberg! Based on your clothes,
you are not from around these lands. It looks like you're on your way
to an epic journey.
transitionToScene: Start
يؤدي ذلك إلى توجيه الإجراء للانتقال من الطلب الرئيسي إلى المشهد Start.
- احفظ الملف.
- في الوحدة الطرفية، أنشئ دليل
scenesجديدًا في دليلcustom:
mkdir custom/scenes
- أنشئ ملفًا جديدًا باسم
Start.yamlفي الدليلscenes، والذي يمثّل المشهدstartفي الإجراء:
touch custom/scenes/Start.yaml
- افتح
Start.yamlفي محرِّر النصوص. - الصق الرمز التالي في ملف
Start.yaml:
Start.yaml
onEnter:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: Before you continue on your quest, would you like your fortune
told?
في رمز ملف Start.yaml، هناك حقل باسم onEnter، وهو المرحلة الأولى التي يتم تشغيلها في مراحل نشاط المشهد.
في هذه الحالة، تتم إضافة الطلب (Before you continue on your quest...) إلى قائمة الطلبات عندما يدخل المستخدم مشهد "Start" لأول مرة.
إضافة شرائح الاقتراحات
تقدّم شرائح الاقتراحات اقتراحات قابلة للنقر للمستخدم، والتي يعالجها الإجراء كإدخال من المستخدم. في هذا القسم، يمكنك إضافة شريحتَي الاقتراح Yes وNo اللتين تظهران أسفل الطلب الذي ضبطته للتو (Before you continue on your quest, would you like your fortune told?) لمساعدة المستخدمين على الأجهزة المزوّدة بشاشات.
لإضافة شرائح اقتراحات إلى طلب مشهد "Start"، اتّبِع الخطوات التالية:
- عدِّل الرمز في
Start.yamlليتطابق مع مقتطف الرمز التالي الذي يتضمّن رمز ضبط شرائح الاقتراحات:
Start.yaml
onEnter:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: Before you continue on your quest, would you like your fortune
told?
suggestions:
- title: "Yes"
- title: "No"
- احفظ الملف.
اختبار الإجراء في المحاكي
في هذه المرحلة، يجب أن ينتقل الإجراء من عبارة التفعيل الرئيسية إلى المشهد Start وأن يسأل المستخدم عمّا إذا كان يريد معرفة حظّه. يجب أن تظهر شرائح الاقتراحات أيضًا في الشاشة التي تمت محاكاتها.
لاختبار الإجراء في المحاكي، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، نفِّذ الأمر التالي:
gactions deploy preview
من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- انسخ عنوان URL المقدَّم والصقه في المتصفّح.
- انقر على اختبار للانتقال إلى المحاكي.
- اكتب
Talk to my test appفي حقل الإدخال واضغط علىEnter. يجب أن يستجيب الإجراء من خلال الطلبMain invocationوطلب المَشهدStartالمُضاف، "قبل مواصلة مهمتك، هل تريد معرفة حظك؟"، مع عرض شرائح الاقتراحات.
تعرض لقطة الشاشة التالية هذا التفاعل:

- انقر على شريحة الاقتراح نعم أو لا للردّ على الطلب. (يمكنك أيضًا قول "نعم" أو "لا" أو إدخال
YesأوNoفي حقل الإدخال).
عند الردّ على الطلب، يردّ الإجراء برسالة تشير إلى أنّه لا يمكنه فهم الإدخال: "عذرًا، لم أفهم ذلك. هل يمكنك إعادة المحاولة؟" بما أنّك لم تضبط الإجراء بعد لفهم الإدخال "نعم" أو "لا" والردّ عليه، يطابق الإجراء الإدخال مع نية NO_MATCH.
يوفّر القصد التلقائي للنظام NO_MATCH ردودًا عامة، ولكن يمكنك تخصيص هذه الردود للإشارة إلى المستخدم إلى أنّك لم تفهم ما أدخله. ينهي "مساعد Google" محادثة المستخدم مع مهمّتك بعد تعذُّر مطابقة إدخال المستخدم ثلاث مرات.
إضافة نيتَي yes وno
بعد أن أصبح بإمكان المستخدمين الردّ على السؤال الذي يطرحه الإجراء، يمكنك ضبط الإجراء لفهم ردود المستخدمين ("نعم" أو "لا"). في الأقسام التالية، يمكنك إنشاء عبارات مخصّصة تتم مطابقتها عندما يقول المستخدم "نعم" أو "لا"، وإضافة هذه العبارات إلى المشهد Start.
إنشاء نية "yes"
لإنشاء نية yes، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، أنشئ دليلاً جديدًا باسم
intentsفي الدليلcustom:
mkdir custom/intents
- أنشئ ملفًا جديدًا باسم
yes.yamlفي دليلintents:
touch custom/intents/yes.yaml
- افتح
yes.yamlفي محرِّر النصوص. - ألصِق مقتطف الرمز التالي الذي يحتوي على عبارات تدريبية في
yes.yaml:
yes.yaml
trainingPhrases:
- of course
- let's do it
- ok
- sure
- "y"
- "yes"
- احفظ الملف.
إضافة نية "yes" إلى مشهد "Start"
يمكن الآن للإجراء فهم متى يعبّر المستخدم عن نية "نعم". يمكنك إضافة النية المخصّصة yes إلى المشهد Start، لأنّ المستخدم يستجيب للطلب Start ("قبل مواصلة مهمتك، هل تريد معرفة حظك؟").
لإضافة هذا القصد المخصّص إلى المشهد "Start"، اتّبِع الخطوات التالية:
- افتح
custom/scenes/Start.yamlفي محرِّر النصوص. - أضِف معالج
intentEventsوyesإلى نهاية ملفStart.yaml:
Start.yaml
intentEvents:
- handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: Your future depends on the item you choose to use for your quest. Choose wisely! Farewell, stranger.
intent: "yes"
transitionToScene: actions.scene.END_CONVERSATION
عند مطابقة نية yes، تتم إضافة الطلب "يعتمد مستقبلك على العنصر الذي تختار استخدامه في مهمتك..." إلى قائمة الطلبات. ينتقل مشهد Start بعد ذلك إلى مشهد نظام actions.scene.END_CONVERSATION، الذي يقدّم الطلبات في قائمة انتظار الطلبات وينهي المحادثة.
اختبار هدف "yes" في المحاكي
في هذه المرحلة، يفهم الإجراء متى يريد المستخدم سماع حظه ويعرض الردّ المناسب.
لاختبار هذا الغرض في المحاكي، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، نفِّذ الأمر التالي:
gactions deploy preview
من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- انسخ عنوان URL المقدَّم والصقه في المتصفّح.
- انقر على اختبار للانتقال إلى المحاكي.
- لاختبار الإجراء في المحاكي، اكتب
Talk to my test appفي حقل الإدخال واضغط علىEnter. - اكتب
Yesفي حقل الإدخال واضغط علىEnter. بدلاً من ذلك، انقر على شريحة الاقتراح نعم.

يردّ الإجراء على المستخدم ويخبره بأنّ حظّه يعتمد على المساعدة التي يختارها. بعد ذلك، ينهي الإجراء الجلسة لأنّك ضبطت عملية الانتقال End conversation لنية yes.
إنشاء نية "no"
يمكنك الآن إنشاء هدف no لكي يتمكّن الإجراء من فهم المستخدم والردّ عليه عندما لا يريد سماع حظّه.
لإنشاء هذا الغرض، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، أنشئ ملفًا جديدًا باسم
no.yamlفي دليلintents:
touch custom/intents/no.yaml
- افتح
no.yamlفي محرِّر النصوص. - الصِق عبارات التدريب التالية في ملف
no.yaml:
no.yaml
trainingPhrases:
- nope
- I don't want
- "n"
- "no"
- nah
- no thanks
- احفظ الملف.
إضافة نية "no" إلى مشهد "Start"
يمكن الآن للإجراء فهم متى يعبّر المستخدم عن "لا" أو شيء مشابه لـ "لا"، مثل "كلا". عليك إضافة نية مخصّصة no إلى المشهد Start لأنّ المستخدم يستجيب لطلب Start ("قبل مواصلة مهمتك، هل تريد معرفة حظك؟").
لإضافة هذا الغرض إلى مشهد "Start"، اتّبِع الخطوات التالية:
- افتح
custom/scenes/Start.yamlفي محرِّر النصوص. - أضِف المعالج
noالتالي أسفل المعالجyesفيStart.yaml:
Start.yaml
- handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: I understand, stranger. Best of luck on your quest! Farewell.
intent: "no"
transitionToScene: actions.scene.END_CONVERSATION
- احفظ الملف.
اختبار هدف "no" في المحاكي
في هذه المرحلة، يفهم الإجراء الخاص بك متى لا يريد المستخدم سماع حظه ويعيد الاستجابة المناسبة.
لاختبار هذا الغرض في المحاكي، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، نفِّذ الأمر التالي:
gactions deploy preview
من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- انسخ عنوان URL المقدَّم والصقه في المتصفّح.
- انقر على اختبار للانتقال إلى المحاكي.
- اكتب
Talk to my test appفي حقل الإدخال واضغط علىEnter. - اكتب
Noفي حقل الإدخال واضغط علىEnter. بدلاً من ذلك، انقر على شريحة الاقتراحNo.

بدلاً من إخبار المستخدم بحظه، يتمنى له الإجراء حظًا سعيدًا في رحلته. بعد ذلك، ينهي الإجراء الجلسة لأنّك ضبطت عملية الانتقال End conversation لنية no.
5- تنفيذ الطلبات
في الوقت الحالي، تكون ردود مهمّتك ثابتة، فعند تفعيل مشهد يحتوي على طلب، ترسل مهمّتك الطلب نفسه في كل مرة. في هذا القسم، ستنفّذ عملية تنفيذ الطلب التي تحتوي على المنطق اللازم لإنشاء رد حواري ديناميكي.
يحدّد التنفيذ ما إذا كان المستخدم مكرّر الزيارة أو مستخدمًا جديدًا ويعدّل رسالة الترحيب الخاصة بالإجراء للمستخدمين المكرّري الزيارة. يتم اختصار رسالة الترحيب للمستخدمين المكرّري الزيارة والإشارة إلى عودتهم: "أهلاً بك أيها المغامر! مرحبًا بك من جديد في أرض "غريفينبرغ" الأسطورية."
في هذا الدرس التطبيقي حول الترميز، يمكنك استخدام محرِّر Cloud Functions لتعديل رمز التنفيذ ونشره.
يمكن أن يشغّل الإجراء خطافات الويب التي تُعلم عملية التنفيذ بحدث يقع أثناء استدعاء أو أجزاء معيّنة من تنفيذ المشهد. عند تفعيل الويب هوك، يرسل الإجراء طلبًا يتضمّن حمولة JSON إلى تنفيذ الطلب مع اسم المعالج الذي سيتم استخدامه لمعالجة الحدث. ينفّذ هذا المعالج بعض العمليات المنطقية ويعرض استجابة JSON المقابلة.
إنشاء عملية التنفيذ
في هذا القسم، يمكنك تعديل عملية التنفيذ لإنشاء طلبات مختلفة للمستخدمين المكرّري الزيارة والمستخدمين الجدد عند استدعاء الإجراء.
لإضافة هذا المنطق إلى عملية التنفيذ، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، تأكَّد من أنّك في الدليل الجذري لمشروعك وأنشئ دليل
webhooksجديدًا:
mkdir webhooks
- أنشئ ملفًا جديدًا باسم
ActionsOnGoogleFulfillment.yamlفي دليلwebhooks:
touch webhooks/ActionsOnGoogleFulfillment.yaml
- افتح
ActionsOnGoogleFulfillment.yamlفي محرِّر النصوص. - أضِف معالج
greetingومحتوىinlineCloudFunctionإلى ملفActionsOnGoogleFulfillment.yaml:
ActionsOnGoogleFulfillment.yaml
handlers:
- name: greeting
inlineCloudFunction:
executeFunction: ActionsOnGoogleFulfillment
يحدّد ملف ActionsOnGoogleFulfillment.yaml معالِجات الويب هوك (مثل معالِج greeting) ويطلب من الإجراء استخدام Cloud Functions كنقطة نهاية الويب هوك.
- أنشئ دليل
ActionsOnGoogleFulfillmentجديدًا في دليلwebhooks:
mkdir webhooks/ActionsOnGoogleFulfillment
- أنشئ ملفًا جديدًا باسم
index.jsفي دليلActionsOnGoogleFulfillment:
touch webhooks/ActionsOnGoogleFulfillment/index.js
- افتح
index.jsفي محرِّر النصوص. - أضِف الرمز التالي إلى
index.js:
index.js
const { conversation } = require('@assistant/conversation');
const functions = require('firebase-functions');
const app = conversation({debug: true});
app.handle(>39;greeting', conv = {
let message = 'A wondrous greeting, adventurer! Welcome back to the mythical land of Gryffinberg!';
if (!conv.user.lastSeenTime) {
message = 'Welcome to the mythical land of Gryffinberg! Based on your clothes, you are not from around these lands. It looks like you\'re on your way to an epic journey.';
}
conv.add(message);
});
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
يحدّد هذا الرمز معالج greeting الذي يرسل التحية المناسبة إلى
المستخدم.
- احفظ الملف.
- أنشئ ملفًا جديدًا باسم
package.jsonفي دليلActionsOnGoogleFulfillment:
touch webhooks/ActionsOnGoogleFulfillment/package.json
يحدّد ملف package.json التبعيات والبيانات الوصفية الأخرى لخطاف الويب.
- افتح
package.jsonفي محرِّر النصوص. - انسخ الرمز من مستودع GitHub هذا والصقه في ملف
package.json. - احفظ الملف.
فهم الرمز البرمجي
يستجيب التنفيذ، الذي يستخدم مكتبة Actions on Google Fulfillment لـ Node.js، لطلبات HTTP من "مساعد Google".
في مقتطف الرمز السابق، يمكنك تحديد معالج greeting الذي يتحقّق مما إذا كان المستخدم قد زار الإجراء سابقًا باستخدام السمة lastSeenTime. إذا لم يتم تحديد السمة lastSeenTime، يكون المستخدم جديدًا ويتلقّى رسالة الترحيب المخصّصة للمستخدمين الجدد. وإلا، ستشير الرسالة إلى عودة المستخدم وتنشئ رسالة ترحيب معدَّلة.
تعديل الاستدعاء الرئيسي لتشغيل الويب هوك
بعد تحديد دالة greeting، يمكنك ضبط معالج أحداث greeting في نية الاستدعاء الرئيسية ليعرف الإجراء الخاص بك أنّه يجب استدعاء هذه الدالة عندما يستدعي المستخدم الإجراء.
لضبط الإجراء الخاص بك لاستدعاء معالج greeting الجديد، اتّبِع الخطوات التالية:
- افتح
custom/global/actions.intent.MAIN.yamlفي محرِّر النصوص. - استبدِل الرمز في
actions.intent.MAIN.yamlبالرمز التالي:
actions.intent.MAIN.yaml
handler:
webhookHandler: greeting
transitionToScene: Start
- احفظ الملف.
الآن، عندما تتم مطابقة نية الاستدعاء الرئيسية، يتم استدعاء معالج الويب هوك greeting.
اختبار عبارة التفعيل الرئيسية المعدَّلة في المحاكي
لاختبار الإجراء في المحاكي، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، نفِّذ الأمر التالي:
gactions deploy preview
من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- انسخ عنوان URL المقدَّم والصقه في المتصفّح.
- لاختبار الإجراء في المحاكي، اكتب
Talk to my test appفي حقل الإدخال واضغط علىEnter.
بما أنّك اختبرت الإجراء في وقت سابق من هذا الدرس التطبيقي حول الترميز، فأنت لست مستخدمًا جديدًا، لذا ستتلقّى رسالة الترحيب المختصرة التالية: "أهلاً بك أيها المغامر! مرحبًا بك من جديد في أرض "غريفينبرغ" الأسطورية..."
6. تصوُّر الإجراء باستخدام أداة Actions Builder
تتوافق حزمة تطوير البرامج (SDK) الخاصة بـ "المهام" مع بيئة تطوير متكاملة (IDE) مستندة إلى الويب تُسمى أداة إنشاء المهام، وهي مدمجة في وحدة تحكّم المهام. يمكنك دفع نظام الملفات على الجهاز إلى مسودة "الإجراء" في وحدة التحكّم باستخدام الأمر gactions push. على عكس gactions deploy preview، الذي يسمح لك فقط باختبار الإجراء في المحاكي، ينقل gactions push كل المحتوى من ملفاتك على الجهاز إلى Actions Builder.
توفّر "وحدة تحكّم المهام" تمثيلاً مرئيًا لإعدادات مهمّتك. يمكن أن يكون عرض الإجراء بشكل مرئي مفيدًا أثناء عملية التطوير، ولا يؤثر في إصدار الإجراء الذي يتم عرضه للاختبار.
لنشر مشروعك على Actions on Google وعرضه في وحدة تحكّم المهام، اتّبِع الخطوات التالية:
- في الوحدة الطرفية، نفِّذ الأمر التالي لإرسال مشروعك إلى وحدة تحكّم المهام:
gactions push
من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
- انسخ عنوان URL المقدَّم والصقه في المتصفّح.
- في وحدة تحكّم المهام، انقر على تطوير في شريط التنقّل العلوي.
- انقر على سهم القائمة المنسدلة بجانب المشاهد، ثم انقر على بدء. من المفترض أن يظهر تمثيل مرئي لمشهد
Startالخاص بإجرائك، كما هو موضّح في لقطة الشاشة التالية:

تنظيف مشروعك [إجراء يُنصح به]
لتجنُّب تحمُّل رسوم محتملة، ننصحك بإزالة المشاريع التي لا تنوي استخدامها. لحذف المشاريع التي أنشأتها في هذا الدرس التطبيقي حول الترميز، اتّبِع الخطوات التالية:
- لحذف مشروع على السحابة الإلكترونية وموارده، أكمِل الخطوات المدرَجة في قسم إيقاف (حذف) المشاريع.
- اختياري: لإزالة مشروعك فورًا من "وحدة تحكّم المهام"، أكمِل الخطوات المدرَجة في قسم حذف مشروع. في حال عدم إكمال هذه الخطوة، ستتم إزالة مشروعك تلقائيًا بعد 30 يومًا تقريبًا.
7. تهانينا!
أن تكون على دراية بأساسيات إنشاء إجراءات "مساعد Google" باستخدام حزمة تطوير برامج الإجراءات
المواضيع التي تناولتها
- كيفية إعداد مشروع "مهام" في "وحدة تحكّم المهام"
- كيفية استخدام حزمة تطوير برامج الإجراءات لإنشاء مشروع الإجراءات على نظام الملفات على جهازك
- كيفية إضافة طلب إلى عبارة الاستدعاء الرئيسية ليتمكّن المستخدمون من بدء محادثة مع الإجراء
- كيفية إنشاء واجهة محادثة باستخدام المَشاهد والنيّات والانتقالات وشرائح الاقتراحات والتنفيذ
- كيفية اختبار الإجراء باستخدام محاكي الإجراءات
مزيد من المعلومات
اطّلِع على المراجع التالية لمعرفة المزيد حول إنشاء إجراءات لـ "مساعد Google":
- الموقع الإلكتروني الرسمي للمستندات حول تطوير إجراءات "مساعد Google"
- صفحة Actions on Google على GitHub للحصول على الرموز النموذجية والمكتبات
- منتدى Reddit الرسمي للمطوّرين الذين يعملون مع "مساعد Google"
يمكنك متابعة @ActionsOnGoogle على Twitter للاطّلاع على آخر الأخبار، كما يمكنك نشر تغريدة باستخدام الهاشتاغ #AoGDevs لمشاركة ما تنشئه.
استطلاع رأي
قبل المغادرة، يُرجى ملء استطلاع موجز حول تجربتك.