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

@pake-ai/n8n-nodes-dibales-ai

v0.1.0

Published

n8n community nodes for dibales.ai — simplified flow-builder with matcher triggers and chainable senders for chat automation across Instagram, WhatsApp, and TikTok.

Readme

n8n-nodes-dibales-ai

Simplified flow-builder nodes for dibales.ai chat platforms — Instagram, WhatsApp, and TikTok.

This package is the opinionated, chatbot-first companion to n8n-nodes-pake-ai. Where the base package gives you raw webhook ports and a single monolithic action node, this one gives you a matcher trigger and chainable sender nodes with automatic postback routing — wire button outputs straight to the next Send Buttons node and the multi-level menu just works.

When to use which package

| Need | Package | |---|---| | Raw access to every event type on its own output port | n8n-nodes-pake-ai | | Build a chatbot flow with keyword matching and tappable button menus | n8n-nodes-dibales-ai | | Both — they install side by side | install both |

Install

In n8n, go to Settings → Community Nodes → Install and enter the package name:

@pake-ai/n8n-nodes-dibales-ai

After installing, search the node palette for "dibales.ai" — the triggers and action nodes for Instagram, WhatsApp, and TikTok will appear.

Requires n8n with community nodes enabled (N8N_COMMUNITY_PACKAGES_ENABLED=true, the default on most setups).

Local install (development)

  1. Build this package:

    cd /path/to/dibales-ai-flow
    npm install
    npm run build
  2. Make it available as a global link:

    npm link
  3. In your n8n custom-nodes directory, link against it:

    mkdir -p ~/.n8n/custom
    cd ~/.n8n/custom
    npm init -y     # only the first time
    npm link n8n-nodes-dibales-ai
  4. Start (or restart) n8n:

    n8n start
  5. In the n8n editor, search the node palette for "dibales.ai". The trigger and the consolidated Instagram action node will appear.

Setup in a workflow

  1. Add dibales.ai - Instagram Trigger to a new workflow.
  2. Copy the test webhook URL that n8n generates.
  3. Open Webhooks in the dibales.ai dashboard (cs.pake.ai), create a new webhook:
    • Paste the URL.
    • Select the Instagram events you want to receive.
    • Save. The dashboard shows a Webhook Secret once.
  4. (Recommended) Copy the Webhook Secret into the node's "Webhook Secret" field for HMAC-SHA256 verification.
  5. Add one or more Triggers in the matcher — each rule gets its own internal index and routes the matched event out through the Match port. Unmatched events leave through No Match.
  6. Wire Matchdibales.ai - Instagram (operation: Send Buttons or Send Text). For multi-level menus, wire each button output of a Send Buttons node to another Send Buttons node — postback routing happens automatically by walking the workflow graph.

Nodes

dibales.ai - Instagram Trigger

Single-webhook trigger with a per-rule matcher. Each entry in the Triggers collection is either:

  • User Comments on Post or Reel — pick a post/reel, choose "Any Comment" or filter by include/exclude keywords (case-insensitive).
  • User Sends a Direct Message — match DMs by exact text or substring against one or more keywords.

The first rule that matches wins; re-order entries to control precedence. Matched events leave on Match with a _trigger annotation ({ index, type }). Unmatched DMs and comments exit on No Match.

Postbacks and quick replies are a special case: they always pass through Match with a passthrough: true flag, because downstream Send Buttons / Send Text (with quick replies) nodes need them to decode and route the click.

Forward Events (opt-in passive event ports)

The Forward Events parameter (multi-checkbox) lets you surface three passive event types on dedicated output ports:

| Option | Event type | Use case | |---|---|---| | Outbound Echo | instagram.message.echo | Log outbound messages, sync to CRM | | Reactions | instagram.message.reaction | Tag engaged users, trigger follow-ups | | Read Receipts | instagram.message.read | Schedule unread follow-ups |

Each checked option adds an output port between Match and No Match, in declaration order (Echo → Reactions → Reads).

Port layout examples:

| Forward Events selected | Output ports | |---|---| | (none — default) | Match, No Match | | Reactions | Match, Reactions, No Match | | Echo + Read | Match, Echo, Reads, No Match | | All three | Match, Echo, Reactions, Reads, No Match |

Routing rules (full)

  • message.received / comment.created matching a rule → Match (with _trigger: { index, type })
  • message.received / comment.created not matching any rule → No Match
  • message.postback / message.quick_replyMatch (with _trigger: { passthrough: true })
  • message.echo / message.reaction / message.read → dedicated port if opted in; otherwise dropped silently (HTTP 200, no workflow emission)
  • Everything else (story.reply, story.mention, live_comment.created, unknown event types) → dropped silently

