WhatsApp Support Ticket Flow Template

A one-screen support form that captures the issue category, priority, an optional order or booking reference, a short subject, a full description and the best time to reply, so every support conversation starts with enough context to act on.

1 screen 6 fields returned Flow JSON 7.2 Customer support Online stores, Clinics, Studios, Service businesses

Use Try it to fill the flow and see the exact response_json it returns.

support-ticket.json Open in Flow Builder
{
  "version": "7.2",
  "screens": [
    {
      "id": "SUPPORT_REQUEST",
      "title": "Contact support",
      "terminal": true,
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_support_request",
            "children": [
              {
                "type": "TextHeading",
                "text": "Tell us what is going on"
              },
              {
                "type": "TextBody",
                "text": "The more detail you give us here, the fewer questions we need to ask before fixing it."
              },
              {
                "type": "Dropdown",
                "name": "issue_category",
                "label": "What is it about?",
                "data-source": [
                  {
                    "id": "order_delivery",
                    "title": "Order or delivery"
                  },
                  {
                    "id": "billing_payment",
                    "title": "Billing or payment"
                  },
                  {
                    "id": "booking_appointment",
                    "title": "Booking or appointment"
                  },
                  {
                    "id": "account_login",
                    "title": "Account or login"
                  },
                  {
                    "id": "product_question",
                    "title": "Product or service question"
                  },
                  {
                    "id": "technical_problem",
                    "title": "Something is not working"
                  },
                  {
                    "id": "complaint",
                    "title": "Complaint"
                  },
                  {
                    "id": "something_else",
                    "title": "Something else"
                  }
                ],
                "required": true
              },
              {
                "type": "RadioButtonsGroup",
                "name": "priority",
                "label": "How urgent is it?",
                "data-source": [
                  {
                    "id": "low",
                    "title": "Low",
                    "description": "A question, no rush"
                  },
                  {
                    "id": "normal",
                    "title": "Normal",
                    "description": "A problem, but I can still use the service"
                  },
                  {
                    "id": "urgent",
                    "title": "Urgent",
                    "description": "I cannot use the service or an order is stuck right now"
                  }
                ],
                "required": true
              },
              {
                "type": "TextInput",
                "name": "reference_number",
                "label": "Order or booking ref",
                "input-type": "text",
                "helper-text": "Optional, for example Order #10482 or BK-2291"
              },
              {
                "type": "TextInput",
                "name": "subject",
                "label": "Subject",
                "input-type": "text",
                "required": true,
                "helper-text": "One line, up to 60 characters",
                "max-chars": 60
              },
              {
                "type": "TextArea",
                "name": "issue_description",
                "label": "Describe the issue",
                "required": true,
                "helper-text": "What happened, when, and what you have tried so far",
                "max-length": 1000
              },
              {
                "type": "Dropdown",
                "name": "reply_time",
                "label": "Best time to reply",
                "data-source": [
                  {
                    "id": "anytime",
                    "title": "Any time"
                  },
                  {
                    "id": "morning",
                    "title": "Morning (9am - 12pm)"
                  },
                  {
                    "id": "afternoon",
                    "title": "Afternoon (12pm - 5pm)"
                  },
                  {
                    "id": "evening",
                    "title": "Evening (5pm - 8pm)"
                  }
                ]
              },
              {
                "type": "TextCaption",
                "text": "We usually reply within a few hours during opening times, right here in this chat."
              },
              {
                "type": "Footer",
                "label": "Submit request",
                "on-click-action": {
                  "name": "complete",
                  "payload": {
                    "issue_category": "${form.issue_category}",
                    "priority": "${form.priority}",
                    "reference_number": "${form.reference_number}",
                    "subject": "${form.subject}",
                    "issue_description": "${form.issue_description}",
                    "reply_time": "${form.reply_time}"
                  }
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

Raw JSON for scripts: curl -s https://whautomate.com/whatsapp-flow-templates/support-ticket.json

Import in 60 seconds
  1. Copy the JSON above (or edit it first in the Flow Builder).
  2. In WhatsApp Manager, open Account tools > Flows, create a flow and choose Customer support as the category.
  3. Paste into the JSON editor, check the preview, then Publish.
  4. Send it with the Flow ID, as an interactive message or through a template's Flow button.

Not technical? Skip the JSON and send it from Whautomate with a drag-and-drop editor.

About this support ticket flow

Support chats often open with "hi", "hello?" or "I have a problem", and the first few minutes of an agent's time go into finding out what the problem is. This flow replaces that opening with a single screen: the customer picks a category, says how urgent it is, adds an order or booking reference if they have one, and describes the issue in their own words.

The category Dropdown and priority radio give you two structured values to sort and route on, while the subject line, capped at 60 characters, gives agents a scannable one-line summary. The description is a TextArea with a length limit so customers can explain properly without pasting an entire email thread. A preferred reply time lets you avoid messaging someone during their working day when they told you evenings are better.

Everything fits on one screen on purpose. Support forms lose people with every extra tap, and a customer with a problem is already less patient than one who is browsing. The reference field is optional because many questions, such as billing or login issues, have no order or booking attached.

Fields this flow returns

When the customer taps the final button, the complete action sends these keys back in response_json. Fields from earlier screens are pulled in with global references (${screen.SCREEN_ID.form.field}), so nothing is lost between screens.

KeyComponentScreenRequiredReturnsExample
issue_category
order_delivery, billing_payment, booking_appointment, account_login, product_question, technical_problem, complaint, something_else
Dropdown SUPPORT_REQUEST Yes item id "billing_payment"
priority
low, normal, urgent
RadioButtonsGroup SUPPORT_REQUEST Yes item id "normal"
reference_number TextInput SUPPORT_REQUEST No string "Order #10482"
subject TextInput SUPPORT_REQUEST Yes string "Charged twice for one order"
issue_description TextArea SUPPORT_REQUEST Yes string "I placed one order on Tuesday but my card statement shows two charges of $64.90. Please refund the duplicate payment."
reply_time
anytime, morning, afternoon, evening
Dropdown SUPPORT_REQUEST No item id "evening"

Optional fields the customer leaves empty may be missing from response_json or arrive empty. Treat every optional key as nullable in your handler.

No developer needed

Send the Support Ticket flow without touching code

You do not need to be technical to use WhatsApp Flows. Connect your WhatsApp number, set the flow up in our drag-and-drop editor and send it to customers in a few clicks. No JSON, no API calls, no WhatsApp Manager.

1

Connect your number

Log in with Facebook and connect your WhatsApp number in a few minutes. No API keys or servers to set up.

2

Set up the flow

Start from a ready-made form or import this one, then drag fields in, change the wording and try it on a live phone preview. Click Publish when it looks right.

3

Send it anywhere

Send it from any chat in the Team Inbox, on web or mobile, send it automatically from an automation, or broadcast it to a list.

4

Get the answers

Every answer is saved on the customer's profile and chat, and your team can be notified the moment a form comes in.

7-day free trial, no credit card required.

Sample webhook payload (nfm_reply)

This is what your webhook receives when a customer submits the flow. response_json is a JSON string: parse it, then match flow_token to the record you created when you sent the message. The customer's WhatsApp number is in messages[0].from.

response_json (parsed)
{
  "flow_token": "bk_8f2c41",
  "issue_category": "billing_payment",
  "priority": "normal",
  "reference_number": "Order #10482",
  "subject": "Charged twice for one order",
  "issue_description": "I placed one order on Tuesday but my card statement shows two charges of $64.90. Please refund the duplicate payment.",
  "reply_time": "evening"
}
POST your-webhook (full event)
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "field": "messages",
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "15550001234",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "contacts": [
              {
                "profile": {
                  "name": "Alex Morgan"
                },
                "wa_id": "14155550123"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "15550001234",
                  "id": "wamid.SENT_FLOW_MESSAGE_ID"
                },
                "from": "14155550123",
                "id": "wamid.INCOMING_MESSAGE_ID",
                "timestamp": "1760000000",
                "type": "interactive",
                "interactive": {
                  "type": "nfm_reply",
                  "nfm_reply": {
                    "name": "flow",
                    "body": "Sent",
                    "response_json": "{\"flow_token\":\"bk_8f2c41\",\"issue_category\":\"billing_payment\",\"priority\":\"normal\",\"reference_number\":\"Order #10482\",\"subject\":\"Charged twice for one order\",\"issue_description\":\"I placed one order on Tuesday but my card statement shows two charges of $64.90. Please refund the duplicate payment.\",\"reply_time\":\"evening\"}"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ]
}

Deploy with the WhatsApp Cloud API

Prefer code over WhatsApp Manager? Save the template as support-ticket.json and run these calls with a system user token that has whatsapp_business_management and whatsapp_business_messaging permissions.

1. Create the flow

bash
curl -X POST 'https://graph.facebook.com/v23.0/{WABA_ID}/flows' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d '{"name": "support_ticket", "categories": ["CUSTOMER_SUPPORT"]}'
# => {"id": "{FLOW_ID}"}

2. Upload the Flow JSON

bash
curl -X POST 'https://graph.facebook.com/v23.0/{FLOW_ID}/assets' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -F '[email protected];type=application/json' \
  -F 'name=flow.json' \
  -F 'asset_type=FLOW_JSON'
# => {"success": true, "validation_errors": []}

3. Publish it

bash
curl -X POST 'https://graph.facebook.com/v23.0/{FLOW_ID}/publish' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}'

Publishing is permanent: a published flow cannot be edited. To change it later, create a new flow (or clone it with clone_flow_id) and publish the new version.

4. Send it to a customer

Inside the 24-hour customer service window, send an interactive flow message. Outside it, create a message template with a Flow button that points to this flow, and send the template instead.

send-support-ticket.json
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "14155550123",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "How can we help?"
    },
    "body": {
      "text": "Tell us what is going on in one short form. Including your order or booking reference helps us sort it out faster."
    },
    "footer": {
      "text": "Our team replies in this chat"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "bk_8f2c41",
        "flow_id": "YOUR_FLOW_ID",
        "flow_cta": "Open support request",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "SUPPORT_REQUEST"
        }
      }
    }
  }
}
bash
curl -X POST 'https://graph.facebook.com/v23.0/{PHONE_NUMBER_ID}/messages' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d @send-support-ticket.json

When to send it

Out-of-hours messages

When someone writes outside opening hours, reply with the flow so the request is fully described and waiting in the queue when your team starts the day.

"Help" or "problem" keywords

Send the form when a customer types "help", "support", "issue" or "not working", instead of a menu of numbered options they have to reply to.

Escalation from a chatbot

When a chatbot cannot answer a question, hand over with the flow so the human agent receives a structured summary rather than a long bot transcript.

Post-purchase help message

Add a "Get help" Flow button to an order or booking confirmation template, so customers with a problem later can open a request from that same message.

How to customise this template

  • Build the category list from your last few hundred support chats. Use the top six to eight reasons as categories and keep "Something else" last; more than ten slows people down in a Dropdown.
  • Change the reference helper text to show your real format, such as "Order #10482" for a store or "Booking BK-2291" for a studio, so customers know which number to look for.
  • If you do not triage by urgency, remove the priority radio instead of keeping it for show. If you do, describe each level in the item description so "urgent" means the same thing to everyone.
  • Swap the reply-time options for your staffed hours. A business closed on Sundays should not offer "Weekend" as a choice.

Open this template in the Flow Builder to make these changes visually. The builder keeps field names unique and regenerates the completion payload for you.

Common mistakes to avoid

  • Almost everyone picks "Urgent" when it has no description. Define each priority level, for example "I cannot use the service right now", and route on it only if the definitions hold up.
  • Do not promise a response time in the form that your team cannot meet. A caption such as "We usually reply within a few hours" is safer than a hard deadline.
  • The reference field is free text, so a customer may type an email address or phone number instead. Validate it in your webhook handler before trying to match a record.
  • Setting max-chars on the subject and max-length on the description helps readability, but tell customers about the limit in the helper text so they are not surprised when typing stops.

Structured requests, handled in one inbox

In Whautomate, import this flow into the built-in flow editor and click Publish. Agents send it from the Team Inbox in two clicks when a customer reports a problem, or an automation sends it for them. Each submission shows on the chat with every field laid out and can assign the chat to the right queue, so an agent can resolve it without asking follow-up questions.

  • Send from the Team Inbox, web or mobile
  • Route submissions to a queue or agent automatically
  • Shopify and WooCommerce order triggers

7-day free trial, no credit card required.

Frequently asked questions

The flow itself only sends the answers back to your WhatsApp webhook as an nfm_reply message. To create a ticket, your webhook handler parses response_json and calls your helpdesk API with the category, priority, subject and description. The flow_token is a good place to carry a conversation or contact id for that mapping.
Dropdown and radio fields return the item id, not the visible title: for example issue_category arrives as billing_payment and priority as urgent. Keep ids stable once the flow is live so your routing rules keep working when you reword the titles.
Not in a static flow. Showing live order or booking data requires a data_exchange endpoint that the flow calls while the customer fills it in. This template records the reference number so an agent or your backend can look it up afterwards.
Yes. Publish the flow in your WhatsApp account, then send it from a chatbot "send WhatsApp Flow" step when a customer is inside the 24-hour window, or from a message template with a Flow button. Submissions show on the customer's chat in the shared team inbox, where an agent can reply in the same thread.

The Complete Omnichannel Customer Engagement Platform

Go beyond free tools. Automate conversations, build AI chatbots, send broadcast campaigns, book appointments, sell products, and manage every messaging channel from one powerful platform. Trusted by thousands of businesses worldwide.

  • WhatsApp, Instagram, Messenger, Telegram & Live Chat
  • AI chatbots & no-code automation
  • Broadcast campaigns & analytics
  • Appointment & class booking
  • E-commerce, Shopify & WooCommerce integration
  • CRM, invoicing & payment collection

No credit card required. Free 7-day trial. Visit our pricing page for plans.