עדכונים יומיים (Dialogflow)

משתמש שנרשם לעדכונים יומיים של פעולה בטלפון שלו

אם הפעולה מספקת למשתמשים ערך מוסף כל יום, כדאי להגדיר עדכונים יומיים כדי להזכיר להם להשתמש בה. כשמשתמש נרשם לעדכונים יומיים לגבי הפעולה, הוא מקבל התראה שהוא יכול להקיש עליו כדי להפעיל אחת מהכוונות של הפעולה.

חוויית המשתמש עם העדכונים האלה היא:

  1. המשתמש מפעיל אחת מפעולות ה-Intent שהגדרתם כעדכון יומי.
  2. המשתמש צריך לפעול לפי בקשה להירשם לעדכונים יומיים. ההנחיה הזו מוצגת במהלך השיחה או כצ'יפ הצעה כשהשיחה מסתיימת.
  3. המשתמש קובע שעה ביום שבה הוא מעוניין לקבל את העדכון היומי, תוך רישום העדכון ב-Google Assistant.
  4. המשתמש יקבל התראה מ-Assistant במכשיר הנייד בשעה שנקבעה לו בכל יום.
  5. כשהמשתמשים פותחים את ההתראה, הם מפעילים את הכוונה שהגדרתם כעדכון יומי ויוצרים אינטראקציה עם הפעולה.

כברירת מחדל, הבקשה לרישום עדכון יומי מופיעה כצ'יפ של הצעה כשמשתמשים יוצאים מהפעולה בהצלחה. תוכלו גם להוסיף הנחיה לרישום במהלך השיחה או להתאים אישית את העדכונים למשתמש.

תרחישים לדוגמה

עדכונים יומיים יכולים להיות כלי שימושי ליצירת מעורבות, אבל אסור לשלב אותם בכל פעולה. כדאי להביא בחשבון את הטיפים הבאים כשאתם מחליטים אם להוסיף מינויים לעדכונים יומיים לפעולה:

  • חשוב לוודא שהעדכונים היומיים יגרמו למשתמשים לראות מידע שימושי שונה בכל יום. אם הקשה על עדכון יומי גורמת לאותה הודעה בכל פעם, סביר להניח שהמשתמש יבטל את ההרשמה אחרי כמה ימים.
  • חשוב לוודא שתיבת הדו-שיח נראית הגיונית למשתמשים אם הם מועברים ישירות לכוונת העדכון היומי. המשתמש לא בהכרח יתחיל מתחילת השיחה, לכן לא אמור להיות לו הקשר רב.
  • כדאי להציג למשתמשים את היתרונות של הפעולה לפני שמבקשים להירשם לקבלת עדכונים יומיים. המשתמשים שלכם צריכים לחשוב 'אני רוצה את התוכן הזה כל יום' כשמקבלים אפשרות להירשם כמנויים.
  • אין להציף את המשתמש בהצעות רישום חוזרות. מומלץ להציע למשתמשים מינוי לעדכון יומי מיד אחרי שהראו למשתמשים למה הם מנויים, ולא לחזור על המבצע בהקשרים אחרים.
  • צריך להקפיד שהשיחה תהיה קצרה אחרי שכוונת העדכון מופעלת. רוב העדכונים היומיים צריכים לכלול רק תגובה אחת ולאחר מכן להיסגר, ללא צורך בקלט של משתמשים.

הגדרת העדכונים היומיים

אפשרויות נוספות ב-Dialogflow

אפשר ללחוץ על המשך כדי לייבא את הדוגמה של עדכונים יומיים ל-Dialogflow. לאחר מכן, מבצעים את הפעולות הבאות כדי לפרוס את הדוגמה ולבדוק אותה:

  1. צריך להזין שם נציג וליצור נציג חדש ב-Dialogflow לדוגמה.
  2. כשמסיימים לייבא את הנציג, לוחצים על מעבר לנציג.
  3. מתפריט הניווט הראשי, עוברים אל מילוי הזמנה.
  4. מפעילים את עורך מוטבע ולוחצים על פריסה. העורך מכיל את הקוד לדוגמה.
  5. בתפריט הניווט הראשי, נכנסים אל Integrations (שילובים) ולוחצים על Google Assistant.
  6. בחלון החלון הקופץ, מפעילים את האפשרות שינויים בתצוגה מקדימה אוטומטית ולוחצים על בדיקה כדי לפתוח את סימולטור הפעולות.
  7. בסימולטור, מזינים Talk to my test app כדי לבדוק את הטעימה!
