جذب المستخدمين باستخدام "المهام مع مساعد Google"

1. نظرة عامة

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

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

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

يتناول الدرس التطبيقي حول الترميز ميزات تفاعل المستخدمين وأفضل الممارسات المتعلّقة بـ "إجراءات على Google".

a3fc0061bd01a75.png 961ef6e27dc73da2.png

ما ستنشئه

ستعمل على تحسين ميزة تم إنشاؤها من قبل من خلال إتاحة ما يلي:

  • إرسال إشعار يومي للمستخدمين يمكنهم النقر عليه للتحدّث مع "مهمتك"
  • إرسال إشعارات فورية للمستخدمين تتضمّن رابطًا يؤدي إلى "الإجراء"
  • إنشاء رابط ينقل المستخدمين إلى تطبيقك من متصفّح ويب على الأجهزة الجوّالة

أهداف الدورة التعليمية

  • ما هو تفاعل المستخدمين ولماذا هو مهم لنجاح أحد الإجراءات؟
  • كيفية تعديل "إجراء" لزيادة تفاعل المستخدمين
  • ميزات تفاعل المستخدم التي يجب استخدامها في أنواع مختلفة من الإجراءات
  • كيفية استخدام Actions API لإرسال الإشعارات من خلال "مساعد Google"

المتطلبات

يجب توفّر الأدوات التالية:

  • بيئة تطوير متكاملة (IDE) أو محرر نصوص من اختيارك، مثل WebStorm أو Atom أو Sublime
  • وحدة طرفية لتنفيذ أوامر shell مع تثبيت Node.js وnpm وgit
  • متصفّح ويب، مثل Google Chrome
  • بيئة تطوير على الجهاز تتضمّن واجهة سطر الأوامر في Firebase
  • جهاز جوّال (Android أو iOS) مزوّد بـ "مساعد Google" (يجب تسجيل الدخول إلى "مساعد Google" باستخدام حساب Google نفسه الذي ستستخدمه لإنشاء هذا المشروع)

يُنصح بشدة أيضًا، ولكن ليس إلزاميًا، أن يكون لديك معرفة بلغة JavaScript (الإصدار ES6) لفهم رمز خطاف الويب.

2. إعداد مشروعك

يوضّح لك هذا القسم كيفية إضافة ميزات تفاعل المستخدمين إلى "إجراء" كامل تم إنشاؤه سابقًا.

فهم العيّنة

نموذج هذا الدرس التطبيقي حول الترميز هو إجراء بسيط لنادٍ رياضي وهمي باسم "Action Gym". تقدّم هذه "الإجراء" معلومات عن الصالة الرياضية، بما في ذلك قائمة بالصفوف التي تتغير كل يوم. يُعدّ إجراء إعلامي مثل هذا مناسبًا لجميع ميزات تفاعل المستخدمين لأنّ قائمة الصفوف المتناوبة تقدّم معلومات مفيدة مختلفة كل يوم.

يوضّح المخطّط التالي مسار المحادثة في نموذج Action Gym:

e2d6e4ad98948cf3.png

ستجري تعديلات بسيطة على مربّع الحوار ليتناسب بشكل أفضل مع ميزات التفاعل التي تضيفها. ومع ذلك، لن يتغيّر التصميم العام للمحادثة كثيرًا.

تنزيل ملفاتك الأساسية

نفِّذ الأمر التالي لاستنساخ مستودع GitHub الخاص ببرنامج التدريب العملي:

git clone https://github.com/actions-on-google/user-engagement-codelab-nodejs

إعداد مشروعك والوكيل

لإعداد مشروع Actions ووكيل Dialogflow، يُرجى إكمال الخطوات التالية:

  1. افتح وحدة تحكّم الإجراءات.
  2. انقر على مشروع جديد.
  3. اكتب اسم مشروع، مثل engagement-codelab.
  4. انقر على إنشاء مشروع.
  5. بدلاً من اختيار فئة، انتقِل للأسفل إلى قسم خيارات إضافية وانقر على بطاقة محادثة.
  6. انقر على إنشاء الإجراء لتوسيع الخيارات واختَر إضافة إجراءات.
  7. انقر على إضافة الإجراء الأول.
  8. في مربّع الحوار إنشاء إجراء، اختَر نية مخصّصة، ثم انقر على إنشاء لتشغيل وحدة تحكّم Dialogflow.
  9. في صفحة إنشاء الوكيل في وحدة تحكّم Dialogflow، انقر على إنشاء.
  10. انقر على رمز 6bf56243a8a11a3b.png (رمز الترس) في شريط التنقّل الأيمن.
  11. انقر على تصدير واستيراد، ثم على استعادة من ملف مضغوط.
  12. حمِّل ملف agent.zip من دليل /user-engagement-codelab-nodejs/start/ الذي نزّلته سابقًا.
  13. اكتب RESTORE وانقر على استعادة.
  14. انقر على تم.

نشر عملية تنفيذ الطلبات

بعد أن يصبح مشروع "الإجراءات على Google" وبرنامج Dialogflow جاهزَين، يمكنك نشر ملف index.js المحلي باستخدام واجهة سطر الأوامر الخاصة بـ "وظائف Firebase".

من دليل /user-engagement-codelab-nodejs/start/functions/ لنسخة ملفاتك الأساسية، نفِّذ الأوامر التالية:

firebase use <PROJECT_ID>
npm install
firebase deploy

بعد بضع دقائق، من المفترض أن تظهر لك الرسالة تمّ النشر بنجاح!، ما يشير إلى أنّك نشرت خطاف الويب بنجاح على Firebase.

استرداد عنوان URL لعملية النشر

