FlowKit

Connecting Chatwoot to n8n: AI triage and suggested replies for self-hosted support

Published 5 August 2026 · 5 min read

Running customer support on Chatwoot creates a familiar trade-off: the platform centralizes live chat, email and WhatsApp beautifully into a single inbox, but it doesn't triage or prioritize anything on its own — every conversation waits its turn in arrival order, urgent or not. That's exactly the gap n8n can fill, without giving up what makes Chatwoot appealing to a self-host audience in the first place: staying fully in control of your conversational data end to end. This guide covers authentication, triggering a workflow from Chatwoot (a signed webhook, no native node), and three concrete AI use cases — triage on creation, private-note draft replies, weekly digest.

A study by Graeme McLean and Kofi Osei-Frimpong, Examining satisfaction with the experience during a live chat service encounter (Computers in Human Behavior, 2017), surveyed 302 respondents and found that perceived quality of a live-chat exchange depends heavily on the speed and relevance of the first reply — well before the issue is actually resolved. Automatic triage the moment a conversation lands acts precisely on that lever: it doesn't replace the agent, but it shortens the delay before an urgent conversation reaches the right person.

No native node: the Webhook + HTTP Request reflex

n8n ships neither a Chatwoot node nor a Chatwoot Trigger natively — only community nodes exist, with uncertain maintenance. The robust architecture, identical whether your instance is Chatwoot Cloud or self-hosted (Docker, Coolify, a VPS), comes down to two generic building blocks:

  • An n8n Webhook node to receive the events Chatwoot pushes out;
  • An HTTP Request node, with a generic Header Auth credential, to call Chatwoot's Application API the other way (read a conversation, post a note, update a label).

Authentication: access token and account ID

Chatwoot doesn't expose OAuth2 for its Application API, only a per-agent token:

  1. In Chatwoot, open Profile Settings (top-right avatar) → the Access Token tab: copy the token shown.
  2. In n8n, create a Header Auth credential with the header name api_access_token and that token as the value.
  3. Find your account_id in your Chatwoot interface URL (.../app/accounts/<account_id>/...): it appears in the path of every API call, in the form https://<your-domain>/api/v1/accounts/<account_id>/....

As with Freshdesk, create this token on a dedicated technical agent account rather than a personal one, so automated notes and updates stay traceable and don't disappear if the agent leaves the team.

Triggering a workflow: the signed Chatwoot webhook

In Chatwoot, under Settings → Integrations → Webhooks, add a new webhook by pasting your n8n Webhook node's production URL, then select which events to listen for among: conversation_created, conversation_status_changed, conversation_updated, message_created, message_updated, contact_created, contact_updated, webwidget_triggered, conversation_typing_on/off. For triage on arrival, conversation_created (or message_created filtered on message_type: incoming) is the natural entry point.

Every request is signed: an X-Chatwoot-Signature header (HMAC-SHA256, prefixed sha256=) and X-Chatwoot-Timestamp accompany the raw body. The secret tied to the webhook is shown when it's created (retrievable afterward from its edit form). A Code node placed right after the Webhook recomputes the signature from timestamp.body and compares the result against the received header before letting the execution through — the same HMAC mechanism covered in our guide on cryptographic signatures in n8n, applied here instead of trusting the URL alone (see also our general guide on securing n8n webhooks).

Use case 1 — Triage and prioritization on creation

The entry point is the conversation_created webhook, followed by an AI Agent node with a Structured Output Parser sub-node, producing a reliable classification: urgency (1 to 5), category (bug, billing, product_question, cancellation, other) and sentiment. A Switch node then routes the result to two HTTP Request calls: POST /api/v1/accounts/{account_id}/conversations/{conversation_id}/labels to apply a category label, and POST .../toggle_priority to set the priority (urgent, high, medium, low, none). An IF node fires a Slack alert when urgency >= 4. This scoring logic — the rubric and feedback loop — is covered in depth for other support platforms in our guide on AI-powered support ticket scoring and prioritization; only the write endpoints change from one tool to another.

