Package Information
Available Nodes
Documentation generating…
Documentation
n8n-nodes-whatomate
n8n community node for Whatomate — the open-source WhatsApp Business platform. Send WhatsApp messages (text, template, media, interactive buttons, CTA URLs, reactions), manage contacts and tags, run bulk campaigns sourced from your existing contact list, and react to incoming events — all from inside n8n.
Installation
From the n8n UI (self-hosted)
- Go to Settings → Community Nodes.
- Click Install, enter
n8n-nodes-whatomate, accept the risks notice, and install. - Restart n8n.
Manually (npm)
npm install n8n-nodes-whatomate
Then restart n8n.
Setup
- In Whatomate, go to Settings → API Keys and create a new key (it will start with
whm_). - In n8n, create a new Whatomate API credential and paste:
- Base URL — the root URL of your Whatomate instance, e.g.
https://wha.your-domain.com(no trailing slash). - API Key — the
whm_...key you just generated.
- Base URL — the root URL of your Whatomate instance, e.g.
- The credential test hits
GET /api/meto verify connectivity.
Nodes
Whatomate (action)
A single node with a resource/operation picker, covering the most-used Whatomate endpoints.
| Resource | Operations |
|---|---|
| Message | Send Text · Send Template · Send Media · Send Interactive Buttons · Send Interactive CTA URL · Send Reaction · Mark as Read · Download Media · List |
| Contact | List · Get · Create · Update · Update Tags · Delete |
| Campaign | List · Get · Create · Add Recipients (from JSON / Tag / Contact IDs / All Contacts) · Start · Pause · Cancel |
| Template | List · Get |
| Tag | List · Create |
Download Media
The Whatomate webhook payload contains a message_id for incoming media but no public URL — the actual file lives at the auth-protected GET /api/media/{message_id} endpoint. The Message → Download Media operation handles this for you and returns the file as binary data in the standard n8n shape (binary.data by default), ready to pass to any downstream node that consumes binary input (S3, Google Drive, image OCR, etc.).
Send Interactive Buttons
Send a quick-reply message with up to 3 buttons. Each button has an ID (returned to your workflow when the user taps) and a Title (max 20 chars, shown to the user). When the user taps a button, you'll receive an incoming-message webhook with the button ID in the payload.
Send Interactive CTA URL
Send a message with a single call-to-action button that opens a URL when tapped. Good for tracking links, deep links into your app, or directing users to a payment page.
Campaign Add Recipients — sources
The classic n8n way to import campaign recipients is to paste a JSON array. This node adds three more sources so you don't have to maintain that list externally:
- Manual (JSON Array) — paste an array of
{ phone_number, name, ... }objects. - From Tag — give a tag name; the node fetches every contact carrying that tag and adds them as recipients automatically. Pairs with the contact-tagging workflow you probably already have.
- From Contact IDs — comma-separated list of contact UUIDs.
- All Contacts — every contact in the org. Has a confirmation notice in the UI because it's destructive by default.
For non-manual sources you can set Max Contacts to Fetch (default 1000, hard cap 10000).
Whatomate Trigger
Receives webhook events from Whatomate. Has two registration modes:
Automatic registration (recommended)
When the workflow is activated, n8n creates a webhook in Whatomate pointing back to itself; when deactivated, it removes it. Requires Whatomate API credentials on the trigger node.
The webhook is named n8n: <your trigger node name> so you can find it in Whatomate's UI. Only the event types you selected in the node will be subscribed to.
Manual registration
You paste the n8n webhook URL into Whatomate's Settings → Webhooks page yourself. No credentials needed on the trigger. Useful if your n8n doesn't have outbound access to whatomate, or if you want to share a single webhook across multiple workflows.
Filtering options (apply in both modes)
- Events — only fire on selected event types (
message.incoming,message.delivered, etc.). - Message Type — for message events, only fire on specific message types (
image,video,text, etc.). - WhatsApp Account — only fire when the event's
whatsapp_accountfield matches a specific value (useful for multi-account setups). - Output Inner Data Only — output only the inner
dataobject instead of the full envelope.
Common workflows
Auto-download every incoming image to Google Drive
Whatomate Trigger (Message Type = image)
→ Whatomate (Message → Download Media, Message ID = {{ $json.data.message_id }})
→ Google Drive (Upload File, Binary = data)
Daily reminder to a tag of contacts — fully native
Schedule Trigger (cron: 0 9 * * *)
→ Whatomate (Campaign → Create, Template = "daily_reminder")
→ Whatomate (Campaign → Add Recipients, Source = "From Tag", Tag = "daily_group")
→ Whatomate (Campaign → Start)
No CSV uploads, no loops, no rate-limiting code — Whatomate's campaign engine handles delivery and retries.
Quick-reply menu
Whatomate Trigger (Events = message.incoming, Output Inner Data Only = true)
→ IF: $json.message_type === "text" && $json.content.includes("menu")
→ Whatomate (Message → Send Interactive Buttons,
Body = "What can I help you with?",
Buttons = [{ id: "hours", title: "Hours" }, { id: "location", title: "Location" }, { id: "agent", title: "Speak to agent" }])
Whatomate Trigger #2 (Events = message.incoming, Message Type = interactive)
→ Switch on $json.data.content.button_id → branches for each choice
React to a keyword
Whatomate Trigger (Output Inner Data Only = true)
→ IF: $json.message_type === "text" && $json.content.toLowerCase().includes("thanks")
→ Whatomate (Message → Send Reaction, Emoji = "❤️", Message ID = {{ $json.wamid }})
Development
git clone https://github.com/YOUR_GITHUB_USERNAME/n8n-nodes-whatomate.git
cd n8n-nodes-whatomate
npm install
npm run build
# Link into your local n8n
npm link
mkdir -p ~/.n8n/custom && cd ~/.n8n/custom
npm link n8n-nodes-whatomate
# Then start n8n normally
n8n start
To rebuild on every change:
npm run dev
Known limitations
- The webhook auto-registration assumes a
POST /api/webhookspayload of{ name, url, events, is_active }and that the response returns the created webhook'sidunderdata.id. This is a reasonable guess based on Whatomate's REST conventions but isn't covered by the public docs at the time of writing. If your Whatomate version rejects this payload, switch the trigger's Registration Mode to Manual and configure the webhook in Whatomate's UI — everything else continues to work normally. - Conversation Notes, Custom Actions, Flows, Calling, and Catalogs aren't wrapped yet — use the n8n HTTP Request node with the Whatomate credential for these until added.
- "Add Recipients from Tag/All Contacts" paginates client-side and respects a max-contacts cap (default 1000, hard cap 10000). For larger sends, fall back to manual JSON.
Contributing
PRs welcome. The codebase is small and intentionally flat — each resource has a single block in Whatomate.node.ts's execute(). To add an operation: add it to the operation list (with displayOptions show conditions), add any parameter fields, and add the matching branch in execute().