Pulsanti dinamici e parametri

I pulsanti inline non sono solo statici. GetMyBot sa costruire una tastiera dai dati — un pulsante per ogni elemento della lista — e allegare a ogni pulsante il proprio set di parametri, fissato al momento dell'invio. Questa è la base degli scenari «mostra il catalogo → l'utente sceglie un prodotto specifico → gestiamo esattamente quello». Tutto si configura nel blocco messaggio dell'azione «Invia messaggio».

Pulsanti dinamici da lista

Il blocco «Pulsanti dinamici da lista» espande un array da ctx in una tastiera: un pulsante per ogni elemento dell'array. Si configurano quattro cose:

  • Lista — chiave dell'array nel contesto (over), ad esempio ctx.products. L'array di solito viene inserito lì dalle azioni «Richiesta alla sorgente», «Richiesta web» o da un calcolo.
  • Alias dell'elemento — nome con cui l'elemento è accessibile nel template (as, di default item).
  • Pulsanti per riga — quanti pulsanti mettere per riga (columns, di default 1).
  • Template del pulsante — un normale pulsante, ma il suo testo e i suoi campi supportano le sostituzioni tramite alias: {{item.name}}, {{item.price}}, ecc.

All'invio il template viene renderizzato per ogni elemento e appaiono tanti pulsanti quanti sono gli elementi nella lista. Così si costruiscono cataloghi, liste di record di raccolta e menu dai dati.

Esempio

In ctx.products c'è un array di oggetti con i campi id, name, price. Nel template del pulsante specifica il testo {{item.name}} — {{item.price}} €, e in Carry — la chiave product_id con valore {{item.id}}. Otterrai un pulsante per ogni prodotto, e alla pressione il bot saprà esattamente quale prodotto è stato scelto.

Parametri nel tap (Carry)

Il blocco «Carry — snapshot dei dati nel tap del pulsante» allega al pulsante un set di coppie chiave → valore, calcolate e fissate al momento dell'invio del messaggio. Alla pressione questi valori vengono ripristinati in ctx — quindi ogni pulsante porta i propri parametri (per-invocation), anche se i pulsanti sono decine e inviati nello stesso messaggio.

  • carry key — nome con cui il valore tornerà in ctx alla pressione.
  • carry value — template con sostituzioni ({{item.id}}, {{param.order_id}}, {{ctx.x}}), calcolato al momento dell'invio.
  • Monouso (single_use) — il payload scade dopo il primo tap.
  • Durata del payload (ttl_seconds) — scadenza dello snapshot in secondi (0 — valore di default).

Questa è la funzionalità fondamentale «parametri dal link, legati a un pulsante specifico»: il valore viene memorizzato nel pulsante, non nello stato generale dell'utente, quindi i tap paralleli non si sovrascrivono a vicenda.

Impostazione di parametri tramite pulsante (set_params)

Oltre allo snapshot Carry, un pulsante può impostare direttamente i parametri dell'iscritto alla pressione — campo «Parametri» (set_params). A differenza di Carry (valori temporanei in ctx), set_params scrive nei parametri permanenti dell'utente ({{param.chiave}}), che vengono conservati tra le esecuzioni. Un campo analogo esiste anche nel blocco messaggio — in quel caso i parametri vengono impostati all'invio, non alla pressione.

Un pulsante alla pressione può anche aggiungere e rimuovere etichette — con gli stessi campi del blocco messaggio.

Differenza tra i tre meccanismi

  • Carry — snapshot in ctx, vive fino alla pressione, legato a un pulsante specifico, con TTL e modalità monouso.
  • set_params sul pulsante — scrive parametri permanenti dell'iscritto alla pressione.
  • set_params sul blocco — scrive parametri permanenti all'invio del messaggio.

Per lo scenario «ha scelto il prodotto — lo abbiamo gestito» usa pulsanti dinamici + Carry: la lista dei prodotti si espande in pulsanti e il product_id di ogni prodotto va nel Carry esattamente di quel pulsante.

Passo successivo