Skip to content

n8n to WhatsApp groups: send and trigger workflows

Why n8n's WhatsApp node can't post into your existing groups, and four n8n WhatsApp group workflows that can, with retries that never double-post.

Written by
By WavesFlo team
Last updated
Updated
Reading time
10 min read

n8n's built-in WhatsApp node can't post into the WhatsApp groups your team already runs. The WhatsApp Business Cloud node works through Meta's Cloud API: it sends messages, waits for replies and handles media for a registered business number, but has no group operations. To automate ordinary groups, a workflow must drive a number that belongs to them.

This guide explains where the built-in node stops, then gives four workflows that connect n8n to WavesFlo through its REST API and signed webhooks: posting new items to groups after approval, logging joins and leaves, tallying poll votes, and alerting when a number disconnects. It ends with the two habits that make any workflow safe to leave running: retries that can't double-post, and signatures you actually check.

Why can't n8n's WhatsApp node post to your groups?

The WhatsApp node that ships with n8n is WhatsApp Business Cloud. Its message operations are Send, Send and Wait for Response, and a send for message formats Meta has approved in advance; its media operations upload, download and delete files. Its credentials come from a Meta developer app with WhatsApp added. The WhatsApp Trigger node listens to the same account's events, such as incoming messages and account updates. As of October 2026, n8n's documentation notes that WhatsApp allows only one webhook per app, so switching between the trigger's test and production URLs overwrites the other.

  • A number on the Cloud API can't see the groups your staff run from their phones.
  • Meta's own Groups API covers only groups a business creates through the API. As of October 2026, Meta's documentation allows up to eight participants, joined by invite link, for eligible verified business accounts, and not for numbers on the WhatsApp Business app.
  • A WhatsApp Business app number connected to the Cloud API while staying on the app doesn't bring its groups along. Meta's documentation says group chats are not synchronised.
  • Outside the 24 hours after a customer's last message, the API sends only message formats Meta has approved, charged per message since July 2025.

None of that is a flaw in n8n: the Cloud API is built for one-to-one conversations, and the node reflects it. A 300-member customer group started on someone's phone needs a different route.

Which n8n nodes can post to existing WhatsApp groups?

Two of n8n's own nodes do it, with WavesFlo behind them. The HTTP Request node calls WavesFlo's REST API to send messages and manage groups and contacts. The Webhook node starts a workflow from WavesFlo's signed events: messages, poll votes, group changes, consent, campaigns and numbers. The numbers themselves are linked by QR code from WhatsApp's Linked devices screen, like WhatsApp Web, so they post into groups they already belong to.

  • A number can only post into groups it is a member of, and a group post reaches everyone in the group. No member can be left out.
  • The group events are group.participant_joined, group.participant_left, group.settings_changed for a new name, description or admin-only setting, and group.membership_request when someone asks to join.
  • The recipes below log, count and alert; none of them replies to customers or welcomes anyone.
n8n's built-in WhatsApp nodes and WavesFlo through n8n's HTTP Request and Webhook nodes, compared
What differsn8n's built-in WhatsApp nodesWavesFlo through HTTP Request and Webhook
How the number connectsCredentials from a Meta developer app with WhatsApp added, on Meta's Cloud APILinked by QR code from WhatsApp's Linked devices screen, like WhatsApp Web
Posting into groups your team already runsNot possible: the WhatsApp Business Cloud node has no group operationsYes, from a linked number that is already a member of the group
Events that can start a workflowThe WhatsApp Trigger's account events, such as incoming messages and account updatesSigned events covering messages, poll votes, group changes, consent, campaigns and numbers
Group joins, leaves and join requestsNot among the WhatsApp Trigger's eventsYes: each has its own event
Webhook deliveryOne webhook per Meta app, so the trigger's test and production URLs overwrite each otherSigned and delivered at least once, with a stable event identifier to deduplicate on

Recipe 1: post new items to groups, after approval

