לעורר עניין בקרב המשתמשים באמצעות הפעולה ב-Google Assistant

1. סקירה כללית

‫Actions on Google היא פלטפורמת פיתוח שמאפשרת ליצור תוכנה להרחבת הפונקציונליות של Google Assistant, העוזרת האישית הווירטואלית של Google, ביותר ממיליארד מכשירים, כולל רמקולים חכמים, טלפונים, מכוניות, טלוויזיות, אוזניות ועוד. המשתמשים מנהלים שיחה עם Assistant כדי לבצע משימות, כמו קניית מצרכים או הזמנת נסיעה. (רשימה מלאה של הפעולות האפשריות מופיעה בספריית הפעולות). מפתחים יכולים להשתמש ב-Actions on Google כדי ליצור ולנהל בקלות אינטראקציות יעילות ונעימות בין משתמשים לבין שירותים של צד שלישי.

זהו מודול מתקדם של Codelab, שמיועד לקוראים שכבר צברו ניסיון מסוים בפיתוח פעולות ל-Google Assistant. אם אין לכם ניסיון קודם בפיתוח Actions on Google, מומלץ מאוד לעיין ב-Codelabs המבואיים שלנו ( רמה 1, רמה 2 ו- רמה 3) כדי להכיר את הפלטפורמה. המודולים המתקדמים האלה יציגו לכם סדרה של תכונות שיכולות לעזור לכם להרחיב את הפונקציונליות של הפעולה ולהגדיל את הקהל.

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

ב-codelab מוסבר על תכונות שמעודדות מעורבות משתמשים ועל שיטות מומלצות לשימוש ב-Actions on Google.

a3fc0061bd01a75.png 961ef6e27dc73da2.png

מה תפַתחו

תשפרו תכונה שכבר פותחה על ידי הפעלת האפשרות:

  • שליחת עדכון יומי למשתמשים, שהם יכולים להקיש עליו כדי לדבר עם הפעולה
  • שליחת התראות פוש למשתמשים עם קישור חזרה לפעולה שלכם
  • יצירת קישור שמעביר משתמשים לפעולה שלכם מדפדפן אינטרנט בנייד

מה תלמדו

  • מהי התעניינות המשתמשים ולמה היא חשובה להצלחת פעולה
  • איך משנים פעולה כדי להגביר את ההתעניינות של המשתמשים
  • באילו תכונות של מעורבות משתמשים כדאי להשתמש בסוגים שונים של פעולות
  • איך משתמשים ב-Actions API כדי לשלוח התראות דרך Assistant

הדרישות

אתם צריכים את הכלים הבאים:

  • סביבת פיתוח משולבת (IDE) או עורך טקסט לפי בחירתכם, כמו WebStorm,‏ Atom או Sublime
  • טרמינל להרצת פקודות של מעטפת עם Node.js,‏ npm ו-git מותקנים
  • דפדפן אינטרנט, כמו Google Chrome
  • סביבת פיתוח מקומית עם ממשק שורת הפקודה של Firebase
  • מכשיר נייד (Android או iOS) עם Assistant (צריך להיכנס ל-Assistant עם אותו חשבון Google שבו תשתמשו כדי ליצור את הפרויקט הזה).

מומלץ מאוד להכיר את JavaScript‏ (ES6), אבל זה לא חובה כדי להבין את קוד ה-webhook.

2. הגדרת הפרויקט

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

הסבר על הדוגמה

הדוגמה ב-codelab הזה היא פעולה פשוטה למכון כושר פיקטיבי בשם Action Gym. הפעולה מספקת מידע על חדר הכושר, כולל רשימה של שיעורים שמתחלפים מדי יום. פעולה אינפורמטיבית כזו מתאימה לכל התכונות של מעורבות המשתמשים, כי רשימת הכיתות המתחלפת מספקת מידע שימושי שונה בכל יום.

בתרשים הבא מוצג תהליך השיחה של הדוגמה Action Gym:

e2d6e4ad98948cf3.png

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

הורדת קבצי הבסיס

מריצים את הפקודה הבאה כדי לשכפל את מאגר GitHub של ה-codelab:

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

