Skip to content
Meta Business PartnerStep-by-step guide

How to use interactive buttons on the WhatsApp Business API

Interactive buttons turn a passive WhatsApp message into a tap-to-reply experience: instead of typing "yes", "track my order" or "talk to an agent", your customer taps a labelled button and your flow reacts instantly. On the official WhatsApp Business API there are two distinct button types — quick-reply buttons (up to three, that send a payload back to your webhook) and call-to-action buttons (URL and phone-number buttons that open a link or dial a number). This tutorial walks through building both with InfiQ, an official Meta Business Partner, from template creation to going live — plus the mistakes that most often trigger template rejections or silent button failures.

What you'll do

Create a template with a BUTTONS component (quick-reply or call-to-action), get it approved in the right category, send it, and listen for the button reply on your webhook. InfiQ gives you a no-code template builder and handles the API plumbing, so most teams are live in under an hour.

Step 1 — Decide which button type you actually need

Before you build anything, pick the right button type, because the two behave completely differently and mixing them up is the number-one cause of wasted setup time. Quick-reply buttons send a structured payload back to your webhook when tapped, which makes them ideal for menus, confirmations and routing ("Confirm order", "Reschedule", "Talk to support"). Call-to-action (CTA) buttons don't notify your webhook at all — a URL button opens a link (payment page, tracking URL, catalogue) and a phone-number button dials your team. You cannot combine quick-reply and CTA buttons in the same template, and each has its own limits, so decide the interaction first and design the message around it.

  • Quick-reply buttons: up to 3 per message, each returns a payload to your webhook — use for choices and automation branches.
  • URL button: opens a web link; supports one dynamic variable in the URL for per-customer links (e.g. an order-specific tracking page).
  • Phone-number button: dials a fixed number — no variable, no webhook event.
  • Rule of thumb: if your bot needs to *know* which button was pressed, use quick-reply; if you just need to send the customer somewhere, use a CTA button.

Step 2 — Build and submit the button template in InfiQ

All buttons attached to business-initiated messages live inside an approved message template, so this is where the real work happens. In the InfiQ dashboard, open Template management and create a new template, then add a BUTTONS component and drop in your buttons. Choose the category honestly — this directly affects both approval and cost, because WhatsApp bills per delivered message by category. A promotional menu is Marketing; an order confirmation or shipping update is Utility; a login or OTP flow is Authentication (and Authentication templates have their own fixed button pattern). Keep button labels short (25 characters or fewer), action-oriented and non-deceptive; a URL button that says "Track order" must actually open a tracking page. Submit for review and InfiQ surfaces Meta's approval status back to you, usually within minutes to a few hours.

  • Add the BUTTONS component, then add quick-reply OR call-to-action buttons (not both).
  • Pick the category by intent: Marketing, Utility, or Authentication — this drives the per-message rate.
  • Label limit is 25 characters; make labels describe exactly what the tap does.
  • For a dynamic URL button, add a variable to the URL suffix and provide a sample value so the template passes review.

Step 3 — Send the template message with buttons

Once the template is approved you send it like any other template message — the buttons are already baked into the approved template, so at send time you only supply the variable values (body placeholders and, for a dynamic URL button, the button variable). Business-initiated messages always require an approved template and a valid opt-in; you can only send free-form interactive messages (not requiring a template) when the customer has messaged you within the last 24 hours, inside the free service window. In InfiQ you can trigger the send from a no-code broadcast or automation, or hit the API directly if you're building a custom flow. Every delivered template message is billed by its category — the 24-hour service window itself is free and is not a billing unit, so replies you send inside it don't add per-message template charges of their own.

  • Business-initiated (proactive) sends require an approved template plus opt-in — quick-reply and CTA buttons ride inside it.
  • Inside the 24-hour service window (customer messaged you last) you can send free-form interactive button messages without a template.
  • Provide only the runtime values at send time — button structure is fixed at approval.
  • Delivered template messages are billed per message by category (Marketing / Utility / Authentication).

Step 4 — Capture the button tap on your webhook