Use case 2 — AI draft reply as a private note

Once a conversation is classified, a second AI Agent node can draft a reply based on the latest incoming message and, if you're running a RAG pack, your internal knowledge base. Post that draft as a private note via POST /api/v1/accounts/{account_id}/conversations/{conversation_id}/messages with "private": true and "message_type": "outgoing" — never private: false, which would send the message straight to the customer. An agent reviews it in the Chatwoot UI, edits if needed, then replies themselves. It's the human approval before action pattern applied to drafting rather than an irreversible action.

That human safety net isn't just theoretical caution: a study by Erik Brynjolfsson, Danielle Li and Lindsey Raymond, Generative AI at Work, published in 2025 in the Quarterly Journal of Economics, measured across more than 5,000 support agents that a generative AI assistant suggesting replies raised productivity by an average of 14% — up to 34% for the least experienced agents — without hurting customer satisfaction. The private-note draft reproduces exactly that setup.

Use case 3 — Weekly support trend digest

A weekly Schedule Trigger node fires a GET /api/v1/accounts/{account_id}/conversations call filtered on the last seven days (via the status parameter and sorted by date), followed by an AI Agent node that summarizes the dominant categories, conversations left open too long, and negative-sentiment signals detected across the week. The result goes out to a Slack channel or by email to managers — a report that takes a minute to read instead of an hour of manual triage in the UI.

Limits: what AI shouldn't do alone

Triage, drafting and the digest automate preparation, not the final call. Never wire this pipeline to send a public reply (private: false), resolve a conversation or confirm a refund without explicit human validation. And as with any API call at sustained volume, set up a dedicated Error Workflow: see our guide on error handling in n8n to avoid an urgent conversation silently disappearing after an API error or an exceeded LLM quota.

Summary

Connecting Chatwoot to n8n comes down to simple authentication (access token + account_id), an HMAC-signed webhook instead of a native trigger, and a systematic HTTP Request detour for every write operation — labels, priority, notes, messages. This signed-webhook + AI + structured output + routing architecture is exactly what the Inbox AI Pack (€79) is built for — automatic prioritization of incoming flows; if your support team also handles documents or compliance requests, the Complete FlowKit Bundle (€269 instead of €347) covers all of it at once.

FAQ

Frequently asked questions

Is there a native Chatwoot node in n8n?

No, n8n ships neither a Chatwoot node nor a Chatwoot Trigger natively. Community nodes exist, but their maintenance depends on third-party contributors. The robust, durable approach is a Webhook node to receive Chatwoot events and an HTTP Request node with the access token to call the Application API — the same reflex as for Freshdesk or any other tool without a dedicated node.

Does self-hosted Chatwoot work as well as Chatwoot Cloud with n8n?

Yes, the API and webhooks are strictly identical between the two: only the base URL changes (your self-hosted domain instead of app.chatwoot.com). That's actually the main draw for a self-host audience: customer conversations only ever pass through your own Chatwoot instance and the AI model API you choose, with no extra third-party service in between.

How do you verify an incoming webhook really came from Chatwoot and wasn't tampered with?

Chatwoot signs every webhook request with an X-Chatwoot-Signature header (HMAC-SHA256 of the timestamp plus raw body, prefixed sha256=) and an X-Chatwoot-Timestamp header. A Code node placed right after the Webhook recomputes that signature using the secret shown when the webhook was created, and compares the two values before letting the execution through — the same principle covered in our guide on HMAC signatures in n8n.

Can n8n reply directly to the customer without going through an agent?

Technically yes, by calling the message-creation endpoint with private: false, but that isn't recommended without a safeguard: a message sent that way goes out immediately, unreviewed. Reserving full automation for simple, well-tested cases (acknowledgment receipts, a fixed FAQ) and keeping human validation for everything else is the safer approach in production.

Bundle FlowKit Complet

€269