הגדרת הפרויקט והסוכן

כדי להגדיר את פרויקט Actions ואת נציג Dialogflow, מבצעים את השלבים הבאים:

  1. פותחים את מסוף הפעולות.
  2. לוחצים על פרויקט חדש.
  3. מקלידים שם פרויקט, כמו engagement-codelab.
  4. לוחצים על Create Project.
  5. במקום לבחור קטגוריה, גוללים למטה לקטע אפשרויות נוספות ולוחצים על הכרטיס שיחה.
  6. לוחצים על Build your Action (יצירת פעולה) כדי להרחיב את האפשרויות ובוחרים באפשרות Add Action(s) (הוספת פעולות).
  7. לוחצים על הוספת הפעולה הראשונה.
  8. בתיבת הדו-שיח Create Action (יצירת פעולה), בוחרים באפשרות Custom Intent (כוונה מותאמת אישית) ולוחצים על Build (יצירה) כדי להפעיל את מסוף Dialogflow.
  9. בדף ליצירת סוכן במסוף Dialogflow, לוחצים על יצירה.
  10. לוחצים על סמל גלגל השיניים 6bf56243a8a11a3b.png בתפריט הניווט שמימין.
  11. לוחצים על ייצוא וייבוא ואז על שחזור מקובץ ZIP.
  12. מעלים את קובץ agent.zip מהספרייה /user-engagement-codelab-nodejs/start/ שהורדתם קודם.
  13. מקלידים RESTORE ולוחצים על שחזור.
  14. לוחצים על סיום.

פריסת מילוי ההזמנה

אחרי שהפרויקט של הפעולות והסוכן של Dialogflow מוכנים, פורסים את קובץ index.js המקומי באמצעות Firebase Functions CLI.

בספרייה /user-engagement-codelab-nodejs/start/functions/ של שיבוט קובצי הבסיס, מריצים את הפקודות הבאות:

firebase use <PROJECT_ID>
npm install
firebase deploy

אחרי כמה דקות, אמורה להופיע ההודעה Deploy complete! (הפריסה הושלמה), שמציינת שהצלחתם לפרוס את ה-webhook ב-Firebase.

אחזור כתובת ה-URL של הפריסה

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

  1. פותחים את מסוף Firebase.
  2. בוחרים את פרויקט Actions מרשימת האפשרויות.
  3. בסרגל הניווט הימני, עוברים אל פיתוח > פונקציות. אם מוצגת בקשה לבחור את הגדרות שיתוף הנתונים, אפשר להתעלם מהאפשרות הזו וללחוץ על אעשה זאת מאוחר יותר.
  4. בכרטיסייה לוח בקרה אמור להופיע רשומה של 'השלמת בקשה' עם כתובת URL בקטע טריגר. שומרים את כתובת ה-URL הזו. תצטרכו להעתיק אותה אל Dialogflow בקטע הבא.

1741a329947975db.png

הגדרת webhook URL ב-Dialogflow

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

  1. פותחים את מסוף Dialogflow (אפשר לסגור את מסוף Firebase).
  2. בתפריט הניווט הימני, לוחצים על הזמנות.
  3. מפעילים את Webhook.
  4. מדביקים את כתובת ה-URL שהעתקתם מלוח הבקרה של Firebase אם היא לא מופיעה כבר.
  5. לוחצים על שמירה.

אימות ההגדרה של הפרויקט

המשתמשים צריכים להיות מסוגלים להפעיל את הפעולה כדי לקבל מידע על Action Gym, כולל תגובה טקסטואלית עם שעות הפתיחה ותגובה טקסטואלית עם רשימת השיעורים לכל יום בשבוע.

כדי לבדוק את הפעולה שלכם בסימולטור הפעולות:

  1. בתפריט הניווט הימני של מסוף Dialogflow, לוחצים על שילובים > Google Assistant.
  2. מוודאים שהאפשרות תצוגה מקדימה אוטומטית של שינויים מופעלת ולוחצים על בדיקה כדי לעדכן את פרויקט הפעולות.
  3. סימולטור הפעולות טוען את פרויקט הפעולות. כדי לבדוק את הפעולה, מקלידים Talk to my test app בשדה Input ומקישים על Enter.
  4. אמורה להופיע תגובה שמברכת אתכם על ההצטרפות ל-Action Gym. כדאי לפעול לפי ההנחיות כדי להמשיך את השיחה, ולוודא שלכל קלט יש תשובה.

