FlowKit

Connecting Crisp to n8n: automatically sort and route chat conversations

Published 30 August 2026 · 6 min read

A Crisp widget installed on an e-commerce or SaaS site quickly fills up with dozens of conversations a day, all sitting in the same queue with no distinction between a minor shipping question and a blocking bug for a premium customer. Crisp does offer a plan with built-in AI, but its cost climbs with volume and gives no access to the sorting logic itself. This guide shows how to wire n8n into Crisp through its Website Hooks and REST API, to classify each incoming conversation and route urgent ones to Slack, without relying on Crisp's own proprietary AI tier.

Two ways to connect Crisp to n8n

n8n has no native Crisp node (n8n-nodes-base). There is a community node, n8n-nodes-crisp-api, installable on a self-hosted instance from Settings > Community Nodes — but since it hasn't earned the "verified" badge, it stays unavailable on n8n Cloud; our guide to community nodes covers that distinction and the security risks worth knowing before installing one.

This guide therefore takes the path that works everywhere, self-hosted and Cloud alike, and stays the easiest to audit: a Webhook Trigger to receive Crisp's events, and the HTTP Request node to call the REST API back. If you haven't settled on a hosting choice yet, our self-hosted vs. Cloud comparison helps weigh that criterion against the others.

Generating and securing the API credentials

Crisp offers two credential types:

  • Website Token: generated in one click from a workspace's settings, the fastest option for a single site.
  • Plugin Token: an identifier/key pair created from the Crisp Marketplace, letting you call the API across several workspaces with the same credential — the right choice for an agency centralizing support for several clients on one n8n instance, on the same principle described in our guide to hosting n8n for a multi-client agency.

Either way, authentication runs through an Authorization: Basic header carrying the base64-encoded pair (identifier:key), plus an X-Crisp-Tier: plugin header for a Plugin Token. Create an n8n credential of type "Header Auth" rather than pasting the token in plain text into every HTTP Request node: our guide to securing API credentials covers this practice, valid for any third-party service called without a dedicated node.

Configuring the Website Hook on the Crisp side

In Settings > Website Settings > Advanced Configuration > Webhooks for your workspace, add an endpoint and select the message:send event — the one fired only when a visitor sends a message (as opposed to message:received, fired on the operator side, which you should leave unchecked here to avoid unnecessary noise). Paste your n8n Webhook Trigger's test URL to validate delivery, then swap it for the production URL once the workflow is active.

Crisp signs every call with the X-Crisp-Request-Timestamp and X-Crisp-Signature headers (HMAC-SHA256 of the timestamp;json_body pair, computed with the secret shown when the webhook was created). Verify that signature in a Code node before processing anything: our guide to securing n8n webhooks covers the general logic, directly transposable here to make sure a call really comes from Crisp and not from a third party that guessed the URL.

Building the sorting workflow

The pipeline reuses a structure already proven on this blog for support ticket scoring, applied here to the chat's real-time stream instead of a ticket queue:

  1. Webhook Trigger — receives every message:send event; an IF node filters on data.type === "text" to skip status events (visitor typing, file sent) that carry no content to classify.
  2. AI node — sends the message text, plus the conversation's recent history if available, to an LLM with a structured output (urgency, category, one-sentence summary) on the model described in our guide to the Structured Output Parser.
  3. Switch — routes by urgency: a message classified as critical goes to Slack, on the pattern already documented for human approval via Slack; the rest are simply tagged so the support team finds them already sorted inside Crisp.

Replying or tagging through the REST API

Two endpoints cover most use cases. To silently tag a conversation without notifying the visitor — useful for classifying by urgency or topic without touching the exchange's content — a PATCH call on /website/{website_id}/conversation/{session_id}/meta with a segments array (e.g. ["urgent", "billing"]) is enough, on the same principle as the segments described in Crisp's own documentation.

