WhatsApp Reservations for Restaurants: n8n Workflow in 4 Steps
Back to blog
Practical Guide 5 min 2689 wordsOctober 8, 2026

WhatsApp Reservations for Restaurants: n8n Workflow in 4 Steps

A six-node n8n workflow receives the WhatsApp booking, extracts party size and time, and confirms instantly. Includes the importable JSON and how Meta bills messages.

⚡SEE LIVE DEMOS

To automate reservations over WhatsApp you need a verified number on the WhatsApp Cloud API, an n8n workflow that receives each message, extracts party size and time, and replies right away, and a calendar or table book to store the result. A basic setup takes an afternoon and handles bookings around the clock.

To automate reservations over WhatsApp you need a verified number on the WhatsAp

What do you need before you start?

Before opening n8n, be clear about the flow you want: how many tables you have, which hours you accept, and what happens when you are full. A restaurant in Montrose or the Heights can usually resolve about 80% of requests with three data points: party size, date and time. Also decide who gets alerted when a large group asks for a table, because those cases should go to a person. Once that is clear, gather the items below; most can be obtained the same day, except business verification at Meta, which can take longer.

Before opening n8n, be clear about the flow you want: how many tables you have,
  • 01Verified Meta Business account: this takes the longest, so start the process first.
  • 02Dedicated number: it must be able to receive a code and not be active in the regular WhatsApp app.
  • 03WhatsApp Cloud API access: generate the token and the phone number ID from Meta for Developers.
  • 04n8n instance: cloud or self-hosted, with a public HTTPS URL for the webhook.
  • 05Calendar or table book: Google Calendar, Sheets or the booking system you already use.
  • 06Approved templates: confirmation and reminder messages for writing outside the 24-hour window.
  • 07Escalation rule: large groups or unusual requests go to a team member.

Why automate reservations over WhatsApp?

Because your customer is already on WhatsApp, and a booking answered late is often lost. In Houston many questions arrive after hours, while your team is serving tables. According to OpenTable, only 4.4% of UK online bookings ended as no-shows versus 4.6% of phone bookings; that is historical data from another market, but it shows the channel matters less than the confirmation. A flow that confirms instantly and reminds guests before the visit protects your book without adding hours to the host stand.

Because your customer is already on WhatsApp, and a booking answered late is oft
Restaurant interior with tables set for evening service
A well-designed flow frees the host during service.

Step 1: connect the WhatsApp Cloud API to n8n

In Meta for Developers, create a Business app, add the WhatsApp product and note the phone number ID and access token. Then, in n8n, create a Webhook node with the POST method and copy the production URL. Paste it into the webhook settings of your Meta app and subscribe to the messages field. Meta first sends a GET verification request with a challenge; if you run the workflow below in production, add a branch that returns that value. Store the token as an n8n credential and never paste it into a message, an email or a public repository.

In Meta for Developers, create a Business app, add the WhatsApp product and note

Step 2: import the reservation workflow

The workflow has six nodes. “WhatsApp Webhook” receives the message. “Extract data” is a Code node that finds party size and time with regular expressions. “Complete data?” picks the path: if both are present, “Confirm booking” sends a confirmation through the WhatsApp API; if something is missing, “Ask for details” asks for it. “Respond 200” returns the OK Meta expects. Replace PHONE_NUMBER_ID with your number's ID and TU_TOKEN with your token, then add a Google Calendar node to store the table. This is a minimal base, not a full booking system.

