الإشعارات اليومية (Dialogflow)

مستخدِم يشترك في التحديثات اليومية لأحد الإجراءات على هاتفه

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

وتكون تجربة المستخدم مع هذه التعديلات كما يلي:

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

تظهر رسالة تسجيل التحديث اليومي بشكل تلقائي كشريحة اقتراح عندما يخرج المستخدم من الإجراء بنجاح. يمكنك أيضًا إضافة مطالبة التسجيل في منتصف المحادثة أو تخصيص تحديثات المستخدم.

حالات الاستخدام

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

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

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

الاستكشاف في Dialogflow

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

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

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

1- تحضير النية في عملية التحديث

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

لتحديد هدف تفعيل في Dialogflow، اتّبِع الخطوات التالية:

  1. في وحدة تحكّم Dialogflow، انقر على عمليات الدمج.
  2. ضمن القسم مساعد Google، انقر على إعدادات الدمج.
  3. ضمن الاكتشاف > الاستدعاء الضمني، انقر على إضافة هدف واختَر نيّة التشغيل إذا لم تكن متوفّرة.
  4. فعِّل تغييرات المعاينة التلقائية إذا لم يسبق لك تفعيلها.
  5. انقر على إغلاق.

في حزمة الإجراءات (SDK)، حدِّد الغرض من التحديث كهدف تشغيلي في حزمة الإجراءات.

2. تفعيل التحديثات

لتفعيل التحديثات اليومية للنية التي تؤدي إلى التفعيل، عليك اتّباع الخطوات التالية:

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

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

تخصيص تسجيل التحديث (اختياري)

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

للحصول على مثال كامل على إجراء يعالج ميزات اختيارية للتحديث اليومي، يمكنك الاطّلاع على نماذج تفاعل المستخدمين في "المهام مع مساعد Google" (Node.js وJava).

لإضافة طلب تسجيل تحديث يومي مخصَّص إلى محادثتك، يُرجى اتّباع التعليمات التالية:

1- إضافة طلب التسجيل

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

يطالب الرمز النموذجي التالي المستخدم بالاشتراك في التحديثات اليومية التي توفر أدنى درجة حرارة متوقعة يوميًا:

Node.js
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'));
});
Java
@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();
}
Dialogflow JSON

تجدر الإشارة إلى أنّ تنسيق 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"
          }
        ]
      }
    }
  }
}
حزمة SDK الخاصة بالإجراءات بتنسيق JSON

تجدر الإشارة إلى أنّ تنسيق 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 - ضبط على "يومي".

يسجّل الرمز التالي التحديثات اليومية لهدف "درجة الحرارة الأدنى يوميًا":

Dialogflow Node.js
app.intent('Subscribe to Daily Updates', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'Daily Lowest Temperature',
    frequency: 'DAILY',
  }));
});
حزمة SDK الخاصة بالإجراءات Node.js
conv.ask(new RegisterUpdate({
  intent: 'Daily Lowest Temperature',
  frequency: 'DAILY',
}));
JavaScript Dialogflow
@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();
}
حزمة تطوير البرامج (SDK) لـ "الإجراءات" بلغة Java
ResponseBuilder responseBuilder = getResponseBuilder(request);
return responseBuilder.add(new RegisterUpdate()
    .setIntent("Daily Lowest Temperature")
    .setFrequency("DAILY"))
    .build();
Dialogflow JSON
{
  "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"
            }
          }
        }
      }
    }
  }
}
حزمة SDK الخاصة بالإجراءات بتنسيق JSON
{
  "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) لـ "المهام مع مساعد Google".

Dialogflow

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

  1. في وحدة تحكُّم Dialogflow، أنشِئ هدفًا جديدًا.
  2. أضِف الحدث "actions_intent_REGISTER_UPDATE".
  3. فعِّل تنفيذ الرد التلقائي على الويب من أجل الغرض.
  4. انقر على حفظ.
أثناء تنفيذ الغرض، تحقَّق من المَعلمة registered للنتيجة ووجِّه المحادثة وفقًا لذلك.
Dialogflow Node.js
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.`);
  }
});
JavaScript Dialogflow
@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();
}
Dialogflow JSON
{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Ok, I'll start giving you daily updates."
            }
          }
        ]
      }
    }
  }
}
حزمة SDK الخاصة بالإجراءات

في رمز طريقة التنفيذ، أضِف طريقة المناولة للغرض المضمَّن في actions.intent.REGISTER.UPDATE. تحقَّق من معلَمة registered للنتيجة، وعدِّل المحادثة وفقًا لذلك.

حزمة SDK الخاصة بالإجراءات Node.js
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.`);
  }
});
حزمة تطوير البرامج (SDK) لـ "الإجراءات" بلغة Java
@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();
}
حزمة SDK الخاصة بالإجراءات بتنسيق JSON
{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Ok, I'll start giving you daily updates."
          }
        }
      ]
    }
  }
}

