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 esempioctx.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 defaultitem). - Pulsanti per riga — quanti pulsanti mettere per riga (
columns, di default1). - 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
ctxalla 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
- Messaggi e pulsanti — blocchi del messaggio, tipi di pulsanti e comportamento alla pressione.
- Sostituzioni e formule — variabili
{{item.*}},{{ctx.*}},{{param.*}}nei template. - Link delle reazioni — dove portano i pulsanti e come vedere il grafo delle transizioni.
- Raccolte e dati — dove prendere le liste per i pulsanti dinamici.