whatomate

n8n community node for the Whatomate WhatsApp Business platform

Package Information

Released: 4 mo ago
Downloads: 4 weekly / 285 monthly
Latest Version: 0.2.1
Author: Your Name

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.

npm version
License: MIT

Installation

From the n8n UI (self-hosted)

  1. Go to Settings → Community Nodes.
  2. Click Install, enter n8n-nodes-whatomate, accept the risks notice, and install.
  3. Restart n8n.

Manually (npm)

npm install n8n-nodes-whatomate

Then restart n8n.

Setup

  1. In Whatomate, go to Settings → API Keys and create a new key (it will start with whm_).
  2. 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.
  3. The credential test hits GET /api/me to 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_account field matches a specific value (useful for multi-account setups).
  • Output Inner Data Only — output only the inner data object 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/webhooks payload of { name, url, events, is_active } and that the response returns the created webhook's id under data.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().

License

MIT

Discussion