To send a message, the endpoint is POST /website/{website_id}/conversation/{session_id}/message, with type, from: "operator" and content. Reserve that call for very narrow, already-validated cases (an automatic reply to a recurring FAQ question): on a live chat, a poorly calibrated reply is visible to the visitor within seconds, unlike an email draft a human reviews before sending as described in our guide to AI email reply drafts. By default, this workflow should tag and alert rather than reply on a human's behalf.

Concrete use cases

  • E-commerce: a message mentioning "refund," "lost package," or an obviously frustrated tone gets tagged urgent and pushes an immediate Slack alert, while product-availability questions wait their turn without bothering anyone.
  • SaaS: a message mentioning a technical error or a service outage triggers an alert to the on-call channel, separate from the general support channel — the same queue-separation logic as in our guide to capping an AI agent's cost with a circuit breaker, applied here to criticality instead of cost.
  • Multi-client agency: a single n8n workflow, parameterized by website_id, handles several clients' Crisp workspaces with the Plugin Token, feeding a different Slack channel per client.

Pitfalls to avoid

  • Also checking message:received in the Website Hook: it doesn't create an infinite loop (the API replies as the operator, without re-triggering message:send), but it doubles the webhook calls to process for nothing if only the visitor's message matters to you.
  • Skipping signature verification: a public webhook endpoint with no X-Crisp-Signature check accepts any call that guesses its URL — a risk never worth taking, even on a simple prototype.
  • Not handling retries: like any webhook, a Crisp call can be resent after a timeout on the n8n side; our guide to webhook idempotence avoids tagging or alerting twice on the same conversation.
  • Over-calling the REST API: Crisp's endpoints are subject to quotas; batch segment updates rather than chaining several PATCH calls for the same conversation.

What the research says

Automating triage instead of leaving it to arrival order isn't just a team convenience. A study by Ya-Ling Wang and Chi-Wen Lo, "The effects of response time on older and young adults' interaction experience with Chatbot" (2025), shows that the effect of response time on the experience varies by user profile — younger users strongly value instantaneity, while older users are less penalized by a slight delay. That's an argument for automatic triage that speeds up genuinely urgent cases without forcing an instant reply on the entire flow, rather than a chatbot that would reply fast but poorly to everyone. On the automation itself, a study by Ahmed Raza Amir and Syed Muhammad Atif, "Evaluating Workflow Automation Efficiency Using n8n: A Small-Scale Business Case Study" (2026), measured, on a comparable notification pipeline, an execution time cut by more than 150x compared to equivalent manual processing, with zero observed error rate — the kind of gain to expect here on sorting a steady chat stream.

Going further

The urgency-based sorting and Slack alerting described here reuse the architecture already shipped in the Inbox AI Pack (€79), whose scoring and digest workflows adapt without a rewrite to a Crisp conversation stream instead of a mailbox. If your priority is instead to document and prove compliance for this kind of processing, the Compliance & Audit Pack (€149) covers the matching audit trail, and the Complete FlowKit Bundle (€269 instead of €347) bundles all three for anyone who wants to cover both needs at once.

FAQ

Frequently asked questions

Do I need a native Crisp node or the HTTP Request node?

n8n has no native Crisp node (n8n-nodes-base). There is a community node, n8n-nodes-crisp-api, but it doesn't carry the 'verified' badge: installable on a self-hosted instance, not on n8n Cloud. The HTTP Request node, combined with Crisp's Website Hooks, works everywhere and is enough for triggering, calling the API, and replying.

Website Token or Plugin Token: which one should I use?

A Website Token is generated in one click from a single workspace's settings: the fastest option for a single site. A Plugin Token (an identifier/key pair) is created from the Crisp Marketplace and lets you call the API across several workspaces with the same n8n credential — the right pick for an agency running support for several Crisp clients from one n8n instance.

Does the workflow reply to visitors on its own, with a risk of mistakes?

It doesn't have to, and this guide recommends starting without it: routing and tagging conversations by urgency already delivers most of the value, without an LLM ever talking directly to the visitor. Auto-sending a reply through the API stays possible for very narrow cases (a recurring FAQ question), but should remain a case-by-case exception rather than the default behavior.

Bundle FlowKit Complet

€269