WhatsApp Event RSVP Flow Template

A two-screen RSVP for workshops, open days, launches and seminars: attending yes, maybe or no, guest count, sessions, dietary and accessibility needs, then name, email, optional company, event updates and photo consent.

2 screens 10 fields returned Flow JSON 7.2 Sign up Event hosts, Studios, Clinics, Consultants, Stores

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

event-rsvp.json Open in Flow Builder
{
  "version": "7.2",
  "screens": [
    {
      "id": "RSVP",
      "title": "RSVP",
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_rsvp",
            "children": [
              {
                "type": "TextHeading",
                "text": "Will you join us?"
              },
              {
                "type": "TextBody",
                "text": "Open evening, Thursday 12 November, 6pm to 8pm. Talks, demos and refreshments."
              },
              {
                "type": "RadioButtonsGroup",
                "name": "attendance",
                "label": "Can you attend?",
                "data-source": [
                  {
                    "id": "attending_yes",
                    "title": "Yes, I will be there"
                  },
                  {
                    "id": "attending_maybe",
                    "title": "Maybe"
                  },
                  {
                    "id": "attending_no",
                    "title": "No, I cannot make it"
                  }
                ],
                "required": true
              },
              {
                "type": "Dropdown",
                "name": "guest_count",
                "label": "Guests",
                "data-source": [
                  {
                    "id": "guests_0",
                    "title": "Just me"
                  },
                  {
                    "id": "guests_1",
                    "title": "Me + 1"
                  },
                  {
                    "id": "guests_2",
                    "title": "Me + 2"
                  },
                  {
                    "id": "guests_3",
                    "title": "Me + 3"
                  },
                  {
                    "id": "guests_4",
                    "title": "Me + 4"
                  }
                ]
              },
              {
                "type": "CheckboxGroup",
                "name": "sessions",
                "label": "Sessions you want to attend",
                "data-source": [
                  {
                    "id": "keynote",
                    "title": "Welcome talk",
                    "description": "6:00pm, main room"
                  },
                  {
                    "id": "workshop_a",
                    "title": "Hands-on workshop",
                    "description": "6:30pm, limited places"
                  },
                  {
                    "id": "workshop_b",
                    "title": "Q&A with the team",
                    "description": "7:00pm"
                  },
                  {
                    "id": "networking",
                    "title": "Networking and drinks",
                    "description": "7:30pm"
                  }
                ]
              },
              {
                "type": "CheckboxGroup",
                "name": "dietary",
                "label": "Dietary requirements",
                "data-source": [
                  {
                    "id": "none",
                    "title": "None"
                  },
                  {
                    "id": "vegetarian",
                    "title": "Vegetarian"
                  },
                  {
                    "id": "vegan",
                    "title": "Vegan"
                  },
                  {
                    "id": "gluten_free",
                    "title": "Gluten-free"
                  },
                  {
                    "id": "dairy_free",
                    "title": "Dairy-free"
                  },
                  {
                    "id": "halal",
                    "title": "Halal"
                  },
                  {
                    "id": "kosher",
                    "title": "Kosher"
                  },
                  {
                    "id": "nut_allergy",
                    "title": "Nut allergy"
                  }
                ]
              },
              {
                "type": "TextArea",
                "name": "accessibility_needs",
                "label": "Accessibility needs",
                "helper-text": "Access, seating or support that would help you",
                "max-length": 400
              },
              {
                "type": "Footer",
                "label": "Continue",
                "on-click-action": {
                  "name": "navigate",
                  "next": {
                    "type": "screen",
                    "name": "ATTENDEE"
                  },
                  "payload": {}
                }
              }
            ]
          }
        ]
      }
    },
    {
      "id": "ATTENDEE",
      "title": "Your details",
      "terminal": true,
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_attendee",
            "children": [
              {
                "type": "TextSubheading",
                "text": "Who is coming?"
              },
              {
                "type": "TextInput",
                "name": "full_name",
                "label": "Full name",
                "input-type": "text",
                "required": true
              },
              {
                "type": "TextInput",
                "name": "email",
                "label": "Email",
                "input-type": "email",
                "required": true,
                "helper-text": "For the calendar invite and directions"
              },
              {
                "type": "TextInput",
                "name": "company",
                "label": "Company (optional)",
                "input-type": "text"
              },
              {
                "type": "OptIn",
                "name": "event_updates",
                "label": "Send me updates about this event on WhatsApp"
              },
              {
                "type": "OptIn",
                "name": "photo_consent",
                "label": "I am happy to appear in event photos you share online"
              },
              {
                "type": "Footer",
                "label": "Send RSVP",
                "on-click-action": {
                  "name": "complete",
                  "payload": {
                    "attendance": "${screen.RSVP.form.attendance}",
                    "guest_count": "${screen.RSVP.form.guest_count}",
                    "sessions": "${screen.RSVP.form.sessions}",
                    "dietary": "${screen.RSVP.form.dietary}",
                    "accessibility_needs": "${screen.RSVP.form.accessibility_needs}",
                    "full_name": "${form.full_name}",
                    "email": "${form.email}",
                    "company": "${form.company}",
                    "event_updates": "${form.event_updates}",
                    "photo_consent": "${form.photo_consent}"
                  }
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

Raw JSON for scripts: curl -s https://whautomate.com/whatsapp-flow-templates/event-rsvp.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 Sign up 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 event rsvp flow

An RSVP by WhatsApp beats an email invite for one simple reason: people answer chats. The problem with plain replies ("yes, probably, maybe bringing my sister") is that you cannot count them. This flow turns each reply into a structured record with an attendance status, a guest number, chosen sessions and catering needs, so your headcount and dietary numbers add up without a spreadsheet clean-up.

Screen one covers the event itself. Attendance is a three-way radio because "maybe" is real information: it tells you how many extra seats to plan for and who to nudge a day before. Guests are a dropdown from "Just me" to "Me + 4", sessions are a checklist for multi-track days, and dietary and accessibility questions sit together so the venue brief comes from one place.

Screen two collects the attendee details and two separate permissions: event updates by WhatsApp, and consent to appear in photos. Keeping photo consent explicit per attendee saves an awkward conversation after a launch when you want to post pictures. The phone number is not asked for, because it arrives with the submission.

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
attendance
attending_yes, attending_maybe, attending_no
RadioButtonsGroup RSVP Yes item id "attending_yes"
guest_count
guests_0, guests_1, guests_2, guests_3, guests_4
Dropdown RSVP No item id "guests_1"
sessions
keynote, workshop_a, workshop_b, networking
CheckboxGroup RSVP No array of ids ["keynote","workshop_a"]
dietary
none, vegetarian, vegan, gluten_free, dairy_free, halal, kosher, nut_allergy
CheckboxGroup RSVP No array of ids ["vegetarian"]
accessibility_needs TextArea RSVP No string "Step-free access please, I use a wheelchair."
full_name TextInput ATTENDEE Yes string "Jordan Lee"
email TextInput (email) ATTENDEE Yes string "[email protected]"
company TextInput ATTENDEE No string "Brightside Studio"
event_updates OptIn ATTENDEE No boolean true
photo_consent OptIn ATTENDEE No boolean false

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 Event RSVP 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",
  "attendance": "attending_yes",
  "guest_count": "guests_1",
  "sessions": [
    "keynote",
    "workshop_a"
  ],
  "dietary": [
    "vegetarian"
  ],
  "accessibility_needs": "Step-free access please, I use a wheelchair.",
  "full_name": "Jordan Lee",
  "email": "[email protected]",
  "company": "Brightside Studio",
  "event_updates": true,
  "photo_consent": false
}
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\",\"attendance\":\"attending_yes\",\"guest_count\":\"guests_1\",\"sessions\":[\"keynote\",\"workshop_a\"],\"dietary\":[\"vegetarian\"],\"accessibility_needs\":\"Step-free access please, I use a wheelchair.\",\"full_name\":\"Jordan Lee\",\"email\":\"[email protected]\",\"company\":\"Brightside Studio\",\"event_updates\":true,\"photo_consent\":false}"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ]
}

Deploy with the WhatsApp Cloud API

Prefer code over WhatsApp Manager? Save the template as event-rsvp.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": "event_rsvp", "categories": ["SIGN_UP"]}'
# => {"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-event-rsvp.json
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "14155550123",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "You are invited"
    },
    "body": {
      "text": "Join us for our open evening on Thursday 12 November, 6pm to 8pm. Let us know if you can make it and who you are bringing."
    },
    "footer": {
      "text": "Reply STOP to opt out"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "bk_8f2c41",
        "flow_id": "YOUR_FLOW_ID",
        "flow_cta": "RSVP now",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "RSVP"
        }
      }
    }
  }
}
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-event-rsvp.json

