Journal  /  Messaging Strategy
Messaging Strategy

How to Connect WhatsApp to n8n: Setup, Nodes, and Workflows (2026)

DT
DMly Team
Aug 30, 2026 · 33 min read
How to Connect WhatsApp to n8n: Setup, Nodes, and Workflows (2026)

Most guides to connecting WhatsApp and n8n start at about step four. You get the canvas, the nodes and a finished workflow, and you never get the two answers you came for: how does WhatsApp actually get into n8n, and where should the conversations live once it does?

Tunde runs a physiotherapy clinic with two treatment rooms and a WhatsApp number that never goes quiet. Bookings arrive on WhatsApp, the receptionist keeps a Google Sheet of new patients, the accountant wants every payment in the books the same day, and he wants a Slack ping when someone messages after 8pm and nobody answers. He’s comfortable with a bit of tech, he’s read that n8n can tie all of that together, and he’s right. What he can’t find is the straight answer.

So here are the two answers, in order. This guide covers the two ways to connect WhatsApp to n8n, the four ways DMly and n8n talk to each other, the exact steps to wire them together, six workflows worth building first, the mistakes that get numbers restricted or messages silently dropped, and how to find the fault when a workflow goes quiet.

Why Connect WhatsApp to n8n?

n8n is a workflow automation tool, which in plain terms means a canvas where each box does one small job and the wires decide the order. You drag nodes on and connect them; a node waits for an event, calls an API, appends a row to a sheet, pauses for an hour, or branches on a condition. It has ready-made nodes for hundreds of apps and a generic HTTP Request node for everything else. You can use n8n’s hosted service or run it yourself, and the paid plans charge per workflow execution rather than per step, which is one reason technical small-business owners like it for glue work.

WhatsApp is where the customers already are. On its Q3 2025 earnings call, Meta said people hold more than 1 billion active conversation threads with businesses every day across WhatsApp, Messenger and Instagram. HubSpot’s research found that 90% of customers rate an immediate response as important or very important when they have a support question, and “immediate” means 10 minutes or less. Zendesk’s 2025 CX Trends report puts the cost of missing that plainly: 63% of consumers say they would switch to a competitor after a single bad experience.

Put those together and the case is simple. WhatsApp is the front door; n8n is the corridor to everything behind it: your spreadsheet, your accounts, your CRM, your calendar, your Slack. What n8n is not is an inbox. It has no conversation view, no team assignment, no template approvals, no opt-out handling, and no idea that WhatsApp’s 24-hour customer service window exists. Those are the jobs of a messaging platform, and it’s why the setups that last use both: a platform like DMly for the conversation, n8n for the plumbing.

The one-line rule: Let n8n move data between systems. Let the messaging platform own the conversation, the templates and the compliance. When you find yourself rebuilding an inbox in n8n, stop.

Two Ways to Connect WhatsApp to n8n

Before you connect anything, decide which of the two routes you are on. They look almost identical on a canvas and feel completely different six months in, which is why this decision comes first.

Route A: the raw Cloud API inside n8n. n8n ships a WhatsApp Business Cloud node with Send, Send Template and Send and Wait for Response operations, plus media Upload, Download and Delete, and a WhatsApp Trigger node for incoming messages. To use them you create a Meta developer account and a Meta app, add the WhatsApp product, generate an access token and note your Business Account ID; the trigger authenticates with the app’s Client ID and Client Secret. Everything else is yours: submitting and tracking templates, knowing when a customer’s 24-hour window is open, storing opt-outs, and building somewhere for a human to read and reply. That’s fine for a developer sending order updates from one system. It’s a lot for a clinic.

Route B: a platform in the middle. Your number is connected to DMly through the official WhatsApp Business Platform. DMly runs the shared inbox, the templates, the window enforcement, the opt-out suppression, the flow builder, bookings and payments. n8n subscribes to DMly’s webhooks for events and calls DMly’s REST API for actions. n8n never sees Meta at all; it sees clean JSON and one API key.

Two lanes on a dark automation canvas. The upper amber lane, Route A, wires four nodes left to right: a Meta developer app with its access token, Business Account ID and Client ID and Secret; the n8n WhatsApp Trigger; the WhatsApp Business Cloud node with Send, Send Template and Send and Wait; and a last node reading everything else is yours. Under it sit four dashed boxes for the work still to build: you submit every template, you track every 24 hour window, you build the inbox, you store the opt-outs. The lower green lane, Route B, wires your number connected in DMly, DMly running the inbox, templates and window, n8n receiving clean events and one API key, then Sheets, Slack and accounts. Under it the same four jobs appear as ticked boxes: templates approved inside DMly, the 24 hour window enforced, team inbox on web and mobile, stop keywords suppress sends. A band across the bottom reads: one route per number.
Figure 1. The dashed boxes under Route A are the jobs you would own yourself: templates, the 24 hour window, the inbox, the opt-outs. Under Route B the same four are already ticked.
ConcernRoute A: Cloud API in n8nRoute B: DMly + n8n
Meta setupYour own developer app, token and webhook subscriptionConnect the number in DMly; n8n never touches Meta
Reading and replyingBuild a UI, or read executionsDMly’s team inbox on desktop and mobile
24-hour window and templatesYou track it and pick the right message typeDMly enforces it; templates in Messaging → Templates
Opt-outsYour database, your logicStop keywords add an Unsubscribe tag and suppress sends
Bookings, invoices, paymentsOther tools, more nodesBuilt in, and exposed as events and API resources
What n8n doesEverythingMove data, notify people, look things up