המשך

כדי להגדיר עדכונים יומיים ב-Intent לאחת מהמטרות הבאות של הפעולה:

1. הכנת כוונה לעדכון

צריך להגדיר אחת מאובייקטים מסוג Intent של הפעולה כ-Intent מפעיל. כוונה כזו מאפשרת לשלוח עדכון יומי למשתמשים. כשמשתמש פותח את הודעת העדכון היומית, הכוונה (Intent) מופעלת והשיחה ממשיכה משם.

כדי להגדיר Intent מפעיל ב-Dialogflow:

  1. ב-Dialogflow Console, לוחצים על Integrations (שילובים).
  2. בקטע Google Assistant, לוחצים על הגדרות שילוב.
  3. בקטע Discovery > Implicit in avocation, לוחצים על Add intent (הוספת כוונה) ובוחרים את Intent הטריגר אם הוא עדיין לא נמצא שם.
  4. מפעילים את השינויים באמצעות ההגדרה תצוגה מקדימה אוטומטית, אם היא עדיין לא הופעלה.
  5. לוחצים על Close.

ב-Actions SDK, יש להגדיר את Intent העדכון כ-Intent מפעיל בחבילת הפעולות.

2. הפעלת העדכונים

כדי להפעיל עדכונים יומיים לגבי Intent הטריגרים, צריך לבצע את הפעולות הבאות:

  1. בקונסולה ל-Actions, עוברים אל פיתוח > פעולות.
  2. בוחרים את הכוונה של הטריגר. אם הכוונה שלכם לא מופיעה ברשימה, ודאו שהיא מוגדרת כ-Intent מפעיל, ושהשילוב עם Assistant של Dialogflow מוגדר להצגת שינויים בתצוגה מקדימה אוטומטית.
  3. גוללים למטה אל הקטע התעניינות המשתמשים ומפעילים את האפשרות האם רוצים להציע עדכונים יומיים למשתמשים.
  4. מזינים את שם התוכן.
  5. לוחצים על שמירה.

עכשיו הגדרתם את הפעולה כך שתציע מינויים לעדכונים יומיים עבור מטרה מסוימת. עכשיו אפשר לבדוק את העדכונים היומיים במכשיר הנייד שלך.

התאמה אישית של רישום העדכון (אופציונלי)

נוסף על צ'יפ ההצעות ועל תהליך הרישום של העדכונים היומיים שמנוהלים על ידי Assistant, כדאי לרשום את המשתמשים לקבלת עדכונים יומיים באמצעות תיבת דו-שיח משלכם ובקשת הרשמה.

דוגמה מלאה לפעולה שמטפלת בתכונות עדכון יומיות אופציונליות, עיינו בדוגמאות של מעורבות משתמשים ב-Actions on 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 שמוצג בהמשך מתאר תגובה של תגובה לפעולה מאתר אחר (webhook).

{
  "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"
          }
        ]
      }
    }
  }
}
Actions SDK JSON

שימו לב: קובץ ה-JSON שמוצג בהמשך מתאר תגובה של תגובה לפעולה מאתר אחר (webhook).

{
  "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. טיפול ברישום לעדכון

אפשר להגדיר Intent חדש שמופעל כשהמשתמש ממלא את בקשת ההרשמה. במילוי הבקשה של ה-Intent החדש, מפעילים את ה-Intent המובנה actions_intent_CONFIGURE_UPDATES עם הפרמטרים הבאים:

  • intent – הגדרה לכוונת העדכון שהגדרתם.
  • frequency – מוגדר לערך "DAILY".

הקוד הבא מתעד עדכונים יומיים לכוונה "Daily Lowest Temperature":

Dialogflow Node.js
app.intent('Subscribe to Daily Updates', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'Daily Lowest Temperature',
    frequency: 'DAILY',
  }));
});
Actions SDK Node.js
conv.ask(new RegisterUpdate({
  intent: 'Daily Lowest Temperature',
  frequency: 'DAILY',
}));
Dialogflow Java
@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();
}
Actions 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"
            }
          }
        }
      }
    }
  }
}
Actions 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. טיפול בתוצאה

