डायनामिक बटन और पैरामीटर
Inline बटन केवल स्टैटिक नहीं होते। GetMyBot डेटा से कीबोर्ड बना सकता है — सूची के प्रत्येक element के लिए एक बटन — और प्रत्येक बटन पर भेजते समय निर्धारित अपने पैरामीटर का सेट जोड़ सकता है। यह «catalog दिखाओ → उपयोगकर्ता विशिष्ट उत्पाद चुनता है → उसी का ऑर्डर करते हैं» परिदृश्यों का आधार है। सब कुछ «संदेश भेजें» एक्शन के संदेश निर्माता में कॉन्फ़िगर होता है।
सूची से डायनामिक बटन
«सूची से डायनामिक बटन» ब्लॉक ctx के array को कीबोर्ड में बदलता है: array के प्रत्येक element के लिए एक बटन। चार चीज़ें कॉन्फ़िगर होती हैं:
- सूची — context में array की key (
over), जैसेctx.products। Array आमतौर पर «स्रोत से अनुरोध», «वेब-अनुरोध» या computation एक्शन द्वारा वहाँ रखा जाता है। - Element alias — वह नाम जिसके तहत element टेम्प्लेट में उपलब्ध होता है (
as, डिफ़ॉल्टitem)। - बटन प्रति पंक्ति — एक पंक्ति में कितने बटन (
columns, डिफ़ॉल्ट1)। - बटन टेम्प्लेट — एक सामान्य बटन, लेकिन उसका टेक्स्ट और फ़ील्ड alias के अनुसार सब्स्टिट्यूशन समर्थित करते हैं:
{{item.name}},{{item.price}}आदि।
भेजते समय टेम्प्लेट प्रत्येक element के लिए render होता है, और सूची में जितने elements हैं उतने बटन बनते हैं। इस तरह catalog, संग्रह रिकॉर्ड की सूचियाँ और डेटा मेनू बनाए जाते हैं।
उदाहरण
ctx.products में id, name, price फ़ील्ड वाले objects का array है। बटन टेम्प्लेट में टेक्स्ट {{item.name}} — {{item.price}} ₽ और Carry में product_id key को {{item.id}} मान दें। प्रत्येक उत्पाद के लिए एक बटन मिलेगा, और press करने पर बॉट ठीक से जानेगा कौन सा उत्पाद चुना गया।
Press में पैरामीटर (Carry)
«Carry — बटन press में डेटा snapshot» ब्लॉक बटन पर key → value जोड़ों का सेट जोड़ता है, जो संदेश भेजते समय निर्धारित और fix हो जाते हैं। Press करने पर ये मान ctx में restore होते हैं — इसलिए प्रत्येक बटन के अपने पैरामीटर होते हैं (per-invocation), भले ही दर्जनों बटन हों और एक संदेश से भेजे गए हों।
- carry key — वह नाम जिसके तहत press पर मान
ctxमें लौटेगा। - carry मान — सब्स्टिट्यूशन के साथ टेम्प्लेट (
{{item.id}},{{param.order_id}},{{ctx.x}}), जो भेजते समय गणना होता है। - एकल उपयोग (
single_use) — पहले press के बाद payload नष्ट हो जाता है। - Payload TTL (
ttl_seconds) — snapshot की वैधता अवधि सेकंड में (0— डिफ़ॉल्ट मान)।
यही है critical फ़ीचर «लिंक से पैरामीटर, विशिष्ट बटन से जुड़े»: मान बटन में याद रहता है, उपयोगकर्ता की सामान्य स्थिति में नहीं, इसलिए parallel presses एक-दूसरे को overwrite नहीं करते।
बटन द्वारा पैरामीटर सेट करना (set_params)
Carry snapshot के अलावा, बटन press पर सीधे सब्सक्राइबर के पैरामीटर सेट कर सकता है — फ़ील्ड «पैरामीटर» (set_params)। Carry (ctx में अस्थायी मान) के विपरीत, set_params उपयोगकर्ता के स्थायी पैरामीटर ({{param.key}}) में लिखता है, जो launches के बीच सहेजे जाते हैं। वही फ़ील्ड संदेश ब्लॉक में भी है — तब पैरामीटर press पर नहीं बल्कि भेजते समय सेट होते हैं।
बटन press पर लेबल लगा और हटा भी सकता है — वही फ़ील्ड जो संदेश ब्लॉक में हैं।
तीन mechanism का अंतर
- Carry —
ctxमें snapshot, press तक जीता है, विशिष्ट बटन से जुड़ा, TTL और एकल उपयोग के साथ। - set_params बटन पर — press पर सब्सक्राइबर के स्थायी पैरामीटर लिखता है।
- set_params ब्लॉक पर — संदेश भेजते समय स्थायी पैरामीटर लिखता है।
«उत्पाद चुना — ऑर्डर किया» परिदृश्य के लिए डायनामिक बटन + Carry उपयोग करें: उत्पादों की सूची बटन में बदलती है, और प्रत्येक उत्पाद का product_id उसी बटन के Carry में जाता है।
आगे क्या
- संदेश और बटन — संदेश ब्लॉक, बटन के प्रकार और press पर व्यवहार।
- सब्स्टिट्यूशन और फ़ॉर्मूला — टेम्प्लेट में
{{item.*}},{{ctx.*}},{{param.*}}वेरिएबल। - रिएक्शन लिंक — बटन कहाँ ले जाते हैं और transition graph कैसे देखें।
- संग्रह और डेटा — डायनामिक बटन के लिए सूचियाँ कहाँ से लें।