One practical rule when you connect WhatsApp to n8n: pick one route per number. If your number already lives in DMly, let DMly’s webhooks feed n8n rather than trying to wire a second Meta app to the same line. The rest of this guide assumes Route B.

How DMly and n8n Talk to Each Other

There are four connections between the two, and most businesses only ever need the first two. Knowing all four is still worth five minutes, because it stops you building a workaround for something that already exists.

A dark node canvas with the DMly workspace as a tall panel on the left and the n8n workflow as a tall panel on the right, joined by four glowing wires, each carrying a labelled chip in the gap. Wire one, green, points from DMly to n8n: webhooks, events out, signed with HMAC-SHA256, delivered at least once and retried. Wire two, blue, points from n8n to DMly: the REST API, actions in, one workspace key sent as x-api-key at 60 requests a minute. Wire three, terracotta, has an arrow at each end: the flow builder's HTTP Request step, where n8n answers mid-chat and DMly saves the fields and prints them. Wire four, amber, points from n8n to DMly: MCP, an AI agent acting through 37 task-shaped tools, with a REST-only key still the default. The DMly panel lists its channels, what it owns, its 75 event topics and the endpoints dash.dmly.io/api/v1 and dash.dmly.io/mcp; the n8n panel lists what it receives, calls and answers with. A strip below notes that wires 1 and 2 are the everyday pair.
Figure 2. Follow the arrowheads on the everyday pair: what leaves DMly arrives in n8n as a trigger, and what goes back the other way is an action node or a plain HTTP call.

Path 1: DMly webhooks push events to n8n

When something happens in your workspace, DMly can POST a JSON envelope to an HTTPS URL you choose. As of August 2026 there are 75 event topics across contacts, conversations, calls, message lifecycle, appointments, classes, invoices, orders, payments, subscriptions, credits, the store, automations and broadcasts. The ones you’ll use most have plain names: message.received, contact.created, contact.tagged, contact.stage_changed, booking.created, appointment.completed, appointment.no_show, invoice.paid, payment.succeeded, store.checkout_abandoned. Every delivery is signed with HMAC-SHA256 in an X-Salesbot-Signature header, delivered at least once, and retried if your endpoint doesn’t answer with a 2xx within 8 seconds. In n8n, the receiving end is either the DMly Trigger node from the community package or a plain Webhook node.

Path 2: n8n calls the DMly REST API

The REST API lives at https://dash.dmly.io/api/v1 (your own host if you’re on a white-label domain) and authenticates with one workspace API key sent as x-api-key or as a Bearer token. It covers contacts, tags, segments, conversations and messages, broadcasts, automations, appointments, services, staff, classes, products, plans, invoices, orders, payments, coupons, subscriptions, gift cards, media and the workspace itself, with a limit of 60 requests a minute per key. In n8n you call it with the DMly node (Resource plus Operation, no URLs to remember) or with the HTTP Request node.

Path 3: a DMly flow calls n8n mid-conversation

The flow builder has an HTTP Request step in its Actions group. Mid-flow, it can POST the contact’s details to a URL, wait up to 5 seconds, and save fields from the JSON response as flow variables that later message steps can print with {{token}} syntax. Point it at an n8n Webhook that ends with a Respond to Webhook node, and n8n becomes the lookup service behind your WhatsApp bot: order status, loyalty balance, stock in a warehouse system, anything DMly doesn’t hold. The AI agent has the same trick in a different place: Custom functions on the Functions tab of an AI Reply step let the AI decide when to call your n8n endpoint and use the answer in its reply.

Path 4: n8n uses DMly’s MCP server

DMly also runs a Model Context Protocol server at https://dash.dmly.io/mcp with 37 task-shaped tools (find a contact, book a slot, raise an invoice, preview a broadcast). n8n’s MCP Client node and its MCP Client Tool sub-node for the AI Agent can connect to it with an API key that carries the mcp:read or mcp:write scope. It’s the right path if you’re running an AI agent inside n8n and want it to act on your workspace in natural language. For ordinary workflows, DMly’s own docs are clear that a REST-only key is the default and the right answer for n8n, so treat MCP as the exception.

PathDirectionUse it whenn8n nodes
1. WebhooksDMly → n8nSomething happened and another system should knowDMly Trigger, or Webhook
2. REST APIn8n → DMlyAnother system happened and WhatsApp or the CRM should reactDMly node, or HTTP Request
3. Flow HTTP Request stepDMly → n8n → DMlyA customer is waiting and the answer lives elsewhereWebhook + Respond to Webhook
4. MCPn8n → DMlyAn AI agent in n8n needs to act on the workspaceMCP Client, MCP Client Tool