عليك تزويد Dialogflow بعنوان URL للدالة السحابية. لاسترداد عنوان URL هذا، اتّبِع الخطوات التالية:

  1. افتح وحدة تحكّم Firebase.
  2. اختَر مشروع "الإجراءات" من قائمة الخيارات.
  3. انتقِل إلى تطوير > الدوال في شريط التنقّل الأيمن. إذا طُلب منك "اختيار إعدادات مشاركة البيانات"، يمكنك تجاهل هذا الخيار من خلال النقر على إجراء ذلك لاحقًا.
  4. ضمن علامة التبويب لوحة البيانات، من المفترض أن يظهر لك إدخال خاص بـ "التنفيذ" مع عنوان URL ضمن المشغّل. احفظ عنوان URL هذا، لأنّك ستحتاج إلى نسخه في Dialogflow في القسم التالي.

1741a329947975db.png

ضبط عنوان URL للردّ التلقائي على الويب في Dialogflow

عليك الآن تعديل وكيل Dialogflow لاستخدام خطاف الويب لتنفيذ الطلبات. لإجراء هذا، اتبع هذه الخطوات:

  1. افتح وحدة تحكّم Dialogflow (يمكنك إغلاق وحدة تحكّم Firebase إذا أردت ذلك).
  2. انقر على التنفيذ في شريط التنقّل الأيمن.
  3. فعِّل الردّ التلقائي على الويب.
  4. الصِق عنوان URL الذي نسخته من لوحة بيانات Firebase إذا لم يكن معروضًا بعد.
  5. انقر على حفظ.

التأكّد من إعداد مشروعك بشكل صحيح

يجب أن يتمكّن المستخدمون من استدعاء الإجراء للحصول على معلومات حول Action Gym، بما في ذلك ردّ نصي مبرمَج يتضمّن ساعات العمل وردّ نصي يعرض جدول الحصص لكل يوم من أيام الأسبوع.

لاختبار الإجراء في محاكي الإجراءات، اتّبِع الخطوات التالية:

  1. في شريط التنقّل الأيمن في وحدة تحكّم Dialogflow، انقر على عمليات الدمج > Google Assistant.
  2. تأكَّد من تفعيل الخيار المعاينة التلقائية للتغييرات، ثم انقر على اختبار لتعديل مشروع "إجراءات Google".
  3. يحمّل محاكي الإجراءات مشروعك على "إجراءات Google". لاختبار الإجراء، اكتب Talk to my test app في حقل الإدخال واضغط على Enter.
  4. من المفترض أن يظهر لك ردّ يرحّب بك في Action Gym. جرِّب اتّباع التعليمات لمواصلة المحادثة مع التأكّد من أنّ عملية التنفيذ تتضمّن ردًا على كل إدخال.

60acf1ff87b1a87f.png

3- إضافة اشتراكات لتلقّي محتوى يومي

من الطرق الشائعة للتفاعل مع المستخدمين تقديم المعلومات لهم عندما تكون في أمس الحاجة إليها. ويتم ذلك من خلال منح المستخدمين خيار الاشتراك في إشعارات يومية بشأن غرض معيّن، ما يرسل إليهم إشعارًا من "مساعد Google" يتضمّن رابطًا يؤدي مباشرةً إلى تنفيذ هذا الغرض.

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

f48891c8118f7436.png

كيف سيجذب ذلك المستخدمين؟

من المحتمل أنّ مستخدمي الهواتف الذكية على دراية بالإشعارات الفورية التي تقدّم معلومات وتحديثات خاصة بالتطبيقات. تُعدّ الاشتراكات في الإشعارات اليومية طريقة بسيطة للوصول إلى المستخدمين على الأجهزة الجوّالة خارج نطاق "مساعد Google"، شرط أن يستمر الغرض الذي تُرسِل الإشعارات بشأنه في تقديم قيمة للمستخدم بشكل يومي.

يمكن أن تكون الإشعارات اليومية أداة مفيدة للتفاعل، ولكن ليس من الضروري تضمينها في كل إجراء. يُرجى مراعاة هذه النصائح عند تحديد ما إذا كنت تريد إضافة اشتراكات في التحديثات اليومية إلى أحد الإجراءات:

  • تأكَّد من أنّ التحديثات اليومية ستؤدي إلى عرض معلومات مختلفة ومفيدة للمستخدم كل يوم. إذا كان النقر على إشعار يومي يؤدي إلى ظهور الطلب نفسه في كل مرة، من المحتمل أن يلغي المستخدم اشتراكه بعد بضعة أيام.
  • تأكَّد من أنّ الحوار مفهوم للمستخدم إذا انتقل مباشرةً إلى هدف التحديث اليومي. لن يبدأ المستخدم بالضرورة من بداية المحادثة، لذا يجب ألا تتوقّع أن يكون لديه الكثير من السياق.
  • وضِّح للمستخدم مزايا "الإجراء" قبل أن تطلب منه الاشتراك في تلقّي الإشعارات اليومية. يجب أن يفكّر المستخدم "أريد هذا المحتوى كل يوم" عندما يُمنح خيار الاشتراك.
  • لا تكرّر اقتراحات الاشتراك على المستخدم. قدِّم اشتراكًا في خدمة تلقّي آخر الأخبار يوميًا بعد أن توضّح للمستخدم المحتوى الذي سيشترك فيه، وتجنَّب إزعاجه بشأن ذلك في أي مكان آخر.
  • الحفاظ على المحادثة قصيرة بعد تفعيل نية التحديث يجب أن تتضمّن معظم التحديثات اليومية ردًا واحدًا فقط ثم يتم إغلاقها بدون الحاجة إلى إدخال المستخدم.

تفعيل الإشعارات اليومية

يمكن إضافة اشتراكات في التحديثات اليومية إلى نية الترحيب التي تضع المستخدم في بداية محادثتك، أو إلى نية أكثر تحديدًا من أجل ربطها بصفحة معيّنة في المحادثة. في هذا الدرس العملي، يكون الغرض Class List هو الأنسب لأنّ الحوار سيتغيّر كل يوم، وقد يجد المستخدمون أنّه من المفيد تذكيرهم بالصفوف المتاحة.