A new article, price change or listing appears, and the right groups hear about it once a person has signed it off. It is the automated version of sending one message to many WhatsApp groups.

  1. Start with an RSS Feed Trigger polling your feed, say every hour, or a Google Sheets Trigger on Row added if the posts are written in a sheet.
  2. Add an Edit Fields (Set) node that builds the post: a headline, one line on why it matters, and the link. Short posts get read in groups.
  3. Add a Slack node with Send and Wait for Response, addressed to whoever approves posts. They answer inside Slack, and the workflow waits.
  4. Add an If node that continues only on approval.
  5. Add an HTTP Request node that sends the post to each group through WavesFlo's API, one request per group, with an Idempotency-Key built from the item and the group; the request is shown below. Every sending number must already be in those groups.
  6. Log the result with Google Sheets → Append Row, so there is a record of what went where.

Recipe 2: log group joins and leaves

  1. Start with a Webhook node, add its URL in WavesFlo as a webhook destination subscribed to the Groups category, and verify each delivery's signature, as shown below. Continue for group.participant_joined and group.participant_left.
  2. Add Remove Duplicates, set to Remove Items Processed in Previous Executions and keyed on the event's identifier. Delivery is at least once, so the same join can arrive twice.
  3. Add Google Sheets → Append Row with the group's name, the participant, the event type and the time, all of which the event carries.
  4. Add a Slack node that tells the group's owner who joined, so a real person can say hello if the group expects it.
  5. Route group.membership_request to the same channel, so an admin reviews join requests on their phone before they pile up.

A weekly look at the sheet shows which groups are growing and which are leaking members. The workflow records joins; it doesn't greet anyone. For wording a person can send, see these WhatsApp group welcome message examples.

Recipe 3: tally WhatsApp poll votes in a sheet

  1. Start with a Webhook node subscribed in WavesFlo to the Engagement category, verify the signature, and continue for poll.vote. It fires when someone votes or changes their vote, and carries the poll's message ID, the voter, the options they chose and the poll question.
  2. Add an Edit Fields (Set) node that joins the poll's message ID and the voter into one key.
  3. Add Google Sheets → Append or Update Row, matching on that key. A changed vote then overwrites the voter's earlier row instead of counting twice.
  4. In the sheet, count each option with COUNTIF, or a pivot table per poll question.

The event only covers polls in chats your linked numbers belong to, and a voter's number is personal data, so keep the sheet's sharing tight. The WhatsApp group polls guide covers writing polls people actually answer.

Recipe 4: alert someone when a number disconnects

  1. Start with a Webhook node subscribed in WavesFlo to the Accounts category, verify the signature, and continue for account.disconnected and account.qr_required, which fires when a number needs linking again before it can send.
  2. Add a Switch node that routes by event, so each alert says what to do.
  3. Send the alert where the person holding the phone will see it: a Send Email or Gmail node, or Slack.
  4. Put the fix in the message: open WhatsApp on that phone, go to Linked devices, and scan the new code from the dashboard.
  5. Watch the count. The disconnection event carries the reason and how many times the number has dropped, so escalate when that number keeps climbing.

If Slack or Microsoft Teams is the only destination, WavesFlo already posts this alert there; n8n earns its place when the alert must reach email, a pager or a ticket queue. Add account.send_blocked to hear when the sending rules refuse a send.

How do you stop n8n retries posting twice?

n8n's Retry On Fail setting reruns a node when it errors. That is what you want after a timeout, and it is also how a group gets the same post twice: the first attempt may have reached the server even though n8n never saw the answer. Every send through the WavesFlo API accepts an Idempotency-Key, and a retry carrying the same key within 24 hours returns the first result instead of repeating the action.

Build the key from whatever started the run — the RSS item's GUID, the sheet's row number, the event's identifier — plus the group, when one item goes to several groups, and never from the time or a random value, which changes on every attempt. A send from the HTTP Request node looks like this:

POST https://<your WavesFlo API base URL>/api/public/v1/messages
x-api-key: $WAVESFLO_KEY
Idempotency-Key: rss-<the item's GUID>-<group id>

{"to":"<group id>","body":"<the post>"}
HTTP Request node: post into a group, safe to retry

If the send is refused, the response says why. A 403 SEND_BLOCKED means the recipient opted out, or a member of the group withdrew consent, and no retry fixes it. A 429 means wait: its Retry-After header says how long, and its code is SEND_DEFERRED for quiet hours, a cooldown or a cap, or ACTION_CAP_REACHED once the number's daily budget is spent.

How do you verify webhook signatures in n8n?

Every recipe above starts with n8n's Webhook node, so check every delivery before acting on it. Each one carries an X-Wavesflo-Timestamp header and an X-Wavesflo-Signature header: sha256= followed by an HMAC-SHA256 of the timestamp, a dot and the raw body.

  1. Turn on the Webhook node's Raw Body option. JSON that has been parsed and re-serialised no longer matches the signature.
  2. Compute the HMAC with the Crypto node's Hmac action: type SHA256, hex encoding and your signing secret, over the timestamp, a dot and the raw body.
  3. Compare it with the signature header minus its sha256= prefix, and drop any delivery whose timestamp is more than five minutes old.
  4. Deduplicate on the event identifier with Remove Duplicates, and order events by their own timestamp, not by arrival.

A plain comparison in an If node isn't constant-time. Where that matters, run the verification function from the webhooks and n8n guide in a Code node; self-hosted n8n needs NODE_FUNCTION_ALLOW_BUILTIN=crypto set before the Code node can load the crypto module.

Sending limits apply to everything a workflow sends

Sends from n8n pass the same sending rules as the dashboard: by default 500 sends a day and 60 an hour per number, a 24-hour cooldown per recipient, quiet hours from 22:00 to 08:00, and opt-outs checked at send time. A send the rules hold back is refused, not queued: it comes back as a 429 with a Retry-After header, so have the workflow wait and retry with the same Idempotency-Key. Never retry a 403 SEND_BLOCKED, which means the recipient opted out or a member of the group withdrew consent. The cooldown counts a group as one recipient, so a second post into the same group within 24 hours is held back until the cooldown ends. Campaigns started in the dashboard also add a randomised 30 to 300 second gap between messages.

Illustration

WhatsApp publishes no daily sending limit for ordinary accounts, so pacing is something you impose rather than look up. The daily message limit guide explains each default, and the developers page has the request samples.

To record incoming chats as well as send, see logging WhatsApp messages to Google Sheets.

Questions

Can n8n send a message to a WhatsApp group?

Not with the built-in WhatsApp Business Cloud node, which has no group operations as of October 2026. It can through an HTTP Request node calling WavesFlo's REST API, posting from a number that is already a member of the group.

Does the n8n WhatsApp Trigger fire for group messages?

Not for the groups your team runs on their phones: the WhatsApp Trigger only receives Meta's Cloud API events for your business number, so it never sees those groups. It does fire for messages in groups your business created through Meta's Groups API, which arrive as message events carrying a group ID.

Can an n8n workflow react when someone joins a WhatsApp group?

Yes, with WavesFlo's signed webhook events, received by n8n's Webhook node: group.participant_joined and group.participant_left fire for any group a linked number belongs to, and group.membership_request fires when someone asks to join. Delivery is at least once, so deduplicate on the event identifier.

How do I stop n8n posting the same WhatsApp message twice?

Send an Idempotency-Key built from the source item, such as the RSS item's GUID or the event's identifier, and deduplicate incoming events with the Remove Duplicates node.

Do messages sent from n8n skip WavesFlo's sending limits?

No. Daily and hourly caps, cooldowns, quiet hours and opt-outs are enforced in the delivery engine, however a send was started.

Sources

Keep reading

See it on your own numbers.