60acf1ff87b1a87f.png

3. הוספת מינויים לעדכונים יומיים

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

בשלב הזה נסביר על מינויים לעדכונים יומיים ואיך מוסיפים אותם ל-Intent של רשימת הכיתות בפעולה. אחרי שמבצעים את ההוראות האלה, השיחה עם הפעולה תיראה כמו בתרשים הבא:

f48891c8118f7436.png

איך זה ישמור על רמת העניין של המשתמשים?

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

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

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

הפעלת עדכונים יומיים

אפשר להוסיף מינויים לעדכונים יומיים לכוונת ההצטרפות, כדי שהמשתמש יתחיל את השיחה, או לכוונת שיחה ספציפית יותר, כדי ליצור קישור עומק למקום מסוים בשיחה. ב-Codelab הזה, כוונת המשתמש Class List היא הכי הגיונית, כי הדיאלוג ישתנה מדי יום, והמשתמשים עשויים למצוא את התזכורת לגבי השיעורים הזמינים שימושית.

כדי להפעיל עדכונים יומיים לכוונת רשימת הכיתות:

  1. במסוף הפעולות, לוחצים על הכרטיסייה פיתוח ובוחרים באפשרות פעולות בסרגל הניווט הימני.
  2. לוחצים על רשימת הכיתות ברשימה פעולות.
  3. בקטע מעורבות המשתמשים, משנים את המצב של האפשרות האם תרצו להציע למשתמשים עדכונים יומיים?.
  4. מגדירים שם תוכן תיאורי שמתאר את העדכון היומי. ההקשר יהיה "באיזו שעה תרצה שאשלח לך את <שם התוכן> היומי", לכן חשוב לוודא שהשם תיאורי ונשמע נכון כשמקריאים אותו בקול. בדוגמה הזו, מגדירים את שם התוכן לערך list of upcoming Action Gym classes.
  5. לוחצים על שמירה בראש הדף.

c00885cc30e14d68.png

הגדרת Dialogflow

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

הצגת בקשה למשתמש להירשם למינוי

  1. מגדירים כוונה חדשה לטיפול בבקשת המשתמש להירשם לעדכונים יומיים. במסוף Dialogflow, לוחצים על הלחצן + לצד Intents (כוונות) בחלונית הניווט הימנית כדי ליצור כוונה חדשה.
  2. נותנים ל-Intent החדש את השם Setup Updates.
  3. בקטע Training phrases (ביטויי אימון), מוסיפים את הביטויים הבאים של המשתמש:
  • Send daily reminders
  • Reminder
  • Remind me
  • Updates
  • Upcoming classes
  1. בקטע Fulfillment (השלמת בקשה), מעבירים את המתג של האפשרות Enable webhook call for this intent (הפעלת קריאה ל-webhook עבור הכוונה הזו).
  2. לוחצים על שמירה בראש הדף.

5c70faa02151da0.png

טיפול בהחלטה של המשתמש

  1. מגדירים כוונה חדשה לטיפול בתגובה של המשתמש להנחיה להירשמה לעדכונים יומיים. לוחצים על הלחצן + לצד Intents (כוונות) בסרגל הניווט הימני כדי ליצור כוונה חדשה.
  2. נותנים ל-Intent החדש את השם Confirm Updates.
  3. בקטע אירועים, מוסיפים את actions_intent_REGISTER_UPDATE. האירוע הזה ב-Dialogflow יופעל כשהמשתמש יסיים את תהליך ההרשמה לקבלת עדכון יומי, בין אם הוא נרשם בסופו של דבר או לא.
  4. בקטע Fulfillment (השלמת בקשה), מעבירים את המתג של האפשרות Enable webhook call for this intent (הפעלת קריאה ל-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 helper עם כוונת היעד של העדכון (Class List) והסוג (DAILY). אחרי שתהליך ההרשמה למינוי מסתיים, Assistant מפעילה את האירוע 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]));
    };
  };
});