اتّبِع الخطوات التالية لتفعيل التحديثات اليومية لنية قائمة الصف:

  1. في "وحدة تحكّم الإجراءات"، انقر على علامة التبويب تطوير، ثم اختَر الإجراءات في شريط التنقّل الأيمن.
  2. انقر على قائمة الصف ضمن قائمة الإجراءات.
  3. ضمن قسم تفاعل المستخدمين، فعِّل الخيار هل تريد تقديم إشعارات يومية للمستخدمين؟ أو أوقِفه.
  4. اضبط عنوان محتوى وصفيًا يصف التحديث اليومي. سيكون السياق "في أي وقت تريد أن أرسل إليك "، لذا تأكَّد من أنّ عنوانك وصفي ويبدو صحيحًا عند قراءته بصوت عالٍ. في هذا المثال، اضبط عنوان المحتوى على list of upcoming Action Gym classes.
  5. انقر على حفظ في أعلى الصفحة.

c00885cc30e14d68.png

إعداد Dialogflow

اتّبِع الخطوات التالية في وحدة تحكّم Dialogflow لإنشاء نوايا لتدفّق الاشتراك في التحديث اليومي:

حثّ المستخدم على الاشتراك

  1. اضبط غرضًا جديدًا للتعامل مع طلب المستخدم الاشتراك في تلقّي آخر الأخبار يوميًا. في وحدة تحكّم Dialogflow، انقر على الزر + بجانب طلبات التنفيذ في قائمة التنقّل اليمنى لإنشاء طلب تنفيذ جديد.
  2. أدخِل اسمًا لهذه النية الجديدة Setup Updates.
  3. ضمن قسم عبارات التدريب، أضِف عبارات المستخدم التالية:
  • Send daily reminders
  • Reminder
  • Remind me
  • Updates
  • Upcoming classes
  1. ضمن قسم التنفيذ، فعِّل الخيار تفعيل طلب webhook لهذا الغرض.
  2. انقر على حفظ في أعلى الصفحة.

5c70faa02151da0.png

التعامل مع قرار المستخدم

  1. اضبط نية جديدة للتعامل مع رد المستخدم على طلب الاشتراك في الإشعارات اليومية. انقر على الزر + بجانب النيات في شريط التنقّل الأيمن لإنشاء نية جديدة.
  2. أدخِل اسمًا لهذه النية الجديدة Confirm Updates.
  3. ضمن قسم الأحداث، أضِف actions_intent_REGISTER_UPDATE. سيتم تشغيل حدث Dialogflow هذا عندما ينهي المستخدم عملية الاشتراك في خدمة تلقّي آخر الأخبار اليومية، سواء اشترك أم لا.
  4. ضمن قسم التنفيذ، فعِّل الخيار تفعيل طلب webhook لهذا الغرض.
  5. انقر على حفظ في أعلى الصفحة.

b871c2bdadac8abc.png

تنفيذ عملية التوصيل

لتنفيذ عملية التنفيذ في Webhook، أكمِل الخطوات التالية:

تحميل الطلبات المرتبطة

b2f84ff91b0e1396.png في ملف index.js، عدِّل الدالة require() لإضافة حزمة RegisterUpdate من حزمة actions-on-google، بحيث تبدو عمليات الاستيراد على النحو التالي:

index.js

const {
  dialogflow,
  Suggestions,
  RegisterUpdate,
} = require('actions-on-google');

تعديل اقتراحات الرقائق

b2f84ff91b0e1396.png في الملف index.js، أضِف إدخال DAILY إلى قائمة عناوين شرائح الاقتراحات، ليصبح تعريف Suggestion على النحو التالي:

index.js

// Suggestion chip titles
const Suggestion = {
  HOURS: 'Ask about hours',
  CLASSES: 'Learn about classes',
  DAILY: 'Send daily reminders',
};

إضافة تنفيذ للأهداف الجديدة

عندما يقول المستخدم إنّه يريد الاشتراك، ابدأ تدفق الاشتراك في الإشعارات اليومية من خلال استدعاء الأداة المساعدة RegisterUpdate مع الهدف من الإشعار (قائمة الفئات) ونوعه (DAILY). بعد انتهاء تدفق الاشتراك، يفعّل "مساعد Google" الحدث actions_intent_REGISTER_UPDATE مع الوسيطة status التي توضّح ما إذا كان الاشتراك ناجحًا أم لا. تقديم طلبات متابعة للمستخدم تتغيّر حسب حالة الاشتراك

b2f84ff91b0e1396.png في ملف index.js، أضِف الرمز التالي:

index.js

// Start opt-in flow for daily updates
app.intent('Setup Updates', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'Class List',
    frequency: 'DAILY',
  }));
});

// Confirm outcome of opt-in for daily updates
app.intent('Confirm Updates', (conv, params, registered) => {
  if (registered && registered.status === 'OK') {
     conv.ask(`Gotcha, I'll send you an update everyday with the ` +
     'list of classes. Can I help you with anything else?');
  } else {
    conv.ask(` I won't send you daily reminders. Can I help you with anything else?`);
  }
  if (conv.screen) {
    conv.ask(new Suggestions([Suggestion.HOURS, Suggestion.CLASSES]));
  }
});

تقديم طلبات بديلة للمستخدم

سيقدّم ردّك على قائمة الصف اشتراكًا في التحديث اليومي في النهاية، ولكن هذا يمثّل مشكلة. بما أنّ الردّ نفسه سيتم تشغيله عندما ينقر المستخدم على إشعار التحديث اليومي، سيُطلب منه الاشتراك في التحديثات اليومية حتى لو كان قد تلقّى تحديثًا للتو. كيف يمكنك منع المستخدم من الاعتقاد بأنّه بحاجة إلى إعادة الاشتراك؟

لحسن الحظ، تتضمّن وسيطات عنصر conv معلومات عن المكان الذي بدأ فيه المستخدم المحادثة. يمكنك التحقّق من وسيطات conv لمعرفة ما إذا كانت تحتوي على قسم UPDATES، ما يشير إلى أنّ المستخدم بدأ المحادثة من إشعار التحديث اليومي، وتغيير الردّ وفقًا لذلك. يمكنك أيضًا استخدام فرع المحادثة هذا لإغلاق مربع الحوار مباشرةً بعد تقديم قائمة الصفوف، وهو ما يتّبع أفضل ممارساتنا في إبقاء التحديث اليومي قصيرًا.

