Botones dinámicos y parámetros
Los botones inline no siempre son estáticos. GetMyBot puede construir un teclado a partir de datos — un botón por cada elemento de una lista — y adjuntar a cada botón su propio conjunto de parámetros, fijado en el momento del envío. Esta es la base de los escenarios «muestra el catálogo → el usuario elige un producto concreto → procesamos exactamente ese». Todo se configura en el bloque de mensaje de la acción «Enviar mensaje».
Botones dinámicos desde una lista
El bloque «Botones dinámicos desde lista» despliega un array de ctx en un teclado: un botón por cada elemento del array. Se configuran cuatro cosas:
- Lista — clave del array en el contexto (
over), por ejemploctx.products. El array suelen colocarlo allí las acciones «Solicitud a fuente», «Solicitud web» o un cálculo. - Alias del elemento — nombre con el que el elemento es accesible en la plantilla (
as, por defectoitem). - Botones por fila — cuántos botones poner en una fila (
columns, por defecto1). - Plantilla de botón — un botón normal, pero su texto y campos admiten sustituciones por alias:
{{item.name}},{{item.price}}, etc.
Al enviar, la plantilla se renderiza para cada elemento y aparecen tantos botones como elementos haya en la lista. Así se construyen catálogos, listas de registros de colecciones y menús a partir de datos.
Ejemplo
En ctx.products hay un array de objetos con los campos id, name, price. En la plantilla del botón indica el texto {{item.name}} — {{item.price}}, y en Carry — la clave product_id con el valor {{item.id}}. Obtendrás un botón por producto, y al pulsarlo el bot sabrá exactamente qué producto se eligió.
Parámetros en la pulsación (Carry)
El bloque «Carry — instantánea de datos en la pulsación del botón» adjunta al botón un conjunto de pares clave → valor, calculados y fijados en el momento del envío del mensaje. Al pulsarlo, esos valores se restauran en ctx — por eso cada botón lleva sus propios parámetros (por invocación), aunque haya decenas de botones enviados en un mismo mensaje.
- clave carry — nombre con el que el valor volverá en
ctxal pulsar. - valor carry — plantilla con sustituciones (
{{item.id}},{{param.order_id}},{{ctx.x}}), que se calcula al enviar. - De un solo uso (
single_use) — el payload se consume tras la primera pulsación. - Tiempo de vida del payload (
ttl_seconds) — vigencia de la instantánea en segundos (0— valor por defecto).
Esta es la función crítica «parámetros del enlace vinculados al botón concreto»: el valor se recuerda en el botón, no en el estado general del usuario, por lo que las pulsaciones paralelas no se sobreescriben mutuamente.
Asignación de parámetros con un botón (set_params)
Además de la instantánea Carry, un botón puede asignar directamente parámetros del suscriptor al pulsarlo — el campo «Parámetros» (set_params). A diferencia de Carry (valores temporales en ctx), set_params escribe en los parámetros permanentes del usuario ({{param.clave}}), que se conservan entre ejecuciones. El campo equivalente existe también en el bloque de mensaje — entonces los parámetros se asignan al enviar, no al pulsar.
Un botón al pulsarlo también puede poner y quitar etiquetas — con los mismos campos que el bloque de mensaje.
En qué se diferencian los tres mecanismos
- Carry — instantánea en
ctx, vive hasta la pulsación, vinculada al botón concreto, con TTL y posibilidad de un solo uso. - set_params en el botón — escribe los parámetros permanentes del suscriptor al pulsar.
- set_params en el bloque — escribe los parámetros permanentes al enviar el mensaje.
Para el escenario «eligió el producto — lo procesamos» usa botones dinámicos + Carry: la lista de productos se despliega en botones, y el product_id de cada producto viaja en el Carry de ese botón específico.
Qué sigue
- Mensajes y botones — bloques de mensaje, tipos de botones y comportamiento al pulsar.
- Sustituciones y fórmulas — variables
{{item.*}},{{ctx.*}},{{param.*}}en plantillas. - Relaciones de reacciones — a dónde llevan los botones y cómo ver el grafo de transiciones.
- Colecciones y datos — de dónde obtener las listas para los botones dinámicos.