The workflow has six nodes. “WhatsApp Webhook” receives the message. “Extract da
n8n workflow: WhatsApp Reservations — copy and paste into n8n (Import from clipboard)
{
  "name": "WhatsApp Reservations",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "whatsapp-reservations",
        "responseMode": "responseNode",
        "options": {}
      },
      "name": "WhatsApp Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const body = $input.first().json.body || {};\nconst msg = body.entry?.[0]?.changes?.[0]?.value?.messages?.[0];\nif (!msg || msg.type !== 'text') {\n  return [{ json: { valid: false, from: msg?.from || '', reply: 'Type: table for 4 people Friday 7:30pm' } }];\n}\nconst text = msg.text.body.toLowerCase();\nconst size = (text.match(/(\\d+)\\s*(people|guests|pax|personas)/) || [])[1];\nconst time = (text.match(/(\\d{1,2}(:\\d{2})?\\s*(am|pm))/) || [])[1];\nconst valid = Boolean(size && time);\nreturn [{ json: {\n  valid,\n  from: msg.from,\n  size,\n  time,\n  reply: valid\n    ? `Done: table for ${size} at ${time}. We will confirm in a few minutes.`\n    : 'To book, tell me how many people and what time. Ex: 4 people 7:30pm'\n} }];"
      },
      "name": "Extract data",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.valid }}",
              "value2": true
            }
          ]
        }
      },
      "name": "Complete data?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v21.0/PHONE_NUMBER_ID/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer TU_TOKEN"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $json.from, type: 'text', text: { body: $json.reply } }) }}",
        "options": {}
      },
      "name": "Confirm booking",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        680,
        -100
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v21.0/PHONE_NUMBER_ID/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer TU_TOKEN"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $json.from, type: 'text', text: { body: $json.reply } }) }}",
        "options": {}
      },
      "name": "Ask for details",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        680,
        100
      ]
    },
    {
      "parameters": {
        "respondWith": "text",
        "responseBody": "ok",
        "options": {}
      },
      "name": "Respond 200",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        900,
        0
      ]
    }
  ],
  "connections": {
    "WhatsApp Webhook": {
      "main": [
        [
          {
            "node": "Extract data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract data": {
      "main": [
        [
          {
            "node": "Complete data?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Complete data?": {
      "main": [
        [
          {
            "node": "Confirm booking",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Ask for details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Confirm booking": {
      "main": [
        [
          {
            "node": "Respond 200",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ask for details": {
      "main": [
        [
          {
            "node": "Respond 200",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Step 3: how much does it cost to send WhatsApp messages?

It depends on who starts the conversation. According to Meta's pricing documentation, billing has been per message since July 2025, and non-template messages are free inside the 24-hour customer service window that opens when the customer writes to you; utility templates sent inside that window are free too. Outside it you can only send approved templates, which are charged by country and category. For reservations this works in your favor: the customer writes first, so your confirmation lands inside the window. Check the current rate on Meta's page before projecting costs.

It depends on who starts the conversation. According to [Meta's pricing document
"

"An automated booking is only good if the customer gets a clear confirmation and the team knows when to step in."

Equipo Davarion

Step 4: test before opening the door to customers

Test with your own number and five or six real phrases: “table for 4 Friday 7:30pm”, “book 2 people 8pm”, messages with typos, voice notes and photos. See what the flow answers and what breaks. Voice notes and images are not text, so the workflow should reply with a friendly instruction or hand the case to a person. Activate the workflow in production only when tests pass, and review n8n executions during the first week. To see what a finished flow looks like, browse our examples and demos.

Test with your own number and five or six real phrases: “table for 4 Friday 7:30
Person reviewing a messaging conversation on a phone at a business counter
Test the flow with real messages before turning it on.

Can I do this without coding?

Yes for the basics: importing the JSON and changing the token and number ID takes no code. What does take judgment is deciding what happens with edge cases, how your real calendar connects and how the token is protected. If you would rather not build it yourself, our WhatsApp automation service sets it up and maintains it, and the SPARK package includes a chatbot plus one automation like this.

Yes for the basics: importing the JSON and changing the token and number ID take

What if a customer writes after hours?

The flow answers anyway, because it does not depend on anyone being awake. It receives the message, extracts the data and confirms. What you should tune is the policy: you can accept the booking and flag it for review, or say it will be confirmed when you open. What matters is that the customer never gets silence. If you use a template outside the 24-hour window, remember it must be approved by Meta beforehand.

The flow answers anyway, because it does not depend on anyone being awake. It re

Does it replace a system like OpenTable or Resy?

Not necessarily. If you already use a booking platform, the workflow can coexist with it: WhatsApp handles the conversation and your system stores the table. If you track bookings in a notebook or spreadsheet today, this flow is already a clear upgrade. Decide by volume: with few daily bookings Google Calendar is enough; with high turnover, integrate a specialized system. Our AI automation in Houston service can help you decide.

Not necessarily. If you already use a booking platform, the workflow can coexist

Want us to review it with you?

If your restaurant takes bookings through WhatsApp, calls or Instagram and you want to see what can be automated without losing the personal touch, book a free 15-minute audit with the Davarion team. We review your current flow and tell you what to automate first and what is not worth touching.

If your restaurant takes bookings through WhatsApp, calls or Instagram and you w
#restaurant reservations WhatsApp#automate restaurant bookings#n8n WhatsApp Cloud API#n8n reservation workflow#restaurant chatbot Houston#confirm bookings automatically#WhatsApp automation restaurants

Davarion Group & Labs

WANT TO SEE THE AI IN ACTION?

Try an AI chatbot configured with your business name — live, no signup required.