kirim

n8n community node for Kirimdev — send WhatsApp messages, manage contacts and conversations, react to events.

Package Information

Released: 1 mo ago
Downloads: 240 weekly / 1,370 monthly
Latest Version: 0.3.3
Author: Kirimdev

Documentation

@kirimdev/n8n-nodes-kirim

Official n8n community node for Kirimdev — send WhatsApp messages, manage contacts and conversations, and react to events, all from your n8n workflows.

What's in this package

Node Type Use
Kirimdev Action Send messages, manage contacts/conversations/labels, browse templates, inspect webhook deliveries
Kirimdev Trigger Trigger Auto-subscribe to events, verify HMAC signatures, fire workflows on inbound activity

Both nodes share a single Kirimdev API credential (API key + base URL) and work against production, staging, or a self-hosted Kirimdev install.

Install

In n8n:

  1. Go to Settings → Community Nodes
  2. Click Install a community node
  3. Enter @kirimdev/n8n-nodes-kirim
  4. Agree to the community node risk notice, click Install
  5. Restart n8n if the node doesn't show up immediately

Or via npm (in your n8n install root):

npm install @kirimdev/n8n-nodes-kirim

Credentials setup

  1. Generate an API key in the Kirimdev dashboard: Developers → API Keys → Create key (the plaintext is shown once — store it safely).
  2. In n8n, Credentials → Add Credential → Kirimdev API.
  3. Paste the kdv_live_... key. Leave Base URL at its default unless you target staging.

The credential's Test button calls GET /v1/me to confirm the key is valid.

Action node — Kirimdev

Resources & operations

Resource Operations
Message Send Text / Send Template / Send Image / Send Document / Send Video / Send Audio / Send Interactive CTA / Send Interactive Reply Buttons / Send Interactive List / Mark as Read / Get / List
Contact Create / Get / List / Update / Delete / Attach Label / Detach Label / Bulk Label
Conversation Get / List / Update (assignment + status) / Attach Label / Detach Label
Label Create / Get / List / Update / Delete
Template Get / List
Webhook Delivery Get / List / Replay

Example — send a text message

  1. Drag Kirimdev into your workflow.
  2. Select credentials.
  3. Resource: Message, Operation: Send Text.
  4. Fill To (E.164 with leading +) and Message.
  5. Wire upstream data into expressions (e.g. ={{ $json.phone }}).

Example — reply to an inbound message (quoted bubble)

After a Kirimdev Trigger (message.received), use Send Text (or any send operation) on the same Kirimdev node and fill:

Field Expression
From Account your connected number
To ={{ '+' + $json.entry[0].changes[0].value.messages[0].from }}
Reply To Message ID (Wamid) ={{ $json.entry[0].changes[0].value.messages[0].id }}
Message your reply text

The node sends context.message_id to the API — same Meta wire shape as the Cloud API. Use the wamid from the webhook, not kirim.message_id (msg_…).

Example — send a template (outside the 24h window)

Template messages are the only way to start a conversation when there is no active 24-hour window.

  • Operation: Send Template
  • Template Name: pick from the dropdown — the list is loaded live from your selected From account and limited to approved templates. The label embeds the variable count, e.g. welcome_customer (en_US) [4 var], so you know up front how many slots to fill. Language is derived from the selection.
  • Components Input: choose how to supply the template variables.
    • Guided (default, recommended) — pick Number of Variables to match the [N var] shown in the dropdown, then fill Variable {{1}} … Variable {{N}}. Optional Header Media entry handles text / image / video / document headers, and Button URL Variables handles dynamic-URL buttons (one entry per button position).
    • Raw JSON (Advanced) — hand-write the Meta-shaped components array. Use this for shapes the guided form does not cover (named placeholders, LOCATION header, COPY_CODE / FLOW / QUICK_REPLY buttons, or any new Meta addition).

Use as an AI Agent tool

The Kirimdev node sets usableAsTool: true, so every operation can be dropped into n8n AI Agent nodes. Useful patterns:

  • "When a customer asks for the status of order #X, look it up in our DB then send them a templated update via Kirimdev."
  • "When the AI categorises an incoming message as a refund request, attach a refund-request label and assign it to the support team."

Trigger node — Kirimdev Trigger

The Trigger node manages a Kirimdev webhook subscription automatically:

  1. Drag Kirimdev Trigger into a workflow.
  2. Select credentials.
  3. Pick which events to listen for from the multi-select.
  4. Activate the workflow.

On activation, the node:

  • Calls POST /v1/webhook_subscriptions with the n8n-generated URL and your selected events.
  • Stores the returned signing_secret in workflow static data (never logged).
  • Verifies every inbound POST against that secret via HMAC-SHA256 in constant time. Bad signatures are dropped with HTTP 401.

On deactivation, the node calls DELETE /v1/webhook_subscriptions/{id} to stop further deliveries.

Manual subscription (Kirimdev dashboard)

If you created the webhook subscription in the Kirimdev dashboard (not via n8n activation):

  1. Copy the Production URL from the Kirim Trigger node in n8n.
  2. Create the subscription in Kirimdev with that URL + your events.
  3. Copy the initial_secret (whsec_…) shown once at creation.
  4. Paste it into the trigger node's Signing Secret field.
  5. Activate the workflow.

n8n will verify signatures using that secret and will not call POST /webhook_subscriptions again.

Troubleshooting 401 on deliveries

Response body Cause Fix
webhook not initialised No signing secret in n8n Activate the workflow (auto-managed) or paste Signing Secret (dashboard-managed)
invalid signature Raw body mismatch (old node versions) Rebuild node (npm run build) and restart n8n
Wrong secret Subscription recreated but n8n still has old secret Deactivate → re-activate, or paste the current secret

After fixing, use Replay on failed deliveries in the Kirimdev dashboard.

Available events

Event Source Fires when
message.received Meta passthrough Inbound WhatsApp message from a contact
message.sent Kirimdev Outbound message accepted by Meta with full body
message.status Meta passthrough Outbound message status update (sent / delivered / read / failed)
conversation.assigned Kirimdev A conversation's assignee changed
conversation.closed Kirimdev A conversation was marked resolved
contact.created Kirimdev A new contact was added
contact.updated Kirimdev A contact's fields or metadata changed

Public webhook URL is required

n8n must be reachable from Kirimdev's network for webhooks to work:

  • n8n Cloud: webhooks just work — your workflow URL is already public.
  • Self-hosted: set WEBHOOK_URL in n8n's environment so the URL it advertises is publicly resolvable. For local dev, use ngrok or cloudflared.

If activation fails with URL is not reachable, your n8n instance is not publicly accessible — fix that before retrying.

Compatibility

  • n8n: v1.70+
  • Node.js: v18+ (matches n8n's own runtime floor)

Development

git clone <this-repo>
cd n8n-nodes-kirim
npm install
npm run dev    # starts n8n at http://localhost:5678 with this node hot-loaded

Linting + build:

npm run lint
npm run build

Resources

License

MIT


This is a community node. It is published by Kirimdev and not affiliated with, endorsed by, or sponsored by n8n GmbH, Meta Platforms, Inc., or WhatsApp LLC. The package name uses the required n8n-nodes-… prefix for discoverability, which is nominative fair use of the n8n trademark.

Discussion