Takeaway: if you can describe your idea as “when X happens in DMly, do Y elsewhere”, it’s path 1. If it’s “when Y happens elsewhere, do X in DMly”, it’s path 2. Most of the six workflows later are one or the other.

What You Need Before You Connect WhatsApp to n8n

  • A DMly workspace with WhatsApp connected API, webhooks and integrations are included on the Starter, Growth and Premium plans as of August 2026, and the 7-day trial needs no card. Your number should be connected through the official API and, ideally, your business verified with Meta so you start with a 2,000-customer messaging limit rather than 250. If verification is stuck, read how to get the WhatsApp API without Facebook business verification.
  • At least one approved template Anything you send outside a customer’s 24-hour window must be an approved Marketing, Utility or Authentication template. Create them under Messaging → Templates before you build a workflow that sends outbound messages.
  • n8n on a public HTTPS URL n8n Cloud is public by default. Self-hosted n8n needs a real domain and certificate for webhooks; DMly rejects private and localhost URLs. If you’re developing locally, use a tunnel and the Trigger node’s Manual mode.
  • Owner or Admin rights in n8n Community nodes are installed by an Owner or Admin, and everyone on the instance can then use them.
  • Consent you can point to Meta’s policy requires opt-in before business-initiated messages. DMly records the date a contact opts out but not how they opted in, so decide now where consent lives: a custom field, a tag such as “whatsapp-opt-in”, or a note. Your workflows will check it.
  • One workflow in mind Not six. Pick the one that removes the most typing from someone’s day, build it, run it for a week, then add the next.

How to Connect DMly to n8n, Step by Step

The whole connection takes about twenty minutes the first time, and you only do most of it once. Here is the sequence, then the detail on each step.

Eight numbered nodes wired across a dark canvas in two rows. Row one, marked one-time setup, runs left to right: create an API key in DMly under Configurations, Integrations, REST API, naming it n8n and copying the dmly_ key that shows once; install the n8n-nodes-dmly community node from Settings, Community Nodes, as Owner or Admin; add the credential with base URL dash.dmly.io/api/v1 and press Test; add a DMly Trigger and pick your events, where Automatic mode registers the URL and secret for you. A wire drops from the last node, runs back across the canvas under a chip reading setup done, now per workflow, and rises into row two: add the action nodes, activate and test on a public HTTPS URL, watch the executions in n8n and the deliveries in DMly, then a solid green Go live node saying one workflow at a time with an error workflow posting to Slack. A dashed arc under steps five to seven says they repeat for every new workflow. A strip along the bottom lists four things to have ready first: a DMly workspace with WhatsApp connected, at least one approved template, n8n on a public HTTPS URL, and Owner or Admin rights in n8n.
Figure 3. About twenty minutes the first time. The four items in the band along the bottom are what you want in place before you start step 1.
  1. Create a workspace API key in DMly. Go to Configurations → Integrations, open the REST API tile, give the key a name you’ll recognise later (“n8n”), and generate it. The key starts with dmly_ and is shown once, so copy it straight into a password manager. It grants full access to that one workspace, at 60 requests a minute; treat it like a password and never paste it into a browser or a shared doc. Rotation is create-new, switch, revoke-old.
  2. Install the community node in n8n. In n8n go to Settings → Community Nodes → Install, enter n8n-nodes-dmly, tick the “I understand the risks of installing unverified code from a public source” box and install. You need to be the instance Owner or an Admin. On n8n Cloud, DMly’s docs say community nodes install the same way; if the package is listed as verified you’ll also find it under “More from the community” in the nodes panel. Two nodes appear: DMly (actions) and DMly Trigger (events).
  3. Add the credential. Create a DMly API credential in n8n. Base URL is https://dash.dmly.io/api/v1 unless you’re on a white-label domain (then your host, still ending in /api/v1). Paste the key and press Test; the node calls the account endpoint to confirm the key works.
  4. Add a DMly Trigger and choose events. Drop the trigger on the canvas, select the credential, and pick one or more events from the list, which is loaded live from your workspace. In Automatic mode (the default) the node registers its own URL, events and signing secret with DMly while the workflow is active and removes them when you deactivate; you don’t touch the dashboard. In Manual mode the node only listens: you paste its Production URL into Configurations → Integrations → Webhooks yourself and copy the whsec_ secret back into the node. Manual is for local development behind a tunnel, or when one endpoint should fan out to several workflows. Either way, the node verifies the X-Salesbot-Signature header by default.
  5. Add the actions. For DMly-side actions use the DMly node: choose a Resource (Contact, Message, Appointment, Invoice, Broadcast, Automation and so on) and an Operation (Get Many, Get, Create, Update, Delete, plus verbs like Send, Book, Approve, Refund, Void). Message → Send handles text, image, video, audio, file and WhatsApp template messages. For everything else use n8n’s own nodes: Google Sheets, Slack, HubSpot, your accounting app, or the HTTP Request node.
  6. Activate and test. Switch the workflow to Active, then send your business number a WhatsApp from your own phone, book a test slot, or pay a test invoice, and watch the Executions tab. Test pings from the dashboard include "test": true in the envelope. Answer every delivery with a 2xx quickly and do the heavy work afterwards; DMly waits 8 seconds, then retries after roughly 10 and 60 seconds.
  7. Prefer no community node? Use Webhook + HTTP Request. Everything above works with n8n’s built-in nodes: a Webhook node (POST, “Respond: Immediately”) as the receiving URL you paste into DMly’s Webhooks tile, and an HTTP Request node with Authentication set to a generic Header Auth credential (name x-api-key, value your key), Send Body as JSON, pointed at the endpoint you need. The API docs’ curl examples paste straight into “Import cURL”. Turn on the Webhook node’s Raw Body option and check the signature in a Code node with HMAC-SHA256 over the raw bytes and a constant-time compare, and dedupe on the envelope id, which is mirrored in the X-Salesbot-Delivery header. You give up the live event list and the automatic subscription, and you get a setup any n8n instance can run.
  8. Optional: connect the flow builder and the AI agent to n8n. Open Automation → New automation → Start from scratch → Flow builder, add an HTTP Request step from the Actions group, choose the Method (GET, POST or PUT), paste an n8n Webhook URL as the Endpoint URL, add headers, write a JSON body such as {"phone": "{{phone}}"} (tokens are replaced in the body only), and map response paths under Save response to fields. Later message steps can print those fields. On an AI Reply step, the equivalent lives on the Functions tab as a Custom function with a Name, a Description the AI reads to decide when to call it, Method, URL, Headers and a JSON Schema for parameters.
