Skip to main content
The Buttons node sends a message with buttons that the user can tap to choose an option. It is ideal for guiding the conversation along specific paths without the user having to type.

General configuration

  • Header: Message title (maximum 60 characters)
  • Content: Main message that accompanies the buttons (maximum 1,024 characters on WhatsApp, 640 on Facebook/Instagram)
  • Footer: Additional text below the content (optional)

Options

Each button has:
  • Option name: Text visible on the button (maximum 20 characters)
  • Description: Additional context text (optional, maximum 72 characters)
You can add up to 3 buttons. To show more options, use the List node.

Button types

TypeBehavior
PostbackSends a payload to the flow and continues along the connected route
URLOpens a web page in the browser
PhoneInitiates a phone call

Dynamic options

If the options come from variable data (for example, a list of products from your API), you can enable dynamic mode instead of defining them manually. Configure:
  • Source variable: The variable that contains the list (for example, {{$memory.products}})
  • Label template: How each option is displayed (for example, {{item.name}} - ${{item.price}})
  • Description template: Additional text per option (for example, {{item.description}})
Available predefined templates: Simple list, Products, Available schedules, Branches.

Variables in messages

You can use variables in the header and content:
Header: Hello {{$user.names}}
Content: Choose an option for {{$memory.category}}

Advanced configuration

Mandatory selection

When enabled, the user must tap a button to continue. If they type free text, they will see a customizable error message (maximum 250 characters).

Response variable

Saves the option the user selected in a memory variable for later use in the flow. How to configure it:
  1. Enable the Save response toggle.
  2. Enter the variable name (for example, department).

Value saved with static options

When buttons are defined manually, the payload of the chosen button is saved as plain text. Example with these buttons:
ButtonPayload
Salessales
Technical Supportsupport
Billingbilling
If the user taps Technical Support:
// {{$memory.department}} contains:
const department = "support";

Value saved with dynamic options

When buttons are generated from a source variable, the complete object from the array to which the selected option belongs is saved. Suppose {{$memory.departments}} contains:
[
  { "id": "dep1", "name": "Sales", "email": "[email protected]" },
  { "id": "dep2", "name": "Support", "email": "[email protected]" },
  { "id": "dep3", "name": "Billing", "email": "[email protected]" }
]
If the user taps Support, the variable holds the complete object:
// {{$memory.department}} contains the complete object:
const department = {
  id: "dep2",
  name: "Support",
  email: "[email protected]"
};
You can access each property of the object in subsequent nodes:
// Accessing properties of {{$memory.department}}:
department.name;   // "Support"
department.email;  // "[email protected]"
department.id;     // "dep2"

Use cases

Connect a Conditional node and create a branch for each payload:
If {{$memory.department}} = "sales"   → Sales branch
If {{$memory.department}} = "support" → Support branch
If {{$memory.department}} = "billing" → Billing branch
With the complete object saved, you can use it directly in messages or subsequent nodes without additional queries:
Text: "I'll connect you with the {{$memory.department.name}} team.
Write to them at {{$memory.department.email}}"
Pass the selection as context to the AI Agent node:
The user selected the department: {{$memory.department.name}}.
Contact email: {{$memory.department.email}}.
Respond with specific information for that department.
Use an API or Datum node to save the selection:
{
  "userId": "{{$user.id}}",
  "departmentId": "{{$memory.department.id}}",
  "departmentName": "{{$memory.department.name}}",
  "timestamp": "{{$context.timestamp}}"
}

Single-use button

After the first selection, the buttons are deactivated. You can configure what happens next:
  • Send text: Displays an informational message
  • Redirect to skill: Takes the user to another flow

Button expires

If the user does not select any button within the time configured in your organization:
  • Send text: Displays an expiration message
  • Redirect to skill: Takes the user to another flow