"Drop silently" means the node returns HTTP 200 OK to the dibales.ai backend (no retry) but does not emit on any output. No Match therefore has a single clean meaning: "the user sent content that didn't match any rule." Wire a default-reply Send Text to it without worrying about misfiring on reactions or read receipts.

dibales.ai - Instagram

Single action node for all Instagram outbound calls. Pick the Operation in the node panel:

Recipient Mode (Send Text / Send Buttons / Send Attachment)

All three Send operations expose a Recipient Mode selector with two choices:

  • User ID (Direct Message) — default. Send a regular DM addressed by IGSID. Auto-extracts from upstream DM / postback / quick-reply events.
  • Comment ID (Private Reply) — send the message as a "private reply" to a comment author. Backend posts to Meta with to.comment_id; Meta delivers the DM to the comment author. Auto-extracts from upstream instagram.comment.created events.

Use Comment ID only at the entry of a comment-triggered flow. Once the user is in DM context (after the first reply), subsequent menu / follow-up nodes should switch back to User ID mode — postback events don't carry a comment ID.

Operation: Send Text

Send a plain text DM. Recipient is auto-extracted from the upstream event by default. Optionally attach up to 13 Quick Replies — each chip becomes its own output port and fires when tapped (chips disappear after one tap).

Operation: Send Buttons

Send a button template (1–3 buttons). Each Postback button gets its own output port; Web URL buttons open a link and have no port. The node runs in one of three modes per execution:

  • SEND — initial event or an upstream Send Buttons just routed a click here. Delivers the template via the public API.
  • ROUTE — an inbound postback's encoded payload addresses this node. Emits on the matching button output with a _routed marker so downstream Send Buttons can detect "this click is for me" and fall through to SEND for the next page.
  • FORWARD — the postback belongs to a descendant Send Buttons reachable through one of this node's button outputs. Walks the workflow graph and re-emits on the right output with _forward: true so intermediate nodes (Set, IF, HTTP, etc.) can skip themselves during routing passes.

The net effect: wire button output → next Send Buttons → its button output → another Send Buttons, and the multi-level menu works without any manual postback fan-out.

Operation: Send Attachment

Send a media DM by public URL. Type picks the matching API endpoint: Image (JPG/PNG/GIF), Video (MP4), Audio (MP3/M4A/OGG), or File (PDF/document).

Operation: Reply to a Comment

Post a public reply to a comment. Comment ID auto-extracts from upstream instagram.comment.created events.

Operation: Hide / Unhide a Comment

Hide a comment from public view (only the author still sees it) or restore a previously-hidden one. Reversible — use for moderating spam, abuse, or off-topic replies. Comment ID auto-extracts from the upstream event.

Operation: Delete a Comment

Permanently delete a comment. The author is NOT notified, but the action is irreversible — prefer Hide for cases where you may want to undo. Comment ID auto-extracts from the upstream event.

Operation: Get Profile

Look up an Instagram user's public profile. Pick which fields to fetch from: name, username, profile_pic, follower_count, is_user_follow_business, is_business_follow_user, is_verified_user. Defaults to name + username.

Some fields (follower count, follow flags, verified) are only populated for business / professional accounts and may return null for personal accounts.

Operation: Check If User Is Following

Convenience wrapper around Get Profile that requests only is_user_follow_business. Has two output ports for direct branching:

  • Yes — Meta confirmed the user follows the business account.
  • No — Meta said they don't, OR returned null (e.g. personal account where the flag isn't available).

Each item still carries { user_id, is_following, raw } so you have full context downstream. If you need to distinguish "definitely not following" from "couldn't determine", use Get Profile with is_user_follow_business and inspect the field yourself.

Credential: dibales.ai API

One credential powers every action node in this package. Configure once.

| Field | Description | |---|---| | Host URL | Base URL with /v1 suffix. Default: https://public-api.dibales.ai/v1. | | API Key | Personal access token from cs.pake.ai scoped to a specific agent. |

If you also install n8n-nodes-pake-ai, both packages declare a dibales.ai API credential — they are independent (configure each, even though the values can be identical).

Deduplication

Webhook events may be delivered more than once. Each delivery carries a unique event_id in both the envelope and the X-Dibales-Event-Id header — use that as a dedup key downstream (e.g. upsert into a database).

Security

When a Webhook Secret is configured, the request body is verified against X-Dibales-Signature (format: sha256=<hex>, HMAC-SHA256). Mismatch → HTTP 401, workflow does not run.

Development

npm test           # run Jest unit tests
npm run dev        # tsc watch
npm run build      # tsc + copy SVG assets