The DMly Integrations screen on the Developer tab showing the Webhooks, Zapier and REST API tiles, a list holding one existing key called Website form, and an open New API key dialog with the name field filled in as n8n, a scope pair below it where REST only is ticked and MCP scope is not, a Generate key button, and the one-time key display reading dmly_9f2c with the rest masked next to a warning that DMly cannot show the key again.
Figure 4. Step 1 of the connection. Name the key so you recognise it later, leave the scope on REST only, and copy the dmly_ value straight into a password manager, because DMly shows it once.
The DMly webhook endpoint screen at Configurations, Integrations, Webhooks, with the endpoint URL https://n8n.glowhair.com/webhook/dmly marked Connected, a masked whsec_ signing secret beside a Send test ping button, an event picker with message.received, booking.created, appointment.no_show and payment.succeeded ticked out of 75 topics, a test ping that returned 200 OK in 184 ms, recent deliveries all answering 200 OK, and the X-Salesbot-Signature and X-Salesbot-Delivery headers listed.
Figure 5. The other half of the connection. Four events subscribed, one signing secret n8n uses to verify each delivery, and a test ping that came back 200 OK inside the 8 second window.
One webhook delivery drawn across a dark canvas. Along the top, a customer message lands in DMly, a POST travels along a green wire to n8n.glowhair.com/webhook/dmly, and a DMly Trigger or plain Webhook node receives it. Below on the left, the JSON envelope with id, event set to message.received, occurred_at, workspace_id 42 and data holding contact and message, noted as the same shape for all 75 topics where only event and data change. On the right, the headers and rules: X-Salesbot-Signature as HMAC-SHA256 over the raw body with your whsec_ secret; X-Salesbot-Delivery carrying the same id, at least once, so dedupe on it; return any 2xx within 8 seconds and answer first, work second; test pings from the Webhooks tile carry test true. Along the bottom, a timeline with the first try at 0 seconds, a retry at about 10 seconds, a last retry at about 60 seconds and a red cross where it is dropped, with a bracket over the first stretch reading each try waits 8 s.
Figure 6. The timeline along the bottom is why a slow endpoint loses events: three attempts, about a minute of grace, then nothing.
The DMly flow builder with the step palette open on the left and a four step flow on the canvas: a WhatsApp message trigger, a holding message, a selected HTTP Request step that POSTs to an n8n webhook and waits up to five seconds, and a reply that prints the answer. The inspector on the right shows Method set to POST, the endpoint URL, Content-Type and x-flow-key headers, a JSON body carrying a phone token, and three response paths saved to the fields order_ref, order_status and order_eta.
Figure 7. The HTTP Request step sits in the Actions group. It posts the contact's phone to n8n, waits up to five seconds, and saves the answer into fields the next message prints.

Takeaway: to connect WhatsApp to n8n you need one key, one trigger and one credential, and with those three you can build every workflow below. Keep the key in n8n’s credential store, keep the signature check on, and keep the DMly node for DMly actions so you’re not hand-writing URLs.

Six n8n WhatsApp Workflows Worth Building First

These six are the ones local businesses actually keep running a year later. Each one lists the nodes, the DMly event or operation involved, and the rule that stops it breaking WhatsApp policy. If you want a longer menu, our list of 20 n8n WhatsApp automation workflows goes wider; this is the short list, and it is the one to start from.

