כפתורים דינמיים ופרמטרים
כפתורי 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 של אותו כפתור.
המשך
- הודעות וכפתורים — בלוקי הודעה, סוגי כפתורים והתנהגות בלחיצה.
- הצבות ונוסחאות — משתנים
{{item.*}},{{ctx.*}},{{param.*}}בתבניות. - קישורי תגובות — לאן מוביל כפתור וכיצד לראות את גרף המעברים.
- קולקציות ונתונים — מאין לקחת רשימות לכפתורים דינמיים.