כפתורים דינמיים ופרמטרים

כפתורי inline אינם חייבים להיות סטטיים. GetMyBot יכול לבנות מקלדת מנתונים — כפתור אחד לכל רכיב ברשימה — ולצרף לכל כפתור סט פרמטרים משלו, שנקבע ברגע השליחה. זוהי הבסיס לתרחישים "הצג קטלוג → המשתמש בוחר פריט ספציפי → מבצעים הזמנה לאותו פריט". הכל מוגדר בבלוק ההודעה של פעולת "שלח הודעה".

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

הבלוק "כפתורים דינמיים מרשימה" פורס מערך מ-ctx למקלדת: כפתור אחד לכל רכיב במערך. מוגדרות ארבע דברים:

  • רשימה — מפתח המערך בהקשר (over), לדוגמה ctx.products. המערך בדרך כלל מוכנס לשם על ידי פעולות "שאילתת מקור", "בקשת אינטרנט" או חישוב.
  • כינוי רכיב — השם שבו הרכיב נגיש בתבנית (as, ברירת מחדל item).
  • כפתורים בשורה — כמה כפתורים לשים בשורה (columns, ברירת מחדל 1).
  • תבנית כפתור — כפתור רגיל, אך הטקסט שלו והשדות תומכים בהצבות לפי הכינוי: {{item.name}}, {{item.price}} וכו'.

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

דוגמה

ב-ctx.products נמצא מערך אובייקטים עם שדות id, name, price. בתבנית הכפתור ציינו טקסט {{item.name}} — {{item.price}} ₽, ובـCarry — מפתח product_id עם ערך {{item.id}}. תקבלו כפתור לכל מוצר, ובלחיצה הבוט ידע בדיוק איזה מוצר נבחר.

פרמטרים בלחיצה (Carry)

הבלוק "Carry — תמונת מצב של נתונים בלחיצת כפתור" מצרף לכפתור סט של זוגות מפתח → ערך, שחושבו ונקבעו ברגע שליחת ההודעה. בלחיצה הערכים הללו משוחזרים ב-ctx — לכן לכל כפתור יש הפרמטרים שלו (per-invocation), גם אם יש עשרות כפתורים שנשלחו בהודעה אחת.

  • מפתח carry — השם שבו הערך יחזור ב-ctx בלחיצה.
  • ערך carry — תבנית עם הצבות ({{item.id}}, {{param.order_id}}, {{ctx.x}}), שמחושבת בשליחה.
  • חד-פעמי (single_use) — המטען נשרף אחרי הלחיצה הראשונה.
  • זמן חיים של מטען (ttl_seconds) — תוקף תמונת המצב בשניות (0 — ברירת המחדל).

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

הגדרת פרמטרים עם כפתור (set_params)

מלבד תמונת המצב Carry, כפתור יכול ישירות להגדיר פרמטרים של המנוי בלחיצה — שדה "פרמטרים" (set_params). בניגוד ל-Carry (ערכים זמניים ב-ctx), set_params כותב לפרמטרים קבועים של המשתמש ({{param.מפתח}}), שנשמרים בין הרצות. שדה דומה קיים גם בבלוק ההודעה — אז פרמטרים מוגדרים בשליחה, לא בלחיצה.

כפתור בלחיצה יכול גם להגדיר ולהסיר תגיות — באותם שדות שגם לבלוק ההודעה.

ההבדל בין שלושת המנגנונים

  • Carry — תמונת מצב ב-ctx, חי עד הלחיצה, קשור לכפתור ספציפי, עם TTL וחד-פעמיות.
  • set_params על כפתור — כותב פרמטרים קבועים של המנוי בלחיצה.
  • set_params על בלוק — כותב פרמטרים קבועים בשליחת הודעה.

לתרחיש "בחר מוצר — ביצע הזמנה עבורו" השתמשו בכפתורים דינמיים + Carry: רשימת המוצרים נפרסת לכפתורים, ו-product_id של כל מוצר עולה ב-Carry של אותו כפתור.

המשך