GoGHL Logo
All posts
WhatsAppHow-to

WhatsApp Buttons in GoHighLevel: Quick Replies, CTAs, and List Menus (Full Syntax)

The exact #btn and #list syntax for all WhatsApp interactive buttons in GoHighLevel - quick replies, URL CTAs, call buttons, coupon-copy, and list menus.

June 12, 2026 Β· 7 min read Β· GoGHL Team

A WhatsApp message asking someone to 'reply YES to confirm' converts worse than one with a tap-to-confirm button. That gap is not marginal - it is the difference between a response rate that justifies automation investment and one that does not.

The reason is friction. Typing requires context-switching: the contact has to think about what to say, locate the keyboard, and compose a reply. Tapping a button requires none of that. The cognitive load drops to near zero, and the conversion rate follows.

GoGHL's WhatsApp integration for GoHighLevel ships full interactive button support - quick replies, URL CTAs, call buttons, and coupon-copy buttons - all triggered with a single line of text syntax inside any workflow, broadcast, or manual message. No separate Meta API approval is required. This post covers every button type with its exact syntax, the list-menu format for multi-option intake flows, and three concrete recipes you can deploy today.

Why Button Messages Outperform Text-Only Messages

When a contact receives a plain-text message asking them to reply, two things happen. First, they have to interpret the request. Second, they have to act on it in a medium (typing) that most people associate with effort. WhatsApp's own internal UX research has consistently shown that tappable UI elements reduce drop-off at action points.

Buttons solve the interpretation problem too. A button labeled 'Book a Call' carries no ambiguity. A message saying 'Reply BOOK to schedule a call' leaves open the question of whether 'book' needs to be capitalized, whether the system is case-sensitive, and whether the reply will actually trigger something or just vanish.

For agencies managing dozens of client sub-accounts, this compounds. Every percentage point of improvement in a booking confirmation flow, a coupon redemption prompt, or a service intake menu multiplies across every contact every campaign fires at. That is the practical case for using the button syntax rather than text-only instructions.

One honest trade-off: older WhatsApp clients (particularly on budget Android devices running outdated app versions) may not render interactive buttons. The GoGHL documentation recommends including a fallback line such as 'Reply 1, 2, or 3 if buttons do not show' in any high-volume campaign where device diversity is a concern.

The Core Button Syntax

Every interactive button message starts with the `#btn` prefix. The full structure is one line of pipe-delimited fields, with sub-fields separated by asterisks inside the button definitions.

Use the literal string `undefined` for any optional parameter you want to skip. Leaving it blank will break formatting.

  • title - the bold header text above the button(s)
  • subTitle - supporting body copy below the title (use undefined to skip)
  • mediaType*mediaUrl - attach an image or video (use undefined*undefined to skip both)
  • buttonType*buttonText*buttonId - one button definition; add more pipe-separated definitions for multiple buttons

Exact syntax (verbatim from GoGHL docs): #btn|title|subTitle|mediaType*mediaUrl|buttonType*buttonText*buttonId Skip optional params with the literal word: undefined

All Four Button Types With Examples

GoGHL supports four button types. Each serves a different conversion action. Button text labels must stay at or under 20 to 25 characters - longer labels get truncated in the WhatsApp UI.

The `quick_reply` type sends a predefined reply back to the conversation when the contact taps. This is the right choice for yes/no confirmations, NPS responses, or simple intake branches.

The `cta_url` type opens a URL inside WhatsApp's in-app browser. Use it for booking links, lead-magnet downloads, or product pages. The `cta_call` type dials a phone number directly - include the number in full international format starting with the country code.

The `cta_copy` type is the most underused. It copies a value (a coupon code, a referral code, a confirmation number) directly to the contact's clipboard with one tap. No typing, no screenshotting, no 'I lost the code' support tickets.

  • quick_reply: best for confirmation flows, A/B intent splits, NPS collection
  • cta_url: booking pages, lead magnets, product pages, payment links
  • cta_call: high-intent sales flows where calling is the fastest close path
  • cta_copy: coupon campaigns, referral codes, confirmation numbers - zero typing required