בדיקת העדכונים היומיים

בטרמינל, מריצים את הפקודה הבאה כדי לפרוס את קוד ה-webhook המעודכן ב-Firebase:

firebase deploy

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

  1. במסוף Actions, עוברים אל Test (בדיקה).
  2. מקלידים Talk to my test app בשדה קלט ולוחצים על Enter.
  3. מקלידים Learn about classes ומקישים על Enter. התשובה של הפעולה צריכה להציע עכשיו לשלוח תזכורות יומיות.
  4. מקלידים Send daily reminders ומקישים על Enter.
  5. מקלידים את השעה שבה רוצים לראות את העדכון ולוחצים על Enter. לצורך בדיקה, נסו להשיב 3-5 דקות אחרי השעה הנוכחית.

83a15ecac8c71787.png

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

8582482eafc67d5b.png

4. הוספת התראות

אפשרות נוספת ליצירת אינטראקציה עם משתמשים מחוץ לפעולה היא להפעיל את Actions API כדי לשלוח התראות פוש למשתמשים. בניגוד לעדכונים יומיים, העדכונים האלה לא מתוזמנים אוטומטית על ידי Assistant, כך שאתם יכולים לשלוח אותם מתי שתרצו.

בשלב הזה נסביר איך להטמיע התראות Push בפעולה שלכם על ידי הוספה של כוונת Class Canceled חדשה ושליחה של התראות למשתמשים כדי ליידע אותם על ביטול שיעור. תצטרכו גם להגדיר את שלושת הרכיבים הבאים שנדרשים לשליחת התראות:

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

אחרי שתפעלו לפי ההוראות האלה, תוסיפו את תיבת הדו-שיח הבאה לשיחה של הפעולה:

7c9d4b633c547823.png

איך זה ישמור על רמת העניין של המשתמשים?

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

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

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

הפעלת Actions API

  1. פותחים את מסוף Google Cloud ובוחרים את שם פרויקט ה-Actions בתפריט הנפתח.

d015c1515b99e3db.png

  1. בתפריט הניווט (☰), עוברים אל APIs & Services > Library.
  2. מחפשים את Actions API ולוחצים על Enable.

6d464f49c88e70b4.png

יצירה של חשבון שירות

כדי לשלוח בקשות ל-Actions API, צריך לאמת את הבקשות. לכן, צריך ליצור חשבון שירות. כדי ליצור ולהתקין מפתח של חשבון שירות עבור Actions API:

  1. בתפריט הניווט (☰) של מסוף Google Cloud, עוברים אל APIs & Services > Credentials.
  2. לוחצים על Create credentials > Service account key (יצירת פרטי כניסה > מפתח לחשבון שירות).
  3. בתפריט הנפתח Service account, בוחרים באפשרות New Service Account.
  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, בוחרים את שם הפרויקט של Actions.
  2. בתפריט הניווט הימני, עוברים אל פיתוח > מסד נתונים ולוחצים על יצירת מסד נתונים.
  3. בוחרים באפשרות התחלה במצב בדיקה.
  4. לוחצים על הפעלה.

6dfc386413954caa.png

הגדרת Dialogflow

כדי ליצור את תהליך ההצטרפות לקבלת התראות פוש, פועלים לפי השלבים הבאים במסוף Dialogflow:

הצגת בקשה למשתמש להירשם למינוי

  1. מגדירים כוונה חדשה לטיפול בבקשת המשתמש להירשם לקבלת התראות פוש על שיעורים שבוטלו. במסוף Dialogflow, לוחצים על הלחצן + לצד Intents (כוונות) בחלונית הניווט הימנית כדי ליצור כוונה חדשה.
  2. נותנים לשלב החדש הזה את השם Setup Push Notifications.
  3. בקטע Training phrases (ביטויי אימון), מוסיפים את הביטויים הבאים של המשתמש:
  • Subscribe to notifications
  • Send notification
  • Notify me
  • Send class notifications
  • Cancelled notifications
  1. בקטע Fulfillment (השלמת בקשה), מעבירים את המתג של האפשרות Enable webhook call for this intent (הפעלת קריאה ל-webhook עבור הכוונה הזו).
  2. לוחצים על שמירה בראש הדף.

