Dynamische Schaltflächen und Parameter

Inline-Schaltflächen müssen nicht statisch sein. GetMyBot kann eine Tastatur aus Daten aufbauen — eine Schaltfläche pro Listenelement — und an jede Schaltfläche einen eigenen Parametersatz binden, der zum Sendezeitpunkt festgelegt wird. Das ist die Grundlage für Szenarien „Katalog anzeigen → Benutzer wählt ein Produkt → wir verarbeiten genau dieses". Alles wird im Nachrichtenblock der Aktion „Nachricht senden" konfiguriert.

Dynamische Schaltflächen aus einer Liste

Der Block „Dynamische Schaltflächen aus Liste" entfaltet ein Array aus ctx zu einer Tastatur: eine Schaltfläche pro Arrayelement. Vier Dinge werden konfiguriert:

  • Liste — Array-Schlüssel im Kontext (over), z. B. ctx.products. Das Array wird typischerweise durch Aktionen „Quellanfrage", „Web-Anfrage" oder eine Berechnung dort abgelegt.
  • Element-Alias — Name, unter dem das Element im Template verfügbar ist (as, Standard: item).
  • Schaltflächen pro Zeile — wie viele Schaltflächen pro Zeile (columns, Standard: 1).
  • Schaltflächen-Template — eine normale Schaltfläche, deren Text und Felder Substitutionen nach Alias unterstützen: {{item.name}}, {{item.price}} usw.

Beim Senden wird das Template für jedes Element gerendert, und es erscheinen so viele Schaltflächen wie Elemente in der Liste. So werden Kataloge, Sammlungseintrags-Listen und datengestützte Menüs aufgebaut.

Beispiel

In ctx.products liegt ein Array von Objekten mit den Feldern id, name, price. Geben Sie im Schaltflächen-Template den Text {{item.name}} — {{item.price}} € an und setzen Sie unter Carry den Schlüssel product_id mit dem Wert {{item.id}}. Sie erhalten eine Schaltfläche pro Produkt, und beim Klick weiß der Bot genau, welches Produkt ausgewählt wurde.

Parameter beim Klick (Carry)

Der Block „Carry — Daten-Snapshot beim Schaltflächenklick" bindet an eine Schaltfläche einen Satz von Schlüssel-Wert-Paaren, die beim Senden der Nachricht berechnet und festgelegt werden. Beim Klick werden diese Werte in ctx wiederhergestellt — daher trägt jede Schaltfläche eigene Parameter (pro Aufruf), auch wenn Dutzende Schaltflächen in einer Nachricht gesendet wurden.

  • Carry-Schlüssel — Name, unter dem der Wert beim Klick in ctx zurückkehrt.
  • Carry-Wert — Template mit Substitutionen ({{item.id}}, {{param.order_id}}, {{ctx.x}}), das beim Senden berechnet wird.
  • Einmalverwendung (single_use) — Payload wird nach dem ersten Klick ungültig.
  • Payload-Lebensdauer (ttl_seconds) — Gültigkeitsdauer des Snapshots in Sekunden (0 — Standardwert).

Das ist das zentrale Feature „Parameter aus dem Link, gebunden an eine konkrete Schaltfläche": der Wert wird in der Schaltfläche gespeichert, nicht im gemeinsamen Benutzerstatus, daher überschreiben parallele Klicks einander nicht.

Parameter per Schaltfläche setzen (set_params)

Neben dem Carry-Snapshot kann eine Schaltfläche beim Klick direkt Abonnentenparameter setzen — das Feld „Parameter" (set_params). Im Unterschied zu Carry (temporäre Werte in ctx) schreibt set_params in persistente Benutzerparameter ({{param.schlüssel}}), die zwischen Ausführungen erhalten bleiben. Das gleiche Feld gibt es auch im Nachrichtenblock — dort werden Parameter beim Senden gesetzt, nicht beim Klick.

Eine Schaltfläche kann beim Klick auch Labels setzen und entfernen — mit denselben Feldern wie der Nachrichtenblock.

Unterschied der drei Mechanismen

  • Carry — Snapshot in ctx, lebt bis zum Klick, an eine konkrete Schaltfläche gebunden, mit TTL und Einmalverwendung.
  • set_params an der Schaltfläche — schreibt persistente Abonnentenparameter beim Klick.
  • set_params am Block — schreibt persistente Parameter beim Senden der Nachricht.

Für das Szenario „Produkt ausgewählt — verarbeiten" verwenden Sie dynamische Schaltflächen + Carry: Die Produktliste wird in Schaltflächen entfaltet, und die product_id jedes Produkts landet im Carry der jeweiligen Schaltfläche.

Nächste Schritte