This is the step teams most often forget, and it's why buttons appear to "do nothing". When a customer taps a quick-reply button, WhatsApp sends an inbound webhook event to your configured endpoint containing the button's payload (the ID you set) and its display text. Your application reads that payload and branches — mark the order confirmed, open a support ticket, or send the next step of the flow. CTA URL and phone buttons do not fire this event, so never rely on a webhook to detect that someone opened a link. If you're using InfiQ's no-code automation, you map each button payload to a next action in the builder; if you're on the API, make sure your webhook is subscribed to message events and that you're parsing the interactive button reply object, not just plain text messages.

  • Quick-reply tap → inbound webhook with the button payload/ID and title text.
  • Match the incoming payload to the branch or automation you want to run next.
  • No-code: map each button to its next action inside InfiQ's flow builder.
  • API: subscribe to message webhooks and handle the interactive button-reply object explicitly.

Step 5 — Test end-to-end, then go live and monitor

Test with your own number before you broadcast to anyone. Send the template to yourself, tap each quick-reply button and confirm the correct webhook payload arrives and the right branch runs; open each URL button and check the link resolves (including the dynamic variable if you used one); dial the phone button and confirm it reaches the right team. When it all works, go live gradually rather than blasting your whole list — warm up a new number with lower volume first, because sending high volume from a cold number hurts your quality rating and can throttle delivery. After launch, watch delivery and read status, tap-through on your quick-reply buttons, and your template quality rating in the dashboard so you can fix a wobbly template before Meta pauses it.

  • Self-test every button: quick-reply payloads, URL resolution, and phone dial.
  • Warm up a new number with gradual volume before high-volume broadcasts.
  • Monitor delivery, read receipts, button engagement and template quality rating.
  • If a template's quality drops, revise the copy or category and resubmit rather than pushing more volume through it.

Do this in InfiQ now

Talk to InfiQ

Want us to set this up with you?

Tell us where you’re stuck — we’ll walk you through it and get you live.

Step 1 of 2
WhatsApp

Protected by invisible spam checks · replies within 1 working day

Frequently asked questions

How many interactive buttons can a WhatsApp message have?+
Quick-reply messages support up to 3 buttons, each returning a payload to your webhook. Call-to-action templates support up to 2 buttons — typically one URL button and one phone-number button. If you need more than three options, use a List message instead of buttons, which supports a scrollable menu of items.
What's the difference between quick-reply and call-to-action buttons?+
Quick-reply buttons send a payload back to your webhook when tapped, so your automation knows exactly which option the customer chose. Call-to-action buttons (URL and phone-number) simply open a link or dial a number and do not notify your webhook. You cannot mix the two types in a single template.
Do I need an approved template to send buttons?+
For business-initiated messages, yes — the buttons live inside an approved template and you need customer opt-in. Inside the 24-hour service window (when the customer has messaged you last), you can send free-form interactive button messages without a pre-approved template.
Why isn't my quick-reply button doing anything when tapped?+
Almost always the webhook isn't wired up. Quick-reply taps arrive as an inbound webhook event carrying the button payload — if your endpoint isn't subscribed to message events, or your code only parses plain text and ignores the interactive button-reply object, the tap looks like it does nothing. CTA URL and phone buttons never fire a webhook, so they can't be handled this way.
Can a URL button be personalised per customer?+
Yes. A URL button supports one dynamic variable in the link suffix, so you can send each customer an order-specific tracking page or a personalised payment link. You must provide a sample value when submitting the template so it passes Meta's review.
How much do button messages cost?+
Buttons themselves are free — you pay for the message. Since 1 July 2025 WhatsApp bills per delivered message by category (Marketing, Utility or Authentication), not per conversation. InfiQ applies transparent ₹ pricing (ex-GST), so the category you choose at template creation directly determines the rate.
Do I need a developer to add interactive buttons?+
For most use cases, no. InfiQ's no-code template builder lets you add quick-reply and call-to-action buttons and map each button to a next action visually. You'd only reach for the API if you're building custom automation or wiring button payloads into your own backend.
How long does approval take and how do I avoid rejection?+
Template approval usually takes minutes to a few hours. To avoid rejection, pick the correct category for the message intent, keep button labels under 25 characters and non-deceptive, and make sure a URL button actually opens what its label promises. Mislabelled buttons and wrong categories are the most common rejection reasons.