Button type reference (verbatim from GoGHL docs): quick_reply β†’ quick_reply*Get Started*start_btn cta_url β†’ cta_url*Visit Website*https://example.com cta_call β†’ cta_call*Call Me*+919999999999 cta_copy β†’ cta_copy*Copy Coupon*blackfriday50 Full example (booking + fallback): #btn|Book Your Free Call|Pick the option that works best|undefined*undefined|cta_url*Book a Time*https://cal.youragency.com|quick_reply*Call Me Instead*prefer_call Note: button text ≀ 20–25 characters. Add fallback text for older devices.

List Menus: Native WhatsApp Dropdowns From a Workflow

When a contact needs to choose from more than three options, buttons start to feel cluttered. WhatsApp list messages render as a native expandable dropdown menu, which handles longer option sets cleanly without overwhelming the message body.

The `#list` syntax is similar to buttons but uses a section-and-item hierarchy. Sections group related items; items are the individual selectable options. A slash separates sections; an asterisk separates fields within each section and item.

The same `undefined` rule applies here. Skipping optional fields without the literal `undefined` placeholder will break rendering. Use the Button Builder at builder.goghl.ai to validate complex list structures before deploying them to a live workflow.

  • title: the bold top-line header of the list message
  • description: supporting body text explaining the choice
  • footer: small-print line at the bottom (brand credit, disclaimer)
  • buttonText: the label on the button that expands the list (e.g. 'View Options')
  • sections: pipe-delimited groups, each with asterisk-delimited items

Exact list syntax (verbatim from GoGHL docs): #list|title|description|footer|buttonText|sections Sections format: SectionTitle*ItemTitle*ItemDescription*ItemId/SectionTitle2*ItemTitle2*ItemDescription2*ItemId2 Full example from docs: #list|Product Catalog|Choose your product|Powered by GoGhl|View Products|Electronics*iPhone 15*Latest iPhone model*iphone15/...Jeans*Classic denim*jeans01 Each section can have unlimited options. Renders with WhatsApp's native list UI across devices.

The No-Code Builder and Agency Whitelabeling

The syntax above is enough to write button messages by hand in a workflow action. For agencies building these on behalf of clients, the no-code Button Builder at builder.goghl.ai provides a visual interface that validates structure, escapes special characters, and outputs the ready-to-paste syntax.

Agencies on GoGHL can embed the builder inside their client sub-account portals via Agency Settings β†’ Company β†’ Whitelabel β†’ Custom JS. That means the client sees a branded tool, not an external link, and the agency controls the experience end to end.

This matters for scale. An agency managing 30 sub-accounts cannot QA raw syntax strings across every client's workflows. The builder reduces that audit load significantly. One install of GoGHL covers all sub-accounts, no per-sub-account licensing required.

Three Recipes You Can Deploy Today

Recipe 1: Appointment confirmation quick-replies in a workflow. After a lead fills a form, a GHL workflow sends a button message with two quick_reply options - 'Confirm My Spot' and 'Reschedule'. The reply ID triggers the relevant branch: one branch sends a calendar link, the other fires a date-picker message. No human needed until the call itself.

Recipe 2: Coupon-copy promo broadcast. A bulk campaign to an existing customer segment sends a `cta_copy` button with a discount code. The contact taps once and the code is on their clipboard. Pair this with smart drip mode to pace the broadcast at roughly 15 seconds per message so the volume does not spike the account's risk score.

Recipe 3: Service-menu list for intake. A new inbound contact gets an automated list message with a `#list` structure grouping your agency's core service areas - 'SEO & Content', 'Paid Media', 'Web Design' - each with two or three sub-items. The ItemId from the contact's selection flows into a custom field, routing them to the right onboarding sequence without a manual qualification call. For more advanced routing logic using external data, see n8n + GoHighLevel automations agencies bill for.

All three recipes work in the same unified inbox as your SMS and iMessage conversations - no tab-switching between channels.

Interactive buttons are not a cosmetic feature. They are a conversion mechanism that removes the single biggest friction point in a text-based funnel: having to type. The syntax is a one-time investment - once you understand the `#btn` and `#list` structure, you can build any button flow in under two minutes. Start with the coupon-copy recipe if you want the fastest proof of ROI, or the service-menu list if intake qualification is your current bottleneck.

Try it inside your own GHL account

One install adds WhatsApp, iMessage, and SMS to every sub-account. Free for 7 days, no credit card.