3d99bc41d0492552.png

טיפול בהחלטה של המשתמש

  1. מגדירים כוונת משתמש חדשה לטיפול בתגובת המשתמש לבקשת ההרשמה לקבלת התראות Push. לוחצים על הלחצן + לצד Intents (כוונות) בסרגל הניווט הימני כדי ליצור כוונה חדשה.
  2. נותנים ל-Intent החדש את השם Confirm Push Notifications.
  3. בקטע אירועים, מוסיפים את actions_intent_PERMISSION. האירוע הזה ב-Dialogflow יופעל כשהמשתמש יסיים את תהליך ההרשמה לקבלת התראות פוש, בין אם הוא נרשם בסופו של דבר ובין אם לא.
  4. בקטע Fulfillment (השלמת בקשה), מעבירים את המתג של האפשרות Enable webhook call for this intent (הפעלת קריאה ל-webhook עבור הכוונה הזו).
  5. לוחצים על שמירה בראש הדף.

d37f550c5e07cb73.png

טיפול בהתראות

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

כדי להוסיף כוונה שתופעל כשהמשתמש יקיש על התראה:

  1. במסוף Dialogflow, לוחצים על הלחצן + לצד Intents (כוונות) בחלונית הניווט הימנית כדי ליצור כוונה חדשה.
  2. נותנים לשלב החדש הזה את השם Class Canceled.
  3. בקטע Training phrases (ביטויי אימון), מוסיפים את Cancelations כuser expression (ביטוי משתמש).
  4. בקטע Fulfillment (השלמת בקשה), מעבירים את המתג של האפשרות Enable webhook call for this intent (הפעלת קריאה ל-webhook עבור הכוונה הזו).
  5. לוחצים על שמירה בראש הדף.

940379556f559631.png

שליחת התראות לבדיקה באמצע שיחה

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

כדי ליצור כוונה לבדיקת התראות פוש:

  1. למטרות בדיקה וניפוי באגים, מגדירים כוונה חדשה שמאפשרת לשלוח הודעות פוש למשתמשים שנרשמו. במסוף Dialogflow, לוחצים על הלחצן + לצד Intents (כוונות) בחלונית הניווט הימנית כדי ליצור כוונה חדשה.
  2. נותנים ל-Intent החדש את השם Test Notification.
  3. בקטע Training phrases (ביטויי אימון), מוסיפים את Test notification כuser expression (ביטוי משתמש).
  4. בקטע Fulfillment (השלמת בקשה), מעבירים את המתג של האפשרות Enable webhook call for this intent (הפעלת קריאה ל-webhook עבור הכוונה הזו).
  5. לוחצים על שמירה בראש הדף.

6967f5a997643eb8.png

הפעלת התראות

כדי להפעיל התראות פוש על כוונת המשתמש Class Canceled:

  1. בסרגל הניווט של מסוף Dialogflow, עוברים אל Integrations (שילובים).
  2. בכרטיס Google Assistant, לוחצים על הגדרות שילוב.
  3. מוסיפים את Class Canceled כ-Intent של הפעלה מרומזת. השלב הזה נחוץ כדי ש-Dialogflow יזהה שהמשתמשים יכולים להתחיל את השיחה עם כוונת המשתמש Class Canceled (על ידי הקשה על התראה בדחיפה).
  4. לוחצים על סגירה.

1ac725231ed279a1.png

  1. במסוף הפעולות, לוחצים על הכרטיסייה פיתוח ובוחרים באפשרות פעולות בסרגל הניווט הימני.
  2. לוחצים על הכיתה בוטלה ברשימה פעולות.
  3. בקטע User engagement (מעורבות משתמשים), משנים את המצב של האפשרות Would you like to send push notifications? (האם תרצה לשלוח התראות פוש?).
  4. מגדירים שם תוכן תיאורי שמתאר את ההתראה בדחיפה. ההקשר יהיה "Is it ok if I send push notifications for <content title>?", so make sure your title is both descriptive and sounds correct when spoken aloud. בדוגמה הזו, מגדירים את שם התוכן לערך 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, שבאמצעותו Assistant קובעת למי לשלוח את ההתראה.

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

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 עם מזהה המשתמש, הכותרת של ההתראה והיעד של הכוונה. בדוגמה הזו, הפעלת הכוונה Test Notification תבצע איטרציה במסד הנתונים שלכם ב-Firestore ותשלח התראות פוש לכל משתמש שנרשם לקבלת התראות.

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

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.');
});

