دکمه‌های پویا و پارامترها

دکمه‌های 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) — payload بعد از اولین کلیک سوخته می‌شود.
  • مدت اعتبار payload (ttl_seconds) — مدت اعتبار عکس‌فوری به ثانیه (0 — مقدار پیش‌فرض).

این همان ویژگی اصلی «پارامترهای مرتبط با دکمه خاص» است: مقدار در دکمه به خاطر سپرده می‌شود نه در وضعیت عمومی کاربر، بنابراین کلیک‌های موازی یکدیگر را بازنویسی نمی‌کنند.

تنظیم پارامترها با دکمه (set_params)

علاوه بر عکس‌فوری Carry، دکمه می‌تواند مستقیماً پارامترهای مشترک را هنگام کلیک تنظیم کند — فیلد «پارامترها» (set_params). برخلاف Carry (مقادیر موقت در ctxset_params در پارامترهای دائمی کاربر ({{param.key}}) می‌نویسد که بین اجراها باقی می‌مانند. فیلد مشابهی در بلوک پیام نیز وجود دارد — در آن صورت پارامترها هنگام ارسال تنظیم می‌شوند، نه هنگام کلیک.

دکمه هنگام کلیک می‌تواند برچسب‌ها را نیز اضافه و حذف کند — با همان فیلدهایی که بلوک پیام دارد.

تفاوت سه مکانیزم

  • Carry — عکس‌فوری در ctx، تا کلیک باقی می‌ماند، به دکمه خاص مرتبط است، با TTL و یک‌بار مصرف.
  • set_params روی دکمه — پارامترهای دائمی مشترک را هنگام کلیک می‌نویسد.
  • set_params روی بلوک — پارامترهای دائمی را هنگام ارسال پیام می‌نویسد.

برای سناریوی «کالا انتخاب شد — سفارش داده شد» از دکمه‌های پویا + Carry استفاده کنید: فهرست کالاها به دکمه‌ها تبدیل می‌شود و product_id هر کالا دقیقاً در Carry همان دکمه قرار می‌گیرد.

بیشتر بخوانید