إذا كان الإجراء الخاص بك يقدّم قيمة للمستخدمين كل يوم، يمكنك تذكيرهم بما يلي: استخدامه من خلال ضبط التحديثات اليومية. عندما يشترك المستخدم في التحديثات الخاصة بالإجراء، سيتلقّون إشعارًا فوريًا يمكنهم انقر لاستدعاء أحد أغراض الإجراء.
في ما يلي تجربة المستخدم مع هذه التحديثات:
- يستدعي المستخدم أحد أغراض الإجراء التي ضبطتها على أنّها تحديث يومي.
- يتبع المستخدم مطالبة للاشتراك في التحديثات اليومية. هذا الطلب هو يتم تقديمه في منتصف المحادثة أو كشريحة اقتراح عند انتهاء المحادثة.
- يجدول المستخدم وقتًا من اليوم يرغب في تلقيه يوميًا تحديث، يتم تسجيل التحديث باستخدام "مساعد Google".
- يتلقّى المستخدم خدمة "مساعد Google" في الموعد المحدّد كل يوم. إشعار على أجهزتهم الجوّالة.
- عندما يفتح المستخدِم هذا الإشعار، فإنّه يستدعي الغرض الذي كتحديث يومي والتفاعل مع الإجراء.
يظهر تلقائيًا طلب تسجيل التحديث اليومي كشريحة اقتراح. عندما يخرج المستخدم من الإجراء بنجاح. يمكنك أيضًا إضافة محادثة في منتصف المحادثة مطالبة التسجيل أو تخصيص تحديثات المستخدم.
حالات الاستخدام
يمكن أن تكون التحديثات اليومية أداة مفيدة للتفاعل ولكن لا ينبغي مدمجة في كل إجراء. ننصحك باتّباع هذه النصائح عند تحديد ما إذا كنت تريد إضافة تحديث الاشتراكات يوميًا إلى إجراء:
- تأكَّد من أنّ التحديثات اليومية ستؤدي إلى عرض محتوى مختلف ومفيد للمستخدم. المعلومات كل يوم. إذا كان النقر على تحديث يومي يؤدي إلى ظهور الطلب نفسه في كل مرة، قد يلغي المستخدم اشتراكه بعد بضعة أيام.
- تأكد من أن مربع الحوار الخاص بك منطقي للمستخدم إذا انتقل مباشرةً إلى وهدف التحديث اليومي. لن يبدأ المستخدم بالضرورة من البداية من المحادثة، لذلك لا ينبغي توقع أن يكون لها الكثير من السياق.
- عليك إطلاع المستخدمين على مزايا الإجراء الخاص بك قبل مطالبتهم بالتسجيل. للحصول على تحديثات يومية. يجب أن يفكر المستخدم "أريد هذا المحتوى كل يَوْم عندما يتوفر لهم خيار الاشتراك
- لا تربك المستخدم باقتراحات متكررة للتسجيل. عرض الحصول على تحديثات يومية مباشرةً بعد أن يُظهر للمستخدم الاشتراك وتجنب تكرار العرض في سياقات أخرى.
- احرِص على أن تكون المحادثة قصيرة بعد أن يبدأ إجراء التحديث. الأكثر يوميًا ينبغي أن تتكون التحديثات فقط من رد واحد ثم تُغلق بدون ما يتطلب من المستخدم إدخال بيانات
إعداد المعلومات اليومية
الاستكشاف في Dialogflow
انقر على متابعة لاستيراد نموذج التعديلات اليومية في Dialogflow. بعد ذلك، اتبع الخطوات أدناه لنشر النموذج واختباره:
- أدخِل اسم الوكيل وأنشِئ وكيل Dialogflow جديد للنموذج.
- بعد انتهاء عملية الاستيراد، انقر على الانتقال إلى الوكيل.
- من قائمة التنقّل الرئيسية، انتقِل إلى توصيل الطلبات.
- فعِّل المحرّر المضمّن، ثم انقر على نشر. يحتوي المحرِّر على العيّنة الرمز.
- من قائمة التنقل الرئيسية، انتقِل إلى عمليات الدمج، ثم انقر على Google "مساعد Google"
- في النافذة المشروطة التي تظهر، فعِّل تغييرات المعاينة التلقائية وانقر على اختبار. لفتح محاكي الإجراءات.
- في المحاكي، أدخِل
Talk to my test app
لاختبار العيّنة.
لضبط أحد أغراض الإجراء للحصول على تعديلات يومية، يُرجى اتّباع الخطوات التالية: التعليمات:
1. إعداد هدف التحديث
اضبط أحد أغراض الإجراء على أنّه هدف للتحفيز. هذا الغرض تمكين إرسال تحديث يومي إلى المستخدمين عندما يفتح المستخدِم التحديث اليومي والإشعار ومشغلات الهدف والمحادثة ويستمر من هناك.
لتحديد هدف تشغيل في Dialogflow، يُرجى اتّباع الخطوات التالية:
- في وحدة تحكُّم Dialogflow، انقر على عمليات الدمج:
- ضمن القسم مساعد Google، انقر على إعدادات الدمج.
- ضمن الاكتشاف > استدعاء ضمني: انقر على إضافة هدف. وحدِّد الغرض من التحفيز إذا لم يسبق لك ذلك.
- فعِّل تغييرات المعاينة التلقائية إذا لم يكن مُفعَّلاً.
- انقر على إغلاق.
في حزمة SDK للإجراءات، حدّد الغرض من التحديث على أنه هدف تشغيل في حزمة الإجراءات.
2. تفعيل التحديثات
لتفعيل الإشعارات اليومية بغرض التفعيل، اتّبِع الخطوات التالية:
- في وحدة تحكّم المهام، انتقل إلى تطوير > الإجراءات:
- اختَر الهدف الذي تريد تفعيله. إذا لم يظهر هدفك في القائمة، تأكَّد من أنّه قد تم ضبطها على أنّها الغرض الرئيسي من تنفيذ هذا الإجراء، ومن أنّ مساعد Dialogflow تعيين الدمج على المعاينة التلقائية للتغييرات.
- انتقِل للأسفل حتى تصل إلى قسم تفاعل المستخدمين وفعِّله. هل تريد عرض تحديثات يومية للمستخدمين؟
- أدخِل عنوان المحتوى.
- انقر على حفظ.
لقد ضبطت الآن الإجراء الخاص بك لتقديم اشتراكات تحديث يومية والنية. يمكنك الآن اختبار معلوماتك اليومية على جهازك الجوّال.
تخصيص تسجيل التحديث (اختياري)
بالإضافة إلى شريحة الاقتراح والتحديث اليومي الذي يعالجه "مساعد Google" التسجيل، فقم بإشراك المستخدمين في التحديثات اليومية مربع الحوار الخاص ومطالبة التسجيل.
للحصول على مثال كامل على إجراء يعالج ميزات تحديث يومية اختيارية، الاطّلاع على نماذج تفاعل المستخدمين في "المهام مع مساعد Google" (Node.js وJava).
لإضافة طلب تسجيل تعديل يومي مخصَّص إلى محادثتك، يُرجى اتّباع الخطوات التالية: هذه التعليمات:
1. إضافة طلب التسجيل
يمكنك إضافة مربّع حوار وشريحة اقتراح إلى المحادثة عندما تريد إرسال طلب بذلك. للمستخدمين للاشتراك في التحديثات اليومية. تقديم هذه الطلبات بعد تفاعل المستخدم بغرض التحديث، حتى يفهموا محتويات التحديثات.
يطالب رمز المثال التالي المستخدم بالاشتراك في التحديثات اليومية التي تقديم أدنى درجة حرارة متوقعة كل يوم:
app.intent('Daily Lowest Temperature', (conv, params) => { const today = DAYS[new Date().getDay()]; const lowestTemperature = lowestTemperatures[today]; conv.ask(`The lowest temperature for today is ${lowestTemperature}`); conv.ask('I can send you daily updates with the lowest temperature' + ' of the day. Would you like that?'); conv.ask(new Suggestions('Send daily updates')); });
@ForIntent("Daily Lowest Temperature") public ActionResponse dailyLowestTemperature(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); Integer lowestTemperature = LOWEST_TEMPERATURES.get(LocalDate.now().getDayOfWeek()); responseBuilder .add("The lowest temperature for today is " + lowestTemperature + " degrees Fahrenheit.") .add("I can send you daily updates with the lowest temperature of " + "the day. Would you like that?") .addSuggestions(new String[] { "Send daily updates" }); return responseBuilder.build(); }
تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit" } }, { "simpleResponse": { "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?" } } ], "suggestions": [ { "title": "Send daily updates" } ] } } } }
تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit" } }, { "simpleResponse": { "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?" } } ], "suggestions": [ { "title": "Send daily updates" } ] } } } ] }
2. تسجيل تحديثات الاسم المعرِّف
إعداد هدف جديد يتم تفعيله عندما يتابع المستخدم تسجيلك
مطالبة. عند تنفيذ هذا الغرض الجديد، فعِّل actions_intent_CONFIGURE_UPDATES
.
هدف مدمج مع
المَعلمات التالية:
intent
: اضبط الغرض من التحديث الذي ضبطته.frequency
: ضبط الخيار على يومي
يسجِّل الرمز التالي التعديلات اليومية على "أدنى درجة حرارة يومية" الغرض:
app.intent('Subscribe to Daily Updates', (conv) => { conv.ask(new RegisterUpdate({ intent: 'Daily Lowest Temperature', frequency: 'DAILY', })); });
conv.ask(new RegisterUpdate({ intent: 'Daily Lowest Temperature', frequency: 'DAILY', }));
@ForIntent("Subscribe to Daily Updates") public ActionResponse subscribeToDailyUpdates(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); return responseBuilder.add(new RegisterUpdate() .setIntent("Daily Lowest Temperature") .setFrequency("DAILY")) .build(); }
ResponseBuilder responseBuilder = getResponseBuilder(request); return responseBuilder.add(new RegisterUpdate() .setIntent("Daily Lowest Temperature") .setFrequency("DAILY")) .build();
{ "payload": { "google": { "expectUserResponse": true, "systemIntent": { "intent": "actions.intent.REGISTER_UPDATE", "data": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "Daily Lowest Temperature", "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } } } }
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.REGISTER_UPDATE", "inputValueData": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "Daily Lowest Temperature", "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } ] } ] }
3- التعامل مع النتيجة
يتولى "مساعد Google" محادثتك ويرشد المستخدم خلال بقية تهيئة تحديثاتهم اليومية. عند اكتمال التسجيل، يشغّل "مساعد Google" هدفًا باستخدام معلَمة تشير إلى ما إذا كان كان التسجيل ناجحًا أم لا.
تختلف تعليمات هذه الخطوة بناءً على ما إذا كنت تستخدم Dialogflow أو حزمة SDK للإجراءات في عملية التطوير.
اتّبِع الخطوات التالية لإنشاء هدف يعالج نتيجة التسجيل:
- في وحدة تحكُّم Dialogflow، وأنشئ مقصدًا جديدًا.
- أضِف الحدث
actions_intent_REGISTER_UPDATE
. - فعِّل تنفيذ الرد التلقائي على الويب للهدف.
- انقر على حفظ.
registered
.
الخاصة بالنتيجة، وتوجيه المحادثة وفقًا لذلك.
app.intent('Confirm Daily Updates Subscription', (conv, params, registered) => { if (registered && registered.status === 'OK') { conv.close(`Ok, I'll start giving you daily updates.`); } else { conv.close(`Ok, I won't give you daily updates.`); } });
@ForIntent("Confirm Daily Updates Subscription") public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); if (request.isUpdateRegistered()) { responseBuilder.add("Ok, I'll start giving you daily updates."); } else { responseBuilder.add("Ok, I won't give you daily updates."); } return responseBuilder.endConversation().build(); }
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Ok, I'll start giving you daily updates." } } ] } } } }
في رمز توصيل الطلب، أضِف طريقة التعامل مع actions.intent.REGISTER.UPDATE
.
هدف مضمّن. تحقَّق من مَعلمة registered
الخاصة بالنتيجة.
وتركيز المحادثة وفقًا لذلك.
app.intent('actions.intent.REGISTER_UPDATE', (conv, params, registered) => { if (registered && registered.status === 'OK') { conv.close(`Ok, I'll start giving you daily updates.`); } else { conv.close(`Ok, I won't give you daily updates.`); } });
@ForIntent("actions.intent.REGISTER_UPDATE") public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); if (request.isUpdateRegistered()) { responseBuilder.add("Ok, I'll start giving you daily updates."); } else { responseBuilder.add("Ok, I won't give you daily updates."); } return responseBuilder.endConversation().build(); }
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Ok, I'll start giving you daily updates." } } ] } } }
تخصيص التحديثات (اختياري)
لتخصيص النية من عملية التحديث، أضِف مَعلمات مخصّصة عندما يُسجّل المستخدمون. وآخر الأخبار اليومية. عند تنفيذ الغرض من التحديث، يُرجى الإشارة إلى هذه المَعلمات. لتخصيص التحديث اليومي لهذا المستخدم.
تختلف تعليمات هذه الميزة بناءً على ما إذا كنت تستخدم Dialogflow أو حزمة SDK للإجراءات في عملية التطوير.
حدِّد كيان Dialogflow لمعالجة المعلمات المخصّصة للتحديث، ثم تسليم قيمة المعلمة كوسيطة في الغرض من التحديث. لإعداد التعديلات المخصّصة في Dialogflow، يُرجى اتّباع الخطوات التالية:
- في وحدة تحكُّم Dialogflow، أنشئ كيانًا جديدًا.
- أضف بعض الإدخالات والمرادفات ذات الصلة بالمعلمة.
- انقر على حفظ، ثم افتح هدفك من التحديث.
- في قسم الإجراءات والمعلّمات، حدِّد
actions.intent.CONFIGURE_UPDATES
باسم الحدث. في القسم نفسه، أضِف مَعلمة من نوع العنصر الجديد نفسه. - فتح "تسجيل التحديث" الغرض الذي يعالج الهدف المضمَّن فيه:
CONFIGURE_UPDATES
- في قسم الإجراءات والمَعلمات، أضِف مَعلمة مطلوبة واضبط نوعها على العنصر الذي تم إنشاؤه سابقًا.
- عدِّل رمز التنفيذ الخاص بالنية من التسجيل لتضمين عنصر
arguments
مع المحتوى التالي:name
- اسم المَعلمة التي تم ضبطها في DialogflowtextValue
- قيمة المعلمة
يقرأ التعليمة البرمجية التالية قيمة المعلمة ويستخدمها في طلب تسجيل التحديث:
app.intent('setup_update', (conv) => { conv.ask(new RegisterUpdate({ intent: 'update_of_the_day', arguments: [ { name: 'category', textValue: 'Daily_lowest_temperature', }, ], frequency: 'DAILY', })); });
@ForIntent("setup_update") public ActionResponse setupUpdate2(ActionRequest request) { List<Argument> args = Arrays.asList( new Argument() .setName("category") .setTextValue(request.getParameter("category").toString())); return getResponseBuilder(request) .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY")) .build(); }
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "PLACEHOLDER" } } ] }, "userStorage": "{\"data\":{}}", "systemIntent": { "intent": "actions.intent.REGISTER_UPDATE", "data": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "update_of_the_day", "arguments": [ { "name": "category", "textValue": "Daily_lowest_temperature" } ], "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } } }, "outputContexts": [ { "name": "/contexts/_actions_on_google", "lifespanCount": 99, "parameters": { "data": "{}" } } ] }
طلب معلومات إضافية من المستخدم في عملية التنفيذ المطلوبة ثم تسليم المعلومات كوسيطة في الغرض من التحديث. لإعداد التحديثات المخصّصة في حزمة تطوير البرامج (SDK) للإجراءات، يمكنك اتّباع الخطوات التالية:
- مطالبة المستخدم بالمعلومات التي تريد استخدامها التخصيص.
- في رمز توصيل الطلب الخاص بـ "تسجيل التحديث" النية في أن
معالجة
CONFIGURE UPDATES
تتضمن كائنarguments
مع المحتوى التالي:name
: اسم للوسيطةtextValue
: معلومات من المستخدم، يجب تمريرها كوسيطة
يرسل الرمز التالي وسيطة مع طلب تسجيل التحديث:
app.intent('actions.intent.TEXT', (conv) => { if (conv.input.raw === 'Send daily') { conv.ask(new RegisterUpdate({ intent: 'update_of_the_day', arguments: [ { name: 'category', textValue: 'Daily_lowest_temperature', }, ], frequency: 'DAILY', })); } });
@ForIntent("actions.intent.CONFIGURE_UPDATES") public ActionResponse configureUpdatesActionsSdk(ActionRequest request) { List<Argument> args = Arrays.asList( new Argument() .setName("category") .setTextValue(request.getParameter("category").toString())); return getResponseBuilder(request) .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY")) .build(); } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { ResponseBuilder rb = getResponseBuilder(request); String input = request.getRawInput().getQuery(); if (input.equals("DAILY_NOTIFICATION_SUGGESTION")) { rb.add("For which category do you want to receive daily updates?"); } else { rb.add("Sorry, I didn't get that. Please try again later").endConversation(); } return rb.build(); }
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "PLACEHOLDER" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.REGISTER_UPDATE", "inputValueData": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "update_of_the_day", "arguments": [ { "name": "category", "textValue": "Daily_lowest_temperature" } ], "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
عندما يستدعي المستخدم التحديث اليومي، ستتضمّن النية من عملية التحديث الآن. الوسيطات التي تحتوي على القيم التي قدمها المستخدم أثناء التسجيل. استخدام هذه لتخصيص التحديث لكل مستخدم.
اختبار التحديثات اليومية
يمكنك اختبار المعلومات اليومية باستخدام جهاز جوّال ومساعد Google. حساب Google نفسه الذي استخدمته لإنشاء الإجراء الخاص بك استدعاء الإجراء الخاص بك والاشتراك في التحديثات اليومية، ثم الاطّلاع على إشعارات جهازك حول وقت التحديث.