בדיקת ההתראות

בטרמינל, מריצים את הפקודה הבאה כדי לפרוס את קוד ה-webhook המעודכן ב-Firebase:

firebase deploy

כדי לבדוק את ההתראות בסימולטור הפעולות:

  1. במסוף Actions, עוברים לכרטיסייה Test.
  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

תוך כמה דקות, אמורה להתקבל התראה מ-Assistant בנייד עם הכיתוב 'התראת בדיקה מ-Action Gym'. הקשה על ההתראה הזו תעביר אתכם באמצעות קישור עומק אל כוונת ביטול השיעור של הפעולה.

33cbde513c10122e.png

5. יצירת קישור ל-Assistant

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

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

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

איך זה ישמור על רמת העניין של המשתמשים?

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

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

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

כדי ליצור קישור ל-Assistant עבור כוונת הפתיחה:

  1. במסוף הפעולות, לוחצים על הכרטיסייה פיתוח ובוחרים באפשרות פעולות בסרגל הניווט הימני.
  2. ברשימה פעולות, לוחצים על actions.intent.MAIN.
  3. בקטע קישורים, מעבירים את המתג של האפשרות האם רוצה להפעיל כתובת URL לפעולה הזו.
  4. מגדירים שם קישור תיאורי שמתאר את הפעולה. שם הפעולה צריך להיות פשוט, ולכלול פועל ושם עצם שמתארים מה המשתמש יכול לעשות באמצעות הפעולה. בדוגמה הזו, מגדירים את שם הקישור כ-learn about Action Gym.
  5. מעתיקים את קטע קוד ה-HTML מחלקו התחתון של הדף הזה ושומרים אותו לשימוש מאוחר יותר.
  6. לוחצים על שמירה בראש הדף.

55341b8102b71eab.png

פריסת אתר בדיקה

כדי לבדוק את הקישור ל-Assistant, אפשר להשתמש בכלים של Firebase כדי לפרוס אתר בדיקה לצד ההשלמה. כבר בנינו אתר בדיקה פשוט לדוגמה הזו, אתם רק צריכים להוסיף את הקישור ל-Assistant.

עוברים לספרייה /user-engagement-codelab-nodejs/start/public/ של ההזמנה ופותחים את הקובץ index.html בכלי לעריכת טקסט.

b2f84ff91b0e1396.png בקובץ index.html, מדביקים את קטע ה-HTML של הקישור ל-Assistant ברכיב body. הקובץ צריך להיראות כמו הקטע הבא:

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 הזו בדפדפן האינטרנט של המכשיר הנייד, וקישור ל-Assistant אמור להופיע באתר הבדיקה. לחיצה על הקישור הזה במכשיר הנייד אמורה להעביר אתכם אל כוונת קבלת הפנים של הפעולה ב-Assistant.

599845d647f5b624.png

אפשר גם לנסות להיכנס לכתובת ה-URL של האחסון בדפדפן במחשב. זה אמור להעביר אתכם לדף 404 בספריית הפעולות של Assistant, כי הפעולה שלכם לא פורסמה.

6. השלבים הבאים

מזל טוב!

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

מקורות מידע נוספים ללמידה

כדי לקבל מידע נוסף על התעניינות המשתמשים בפעולה שלכם, מומלץ לעיין במשאבים הבאים:

כדי להתעדכן בהודעות האחרונות שלנו, אתם יכולים לעקוב אחרינו בטוויטר ‎@ActionsOnGoogle. כדי לשתף את מה שיצרתם, אתם יכולים לצייץ עם ההאשטאג #AoGDevs.

סקר משוב

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