When to send it

Invitation broadcast

Send the flow in a template to your client list three to four weeks before the event, with the date, time and venue in the message body.

Reminder to non-responders

A week out, resend it only to contacts with no submission. Your flow_token tells you exactly who has already answered.

Ad and QR code replies

When someone messages a keyword like "OPENDAY" from a poster or ad, reply with the RSVP flow so they register in the same chat.

Maybe follow-up

Two days before the event, message everyone who chose maybe and ask them to confirm, so your catering count is final.

How to customise this template

  • Replace the sessions with your real agenda. For a single-session event, delete the CheckboxGroup entirely rather than leaving one option.
  • Adjust the guest dropdown to your policy. If guests are not allowed, remove it; if companies send teams, extend it to "Me + 9" (Dropdown allows up to 200 items).
  • Rewrite the dietary list for your caterer. Keep "none" as the first option so people with no requirements have something to tick.
  • Put the event name, date and venue in the TextBody on screen one. A static flow cannot pull these from your calendar, so write them in before you publish each event's version.

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

  • A static flow cannot branch, so someone who picks "No" still sees the guest and session fields. Keep those optional and ignore them in your handler when attendance is attending_no.
  • An RSVP is not a ticket and does not check capacity. For limited seats, cap confirmations on your side and tell late responders they are on a waitlist.
  • Photo consent and marketing consent are different things. Store event_updates and photo_consent separately and do not reuse either for general promotions.
  • Guest count ids are strings like guests_2. Convert them to numbers before summing, or your headcount will be a concatenated string.

Sell event spots with live data

For ticketed or capacity-limited events, Whautomate includes a built-in event booking flow that lists your real events and books attendees directly in WhatsApp. It is published in your account automatically.

  • Real events and dates
  • Attendee booked on submit
  • Pairs with class and appointment flows

7-day free trial, no credit card required.

Frequently asked questions

For each response with attendance attending_yes, add 1 plus the number from guest_count (guests_2 means 2 extra people). Track attending_maybe separately as a possible range rather than adding it in.
Encode the event id in the flow_token, such as "rsvp_openday_1112". If you run several events with one published flow, the token is the only way to tell the responses apart.
An nfm_reply message with response_json holding attendance, guest_count, sessions and dietary (arrays of ids), accessibility_needs, full_name, email, company, event_updates and photo_consent, plus the flow_token.
Inside 24 hours of their submission you can reply freely. After that, reminders need an approved template. Only send them to people who ticked event_updates, which is what that consent is for.
Yes. Whautomate has a built-in event booking flow that lists your real events and books attendees directly in WhatsApp. It is created and published in your account for you, so you would use it instead of this static RSVP when seats are limited.

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.