n8n-nodes-waotomatis
v0.3.0
Published
n8n community node for WAOtomatis — headless WhatsApp (send messages, manage chats/contacts/media/storage, trigger on inbound events).
Downloads
94
Maintainers
Readme
n8n-nodes-waotomatis
This is an n8n community node. It lets you use WAOtomatis in your n8n workflows.
WAOtomatis is a developer-first "headless WhatsApp" platform: a single REST API and webhook surface for sending and receiving WhatsApp messages, managing chats, contacts and media, and running support tickets — without touching the WhatsApp Cloud API directly.
This package ships two nodes:
- WAOtomatis — an action node to send messages and manage chats, contacts, media, sessions, webhooks and tickets.
- WAOtomatis Trigger — a trigger node that starts a workflow when an inbound message, status update, or session event arrives (with HMAC signature verification).
n8n is a fair-code licensed workflow automation platform.
Installation Credentials Operations Trigger Example flows Resources
Installation
Follow the installation guide in the n8n community nodes documentation.
In a nutshell, from within n8n:
- Go to Settings > Community Nodes.
- Select Install.
- Enter
n8n-nodes-waotomatisin Enter npm package name. - Agree to the risks of using community nodes and select Install.
After installation, the WAOtomatis and WAOtomatis Trigger nodes are available in the nodes panel.
Self-hosting / npm install: if you run n8n yourself you can also install the package directly with
npm install n8n-nodes-waotomatisin your n8n custom-nodes directory. See the manual installation docs.
Credentials
Both nodes use the WAOtomatis API credential.
Sign in to your WAOtomatis dashboard and create an API key (it is sent as a Bearer token on every request).
In n8n, create a new WAOtomatis API credential and fill in:
| Field | Required | Default | Description | | --- | --- | --- | --- | | API Key | Yes | — | A WAOtomatis API key. Stored encrypted and sent as
Authorization: Bearer <key>. | | Base URL | No |https://api.waotomatis.com| Override for a self-hosted deployment or the direct*.workers.devendpoint. A trailing slash is trimmed automatically. |Select Test to validate the credential. n8n performs a cheap
GET /v1/sessionscall — a200confirms both the API key and base URL are correct.
API errors are surfaced in the workflow with the message and requestId from the { error: { code, message, requestId } } envelope, so failures are easy to report to support.
Operations
The WAOtomatis action node is organised into resources. Select a Resource, then an Operation. Most operations require a Session (the connected WhatsApp number) — pick it from the searchable list, by ID, or via an expression.
| Resource | Operation | Description |
| --- | --- | --- |
| Message | Send | Send a text, image, video, audio, document, sticker, template, or interactive message. |
| | Mark as Read | Mark an inbound message as read (blue ticks), by provider message id (wamid). |
| | Reply With Emoji | Send an emoji as a quoted reply to a message (the WhatsApp Cloud API has no native reaction overlay). |
| Chat | List | List chats, most recent first (supports Return All / Limit pagination). |
| | Get History | Get the message history of a chat by chat ID. |
| Contact | List | List known contacts (paginated). |
| | Get | Get a single contact by WhatsApp id (E.164 digits). |
| Session | List | List all sessions (connected numbers) in the workspace. |
| | Get | Get a single session by id. |
| Media | Upload from URL | Upload media by giving the API a public URL to fetch (optional MIME override). |
| | Upload Binary | Upload media from an incoming binary property (multipart). |
| | Download | Download media bytes by media id into a binary property. |
| Webhook | Create | Register a webhook for a session and a set of events. |
| | List | List webhooks registered for a session. |
| | Delete | Delete a webhook by id. |
| Ticket | Create | Open a support ticket (subject, body, priority). |
| | List | List support tickets. |
| | Get | Get a ticket with its full message thread. |
| | Reply | Add a reply to a ticket thread. |
| | Set Status | Change a ticket status (open, pending, resolved, closed). |
Message → Send details
The fields shown adapt to the Message Type:
- Text — a
Textbody, with an optional Link Preview toggle. - Image / Video / Audio / Document / Sticker — choose a Media Source (By URL or By Media ID from a previous Media → Upload). Image/Video/Document accept a Caption; Document accepts a File Name; Audio has a Send as Voice Note toggle.
- Template — Template Name, Language Code (e.g.
en_US), and optional Components (JSON) for header/body/button parameters. - Interactive — Reply Buttons (up to 3) or a List (sections with rows). Each supports Body Text plus optional Header Text / Footer Text.
Shared Options for any send: Reply To (quote a wamid), Idempotency Key (de-duplicate retries so a message is sent only once), and Link Preview.
Phone number format: recipients and chat/contact ids use E.164 digits only — country code, no
+, spaces or dashes (e.g.628123456789).
Trigger
The WAOtomatis Trigger node starts a workflow when an event arrives for a chosen session. When the workflow activates, the node automatically registers a webhook on your behalf via POST /v1/sessions/:id/webhooks (and removes it when the workflow is deactivated) — there is nothing to configure on the WAOtomatis side.
Parameters
Session — the session (connected WhatsApp number) to listen on. Pick from the searchable list or enter an id.
Events — one or more events that should start the workflow:
| Event | Value | Fires when | | --- | --- | --- | | Message Received |
message.received| An inbound message arrives. | | Message Updated (Status) |message.updated| A delivery/read status changes (sent → delivered → read, or failed). | | Session Status |session.status| The session's connection status changes. |
The node also filters deliveries client-side, so the workflow only fires for the events you selected even if the underlying subscription is broader.
Signature verification
Every delivery is signed. On webhook creation, WAOtomatis returns a per-webhook secret, which the node stores in workflow static data. For each incoming delivery the node:
- Reads the
X-Wao-Signature: sha256=<hex>header. - Computes
HMAC-SHA256(secret, rawBody)over the exact raw request bytes. - Compares the two using a constant-time comparison.
If the signature is missing or invalid, the node responds 401 invalid signature and the workflow does not run — so spoofed or tampered deliveries are rejected. This happens transparently; no configuration is required.
Example flows
1. Auto-reply on an inbound message
Reply to every incoming WhatsApp message automatically.
- WAOtomatis Trigger
- Session: your connected number.
- Events:
Message Received.
- WAOtomatis (action)
- Resource:
Message, Operation:Send. - Session: same session.
- To:
={{ $json.data.from }}(the sender from the trigger payload). - Message Type:
Text. - Text:
Thanks for your message! We'll get back to you shortly. - (Optional) under Options, set Reply To to
={{ $json.data.providerMessageId }}to quote the original message.
- Resource:
The trigger emits the full event envelope, so the message fields live under
data:{ eventId, event, sessionId, createdAt, data: { from, chatId, type, text, providerMessageId, timestamp } }.Tip: drop an IF or Switch node between the trigger and the send to branch on
$json.data.textfor keyword routing, or call an AI/LLM node to draft the reply before sending.
2. Broadcast a message to a list of recipients
Send the same message to many contacts (e.g. from a spreadsheet or database).
- Trigger of your choice — Manual Trigger, Schedule Trigger, or a data source like Google Sheets / Postgres that outputs one item per recipient with a phone-number field.
- (If your data isn't already one-item-per-recipient) use an Item Lists / Split Out node so each recipient is a separate item.
- WAOtomatis (action)
- Resource:
Message, Operation:Send. - Session: the session to broadcast from.
- To:
={{ $json.phone }}(map to your recipient field). - Message Type:
Template(recommended for business-initiated broadcasts) — set Template Name, Language Code, and Components (JSON) for per-recipient variables. For session/customer-care messages you can use Text instead. - Under Options, set an Idempotency Key such as
={{ $json.phone + '-' + $now.toISODate() }}so re-running the workflow never double-sends.
- Resource:
The action node runs once per input item, so the broadcast fans out automatically. Enable Continue On Fail on the node if you want one bad number not to stop the whole run; failed items are emitted with an error field you can collect and report.
