Tombol dinamis dan parameter

Tombol inline tidak harus statis. GetMyBot dapat membangun keyboard dari data — satu tombol untuk setiap elemen daftar — dan melampirkan set parameter sendiri ke setiap tombol, yang dikunci pada saat pengiriman. Ini adalah dasar skenario "tampilkan katalog → pengguna memilih item tertentu → proses item tersebut". Semua dikonfigurasi di blok pesan aksi "Kirim pesan".

Tombol dinamis dari daftar

Blok "Tombol dinamis dari daftar" mengubah array dari ctx menjadi keyboard: satu tombol untuk setiap elemen array. Ada empat hal yang dikonfigurasi:

  • Daftar — kunci array dalam konteks (over), misalnya ctx.products. Array biasanya ditempatkan di sana oleh aksi "Permintaan ke sumber", "Permintaan web", atau kalkulasi.
  • Alias elemen — nama yang digunakan untuk mengakses elemen dalam template (as, default item).
  • Tombol per baris — berapa banyak tombol yang diletakkan dalam satu baris (columns, default 1).
  • Template tombol — tombol biasa, tetapi teks dan field-nya mendukung substitusi berdasarkan alias: {{item.name}}, {{item.price}}, dll.

Saat pengiriman, template dirender untuk setiap elemen, dan muncul tombol sebanyak elemen dalam daftar. Inilah cara membangun katalog, daftar record koleksi, dan menu dari data.

Contoh

Di ctx.products terdapat array objek dengan field id, name, price. Di template tombol, tentukan teks {{item.name}} — {{item.price}}, dan di Carry — kunci product_id dengan nilai {{item.id}}. Anda mendapatkan satu tombol per produk, dan saat diklik bot akan tahu persis produk mana yang dipilih.

Parameter dalam klik (Carry)

Blok "Carry — snapshot data dalam klik tombol" melampirkan ke tombol sekumpulan pasangan kunci → nilai, yang dihitung dan dikunci pada saat pengiriman pesan. Saat diklik, nilai-nilai ini dipulihkan ke ctx — sehingga setiap tombol membawa parameternya sendiri (per-invocation), bahkan jika ada puluhan tombol yang dikirim dalam satu pesan.

  • carry kunci — nama yang digunakan nilai untuk kembali ke ctx saat diklik.
  • carry nilai — template dengan substitusi ({{item.id}}, {{param.order_id}}, {{ctx.x}}), yang dihitung saat pengiriman.
  • Sekali pakai (single_use) — payload hangus setelah klik pertama.
  • TTL payload (ttl_seconds) — masa berlaku snapshot dalam detik (0 — nilai default).

Inilah fitur kritis "parameter dari tautan, terikat ke tombol tertentu": nilai disimpan dalam tombol, bukan dalam state umum pengguna, sehingga klik paralel tidak saling menimpa.

Pengaturan parameter dengan tombol (set_params)

Selain snapshot Carry, tombol dapat langsung menetapkan parameter pelanggan saat diklik — field "Parameter" (set_params). Berbeda dengan Carry (nilai sementara di ctx), set_params menulis ke parameter permanen pengguna ({{param.kunci}}), yang disimpan antar sesi. Field serupa juga ada di blok pesan — dalam hal ini parameter ditetapkan saat pengiriman, bukan saat klik.

Tombol saat diklik juga dapat mengatur dan menghapus label — dengan field yang sama seperti blok pesan.

Perbedaan tiga mekanisme

  • Carry — snapshot di ctx, berlaku hingga diklik, terikat ke tombol tertentu, dengan TTL dan penggunaan sekali.
  • set_params pada tombol — menulis parameter permanen pelanggan saat diklik.
  • set_params pada blok — menulis parameter permanen saat pengiriman pesan.

Untuk skenario "memilih produk — memprosesnya", gunakan tombol dinamis + Carry: daftar produk diubah menjadi tombol, dan product_id setiap produk dikirim ke Carry tombol tersebut.

Selanjutnya