Interactive buttons
Send messages with buttons and react to clicks — menus, polls, verification, claim buttons.
Two actions attach buttons to a message — Send message with buttons (optionally with an embed) and Reply with buttons. When a member clicks one, the Button clicked trigger fires in the same workflow, with the clicker as {user}, the message as context, and {button} / {button.label} identifying which button it was.
Button panel — the bot posts it for you
For permanent menus (role pickers, verification, FAQ buttons) use the Button panel trigger instead. You give it a channel, the message/embed and the buttons; when the workflow goes Live the bot publishes the panel itself and keeps it in sync — edit the text or buttons and save, and the live message is updated within about 30 seconds. Pause or delete the workflow and the panel is removed. Every click runs the workflow from that trigger, so no separate “start” trigger is needed.
Tip
A panel is tied to its node: delete the node and the message disappears; move it to another channel and it is re-posted there. If someone deletes the message by hand, the bot re-posts it on the next sync.
Defining buttons
In the inspector, each button has a label, an optional emoji, a style (Blurple, Grey, Green, Red, or Link) and an id. The id is what you filter on in Button clicked; it is auto-derived from the label until you edit it. Link buttons open a URL and never fire a trigger. Up to 25 buttons, laid out five per row.
Responding to a click
Discord expects a response to every click within 3 seconds, so the engine handles it for you: if no action in the run replies, the click is acknowledged silently. To respond explicitly, use one of the click-aware actions — they must come first on the branch:
- Reply privately
- An ephemeral message only the clicker sees — ideal for confirmations and menus.
- Edit the clicked message
- Replace the message text in place (e.g. “✅ Claimed by {user}”).
- Disable the clicked message's buttons
- Grey out all buttons — one-shot menus, claim buttons, closed polls.
Any other action (add role, send DM, give coins…) works as usual after a click; combine them freely. A button only triggers the workflow that created it — pausing or deleting the workflow turns its old buttons into a polite “this workflow is paused” notice.
Example — self-assign roles
- Button panel → channel #roles, message “Pick your platform”, buttons
pc🖥️,console🎮,mobile📱 (all Blurple). Leave Only run for this button id empty. - Panel → Text matches? is not needed: add three Button clicked triggers instead — id
pc→ Toggle role @PC → Reply privately “Toggled {button.label} for you.”; same forconsoleandmobile. - Enable the workflow. The bot posts the panel; clicks toggle roles.
Tip
You can also wire actions straight after the Button panel node and branch on {button} with Text matches? — but one Button clicked trigger per id reads better on the canvas.
Example — ticket-style claim
- Message sent in #requests → Reply with buttons “Staff: claim this request”, button
claim✋ (Green). - Button clicked (id
claim) → Has permission? Manage Messages → yes: Edit the clicked message “✋ Claimed by {user}” → Disable the clicked message's buttons; no: Reply privately “Staff only.”
