n8n WhatsApp Order Intake: Authenticate Senders, Log Every Order
Build an n8n WhatsApp order intake workflow with Twilio that authenticates each sender against a registry, logs orders to Sheets, and replies in seconds.
A vendor messages your operations line on WhatsApp with an order. Is it really them, or a number spoofing their name? Even when it's legit, the order details sit in a chat thread nobody syncs to a system. By Friday there are forty threads and no record of what was actually ordered.
n8n WhatsApp order intake closes both holes at once. Every inbound message hits a webhook, the sender's number is checked against a registry, and authenticated orders get logged to a sheet with a reference ID and an instant reply. The unknown numbers get rejected and recorded. No manual inbox watching, no orders trapped in chat.
The content ranking for this is almost all outbound. The Twilio + WhatsApp Business Cloud integration page is a landing page with no intake workflow. The Groove WhatsApp integration guide covers sending messages and mentions webhooks in one line, but ships no sender authentication, no structured logging, and no parsing logic. Inbound, authenticated intake is the unwritten half.
What WhatsApp order intake can automate
The job isn't sending a message. It's turning a chat into a trustworthy record:
- Receive every inbound WhatsApp message through a Twilio webhook.
- Extract the sender phone and message body from the Twilio payload.
- Match the sender against a registry of approved vendors or customers.
- Log authenticated orders to Google Sheets with a unique reference ID.
- Reject and record unregistered senders automatically.
- Reply in real time, confirmed or rejected, within seconds.
- Keep configurable message templates in one Config node, no code edits.
That's intake with a gate, not a chatbot.
Why sender authentication is the part everyone skips
Here's the opinionated take: an order-intake flow without sender verification isn't intake, it's an open door. WhatsApp shows a display name anyone can set. Operations teams report the same problem over and over: a number messages claiming to be a known vendor, the info goes into a thread, and nobody can say for sure it was real until something goes wrong.
The fix is a registry check, and it's cheap. You keep a Vendors sheet with approved phone numbers. The inbound number either matches a row or it doesn't. Matched senders are trusted and logged; unmatched senders are rejected and also logged, because the rejection record is its own audit signal. A spike of rejected attempts from one number is worth knowing about.
This is the difference between a workflow that automates a task and one that automates a control. The control is what makes the automation safe to run unattended.
The WhatsApp intake pipeline
Inbound WhatsApp message (Twilio webhook POST)
│
Extract sender phone + message body
│
Fetch vendor registry from Google Sheets
│
IF sender in registry? ── no ──► log rejected + send "not registered" reply
│ yes
Log submission to Sheets (with reference ID)
│
Send WhatsApp confirmation reply via Twilio
Every path ends in a logged row and a reply. Nothing falls into a thread.
Step-by-step breakdown
1. Catch the inbound message
Twilio forwards every WhatsApp message your number receives to a n8n-nodes-base.webhook node via POST. This is the piece the outbound tutorials never show. You register the webhook URL as the messaging callback in your Twilio WhatsApp sender config, and from then on n8n sees every inbound message.
2. Parse the Twilio payload
A n8n-nodes-base.code v2 node pulls the two fields that matter out of Twilio's form-encoded body: the sender at From (formatted whatsapp:+1...) and the text at Body. Normalize the phone to a bare number so it'll match the registry format. Twilio's payload carries more fields, but those two drive the whole flow.
3. Authenticate against the registry
A n8n-nodes-base.googleSheets v4.5 read pulls the Vendors sheet, and a n8n-nodes-base.if v2 node checks whether the sender's number appears. Use the v2 IF schema with a string-equals condition; the legacy v1 boolean format won't validate on a current node. Matched is the trusted path, unmatched is the rejection path.
4. Log the order with a reference ID
Authenticated submissions append to a Submissions sheet. Generate a short reference ID in the Code node (a timestamp plus a random suffix works) so each order has a handle the sender can quote and you can search. The order is now out of WhatsApp and inside a system you query, which was the whole point.
5. Reply in real time
A Twilio send through n8n-nodes-base.httpRequest v4.2 (POST to the Twilio Messages endpoint) confirms the order and quotes the reference ID. Unregistered senders get a polite not-registered reply on the rejection branch. Keep both message bodies in a Config Set node so non-developers can edit the wording without opening the workflow.
Implementation patterns
Pattern 1 — Registry-as-gate. Treat the Google Sheets registry as an allowlist. The IF node is the only thing standing between an unknown number and your records, so the match logic earns scrutiny.
Sheets read (Vendors) → IF (phone in registry?) → trusted | rejected
Pattern 2 — Configurable replies. Hold every outbound message template in one n8n-nodes-base.set v3.4 Config node and reference it with ={{ $('Config').first().json.confirmTemplate }}. Operations edits the copy; the graph never changes.
Pattern 3 — Log both outcomes. Append rejected attempts to their own tab, not just successes. The rejection log is the early-warning signal for someone probing your line.
n8n nodes you'll use most
| Node | Purpose |
|---|---|
n8n-nodes-base.webhook | Receive Twilio's inbound WhatsApp POST |
n8n-nodes-base.code v2 | Parse the payload and mint the reference ID |
n8n-nodes-base.googleSheets v4.5 | Read the registry, log submissions and rejections |
n8n-nodes-base.if v2 | Gate on whether the sender is registered |
n8n-nodes-base.set v3.4 | Hold reply templates and sheet IDs in one Config node |
n8n-nodes-base.httpRequest v4.2 | Send the Twilio WhatsApp reply |
Getting started
- Register a Twilio WhatsApp sender and grab the account SID and auth token.
- Build a Vendors sheet in Google Sheets with one approved phone per row.
- Add the Webhook node and set its URL as the Twilio messaging callback.
- Write the Code node that parses
FromandBodyand generates a reference ID. - Wire the Sheets read, the IF registry gate, and the two logging branches.
- Add the Twilio reply on both paths, with copy held in a Config node.
- Or import a tested flow and skip the wiring entirely.
The inbound webhook parsing and the registry match are the two pieces every outbound tutorial leaves out. The WhatsApp Vendor Ingest & Authenticator template ships both: the Twilio webhook trigger, the phone-against-registry authentication, the reference-ID logging to Google Sheets, and the real-time confirmed-or-rejected reply.
Where this fits
Authenticated WhatsApp intake is one entry point into a larger operations stack. The same registry-gate idea shows up wherever an untrusted channel feeds your systems, including WhatsApp support automation, where verifying who's messaging matters as much for support tickets as for orders. Teams that route many channels into Sheets usually build it as a data pipeline so intake, validation, and logging share one shape.
The WhatsApp Vendor Ingest & Authenticator template ships this end-to-end, including the Twilio inbound webhook parse and the registry authentication that turns a chat thread into a traceable, logged order. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the whole catalog plus every template added later, worth it if you run more than one of these automations.
A line that authenticates every sender and logs every order stops losing business in chat threads. For the wider context, see how intake feeds data validation workflows downstream, and if your orders also flow through a store, pair this with the Data Entry Hub template to route validated records into a CRM.
See the WhatsApp intake template →Common questions
How do you receive WhatsApp orders in n8n instead of just sending messages?
Can the workflow verify who sent the WhatsApp message?
Where do the orders go after intake?
Do I need the WhatsApp Business API directly?
Get the workflow templates this guide is built on
Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.
Get 3 tested n8n templates, free
The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Built through the same live-instance release process as everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.
- 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
- 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
- 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14
More automation guides

How to Build n8n Decision Support Automation with AI Frameworks
A founder spends a week circling a pricing decision. Not because the information's missing. It's all there. The hold-up is that there's no process to run it through. The pros and cons live in three ha…

How to Build n8n Employee Wellness Automation with AI Risk Scoring
Two people resign in the same month, both citing burnout. Nothing in the 1:1 notes flagged it. Nothing in their Slack activity looked off. The signals were there, in the throwaway comments, the slippi…

How to Build n8n Approval Workflow Automation That Auto-Approves and Escalates
A finance lead approves the same refunds every morning. Under $100, customer in good standing, clear reason. Approved, approved, approved. The decision was never hard. It just never got automated, so…