Six node chains on a dark canvas, one per row, none longer than five nodes. Row one, a new lead to a sheet and Slack: DMly Trigger on message.received, an n8n IF for a first message, Google Sheets append row, Slack post to #leads. Row two, a sheet row to a template: Sheets Trigger on row added, an IF for opted in, DMly contact get or create, DMly send a template. Row three, a no-show to a rebooking nudge: DMly Trigger on appointment.no_show, an n8n Wait of two hours, DMly add the tag, then a DMly flow started by Tag applied. Row four, a payment to the accounts: DMly Trigger on payment.succeeded, an HTTP Request to the accounting app, a Google Sheets ledger row, a DMly utility template. Row five, a mid-chat order lookup: the DMly flow HTTP Request step, an n8n Webhook, an HTTP Request to your order system, Respond to Webhook, and the DMly flow printing status and eta. Row six, a morning digest: an n8n Schedule at 8:00, DMly today's appointments, DMly open conversations, an n8n Code summary, Slack posting the digest. A legend reads: solid green starts inside DMly, blue starts somewhere else, pale nodes are n8n steps in between, outlined green lands back in DMly.
Figure 8. Six worth building first. Pick the one that removes the most typing from someone's day, run it for a week, then add the next.

1. New WhatsApp lead to a spreadsheet and Slack

WhatsApp message arrives → DMly Trigger (message.received) → IF: contact created today, channel WhatsApp → Google Sheets: Append row → Slack: post to #leads

The receptionist’s spreadsheet keeps itself. Subscribe the DMly Trigger to message.received, add an IF node that keeps only first-time WhatsApp contacts (or subscribe to contact.created instead and skip the IF), map name, phone, first message and time into a Google Sheets Append row, and post a one-liner to Slack. If your CRM has an n8n node, swap the sheet for a “create lead” step; if it doesn’t, that’s what the HTTP Request node is for. We go deeper on the spreadsheet version in our guide to saving WhatsApp leads automatically to Google Sheets, and on the Slack side in our guide to Slack notifications for new WhatsApp messages, bookings and payments.

Rule that matters: nothing is sent to the customer here, so there’s no window to worry about. Do add the sheet row after you’ve returned 2xx to DMly, and dedupe on the envelope id so a retried delivery doesn’t create a duplicate row.

2. A Google Sheets row becomes a WhatsApp template message

Google Sheets Trigger (row added) → IF: opt-in column = yes → DMly: Contact Get Many by phone (or Create) → DMly: Message Send, type template, parameters from the row

The tutor adds a student to the “September intake” sheet and the welcome message goes out with the class time filled in. The Google Sheets Trigger fires on a new row; an IF node checks your consent column; the DMly node finds the contact by phone or creates one; then Message → Send with the template type, the approved template and the ordered parameters. Since the send goes to someone who hasn’t messaged you in the last 24 hours, it must be a template, and it counts toward your messaging limit. Our guide on sending WhatsApp messages when a Google Sheets row is added walks through the column mapping in detail.

Rule that matters: the API returns a 422 if the template is missing or the window is closed for a plain text send, so build the error branch. Never bulk-load a purchased list into the sheet; that’s how a number’s quality rating falls and its messaging limit gets cut, and DMly’s WhatsApp limits page explains what that costs you.

3. No-show to a rebooking nudge (the tag bridge)

DMly Trigger (appointment.no_show) → Wait: 2 hours → DMly: Contact Add Tags "no-show-followup" → in DMly, a flow with the Tag applied trigger sends the rebooking template and a booking link

This one shows the most useful pattern in the whole guide. DMly has no “start this flow” endpoint for outsiders, but its flow builder can trigger on Tag applied, Field changed and other contact events. So n8n decides when (two hours after a no-show, or after checking your calendar tool, or only on weekdays) and adds a tag; DMly decides what (the approved template, the booking link, the reminder sequence) and keeps the conversation in the inbox where a human can pick it up. You could send the template from n8n directly, but the tag bridge keeps every customer-facing message inside DMly’s automation and its opt-out logic. Combine it with the appointments features and you have the no-show recovery most clinics and salons want.

Rule that matters: the tag name is your contract between the two systems. Document it, and remove the tag at the end of the DMly flow so the bridge can fire again next time.

4. Payment received to accounting and a thank-you

DMly Trigger (payment.succeeded or invoice.paid) → HTTP Request: create the receipt in your accounting app → Google Sheets: Append row to the ledger → DMly: Message Send (utility template with amount and receipt link)

DMly already issues invoices, payment links and receipts, so the point of this workflow is the accountant, not the customer. Subscribe to payment.succeeded (or invoice.paid if you only care about fully settled invoices), push the amount, contact and reference to your accounting system through its n8n node or an HTTP Request, keep a ledger row for the owner, and optionally send a short thank-you. If the customer paid within a conversation, a plain text is fine; if it’s a payment link they clicked from a broadcast last week, use a utility template.