تخصيص التحديثات (اختياري)

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

تختلف تعليمات هذه الميزة حسب ما إذا كنت تستخدم Dialogflow أو حزمة تطوير البرامج (SDK) لـ "المهام مع مساعد Google".

Dialogflow

حدِّد كيان Dialogflow للتعامل مع المَعلمات المخصَّصة للتعديل، ثم سلِّم قيمة المَعلمة كوسيطة للقصد من التعديل. لإعداد تعديلات مخصّصة في Dialogflow، اتّبِع الخطوات التالية:

  1. في وحدة تحكُّم Dialogflow، أنشِئ كيانًا جديدًا.
  2. أضِف بعض الإدخالات والمرادفات ذات الصلة بالمَعلمة.
  3. انقر على حفظ، ثمّ افتح الغرض من التعديل.
  4. في قسم الإجراءات والمَعلمات، اضبط السمة actions.intent.CONFIGURE_UPDATES كحدث. في القسم نفسه، أضِف مَعلمة من نوع الكيان الجديد نفسه.
  5. افتح الغرض من "تسجيل التحديث" الذي يعالج الغرض المضمَّن في CONFIGURE_UPDATES.
  6. في قسم الإجراءات والمَعلمات، أضِف مَعلمة مطلوبة واضبط نوعها على الكيان الذي تمّ إنشاؤه مسبقًا.
  7. عدِّل رمز التنفيذ الخاص بالرغبة في التسجيل ليتضمن عنصر arguments مع المحتوى التالي:
    • name - اسم المَعلمة وفقًا للإعدادات التي تم ضبطها في Dialogflow.
    • textValue - قيمة المعلمة

يقرأ الرمز التالي قيمة المَعلمة ويستخدمها في طلب تسجيل التعديل:

Dialogflow Node.js
app.intent('setup_update', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'update_of_the_day',
    arguments: [
      {
        name: 'category',
        textValue: 'Daily_lowest_temperature',
      },
    ],
    frequency: 'DAILY',
  }));
});
JavaScript Dialogflow
@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();
}
Dialogflow JSON
{
  "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 الخاصة بالإجراءات

اطلب معلومات إضافية من المستخدم في تنفيذ هدفك، ثم سلِّم المعلومات كوسيطة للقصد من التعديل. لإعداد تحديثات مخصّصة في حزمة تطوير البرامج (SDK) للإجراءات، عليك اتّباع الخطوات التالية:

  1. مطالبة المستخدم بالمعلومات التي تريد استخدامها للتخصيص
  2. في رمز التنفيذ لغرض "تسجيل التحديث" الذي يعالج CONFIGURE UPDATES، يجب تضمين عنصر arguments بالمحتوى التالي:
    • name - اسم الوسيطة
    • textValue - معلومات من المستخدم يجب تمريرها كوسيطة

يرسل الرمز التالي وسيطة مع طلب تسجيل التحديث:

حزمة SDK الخاصة بالإجراءات Node.js
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',
    }));
  }
});
حزمة تطوير البرامج (SDK) لـ "الإجراءات" بلغة Java
@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();
}
حزمة SDK الخاصة بالإجراءات بتنسيق JSON
{
  "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 نفسه الذي استخدمته لإنشاء الإجراء. استدعِ الإجراء الخاص بك واشترك في التحديثات اليومية، ثم تحقق من إشعارات جهازك قرابة وقت التحديث.