Dynamiczne przyciski i parametry

Przyciski inline nie muszą być statyczne. GetMyBot potrafi budować klawiaturę z danych — jeden przycisk na każdy element listy — i dołączać do każdego przycisku własny zestaw parametrów, zapisany w momencie wysyłania. To podstawa scenariuszy „pokaż katalog → użytkownik wybiera konkretny produkt → realizujemy właśnie jego". Całość konfiguruje się w bloku wiadomości akcji „Wyślij wiadomość".

Dynamiczne przyciski z listy

Blok „Dynamiczne przyciski z listy" rozwija tablicę z ctx w klawiaturę: jeden przycisk na każdy element tablicy. Konfigurowane są cztery rzeczy:

  • Lista — klucz tablicy w kontekście (over), np. ctx.products. Tablicę zazwyczaj umieszczają tam akcje „Zapytanie do źródła", „Żądanie HTTP" lub obliczenia.
  • Alias elementu — nazwa, pod którą element jest dostępny w szablonie (as, domyślnie item).
  • Przyciski w rzędzie — ile przycisków umieścić w jednej linii (columns, domyślnie 1).
  • Szablon przycisku — zwykły przycisk, ale jego tekst i pola obsługują podstawienia według aliasu: {{item.name}}, {{item.price}} itp.

Podczas wysyłania szablon jest renderowany dla każdego elementu i pojawia się tyle przycisków, ile elementów jest na liście. W ten sposób buduje się katalogi, listy rekordów kolekcji i menu z danych.

Przykład

W ctx.products znajduje się tablica obiektów z polami id, name, price. W szablonie przycisku podaj tekst {{item.name}} — {{item.price}}, a w Carry — klucz product_id z wartością {{item.id}}. Otrzymasz po jednym przycisku na produkt, a po naciśnięciu bot będzie dokładnie wiedział, który produkt wybrano.

Parametry w naciśnięciu (Carry)

Blok „Carry — migawka danych w naciśnięciu przycisku" dołącza do przycisku zestaw par klucz → wartość, obliczonych i zapisanych w momencie wysyłania wiadomości. Po naciśnięciu wartości te są przywracane do ctx — dlatego każdy przycisk niesie własne parametry (per-invocation), nawet jeśli przycisków są dziesiątki i zostały wysłane w jednej wiadomości.

  • carry klucz — nazwa, pod którą wartość wróci do ctx po naciśnięciu.
  • carry wartość — szablon z podstawieniami ({{item.id}}, {{param.order_id}}, {{ctx.x}}), obliczany przy wysyłaniu.
  • Jednorazowy (single_use) — payload wygasa po pierwszym naciśnięciu.
  • Czas życia payload (ttl_seconds) — czas ważności migawki w sekundach (0 — wartość domyślna).

To właśnie kluczowa funkcja „parametry z linku, powiązane z konkretnym przyciskiem": wartość jest zapamiętana w przycisku, a nie w ogólnym stanie użytkownika, więc równoległe naciśnięcia nie nadpisują się nawzajem.

Ustawianie parametrów przyciskiem (set_params)

Poza migawką Carry, przycisk może bezpośrednio ustawiać parametry subskrybenta po naciśnięciu — pole „Parametry" (set_params). W odróżnieniu od Carry (tymczasowe wartości w ctx), set_params zapisuje w stałych parametrach użytkownika ({{param.klucz}}), które są zachowywane między sesjami. Analogiczne pole istnieje też w bloku wiadomości — wówczas parametry są ustawiane przy wysyłaniu, a nie przy naciśnięciu.

Przycisk po naciśnięciu może również nadawać i zdejmować etykiety — tymi samymi polami co blok wiadomości.

Różnica między trzema mechanizmami

  • Carry — migawka w ctx, żyje do naciśnięcia, powiązana z konkretnym przyciskiem, z TTL i jednorazowością.
  • set_params na przycisku — zapisuje stałe parametry subskrybenta po naciśnięciu.
  • set_params na bloku — zapisuje stałe parametry przy wysyłaniu wiadomości.

Do scenariusza „wybrał produkt — realizujemy go" używaj dynamicznych przycisków + Carry: lista produktów rozwija się w przyciski, a product_id każdego produktu trafia do Carry właśnie tego przycisku.

Co dalej