Rule that matters: money events must be idempotent. Store the payment id in the ledger and skip any delivery whose id you’ve already processed; at-least-once delivery is a feature, not a bug, but only if you dedupe.

5. Mid-chat lookup: order status from your own system

Customer: "Where is my order?" → DMly flow asks for the order number → HTTP Request step POSTs {order_no, phone} to n8n → n8n Webhook → HTTP Request to your order system → Respond to Webhook with {status, eta} → DMly saves status and eta to fields → next message: "Order {{order_no}} is {{status}}, expected {{eta}}"

This is path 3 in action. In the flow builder, an Ask step collects the order number, the HTTP Request step sends it to an n8n Webhook URL, and n8n does the lookup wherever the truth lives: your store, a warehouse tool, a Google Sheet. The Webhook node is set to respond using a Respond to Webhook node, which returns a small JSON object; DMly maps status and eta under Save response to fields and the next message prints them. The whole round trip has to finish inside 5 seconds, so keep the n8n side to one or two fast calls. For a D2C brand this replaces the single most repetitive question in the inbox, and it pairs well with what we cover in WhatsApp for D2C brands.

Rule that matters: the flow continues even if n8n times out, so write the fallback message: check {{_last_http_status}} isn’t what you expected and say “I couldn’t reach our order system just now, a teammate will confirm shortly”, then hand over. Saved fields can’t be used in a Condition step for branching, so plan the copy accordingly.

6. A morning digest for the owner

Schedule Trigger (8:00) → DMly: Appointment Get Many (today) → DMly: Conversation Get Many (open, unassigned) → Code: build a summary → Slack or email to the owner

Path 2 with no customer involved. Every morning, n8n pulls today’s appointments and any open conversations nobody owns, counts them, lists the first few, and posts to Slack or sends an email. Add “invoices overdue” from the Invoice resource and you have a one-screen start to the day. Keep it under 60 requests a minute by using Return All sparingly and filtering server-side where the operation allows it. If you want to track more than counts, our post on the metrics to track after implementing messaging automation is the companion piece.

Rule that matters: don’t send the digest to the owner over WhatsApp unless they’ve messaged the business number in the last 24 hours or you’ve made a utility template for it. Slack and email have no windows; WhatsApp does.

Going Further: AI Agents, Custom Functions and MCP

Once the six are running, there are two ways to bring AI into the picture, and they sit on opposite sides of the connection. Which one you want depends on where you would rather the thinking happened.

DMly’s AI agent calling n8n. The AI agent in DMly already has built-in tools: get contact info, add or remove tags, move the CRM stage, set custom fields, list services and staff, check available times, book, reschedule and cancel appointments, book classes, hand over to a human, and web search. When you need something it doesn’t know, a Custom function on the AI Reply step’s Functions tab describes an HTTP call the AI can make. Write the description as if you were explaining it to a new hire (“Returns the delivery status for an order number”), give it a URL that lands on an n8n Webhook, and n8n does the lookup and responds with JSON. Each reply gets at most eight tool-calling rounds, and you can watch what the AI called in the Playground’s tool-calls trace before you publish.

An n8n AI Agent using DMly’s MCP server. If you’re building an agent inside n8n, add the MCP Client Tool sub-node to the AI Agent, point it at https://dash.dmly.io/mcp with a header credential carrying an MCP-scoped key, and the agent can search contacts, check availability, book, raise invoices and preview broadcasts through DMly’s 37 tools. The n8n MCP Client node does the same as a plain workflow step, without an agent. Rate limit is 120 requests a minute per key, outbound sends are budgeted per workspace, and broadcasts still need a human to approve them. Our explainer on what MCP is for businesses covers the concept; DMly’s MCP overview has the tool list.

Practical tip: Give the AI a narrow job before you give it tools. “Answer order-status questions and hand over everything else” with one custom function will outperform a do-everything agent with ten, and it’s far easier to test.

What This Looks Like by Industry

Everyone uses the same four paths to connect WhatsApp to n8n; what differs is the first workflow worth building. Here is where each kind of business usually starts.

Salon or spa

No-show tag bridge first. Then appointment.completed to a stylist commission sheet, and a Slack alert when a message sits unanswered for 15 minutes on a Saturday.

Clinic or dental practice

Payments to the practice accounts, new patients to the intake sheet, and a morning digest of today’s appointments and unassigned chats for the practice manager.

Gym or studio

class.booked style events to a capacity dashboard, failed subscription payments to a “call today” list, and Sheets-to-WhatsApp templates for a new intake or timetable change.

Tutor or training centre

Enrolment sheet to welcome template, session completed to a progress log, invoice paid to the accountant. Parents get one clear WhatsApp thread; the admin gets a spreadsheet that fills itself.

Restaurant or café

Reservation events to the floor plan tool, mid-chat “is there a table at 8?” answered by an n8n lookup, review requests handled natively by Reputation and logged to a sheet.

D2C brand

Order-status lookup during the chat, store.checkout_abandoned to a recovery sequence via the tag bridge, and payment events pushed to accounting and the loyalty ledger.

