npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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

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:

  1. Go to Settings > Community Nodes.
  2. Select Install.
  3. Enter n8n-nodes-waotomatis in Enter npm package name.
  4. 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-waotomatis in your n8n custom-nodes directory. See the manual installation docs.

Credentials

Both nodes use the WAOtomatis API credential.

  1. Sign in to your WAOtomatis dashboard and create an API key (it is sent as a Bearer token on every request).

  2. 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.dev endpoint. A trailing slash is trimmed automatically. |

  3. Select Test to validate the credential. n8n performs a cheap GET /v1/sessions call — a 200 confirms 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 Text body, 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.
  • TemplateTemplate Name, Language Code (e.g. en_US), and optional Components (JSON) for header/body/button parameters.
  • InteractiveReply 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:

  1. Reads the X-Wao-Signature: sha256=<hex> header.
  2. Computes HMAC-SHA256(secret, rawBody) over the exact raw request bytes.
  3. 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.

  1. WAOtomatis Trigger
    • Session: your connected number.
    • Events: Message Received.
  2. 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.

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.text for 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).

  1. 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.
  2. (If your data isn't already one-item-per-recipient) use an Item Lists / Split Out node so each recipient is a separate item.
  3. 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.

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.

Resources

License

MIT