Dinamik Düğmeler ve Parametreler

Inline düğmeler yalnızca statik olmak zorunda değildir. GetMyBot, verilerden klavye oluşturabilir — listedeki her öğe için bir düğme — ve her düğmeye gönderim anında sabitlenmiş kendi parametre setini ekleyebilir. Bu, "kataloğu göster → kullanıcı belirli bir ürün seçer → tam olarak onu işleme al" senaryolarının temelidir. Her şey "Mesaj Gönder" eyleminin mesaj bloğunda yapılandırılır.

Listeden Dinamik Düğmeler

"Listeden Dinamik Düğmeler" bloğu, ctx'teki bir diziyi klavyeye dönüştürür: dizideki her öğe için bir düğme. Dört şey yapılandırılır:

  • Liste — bağlamdaki dizi anahtarı (over), örneğin ctx.products. Dizi genellikle "Kaynağa İstek", "Web İsteği" veya hesaplama eylemleriyle oraya eklenir.
  • Öğe Takma Adı — öğenin şablonda kullanılacağı ad (as, varsayılan: item).
  • Satır Başına Düğme — bir satıra kaç düğme konulacağı (columns, varsayılan: 1).
  • Düğme Şablonu — sıradan bir düğme; ancak metni ve alanları takma adla ikameyi destekler: {{item.name}}, {{item.price}} vb.

Gönderimde şablon her öğe için işlenir ve listedeki öğe sayısı kadar düğme oluşturulur. Bu şekilde kataloglar, koleksiyon kayıt listeleri ve veri tabanlı menüler oluşturulur.

Örnek

ctx.products'ta id, name, price alanlarına sahip bir nesne dizisi bulunuyor. Düğme şablonuna {{item.name}} — {{item.price}} ₽ metnini, Carry'ye ise {{item.id}} değeriyle product_id anahtarını girin. Her ürün için bir düğme elde edersiniz ve basıldığında bot hangi ürünün seçildiğini kesin olarak bilir.

Basışta Parametreler (Carry)

"Carry — Düğme Basışındaki Veri Anlık Görüntüsü" bloğu, düğmeye gönderim anında hesaplanarak sabitlenmiş anahtar → değer çiftleri ekler. Basıldığında bu değerler ctx'te geri yüklenir — bu nedenle her düğme kendi parametrelerini taşır (her çağrı için ayrı), onlarca düğme tek bir mesajla gönderilmiş olsa bile.

  • carry anahtarı — basışta ctx'e döneceği ad.
  • carry değeri — gönderim sırasında hesaplanan ikame şablonu ({{item.id}}, {{param.order_id}}, {{ctx.x}}).
  • Tek kullanımlık (single_use) — payload ilk basıştan sonra geçersiz olur.
  • Payload geçerlilik süresi (ttl_seconds) — anlık görüntünün saniye cinsinden ömrü (0 — varsayılan değer).

Bu, "bir düğmeye bağlı bağlantı parametreleri" kritik özelliğidir: değer genel kullanıcı durumunda değil düğmede saklanır; bu nedenle paralel basışlar birbirinin üzerine yazmaz.

Düğmeyle Parametre Atama (set_params)

Carry anlık görüntüsüne ek olarak düğme, basıldığında abone parametrelerini doğrudan ayarlayabilir"Parametreler" alanı (set_params). Carry'den (ctx'teki geçici değerler) farklı olarak set_params, çalışmalar arasında saklanan kalıcı kullanıcı parametrelerine ({{param.anahtar}}) yazar. Benzer alan mesaj bloğunda da vardır — bu durumda parametreler basışta değil gönderimde atanır.

Düğme aynı zamanda basıldığında etiket ekleyip kaldırabilir — mesaj bloğuyla aynı alanlar aracılığıyla.

Üç Mekanizmanın Farkı

  • Carryctx'teki anlık görüntü, basışa kadar yaşar, belirli bir düğmeye bağlıdır, TTL ve tek kullanımlıkla.
  • Düğmedeki set_params — basışta kalıcı abone parametrelerini yazar.
  • Bloktaki set_params — mesaj gönderiminde kalıcı parametreleri yazar.

"Ürünü seçti — onu işledik" senaryosu için dinamik düğmeler + Carry kullanın: ürün listesi düğmelere dönüştürülür ve her ürünün product_id'si tam olarak o düğmenin Carry'sine eklenir.

Sonraki Adımlar