Notice how few of these send messages from n8n. Most read events, move data and hand the talking back to DMly. That’s deliberate.

Best Practices That Keep the Connection Healthy

  • Respect the window from n8n, too. A text sent through the API to someone who hasn’t messaged you in 24 hours fails; only approved templates go through. As of August 2026, that’s Meta’s rule, and DMly enforces it across the inbox, automations, broadcasts, sequences and the API alike.
  • Check consent before every outbound workflow. Add the IF node. Read the custom field or tag you chose earlier. Contacts who sent a stop keyword carry an Unsubscribe tag and DMly suppresses automated sends to them; your n8n workflow shouldn’t be the thing that tries anyway.
  • Acknowledge first, work second. Return 2xx within 8 seconds. In the DMly Trigger that’s automatic; in a Webhook node choose “Respond: Immediately”. Put slow API calls after the response.
  • Dedupe on the envelope id. Deliveries are at-least-once. n8n’s Remove Duplicates node can remember values across executions, or keep the id in your sheet or database and skip repeats.
  • Keep the signature check on. A public webhook URL is guessable enough; the HMAC is what proves the POST came from DMly. Only turn verification off while debugging.
  • Mind the 60 requests a minute. Batch where you can, use the HTTP Request node’s Batching option for loops, and don’t poll for things a webhook will tell you.
  • Send customer-facing messages from DMly where possible. The tag bridge exists so the copy, the templates and the opt-out logic stay in one place your team can see. n8n is a poor place to store what you said to a customer.
  • Name things. The API key (“n8n production”), the tags (“n8n:no-show-followup”), the workflows (“W3 no-show nudge”). Six months from now someone else will be reading them.
  • Add an error workflow. n8n can run a workflow when another fails; make it post to Slack. Silent failures are worse than loud ones.
  • Watch your WhatsApp health. Quality rating and messaging tier are shown in DMly under Bot Setup → WhatsApp → Configuration. If an n8n workflow starts a lot of new conversations, check it weekly.

Troubleshooting

SymptomLikely causeFix
401 from the APIMissing or revoked key, or wrong headerRecreate the key under Configurations → Integrations → REST API; send it as x-api-key or Bearer
403 from the APIWorkspace suspendedCheck billing and workspace status in DMly, not the workflow
422 on Message → SendClosed window with a text send, missing template, or provider errorSwitch to an approved template with the right parameters; check the template’s status is Approved
429 responsesMore than 60 requests a minute on one keyBatch, add a Wait node, or split read-heavy jobs to a schedule
Trigger won’t registern8n not on a public HTTPS URL, or the workspace webhook is already owned by another consumerUse a public domain or a tunnel with Manual mode; free the existing subscription or share it with Manual mode
Events arrive twiceSlow acknowledgement, retries doing their jobRespond first, then work; dedupe on the envelope id
Signature mismatchBody was parsed before hashing, or the secret changedEnable Raw Body on the Webhook node; hash the raw bytes; paste the current whsec_ secret
Flow HTTP Request step returns nothingResponse over 5 seconds, or invalid JSON bodySpeed up the n8n side; check {{_last_http_status}} and {{_last_http_error}}; make sure your body renders as JSON
Community node not foundNot installed, or you lack Owner/Admin rightsInstall n8n-nodes-dmly from Settings → Community Nodes, or ask the instance owner
Message “sent” but never deliveredContact opted out, messaging limit reached, or template pausedCheck the Unsubscribe tag, the quality and limit under Bot Setup → WhatsApp → Configuration, and the template’s status

If a workflow was working and stopped, look at the n8n Executions tab first, then at DMly’s webhook logs, then at the WhatsApp health screen. In that order you’ll find the cause nine times out of ten. Our guide on setting up an FAQ and auto-response system covers the DMly-side automation checks if the problem is inside a flow rather than in n8n.

Why DMly Is the Best WhatsApp Platform to Pair With n8n

Any WhatsApp platform with an API can be wired to n8n given enough patience; the point of DMly is that you do not need the patience. Here is what is specific and verifiable about it.

An official n8n community node, not a “use our webhooks” page

DMly publishes n8n-nodes-dmly on npm (version 1.0.0 as of July 2026): a DMly action node covering 24 resources and around 120 operations, and a DMly Trigger that registers its own webhook subscription, loads the event list live from your workspace and verifies every signature. You never write a URL or hash a body by hand, and the generic Webhook and HTTP Request route still works if you’d rather not install anything.

75 event topics, signed and retried

Contacts, conversations, calls, message lifecycle, appointments, classes, invoices, orders, payments, subscriptions, credits, the store, automations and broadcasts all emit events, in one envelope, with HMAC-SHA256 signatures, an 8-second acknowledgement window and two retries. Because bookings, invoices and payments are part of the platform rather than bolted on, the events you actually want (a no-show, an unpaid invoice, an abandoned checkout) exist without you building them.

One key, every plan

