WhatsApp Flows

Sending Flows via Message Templates

Updated 31 May 2026

WhatsApp Flows are always triggered by a button inside an approved message template. This article explains how to create that template, get it approved, and send it via Baat.

Step 1 — Create your Flow in Meta Business Manager

  • Go to Meta Business Manager → WhatsApp → Flows

  • Click Create Flow, give it a name and category

  • Build your screens using the visual Flow Builder (or paste your Flow JSON in the code editor)

  • Click Publish — the Flow gets a permanent flow_id

Note the flow_id — you’ll need it when creating the template.

Step 2 — Create a template with a Flow button

  • Go to Meta Business Manager → WhatsApp → Message Templates

  • Click Create Template

  • Choose a category (e.g. Utility for service flows, Marketing for lead gen)

  • Add your message body and, under Buttons, select Flow

  • Fill in the button fields:

FieldDescription
flow_idThe ID of the published Flow from step 1
flow_ctaButton label shown to the customer (e.g. “Book Now”)
flow_actionnavigate (opens a specific screen) or data_exchange
navigate_screenThe id of the screen to open first (required if flow_action is navigate)
  • Submit for review — templates in the Utility category are typically approved within minutes

Step 3 — Send the template via Baat

Once the template is approved, it appears automatically in Baat under Settings → Channels → Templates. You can now send it from:

  • Inbox — Click Send Template, select the Flow template, and send

  • Broadcast — Create a new broadcast and select the Flow template

  • Journey Builder — Add a Send Template step and choose the Flow template

The API payload (for reference)

Baat handles this automatically, but for reference, here is what the Cloud API call looks like when sending a Flow template:

POST https://graph.facebook.com/v19.0/{phone-number-id}/messages

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "919876543210",
  "type": "template",
  "template": {
    "name": "book_appointment_v1",
    "language": { "code": "en" },
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Priya" }
        ]
      },
      {
        "type": "button",
        "sub_type": "flow",
        "index": "0",
        "parameters": [
          {
            "type": "action",
            "action": {
              "flow_token": "FLOW_TOKEN_abc123",
              "flow_action_data": {}
            }
          }
        ]
      }
    ]
  }
}

flow_token is a unique string you generate per send — it ties the Flow submission back to the specific conversation. Baat generates this automatically when sending via the dashboard. If you use the API directly, generate a UUID per send.

What happens after the customer submits

  • The Flow overlay closes and the customer returns to the chat

  • WhatsApp delivers a webhook notification to Baat containing the submitted form data as a JSON payload

  • Baat stores the response data in the conversation and makes it available to Journey Builder for the next step

  • If you have a Journey step after the Flow, it triggers automatically using the submitted data

Webhook payload shape

{
  "object": "whatsapp_business_account",
  "entry": [{
    "changes": [{
      "value": {
        "messages": [{
          "type": "interactive",
          "interactive": {
            "type": "nfm_reply",
            "nfm_reply": {
              "response_json": "{"full_name":"Priya Sharma","service_type":"spa","appointment_date":"2024-06-15"}",
              "body": "Sent",
              "name": "flow"
            }
          }
        }]
      }
    }]
  }]
}

The response_json string contains all submitted field values keyed by the name attribute you defined in your Flow JSON.

Need a hand?

Our team answers on WhatsApp, usually within a business day.

Contact support Book a demo