b2f84ff91b0e1396.png في ملف index.js، استبدِل الرمز التالي:

index.js

// Class list intent handler
app.intent('Class List', (conv, {day}) => {
  if (!day) {
    day = DAYS[new Date().getDay()];
  }
  const classes =
  [...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
  .join(', ');
  const classesMessage =
  `On ${day} we offer the following classes: ${classes}. ` +
  `Can I help you with anything else?`;
  conv.ask(classesMessage);
  if (conv.screen) {
    conv.ask(new Suggestions([Suggestion.HOURS]));
  }
});

مع ما يلي:

index.js

// Class list intent handler
app.intent('Class List', (conv, {day}) => {
  if (!day) {
    day = DAYS[new Date().getDay()];
  }
  const classes =
  [...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
  .join(', ');
  let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
  // If the user started the conversation from the context of a daily update,
  // the conv's arguments will contain an 'UPDATES' section.
  let engagement = conv.arguments.get('UPDATES');
  // Check the conv arguments to tailor the conversation based on the context.
  if (engagement) {
    classesMessage += `Hope to see you soon at Action Gym!`;
    conv.close(classesMessage);
  } else {
    classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
    conv.ask(classesMessage);
    if (conv.screen) {
      conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
    };
  };
});

اختبار المحتوى اليومي

في الوحدة الطرفية، شغِّل الأمر التالي لنشر رمز خطاف الويب المعدَّل على Firebase:

firebase deploy

لاختبار إعادة الطلب المخصّصة في محاكي الإجراءات، اتّبِع الخطوات التالية:

  1. في "وحدة تحكّم الإجراءات"، انتقِل إلى اختبار.
  2. اكتب Talk to my test app في حقل الإدخال واضغط على Enter.
  3. اكتب Learn about classes واضغط على Enter. يجب أن يعرض ردّ الإجراء الآن إمكانية إرسال تذكيرات يومية.
  4. اكتب Send daily reminders واضغط على Enter.
  5. اكتب الوقت الذي تريد الاطّلاع على آخر المعلومات فيه واضغط على مفتاح Enter. لأغراض الاختبار، حاوِل الردّ بعد 3 إلى 5 دقائق من الوقت الحالي.

83a15ecac8c71787.png

على جهازك الجوّال، من المفترض أن يصلك إشعار من "مساعد Google" في الوقت الذي حدّدته لتلقّي التحديثات. يُرجى العِلم أنّ ظهور هذا الإشعار قد يستغرق بضع دقائق. انقر على الإشعار، وسيتم الربط مباشرةً بنيّة قائمة الصفوف في "مساعد Google"، ما يمنحك قائمة بالصفوف القادمة:

8582482eafc67d5b.png

4. إضافة إشعارات فورية

كخيار آخر للتفاعل مع المستخدمين خارج مهمتك، يمكنك طلب البيانات من Actions API لإرسال إشعارات فورية إلى المستخدمين. على عكس الإشعارات اليومية، لا يجدول "مساعد Google" هذه الإشعارات تلقائيًا، لذا يمكنك إرسالها متى شئت.

في هذه الخطوة، ستتعرّف على كيفية تنفيذ الإشعارات الفورية في تطبيقك على "أعمال Google" من خلال إضافة هدف جديد Class Canceled وإرسال إشعارات إلى المستخدمين لإبلاغهم بإلغاء صف. ستُعدّ أيضًا المكوّنات الثلاثة التالية اللازمة لإرسال الإشعارات:

  • حساب Actions API: يمكنك إرسال إشعارات إلى المستخدم عن طريق إرسال طلب POST إلى واجهة برمجة التطبيقات، لذا عليك إعداد حساب خدمة وبيانات اعتماد للتفاعل مع هذه الواجهة.
  • أداة مساعدة الأذونات: يجب الحصول على إذن المستخدم للوصول إلى معرّف المستخدم اللازم لإرسال إشعارات فورية إليه. في هذا المثال، ستستخدِم دالة مكتبة برامج العميل لاستدعاء أداة مساعدة الأذونات وطلب معرّف الجهاز.
  • مساحة التخزين: لإرسال إشعارات فورية إلى مستخدم خارج المحادثة، عليك تخزين أرقام تعريف المستخدمين في مكان يمكن استرجاعها منه في أي وقت. في هذا المثال، ستُعدّ قاعدة بيانات Firestore لتخزين معلومات كل مستخدم.

بعد اتّباع هذه التعليمات، ستضيف مربّع الحوار التالي إلى محادثة "الإجراء":

7c9d4b633c547823.png

كيف سيجذب ذلك المستخدمين؟

من المحتمل أنّ مستخدمي الهواتف الذكية على دراية بالإشعارات الفورية التي تقدّم معلومات وتحديثات خاصة بالتطبيقات. الإشعارات الفورية هي طريقة مرنة للوصول إلى المستخدمين على الأجهزة الجوّالة خارج "مساعد Google"، شرط أن يتم تقديم سبب وجيه للمستخدمين لتفعيلها. من خلال الإشعارات اليومية، يعرف المستخدمون أنّهم سيتلقّون إشعارات بشكل يومي. ومع ذلك، لا يعرف المستخدمون ما إذا كانوا سيوافقون على تلقّي إشعارات غير متكرّرة أو سيتم إزعاجهم بإشعارات متعدّدة في اليوم.

يمكن أن تكون الإشعارات الفورية أداة مفيدة لزيادة التفاعل، ولكن ليس من الضروري تضمينها في كل إجراء. يجب مراعاة النصائح التالية عند تحديد ما إذا كنت تريد إضافة إشعارات فورية إلى "إجراء":

  • خطِّط لبعض الأمثلة على الجداول الزمنية لإشعاراتك الفورية. إذا كنت تخطّط لإرسال إشعار فوري واحد فقط في اليوم، ننصحك باستخدام الإشعارات اليومية بدلاً من ذلك.
  • تأكَّد من أنّ الإشعارات الفورية ستوفّر معلومات مفيدة في كل مرة يتم تلقّيها. يمكن أن ترتبط الإشعارات أيضًا بصفحات معيّنة في أحد أهداف "الإجراء"، لذا تأكَّد من أنّ الهدف مفيد ومناسب.
  • يجب أن تكون صريحًا عند طلب اشتراك أحد المستخدمين في الإشعارات الفورية. يجب أن يعرفوا ما يمكن توقّعه من كل إشعار فوري، وأن يكون لديهم فكرة عن عدد مرّات إرسال الإشعارات.

تفعيل Actions API

  1. افتح وحدة تحكّم Google Cloud واختَر اسم مشروع "إجراءات Google" من القائمة المنسدلة.

d015c1515b99e3db.png

  1. في قائمة التنقّل (☰)، انتقِل إلى واجهات برمجة التطبيقات والخدمات > المكتبة.
  2. ابحث عن Actions API وانقر على تفعيل.

6d464f49c88e70b4.png

إنشاء حساب خدمة

تتطلّب Actions API المصادقة، لذا عليك إنشاء حساب خدمة لإرسال الطلبات. اتّبِع الخطوات التالية لإنشاء مفتاح حساب خدمة وتثبيته لواجهة Actions API:

  1. في قائمة التنقّل (☰) في Google Cloud Console، انتقِل إلى واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.
  2. انقر على إنشاء بيانات اعتماد > مفتاح حساب الخدمة.
  3. في القائمة المنسدلة حساب الخدمة، اختَر حساب خدمة جديد.
  4. املأ المعلومات التالية:
  • اسم حساب الخدمة: service-account
  • الدور: المشروع > المالك
  • رقم تعريف حساب الخدمة: service-account (يتبعه دائمًا ‎ @<project_id>.iam.gserviceaccount.com)
  • نوع المفتاح: JSON
  1. انقر على إنشاء.
  2. انقل ملف JSON الذي تم تنزيله إلى الدليل /user-engagement-codelab/start/functions/ في مشروعك.
  3. أعِد تسمية ملف JSON إلى service-account.json.

d9bd79d35691de3a.png

تفعيل Firestore

لإرسال إشعارات خارج المحادثة، تحتاج إلى طريقة لتخزين معرّفات المستخدمين التي يمكن الرجوع إليها من رمز الإشعارات. في هذا المثال، نستخدم قاعدة بيانات Firestore لتخزين أرقام تعريف المستخدمين المشتركين.

اتّبِع الخطوات التالية لإنشاء قاعدة بيانات Firestore للإجراء:

  1. في وحدة تحكّم Firebase، اختَر اسم مشروعك على "أفعال Google".
  2. في شريط التنقّل الأيمن، انتقِل إلى تطوير > قاعدة البيانات وانقر على إنشاء قاعدة بيانات.
  3. انقر على البدء في وضع الاختبار.
  4. انقر على تفعيل.

6dfc386413954caa.png

إعداد Dialogflow

اتّبِع الخطوات التالية في وحدة تحكّم Dialogflow لإنشاء مسار الموافقة على تلقّي الإشعارات الفورية:

حثّ المستخدم على الاشتراك

  1. إعداد غرض جديد للتعامل مع طلب المستخدم بالاشتراك في خدمة الإشعارات الفورية بشأن الصفوف الملغاة في وحدة تحكّم Dialogflow، انقر على الزر + بجانب طلبات التنفيذ في قائمة التنقّل اليمنى لإنشاء طلب تنفيذ جديد.
  2. أدخِل اسمًا لهذه النية الجديدة Setup Push Notifications.
  3. ضمن قسم عبارات التدريب، أضِف عبارات المستخدم التالية:
  • Subscribe to notifications
  • Send notification
  • Notify me
  • Send class notifications
  • Cancelled notifications
  1. ضمن قسم التنفيذ، فعِّل الخيار تفعيل طلب webhook لهذا الغرض.
  2. انقر على حفظ في أعلى الصفحة.

3d99bc41d0492552.png

التعامل مع قرار المستخدم

  1. إعداد هدف جديد للتعامل مع ردّ المستخدم على طلب الاشتراك في خدمة الإشعارات الفورية انقر على الزر + بجانب النيات في شريط التنقّل الأيمن لإنشاء نية جديدة.
  2. أدخِل اسمًا لهذه النية الجديدة Confirm Push Notifications.
  3. ضمن قسم الأحداث، أضِف actions_intent_PERMISSION. سيتم تشغيل حدث Dialogflow هذا عند انتهاء المستخدم من عملية الاشتراك في الإشعارات الفورية، سواء اشترك أم لا.
  4. ضمن قسم التنفيذ، فعِّل الخيار تفعيل طلب webhook لهذا الغرض.
  5. انقر على حفظ في أعلى الصفحة.

d37f550c5e07cb73.png

التعامل مع الإشعارات الفورية

يمكنك ربط الإشعارات الفورية بهدف معيّن، وبالتالي يتم توجيه المستخدمين الذين ينقرون على الإشعار الفوري مباشرةً إلى هذا الهدف في تطبيقك. في هذا المثال، أضِف هدفًا جديدًا للإشعارات الفورية يقدّم تفاصيل حول الصفوف الملغاة.

اتّبِع الخطوات التالية لإضافة هدف يتم تنشيطه عندما ينقر المستخدم على إشعار فوري:

  1. في وحدة تحكّم Dialogflow، انقر على الزر + بجانب طلبات التنفيذ في قائمة التنقّل اليمنى لإنشاء طلب تنفيذ جديد.
  2. أدخِل اسمًا لهذه النية الجديدة Class Canceled.
  3. ضمن قسم عبارات التدريب، أضِف Cancelations كـ تعبير مستخدم.
  4. ضمن قسم التنفيذ، فعِّل الخيار تفعيل طلب webhook لهذا الغرض.
  5. انقر على حفظ في أعلى الصفحة.

940379556f559631.png

إرسال إشعارات اختبارية أثناء المحادثة

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

اتّبِع الخطوات التالية لإنشاء هدف لاختبار الإشعارات الفورية:

  1. لأغراض الاختبار وتصحيح الأخطاء، يمكنك إعداد غرض جديد يتيح لك إرسال إشعارات فورية إلى المستخدمين المشتركين. في وحدة تحكّم Dialogflow، انقر على الزر + بجانب طلبات التنفيذ في قائمة التنقّل اليمنى لإنشاء طلب تنفيذ جديد.
  2. أدخِل اسمًا لهذه النية الجديدة Test Notification.
  3. ضمن قسم عبارات التدريب، أضِف Test notification كـ تعبير مستخدم.
  4. ضمن قسم التنفيذ، فعِّل الخيار تفعيل طلب webhook لهذا الغرض.
  5. انقر على حفظ في أعلى الصفحة.

6967f5a997643eb8.png

تفعيل الإشعارات الفورية

اتّبِع الخطوات التالية لتفعيل الإشعارات الفورية لغرض إلغاء الصف:

  1. في وحدة تحكّم Dialogflow، انتقِل إلى عمليات الدمج في شريط التنقّل.
  2. في بطاقة مساعد Google، انقر على إعدادات الدمج.
  3. أضِف تم إلغاء الصف كهدف استدعاء ضمني. هذه الخطوة ضرورية لكي يتعرّف Dialogflow على أنّ المستخدمين يمكنهم بدء محادثتك باستخدام الغرض تم إلغاء الصف (من خلال النقر على إشعار فوري).
  4. انقر على إغلاق (Close).

1ac725231ed279a1.png

  1. في "وحدة تحكّم الإجراءات"، انقر على علامة التبويب تطوير، ثم اختَر الإجراءات في شريط التنقّل الأيمن.
  2. انقر على تم إلغاء الصف ضمن قائمة الإجراءات.
  3. ضمن قسم تفاعل المستخدمين، فعِّل خيار هل تريد إرسال إشعارات فورية؟ أو أوقِفه.
  4. اضبط عنوان محتوى وصفيًا يصف الإشعار الفوري. سيكون السياق "هَلْ يُمْكِنُنِي إِرْسَالُ الْإِشْعَارَاتِ الْفَوْرِيَّة بِشَأْنْ ؟"، لذا تأكَّد من أنّ عنوانك وصفي ويبدو صحيحًا عند قراءته بصوت عالٍ. في هذا المثال، اضبط عنوان المحتوى على class cancelations.
  5. انقر على حفظ في أعلى الصفحة.

4304c7cd575f6de3.png

تنفيذ عملية التوصيل

لتنفيذ عملية التنفيذ في Webhook، أكمِل الخطوات التالية:

تحميل الطلبات المرتبطة

b2f84ff91b0e1396.png في ملف index.js، عدِّل الدالة require() لإضافة حزمة UpdatePermission من حزمة actions-on-google، بحيث تبدو عمليات الاستيراد على النحو التالي:

index.js

const {
  dialogflow,
  Suggestions,
  RegisterUpdate,
  UpdatePermission,
} = require('actions-on-google');

تعديل اقتراحات الرقائق

b2f84ff91b0e1396.png في الملف index.js، أضِف إدخال NOTIFICATIONS إلى قائمة عناوين شرائح الاقتراحات، ليصبح تعريف Suggestion على النحو التالي:

index.js

// Suggestion chip titles
const Suggestion = {
  HOURS: 'Ask about hours',
  CLASSES: 'Learn about classes',
  DAILY: 'Send daily reminders',
  NOTIFICATIONS: 'Get notifications',
};

إعداد عمليات استيراد جديدة

لربط تطبيقك بقاعدة بيانات Firestore، أضِف حزمة firebase-admin وأضِف ثوابت للحقول المخزّنة في قاعدة البيانات. عليك أيضًا استيراد الحزمتَين google-auth-library وrequest للتعامل مع المصادقة والطلبات إلى Actions API.

b2f84ff91b0e1396.png في ملف index.js، أضِف الرمز التالي إلى عمليات الاستيراد:

index.js

// Firebase admin import
const admin = require('firebase-admin');

// Initialize Firestore
admin.initializeApp();
const db = admin.firestore();

// Firestore constants
const FirestoreNames = {
 INTENT: 'intent',
 USER_ID: 'userId',
 USERS: 'users',
};

// Actions API authentication imports
const {auth} = require('google-auth-library');
const request = require('request');

عرض إعداد إشعارات إلغاء الحصة

b2f84ff91b0e1396.png في ملف index.js، استبدِل الرمز التالي:

index.js

// Class list intent handler
app.intent('Class List', (conv, {day}) => {
  if (!day) {
    day = DAYS[new Date().getDay()];
  }
  const classes =
  [...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
  .join(', ');
  let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
  // If the user started the conversation from the context of a daily update,
  // the conv's arguments will contain an 'UPDATES' section.
  let engagement = conv.arguments.get('UPDATES');
  // Check the conv arguments to tailor the conversation based on the context.
  if (engagement) {
    classesMessage += `Hope to see you soon at Action Gym!`;
    conv.close(classesMessage);
  } else {
    classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
    conv.ask(classesMessage);
    if (conv.screen) {
      conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
    };
  };
});

مع ما يلي:

index.js

// Class list intent handler
app.intent('Class List', (conv, {day}) => {
  if (!day) {
    day = DAYS[new Date().getDay()];
  }
  const classes =
  [...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
  .join(', ');
  let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
  // If the user started the conversation from the context of a daily update,
  // the conv's arguments will contain an 'UPDATES' section.
  let engagement = conv.arguments.get('UPDATES');
  // Check the conv arguments to tailor the conversation based on the context.
  if (engagement) {
    classesMessage += `Hope to see you soon at Action Gym!`;
    conv.close(classesMessage);
  } else {
    classesMessage += `Would you like to receive daily reminders of upcoming classes, subscribe to notifications about cancelations, or can I help you with anything else?`;
    conv.ask(classesMessage);
    if (conv.screen) {
      conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.NOTIFICATIONS,
Suggestion.HOURS]));
    };
  };
});

إضافة تنفيذ للأهداف الجديدة

عندما يطلب المستخدم الاشتراك في تلقّي الإشعارات الفورية، استدعِ الأداة المساعدة UpdatePermission لطلب الإذن من المستخدم. في حال نجاح ذلك، ستتم إضافة الوسيطة PERMISSION إلى وسيطات العنصر conv التي يمكنك التحقّق منها لتغيير محور المحادثة.

بعد الحصول على إذن المستخدم، خذ رقم تعريف المستخدم من وسيطات العنصر conv واحفظه في قاعدة البيانات. سترسل لاحقًا رقم تعريف المستخدم هذا إلى Actions API، وهي الطريقة التي يحدّد بها "مساعد Google" المستخدم الذي سيتلقّى الإشعار.

أخيرًا، أضِف عملية التنفيذ للنية Class Canceled التي يتم تفعيلها من خلال النقر على الإشعار الفوري. في هذا المثال، يكون ردّك عبارة عن سلسلة عنصر نائب، ولكن في إصدار جاهز للاستخدام من هذا الإجراء، سيوفّر نص الإشعار معلومات أكثر ديناميكية حول الفئة التي تم إلغاؤها.

b2f84ff91b0e1396.png في ملف index.js، أضِف الرمز التالي:

index.js

// Call the User Information helper for permission to send push notifications
app.intent('Setup Push Notifications', (conv) => {
 conv.ask('Update permission for setting up push notifications');
 conv.ask(new UpdatePermission({intent: 'Class Canceled'}));
});

// Handle opt-in or rejection of push notifications
app.intent('Confirm Push Notifications', (conv) => {
 if (conv.arguments.get('PERMISSION')) {
   let userId = conv.arguments.get('UPDATES_USER_ID');
   if (!userId) {
     userId = conv.request.conversation.conversationId;
   }
   // Add the current conversation ID and the notification's
   // target intent to the Firestore database.
   return db.collection(FirestoreNames.USERS)
   .add({
     [FirestoreNames.INTENT]: 'Class Canceled',
     [FirestoreNames.USER_ID]: userId,
   })
   .then(() => {
     conv.ask(`Great, I'll notify you whenever there's a class cancelation. ` +
     'Can I help you with anything else?');
   });
 } else {
   conv.ask(`Okay, I won't send you notifications about class cancelations. ` +
     'Can I help you with anything else?');
 }
 if (conv.screen) {
    conv.ask(new Suggestions([Suggestion.CLASSES, Suggestion.HOURS]));
  }
});

// Intent triggered by tapping the push notification
app.intent('Class Canceled', (conv) => {
 conv.ask('Classname at classtime has been canceled.');
});

إضافة إشعارات اختبارية

لإرسال إشعار فوري إلى مستخدم، أرسِل طلبًا من النوع POST إلى Actions API مع رقم تعريف المستخدم وعنوان الإشعار والهدف المقصود. في هذا المثال، سيؤدي تفعيل هدف "الإشعار التجريبي" إلى تكرار قاعدة بيانات Firestore وإرسال إشعارات فورية إلى كل مستخدم مشترك في تلقّي الإشعارات.

تذكَّر أنّه في هذا المثال، أنت تدرج الرمز الذي يرسل الإشعار الفوري في تنفيذ خطاف الويب وتفعّل هذا الرمز عن طريق استدعاء غرض اختباري في محادثتك. في الإجراءات التي تنوي نشرها، يجب أن يكون رمز الإشعارات الفورية موجودًا في نص برمجي منفصل عن التنفيذ.

b2f84ff91b0e1396.png في ملف index.js، أضِف الرمز التالي:

index.js

// Debug intent to trigger a test push notification
app.intent('Test Notification', (conv) => {
 // Use the Actions API to send a Google Assistant push notification.
 let client = auth.fromJSON(require('./service-account.json'));
 client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'];
 let notification = {
   userNotification: {
     title: 'Test Notification from Action Gym',
   },
   target: {},
 };
 client.authorize((err, tokens) => {
   if (err) {
     throw new Error(`Auth error: ${err}`);
   }
   // Iterate through Firestore and send push notifications to every user
   // who's currently opted in to canceled class notifications.
   db.collection(FirestoreNames.USERS)
       .where(FirestoreNames.INTENT, '==', 'Class Canceled')
       .get()
       .then((querySnapshot) => {
         querySnapshot.forEach((user) => {
           notification.target = {
             userId: user.get(FirestoreNames.USER_ID),
             intent: user.get(FirestoreNames.INTENT),
           };
           request.post('https://actions.googleapis.com/v2/conversations:send', {
             'auth': {
               'bearer': tokens.access_token,
             },
             'json': true,
             'body': {'customPushMessage': notification, 'isInSandbox': true},
           }, (err, httpResponse, body) => {
             if (err) {
               throw new Error(`API request error: ${err}`);
             }
             console.log(`${httpResponse.statusCode}: ` +
               `${httpResponse.statusMessage}`);
             console.log(JSON.stringify(body));
           });
         });
       })
       .catch((error) => {
         throw new Error(`Firestore query error: ${error}`);
       });
 });
 conv.ask('A notification has been sent to all subscribed users.');
});

اختبار الإشعارات الفورية

في الوحدة الطرفية، شغِّل الأمر التالي لنشر رمز خطاف الويب المعدَّل على Firebase:

firebase deploy

لاختبار الإشعارات في محاكي "الإجراءات"، اتّبِع الخطوات التالية:

  1. في "وحدة تحكّم الإجراءات"، انتقِل إلى علامة التبويب اختبار.
  2. اكتب Talk to my test app في حقل الإدخال واضغط على Enter.
  3. اكتب Learn about classes واضغط على Enter.
  4. اكتب Get notifications واضغط على Enter.
  5. إذا لم يسبق لك منح "الإجراء" الإذن بإرسال إشعارات فورية إليك، اكتب yes واضغط على Enter.
  6. اكتب yes واضغط على Enter. من المفترض أن يكون حسابك على Google مشتركًا الآن في تلقّي الإشعارات الفورية لهذا الإجراء.

3a8704bdc0bcbb17.png

  1. اكتب no واضغط على Enter للخروج.
  2. اكتب Talk to my test app واضغط على Enter لبدء محادثة جديدة.
  3. اكتب Test notification واضغط على Enter.

634dfcb0be8dfdec.png

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

33cbde513c10122e.png

5- إنشاء رابط "مساعد Google"

لقد ناقشنا حتى الآن ميزات التفاعل التي يمكنك تنفيذها لتشجيع المستخدمين على العودة إلى مهمّتك، ولكنّ هذه الميزات تعتمد على جذب المستخدمين إلى مهمّتك وتشجيعهم على استخدامها.

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

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

كيف سيجذب ذلك المستخدمين؟

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

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

  • لا تعمل روابط "مساعد Google" إلا بعد نشر الإجراء. عندما يكون مشروعك في حالة مسودة، لن يعمل الرابط إلا على أجهزتك. سيتم توجيه أي مستخدم آخر إلى صفحة الخطأ 404 في دليل الإجراءات.
  • يمكنك السماح للمستخدمين باختبار رابط "مساعد Google" قبل نشره من خلال إطلاق الإجراء في بيئة إصدار أولي أو تجريبي. يُرجى العلم أنّه لن يتمكّن من اختبار رابط "مساعد Google" سوى المستخدمين المشاركين في الإصدار الأوّلي أو التجريبي.
  • احرص على أن يترك الغرض من الرابط المؤدي إلى "مساعد Google" انطباعًا أوّليًا جيدًا لدى المستخدمين الجدد. غرض الترحيب هو الوجهة التلقائية لرابط "مساعد Google" لأنّه من المفترض أن يقدّم تعريفًا جيدًا بالإجراء.

اتّبِع الخطوات التالية لإنشاء رابط "مساعد Google" لغرض الترحيب:

  1. في "وحدة تحكّم الإجراءات"، انقر على علامة التبويب تطوير، ثم اختَرالإجراءات في شريط التنقّل الأيمن.
  2. انقر على actions.intent.MAIN ضمن قائمة الإجراءات.
  3. ضمن قسم الروابط، فعِّل الخيار هل تريد تفعيل عنوان URL لهذا الإجراء؟.
  4. اضبط عنوان رابط وصفيًا يصف الإجراء. اجعل عنوان الإجراء عبارة عن فعل واسم بسيطَين يصفان ما يمكن للمستخدم إنجازه باستخدام الإجراء. في هذا المثال، اضبط عنوان الرابط على learn about Action Gym.
  5. انسخ مقتطف HTML من أسفل هذه الصفحة واحفظه لوقت لاحق.
  6. انقر على حفظ في أعلى الصفحة.

55341b8102b71eab.png

نشر موقع إلكتروني اختباري

لاختبار رابط "مساعد Google"، يمكنك استخدام أدوات Firebase لنشر موقع إلكتروني اختباري إلى جانب عملية التنفيذ. لقد أنشأنا موقعًا إلكترونيًا تجريبيًا بسيطًا لهذا المثال، ما عليك سوى إضافة رابط "مساعد Google".

انتقِل إلى دليل /user-engagement-codelab-nodejs/start/public/ الخاص بالتنفيذ وافتح الملف index.html في محرِّر نصوص.

b2f84ff91b0e1396.png في ملف index.html، ألصِق مقتطف HTML الخاص برابط "مساعد Google" في عنصر النص الأساسي. يجب أن يبدو الملف في النهاية مثل المقتطف أدناه:

index.html

<body>
    <p>
     <a href="https://assistant.google.com/services/invoke/uid/000000efb5f2fd97">🅖 Ask my test app to learn about Action Gym
     </a>
    </p>
</body>

في الوحدة الطرفية، شغِّل الأمر التالي لنشر موقعك الإلكتروني التجريبي على Firebase:

firebase deploy

بعد انتهاء تنفيذ أمر النشر، سجِّل عنوان URL الخاص بخدمة الاستضافة في الناتج.

b01e8d322fb5d623.png

انتقِل إلى عنوان URL هذا على متصفّح الويب على جهازك الجوّال، وسيظهر لك رابط "مساعد Google" على موقعك الإلكتروني التجريبي. من المفترض أن يؤدي النقر على هذا الرابط على جهازك الجوّال إلى توجيهك إلى نية الترحيب الخاصة بالإجراء في "مساعد Google".

599845d647f5b624.png

يمكنك أيضًا محاولة الانتقال إلى عنوان URL للاستضافة على متصفّح كمبيوتر، ما سيؤدي إلى نقلك إلى صفحة 404 في دليل "مساعد Google" لأنّ الإجراء غير منشور.

6. الخطوات التالية

تهانينا!

لقد تعرّفت الآن على أهمية تفاعل المستخدمين عند تطوير إجراء، والميزات المتاحة على المنصة لتشجيع تفاعل المستخدمين، وكيفية إضافة كل ميزة إلى إجراء.

مراجع تعليمية إضافية

استكشِف هذه المراجع لمعرفة المزيد عن تفاعل المستخدمين مع "الإجراء":

تابِعنا على Twitter ‎@ActionsOnGoogle للاطّلاع على آخر إشعاراتنا، وشاركنا ما أنشأته من خلال التغريد باستخدام الهاشتاج #AoGDevs.

استطلاع لجمع الملاحظات

قبل المغادرة، يُرجى ملء هذا النموذج لإعلامنا برأيك في الخدمة.