Assistant מעבירה את המשתמשים לשיחה וומובילה את המשתמשים להמשך הגדרת העדכונים היומיים. כשהרישום הושלם, Assistant מפעילה Intent עם פרמטר שמציין אם הרישום הצליח או לא.

ההוראות בשלב הזה משתנות בהתאם לאופן שבו משתמשים ב-Dialogflow או ב-Actions SDK לפיתוח.

Dialogflow

כדי ליצור Intent שמטפל בתוצאת הרישום:

  1. במסוף של Dialogflow, יוצרים Intent חדש.
  2. צריך להוסיף את האירוע actions_intent_REGISTER_UPDATE.
  3. יש להפעיל את מילוי ה-webhook עבור ה-Intent.
  4. לוחצים על שמירה.
במילוי הבקשה ל-Intent, בודקים את הפרמטר 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.`);
  }
});
Dialogflow Java
@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."
            }
          }
        ]
      }
    }
  }
}
Actions SDK

בקוד מילוי הבקשה, מוסיפים טיפול ב-Intent המובנה של actions.intent.REGISTER.UPDATE. צריך לבדוק את הפרמטר registered כדי לקבל את התוצאה, ולשנות את השיחה בהתאם.

Actions 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.`);
  }
});
Actions 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();
}
Actions SDK JSON
{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Ok, I'll start giving you daily updates."
          }
        }
      ]
    }
  }
}

התאמה אישית של עדכונים (אופציונלי)

כדי להתאים אישית את כוונת העדכון, יש להוסיף פרמטרים מותאמים אישית כשמשתמשים נרשמים לעדכונים יומיים. בהתאם לכוונת העדכון, כדאי להתייחס לפרמטרים האלה כדי להתאים אישית את העדכון היומי לכל משתמש.

ההוראות לתכונה הזו משתנות בהתאם לאופן שבו אתם משתמשים ב-Dialogflow או ב-Actions SDK לפיתוח.

Dialogflow

צריך להגדיר ישות ב-Dialogflow שתטפל בפרמטרים מותאמים אישית בעדכון, ואז להעביר את ערך הפרמטר כארגומנט לכוונת העדכון. כדי להגדיר עדכונים מותאמים אישית ב-Dialogflow:

  1. יוצרים ישות חדשה במסוף של Dialogflow.
  2. מוסיפים כמה ערכים ומילים נרדפות שרלוונטיים לפרמטר שלכם.
  3. לוחצים על שמירה ופותחים את כוונת העדכון.
  4. בקטע Actions and parameters (פעולות ופרמטרים), מגדירים את actions.intent.CONFIGURE_UPDATES בתור האירוע. באותו קטע, מוסיפים פרמטר מאותו סוג כמו הישות החדשה.
  5. פותחים את ה-Intent 'עדכון רישום' שמטפל ב-Intent המובנה של 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',
  }));
});
Dialogflow Java
@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": "{}"
      }
    }
  ]
}
Actions SDK

מבקשים מהמשתמש מידע נוסף במסגרת מימוש הכוונות שלכם, ולאחר מכן מעבירים את המידע כטיעון לכוונת העדכון שלכם. כדי להגדיר עדכונים מותאמים אישית ב-Actions SDK:

  1. הצגת מידע למשתמש שרוצים להשתמש בו להתאמה אישית.
  2. בקוד מילוי ההזמנה של ה-Intent ל "עדכון הרישום" שמטפל ב-CONFIGURE UPDATES, יש לכלול אובייקט arguments עם התוכן הבא:
    • name - שם לארגומנט.
    • textValue - מידע מהמשתמש שיועבר כארגומנט.

הקוד הבא שולח ארגומנט עם בקשת הרישום לעדכון:

Actions 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',
    }));
  }
});
Actions 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();
}
Actions 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 Assistant במכשיר נייד, באמצעות אותו חשבון Google שבו השתמשתם כדי ליצור את הפעולה. אפשר להפעיל את הפעולה, להירשם לקבלת עדכונים יומיים, ואז לבדוק את ההתראות במכשיר בסביבות שעת העדכון.