API, webhooks and integrations are included on Starter, Growth and Premium as of August 2026, and there’s no markup on WhatsApp messages: you pay Meta’s standard rates directly. A workspace API key authenticates everything at 60 requests a minute; on the MCP side it’s 120. Nothing about the integration is an add-on.

Both directions mid-conversation

The flow builder’s HTTP Request step and the AI agent’s Custom functions let a live conversation reach into n8n and use the answer, which is the part most platforms leave out. Together with the tag bridge, it means n8n can be the brain behind a bot without ever becoming the inbox.

The compliance you don’t have to write in n8n

The 24-hour window is enforced across the inbox, automations, broadcasts and sequences; stop keywords add an Unsubscribe tag and suppress every automated send; only Approved templates can be chosen; the quality rating and messaging tier for your number sit under Bot Setup → WhatsApp → Configuration with links straight to Meta verification and billing. Your n8n workflows inherit all of that.

What you need for n8nTypical WhatsApp toolDMly
n8n nodeNone; generic HTTP onlyOfficial community node with an action node and a trigger
EventsMessages, maybe delivery status75 topics across messaging, CRM, bookings, classes, finance, store, broadcasts
SecurityUnsigned POSTsHMAC-SHA256 signatures, delivery ids, retries
Reaching n8n from a chatNot possibleFlow HTTP Request step (5 s) and AI Custom functions
AI agentsNot applicableMCP server with 37 tools for Claude, Cursor, n8n or your own agent
AccessHigher tiers or an add-onEvery plan, no WhatsApp markup
Where the conversation livesWherever you build itTeam inbox across WhatsApp, Instagram, Messenger, TikTok, Telegram, SMS and live chat

Connect WhatsApp to n8n through DMly

One workspace API key, one trigger node, 75 events and a REST API that covers your inbox, CRM, bookings and payments. Start a 7-day trial, no card needed, and have the first workflow running before lunch.

Connect DMly to n8n

Final Thoughts

Deciding how to connect WhatsApp to n8n is not really a technical question once you have made one call: where the conversation lives. Put it in n8n and you’ll spend your evenings rebuilding an inbox and re-reading Meta’s policy pages. Put it in a platform like DMly and n8n becomes what it’s brilliant at: a quiet corridor between the messages your customers send and the spreadsheet, the accounts, the CRM and the Slack channel that run the rest of the business.

Start with one workflow. Wire the trigger, respect the window, dedupe on the id, and let DMly do the talking. Tunde’s clinic did exactly that, and the spreadsheet, the accountant and the after-hours Slack ping all took care of themselves.

Questions People Ask Before They Connect WhatsApp to n8n

Does n8n have a native WhatsApp node?

Yes. n8n has a WhatsApp Business Cloud node (Send, Send Template, Send and Wait for Response, and media operations) and a WhatsApp Trigger node. They talk to Meta’s Cloud API directly, so you provide your own Meta app, access token and Business Account ID, and you handle templates, the 24-hour window, opt-outs and the inbox yourself. Using DMly in the middle removes those jobs from n8n.

Do I need to install anything to connect DMly to n8n?

Not strictly. n8n’s built-in Webhook and HTTP Request nodes work with DMly’s webhooks and REST API. The n8n-nodes-dmly community package adds a DMly action node and a DMly Trigger that manage the webhook subscription, load events live and verify signatures for you, so it’s the more comfortable route.

Can n8n send a WhatsApp message to someone who hasn’t messaged us?

Only with an approved template, and only to contacts who opted in. Outside a customer’s 24-hour window Meta allows template messages alone; DMly’s API returns a 422 for a plain text send in that case. Use Message → Send with the template type and parameters, and check consent in an IF node first.

Can n8n start a DMly flow?

Not directly, but the tag bridge does the same job: n8n adds a tag (or sets a custom field) through the API, and a DMly flow with the Tag applied or Field changed trigger takes over. That keeps the templates, the copy and the opt-out logic inside DMly.

Is the DMly API available on every plan?

As of August 2026 the pricing page lists “API, webhooks & integrations” on Starter, Growth and Premium, and the 7-day trial needs no card. Rate limits are 60 requests a minute per API key on REST and 120 on MCP.

Should I use n8n or Zapier with DMly?

Both work. Zapier connects through a REST-hook subscription with a zap_ key and is the quicker start; n8n gives you a canvas, a self-hosted option, execution-based pricing and the community node. If you already have n8n running, use it. Our guide to connecting WhatsApp to Zapier covers that side, and our developer guide to the WhatsApp automation API compares the REST, Zapier, n8n and MCP doors in one place.

Can an AI agent in n8n use DMly?

Yes, through DMly’s MCP server at https://dash.dmly.io/mcp with an MCP-scoped API key and n8n’s MCP Client Tool. DMly’s docs suggest REST-only keys for ordinary n8n workflows and MCP for agents, and broadcasts always need a human approval before they send.

DT
DMly Team
Writer at DMly

Writing about WhatsApp automation, bookings and growth for local business.

Turn WhatsApp into your busiest channel.

Start free and run message, bookings, payments and reviews in one place.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top