Back to Nodes

Fiwano

Last updated Jul 11, 2026

Verified n8n community nodes for the Fiwano messaging platform API (WhatsApp, Instagram, Facebook Messenger)

175 Weekly Downloads
978 Monthly Downloads

Included Nodes

Fiwano
Fiwano Trigger

Description

n8n-nodes-fiwano

n8n verified community node for Fiwano — a unified messaging API for WhatsApp, Instagram DM, and Facebook Messenger.

What is Fiwano?

Fiwano is a verified Meta Tech Provider that abstracts the complexity of WhatsApp Cloud API, Instagram Messaging API, and Facebook Messenger API into a single, consistent REST API. Connect your Meta-verified business accounts once via simple Facebook auth — no Meta developer portal, no app creation, no Meta app review.

Fiwano is a messaging API, not a full Meta platform API. It does one thing well: receive inbound messages and send replies (plus WhatsApp templates) across WhatsApp, Instagram DM, and Messenger. It deliberately stays out of comments, posts, stories, ads, and page analytics — just conversations with people.

Key benefits:

  • Official Meta APIs only — built on WhatsApp Cloud API, Instagram Messaging API and Facebook Messenger API. No browser automation, no unofficial client simulation, no account ban risk. Production-safe at any scale.
  • One API for three channels — identical request format across WhatsApp, Instagram DM, and Facebook Messenger
  • Real-time webhooks — incoming messages and delivery statuses delivered to your endpoint, HMAC-signed
  • WhatsApp template management — create, manage, and send approved templates directly from the API
  • Secure by default — tokens encrypted at rest, no message content stored on Fiwano’s side
  • Built for AI assistants, CRMs, helpdesks, and any product that needs conversational messaging at business scale.

    7-day free trial — no credit card required.

    License Tiers

    One license covers a slot bundle: 1 WhatsApp + 1 Instagram + 1 Facebook Messenger channel, with unlimited messages.

    | Tier | Monthly | Capabilities |
    |——|———|————-|
    | Starter | $12 | Text messages in/out and delivery statuses |
    | Pro | $19 | Everything in Starter + inbound media and files, outbound media via HTTPS URL (signed URLs supported), WhatsApp template management and sending |

    New accounts start with a 7-day free trial on the Pro tier (full functionality).

    Nodes

    | Node | Type | Description |
    |——|——|————-|
    | Fiwano | Action | Send messages, manage channels, check subscriptions and available slots, WhatsApp templates, contact profile enrichment, redirect URIs |
    | Fiwano Trigger | Webhook Trigger | Receive incoming messages and delivery status webhooks |

    Action node — operations

    | Resource | Operations |
    |———-|———–|
    | Message | Send Text, Send Media, Send Template (WhatsApp) |
    | Channel | Get Many, Get, Generate OAuth URL, Exchange OAuth Code, Update Webhook, Delete |
    | Media | Download (saves received file as binary data) |
    | Contact | Get Profile (Instagram, Facebook — enriches sender with name, profile picture, follower count) |
    | Template | Get Many, Get, Create, Update, Delete (WhatsApp only) |
    | Redirect URI | Get Many, Add, Delete |
    | Subscription | Get Many (subscriptions, assigned channels, available slots by channel type and tier) |

    Trigger node — events

    The trigger starts your workflow for any of these events:

    | Event | Channels |
    |——-|———|
    | message.received | WhatsApp, Instagram, Facebook |
    | message.delivered | WhatsApp, Instagram, Facebook |
    | message.read | WhatsApp, Instagram, Facebook |
    | message.sent | WhatsApp |
    | message.failed | WhatsApp |

    Filter by event type in node settings. HMAC-SHA256 signature verification is built in.

    Installation

    Fiwano is verified by n8n and can be installed directly from the n8n editor by an instance owner or admin.

    n8n app (verified community node)

    1. Open the editor canvas and open the nodes panel with + or N.
    2. Search for Fiwano.
    3. Select Fiwano under More from the community.
    4. Click Install.
    5. Add the Fiwano or Fiwano Trigger node to your workflow.

    See n8n’s verified community node installation guide for details. On n8n Cloud, installation may need to be enabled by the instance owner in the Cloud Admin Panel. On self-hosted n8n, the related community-node settings are controlled by environment variables.

    Manual install fallback

    Use manual npm installation only when the in-app verified-node installation is unavailable in your environment.

    #### Self-hosted npm

    mkdir -p ~/.n8n/nodes
    cd ~/.n8n/nodes
    npm install n8n-nodes-fiwano
    

    Restart n8n

    Self-hosted Docker

    No custom image required — install Fiwano in-app via Settings → Community Nodes (or the nodes panel above). The package is stored in the n8n data volume, so keep ~/.n8n (/home/node/.n8n in the official image) on a persistent volume and it survives restarts and upgrades.

    To bake it into a custom image instead, follow n8n’s community-node installation guide.

    Credentials

    1. Sign up at fiwano.com and create an API key in API Keys
    2. In n8n: Credentials → Add → Fiwano API → paste the key (starts with miplive)
    3. (Optional) Set a Webhook Secret on the credential to reuse one HMAC secret across all workflows — the trigger and the Exchange OAuth Code / Update Webhook operations fall back to it when their own secret field is empty.

    All Fiwano action nodes use this credential. The Fiwano Trigger node works without credentials in manual mode (it only verifies the webhook signature you configure per-channel). Add the same credential to the trigger only if you want it to auto-register its webhook on your channels — see Setting Up the Trigger.

    Connecting a Channel

    Two ways to connect a channel — pick based on whose channel it is:

  • Your own channels → the Fiwano portal UI (no code). Simplest when you just need your own WhatsApp / Instagram / Facebook in your automation.
  • Your customers’ channels → the API (the nodes below, or the Connect a Channel workflow). This embeds a “connect your channel” step into your own product, so an external client authorizes their own Meta account through your interface — they never need a Fiwano account.
  • The API flow is Facebook OAuth, run once per channel (WhatsApp number / Instagram account / Facebook Page):

    1. Add a Fiwano node → Resource: Channel → Operation: Generate OAuth URL
    – Select channel type, provide your redirect URI (must be registered via Redirect URI → Add)
    – Run the node → copy the setup_url from the output
    2. Open that URL in a browser and authorize the page(s)
    3. Add another Fiwano node → Channel → Exchange OAuth Code
    – Paste the code from the redirect URL query parameter — it is single-use and short-lived, so exchange it promptly
    – Optionally set webhookurl and webhooksecret in Additional Fields
    4. The response contains channel_id — save it for all subsequent nodes

    Alternatively, manage everything from the Fiwano portal UI.

    Setting Up the Trigger (Webhooks)

    The Fiwano Trigger node starts a workflow when a message arrives on your channel. There are two ways to wire it up.

    Option A — Automatic setup (recommended)

    Let the trigger register its own webhook on your channel(s).

    1. Add Fiwano Trigger and add your Fiwano API credential to it (needed for the auto modes — they error at activation if it’s missing)
    2. Set Webhook Auto-Setup:
    All Active Channels — wire every connected channel (WhatsApp + Instagram + Facebook) that isn’t already pointing elsewhere to this one trigger. One flow, three platforms.
    Specific Channel — register on a single Channel ID (takes it over even if it already has a webhook).
    3. Choose Event Types (these become each channel’s webhook_events)
    4. (Recommended) Set a Webhook Secret to verify incoming signatures — preferably on the credential (reused everywhere; see Credentials). The trigger’s own Webhook Secret field overrides it.
    5. Save and activate the workflow — the trigger PATCHes the channel(s) with its webhook URL, events, and secret. Deactivating clears the webhook URL again (in “All” mode, only on channels still pointing at this trigger).

    Auto-setup requires n8n’s Production URL to use HTTPS and not point to
    localhost, 127.0.0.0/8, or ::1. If n8n resolves an HTTP or loopback
    Production URL, activation stops before changing any Fiwano channel and tells
    you to configure WEBHOOK_URL, restart n8n, or use Manual setup. A domain that
    merely contains the word localhost (for example localhost.example.com) is
    not treated as localhost.

    Official Fiwano nodes identify their API calls with a non-authentication client
    marker so channel webhook changes made by auto-setup can be distinguished from
    Portal and custom API changes in the Fiwano audit log. API-key authentication is
    unchanged.

    Option B — Manual setup

    Set Webhook Auto-Setup to Manual (no credential needed on the trigger).

    1. Create a workflow, add Fiwano Trigger, choose event types (default: message.received)
    2. Save and activate the workflow — n8n assigns a permanent webhook URL
    3. Open the Fiwano Trigger node and copy its Production URL (format: https://your-n8n.example.com/webhook/)
    4. In a Fiwano node → Channel → Update Webhook, set the fields below, then execute the node once:
    channel_id — your channel
    webhook_url — the Production URL from step 3
    – Leave webhook_secret empty to auto-generate one, or provide your own
    5. The response includes webhook_secret — copy it into the Webhook Secret field in the Trigger node
    6. Re-save the workflow

    > n8n must be publicly accessible. Fiwano delivers webhooks over the internet. Local localhost won’t work — use a reverse proxy, ngrok, or n8n Cloud.

    > Event filter vs. channel subscription. The trigger’s Event Types filter is applied on the n8n side. In automatic setup it is also used as the channel’s webhook_events; in manual setup make sure the events you enable on the channel match what the trigger expects.

    > When auto-setup runs. Only on workflow activation / deactivation (and when n8n restarts active workflows) — never per message, so it adds no per-message overhead.
    >
    > – Non-destructive, and silent about it. “All Active Channels” only wires channels that aren’t already pointing somewhere else; a channel wired to another URL is left alone — and the workflow still activates without an error. So if one channel isn’t responding, check whether its webhook points elsewhere. To take a channel over deliberately, clear its webhook or use Specific Channel.
    > – Deactivating removes the webhook from the channels pointing at this trigger — it clears the webhook URL only, it does not delete the channel, messages, or any data. Fiwano keeps storing inbound messages while deactivated but won’t relay them; reactivate to resume.
    > – Clean up before removing. Deactivate the workflow (don’t just delete it, and don’t remove the credential first) so the trigger can clear the webhook. If cleanup can’t run, a channel keeps pointing at an inactive n8n URL and Fiwano will log delivery failures and email you until you clear it (via Update Webhook or the portal).
    > – Connect a new channel after activating? Re-activate the workflow so it gets wired.

    Webhook Payload Structure

    Every event from Fiwano follows the same top-level shape:

    {
      "event": "message.received",
      "channel_id": "a1b2c3d4e5f67890",
      "channel_type": "whatsapp",
      "timestamp": "2025-01-15T10:30:00Z",
      "data": { ... }
    }
    

    Key fields available in expressions after the trigger:

    | Expression | Value |
    |—|—|
    | {{ $json.channel_id }} | Channel that received the message |
    | {{ $json.channel_type }} | whatsapp / instagram / facebook |
    | {{ $json.data.from }} | Sender ID — use as recipient when replying |
    | {{ $json.data.from_name }} | Sender name (WhatsApp only; null on Instagram/Facebook) |
    | {{ $json.data.text }} | Message text (for type: text messages) |
    | {{ $json.data.type }} | text, image, audio, video, document, sticker, or unsupported |
    | {{ $json.data.media.mediaid }} | ID to download file via GET /api/v1/media/{mediaid} (Pro license) |
    | {{ $json.data.media.voice }} | true for WhatsApp voice messages (boolean, WA only; omitted for IG/FB) |
    | {{ $json.data.media.downloadurl }} | Authenticated download URL — fetch with your X-API-Key. null if download from Meta failed. Cannot be used directly as mediaurl for outbound sends — re-host the bytes first. |
    | {{ $json.data.media.mime_type }} | MIME type of the received file |
    | {{ $json.data.media.file_size }} | File size in bytes |
    | {{ $json.data.media.filename }} | Original filename (documents only; null otherwise) |
    | {{ $json.data.media.duration_ms }} | Duration in ms (audio/video only; null otherwise) |
    | {{ $json.data.media.expires_at }} | ISO 8601 expiry timestamp — file deleted after this time |
    | {{ $json.data.caption }} | Caption text attached to the media (WhatsApp) |
    | {{ $json.data.upgrade_required }} | "pro" if channel lacks a Pro license for this message |

    Sending Messages

    Text message

    Resource: Message → Operation: Send Text
    Channel ID: 
    Recipient: {{ $('Fiwano Trigger').item.json.data.from }}
    Text: Hello!
    

    WhatsApp template

    Outside the 24-hour conversation window, WhatsApp requires pre-approved templates.

    Resource: Message → Operation: Send Template
    Channel ID: channelid>
    Recipient: withoutplus>
    Template Name: order_confirmation
    Language: en_US
    Variables: {"body": ["John", "ORD-456"]}
    

    Variable format:

  • Positional (numbered {{1}}, {{2}}): {"body": ["val1", "val2"], "header": ["val"], "buttons": [{"index": 0, "value": "abc"}]}
  • Named (custom keys): {"body": {"customer_name": "John"}}
  • Leave empty if the template has no variables
  • Media message (image, audio, video, document)

    Send a media file via HTTPS URL. Requires a Pro license on the channel’s billing plan.

    Resource: Message → Operation: Send Media
    Channel ID: 
    Recipient: {{ $('Fiwano Trigger').item.json.data.from }}
    Media Type: image
    Media URL: https://my-bucket.s3.amazonaws.com/photo.jpg?X-Amz-Signature=...
    Additional Fields → Caption: Check this out!
    

    Meta fetches the file directly from Media URL — Fiwano does not download or store it.

    For non-public content, use a signed URL — S3/GCS/R2 presigned, Azure SAS, or HMAC-signed URL on your own server. Set expiry to ≥ 5 minutes. Public URLs are accessible to anyone who learns them.

    URL validation: HTTPS only, max 2048 chars, no credentials in URL (user:pass@), no private/loopback IPs. Violations return HTTP 422.

    Supported types per channel:

    | Media Type | WhatsApp | Instagram | Facebook |
    |————|———-|———–|———-|
    | image | ✓ | ✓ | ✓ |
    | audio | ✓ | ✓ | ✓ |
    | video | ✓ | ✓ | ✓ |
    | document | ✓ | ✓ | ✓ (as file) |

    Handling errors. On Meta-side failure the response carries success: false and error_code (Meta error code) — branch on it in your workflow:

    | error_code | What it means | What to do |
    |—|—|—|
    | 131052 | Meta could not download from URL | URL unreachable, expired signature, or wrong Content-Type — verify URL works in a fresh request |
    | 131053 | Format/size unsupported, or Meta rate-limited your hosting provider’s network | Retry; if persistent, use AWS S3 / GCS / Cloudflare R2 |
    | 131047, 131057 | Outside 24h window (WhatsApp) | Switch to Send Template |
    | 190, 200, 10 | Token issue | Reconnect the channel |

    > Channels without a Pro license return HTTP 402. Upgrade at fiwano.com/billing.

    Enriching Sender Profile (Instagram & Facebook)

    Instagram and Facebook webhooks do not include the sender’s name. Use Contact → Get Profile immediately after a Fiwano Trigger to fetch it:

  • Instagram: returns username, name, profilepic, followercount, isverifieduser
  • Facebook: returns firstname, lastname, profile_pic
  • Results are cached 5 minutes on Fiwano’s side
  • Not applicable for WhatsApp (name is always present in data.from_name)
  • Common Patterns

    Reply to same channel and sender:

    channelid: {{ $json.channelid }}
    recipient:  {{ $json.data.from }}
    

    Only process text messages:
    IF → $json.data.type === 'text'

    Get sender name on Instagram/Facebook:
    Add Contact → Get Profile (Channel ID: $json.channel_id, User ID: $json.data.from) immediately after the trigger.

    Filter by channel type:
    IF → $json.channel_type === 'whatsapp'

    Example Workflows

    Two ready-made flows live in the workflows/ directory. They assemble the pieces above (credential → channel → trigger → send), so you can import one and skip the manual wiring.

    | File | Description |
    |——|————-|
    | fiwano-connect-channels.json | Connect channels via the API (optional). Only needed if you onboard channels programmatically — e.g. connecting your own clients’ channels. If connecting from the Fiwano portal UI is enough for you, you don’t need this. Connects one channel at a time: pick a channel type, generate a Meta setup link, and a webhook callback auto-exchanges the returned code for a channel_id — no copy-pasting codes. |
    | fiwano-universal-auto-responder.json | Auto-reply to every message. One trigger answers every message on WhatsApp, Instagram and Facebook — echoes text, and replies to attachments with file details. Includes a sticky recipe for a full media echo. Needs at least one connected channel — connect in the portal, or with the workflow above. |

    Import (works on any n8n, including Cloud): create a new workflow → ⋮ menu → Import from File → select the .json.

    After importing, finish setup before the workflow will run:
    1. Add your Fiwano API credential to the nodes that use it (see Credentials).
    2. For fiwano-connect-channels.json, add the OAuth-callback node’s Production URL to your whitelisted redirect URIs (Redirect URI → Add, or in the portal).
    3. Activate the workflow — the trigger and the OAuth-callback webhook only fire while the workflow is active.

    On self-hosted n8n you can also import from the command line, run on the machine where n8n is installed (the --input path is relative to your current directory; the workflow is imported inactive — activate it in the UI afterwards):

    n8n import:workflow --input=workflows/fiwano-universal-auto-responder.json
    

    Links

  • fiwano.com — product page & free trial
  • API Documentation
  • Fiwano Cookbook — step-by-step guide for integrating the API directly in code (handy for AI coding agents)
  • Portal

License

MIT — © Roman Babakin / rmnbb.com