GuidesPublished October 28, 2026

n8n for customer support: 7 workflows that connect your help desk to the rest of your tools

7 n8n workflows that carry help desk events into Slack, Google Sheets, your CRM and your follow ups, each with its trigger, its nodes and its result. Plus the parts that break in practice: signature checks, retries, execution costs and the direction a webhook can't go.

Deskwoot Team

10 min read
Contents
  1. The setup every workflow shares
  2. The 7 workflows at a glance
  3. Checking the signature
  4. Retries, timeouts and duplicate events
  5. n8n Cloud or self hosted
  6. Which Deskwoot plan covers which workflow

A customer rates your support 1 out of 5 on Sunday night. You see it on Thursday, when someone finally opens the reports. By then the chance to fix it has passed.

n8n closes gaps like this. It takes an event from your help desk and carries it to the place where someone will act on it: a Slack channel, a spreadsheet, your CRM, a follow up email. Below are 7 workflows a small support team can build, each with its trigger, the nodes in between and the result. The examples use Deskwoot's webhook events; the patterns work with any help desk that sends webhooks.

One thing up front: a webhook only sends events out of your help desk. Changing something back in it (assigning, labelling, resolving) needs an API. Workflow 7 covers that.

The setup every workflow shares

In n8n, add a Webhook node as the first step. Set HTTP Method to POST and Respond to Immediately, so n8n answers at once and works afterwards. Leave Authentication on None: Deskwoot sends no Basic auth and no header with a fixed value, so any other setting rejects every event. Copy the Production URL.

In Deskwoot, an administrator opens Settings > Webhooks (the n8n card under Settings > Integrations has an Open Webhooks button that leads there), clicks Add Webhook, pastes the URL under Endpoint URL, ticks only the events this workflow needs and clicks Create Webhook. Then publish the workflow in n8n.

The step people miss is the URL. n8n's Webhook node docs explain that the Test URL listens only while you click "Listen for test event", and the Production URL listens once the workflow is published. Paste the Test URL into your help desk and everything works while you watch, then goes silent. Production runs show up in the Executions tab, not on the canvas.

Each event is a POST with a JSON body (event, data, timestamp, accountId); the API docs list the fields, and our n8n help guide shows the setup click by click. Give each workflow its own webhook, so a broken one is easy to find.

The 7 workflows at a glance

WorkflowDeskwoot eventn8n nodes in betweenResult
1. Route new conversationsConversation createdSwitch, SlackEach team sees its own new chats
2. Alert on risky wordsMessage createdFilter, Slack or TelegramThe owner hears of a chargeback at once
3. Log CSAT ratingsCSAT submittedGoogle Sheets, If, SlackEvery rating in a sheet, bad ones flagged
4. New customers into the CRMConversation created, Contact created, Contact updatedSwitch, Edit Fields, If, HubSpotEveryone who writes in exists in the CRM
5. Ping the assigned teammateConversation assignedIf, Code, Telegram or SlackA direct message where that person looks
6. Follow up after resolvingConversation resolvedRemove Duplicates, Wait, Google Sheets, GmailOne review request 3 days later
7. Tag VIPs in the help deskConversation createdHubSpot, If, HTTP RequestVIP conversations get a label and high priority

1. Route new conversations to the right team channel

Conversation created carries the conversation (with its inboxId) and the customer's name and email. A Switch node on data.conversation.inboxId gets one output per inbox, each followed by a Slack node with Send a message: billing questions to #billing, the WhatsApp inbox to #store. Each inbox's ID appears in the first execution after a test message.

Check first whether you need this. Deskwoot's own Slack integration works on every plan and already posts new conversations, assignments, CSAT ratings and more to the channels you pick. n8n earns its place when you need a rule those alerts lack, or Microsoft Teams or Discord instead of Slack.

2. Alert the owner when a message mentions a chargeback

On Message created, a Filter node keeps messages where data.message.messageType is INCOMING, data.message.private is false and data.message.content matches a pattern such as refund|chargeback|lawyer. A Slack or Telegram node sends the text to the owner while the conversation is still open.

This event eats executions. It fires for every message in both directions, your team's replies and private notes included. 40 conversations a day with 6 messages each make 240 runs a day, about 7,200 a month, and n8n counts each run even when the Filter drops it.

3. Send CSAT ratings to Google Sheets and flag the bad ones

CSAT submitted holds rating (1 to 5), feedback (the comment, or empty), conversationId, contactId and surveyId. A Google Sheets node with Append Row writes one line per rating, with the event's timestamp as the date. An If node catches ratings of 2 or lower and sends the comment to the team lead in Slack.

The sheet pays off when you want ratings next to data Deskwoot's reports don't have, such as order value. CSAT surveys come with the Business plan and up; the CSAT guide explains when they go out, and our guide to feedback surveys covers the survey types.

4. Put every new customer into your CRM

Send Conversation created, Contact created and Contact updated to one webhook. A Switch node splits them by event, an Edit Fields node on each output maps them to the same fields (name, email, Deskwoot contact ID), an If node drops entries without an email, and the HubSpot node's Create/Update a contact writes them. It matches on email, so a returning customer doesn't become a second record.

Contact created fires when a contact is saved on the Contacts page or created through the API; a stranger writing in for the first time shows up as Conversation created. That payload has no phone number, and WhatsApp or SMS customers often have no email yet. They reach the CRM once a teammate adds an email, which fires Contact updated.

5. Ping the assigned teammate where they actually look

Conversation assigned holds conversationId, assigneeId and previousAssigneeId, and assigneeId is empty when a conversation was unassigned. An If node skips those. A Code node looks the teammate up in a small table of Deskwoot user IDs and Telegram chat IDs (or Slack member IDs), and a Telegram or Slack node messages that person.

The event fires when a teammate or the API assigns or transfers a conversation. Round robin and automation rules assign without sending it, so in a team that hands out new chats by round robin this workflow covers manual assignments and transfers only.

The event carries IDs, not names. To build the table, assign one test conversation to each teammate and read assigneeId in the Executions tab.

6. Start a follow up 3 days after a conversation is resolved

Conversation resolved is thin: conversationId and who resolved it. So let workflow 4 also write conversationId and email into a Google Sheet, and look the email up here.

The chain: Remove Duplicates (Remove Items Processed in Previous Executions, Value Is New, on conversationId), so a conversation resolved twice gets one follow up; Wait (After Time Interval, 3 days); Google Sheets to find the email; Gmail to send it. A paused workflow stores its data in the database, according to the Wait node docs, so a pause of days is fine. With CSAT surveys on, Deskwoot already asks for a rating at every resolve, so ask for a public review or check that the repair held.

7. Tag VIP customers back in the help desk (needs the REST API)

On Conversation created, a HubSpot node with Search contacts looks up the email, an If node checks a property you trust (say, lifecycle stage "customer"), and an HTTP Request node writes back to https://deskwoot.com/api/v1: a POST to /conversations/{id}/labels with your "vip" label's ID, and a PATCH to /conversations/{id} with "priority": "HIGH" or the account manager's assigneeId. A few seconds after it arrives, the conversation carries the label and high priority.

This needs a REST API token from Settings > API Tokens (scope conversations:write). The REST API is part of the paid Enterprise plan; the 7 day trial includes no API tokens. If you only want n8n to answer customers, a Custom Webhook bot (Startup and up) is enough.

Checking the signature

Deskwoot signs every event. The x-deskwoot-signature header holds sha256= plus the hex HMAC SHA256 of the raw body, keyed with the webhook's secret. In n8n the check takes 3 nodes:

  1. In the Webhook node, turn on Raw Body, so the exact bytes arrive as binary data.
  2. Add a Crypto node: action Hmac, Binary File on with the Webhook node's binary property, Type SHA256, Encoding HEX, the secret in a Crypto credential.
  3. Add an If node that compares sha256= plus the result with the header, and route failures to a dead end.

Hash the raw bytes; parsed JSON turned back into text can have different bytes. For a constant time comparison, use crypto.timingSafeEqual in a Code node, as a worked example on the n8n forum suggests. n8n Cloud makes the crypto module available in the Code node; on a self hosted n8n you enable it first, as the Code node docs explain.

The catch: the Deskwoot dashboard never shows a webhook's secret. Deskwoot returns it once, when you create the webhook through the REST API, which again means Enterprise. A webhook made under Settings > Webhooks is still signed, but without the secret you can't check it, so protect the URL. n8n gives every new Webhook node a random path by default. Keep the Production URL out of screenshots and shared documents, and if it leaks, change the path in n8n and update the URL in Deskwoot with Edit.

Retries, timeouts and duplicate events

Deskwoot waits up to 10 seconds for an answer. After an error, a timeout or a failed connection it tries once more 5 seconds later with the same body and headers, and then the event is gone. With Respond set to Immediately, a slow Google Sheets call never causes a retry. 2 cases remain:

  • n8n is unreachable for more than a few seconds (an update or a restart). Those events are lost, so update a self hosted n8n outside opening hours. On Enterprise you can catch up by listing conversations through the REST API.
  • An event arrives twice, because n8n got it but answered too late. The retry has the same body and timestamp, so a Remove Duplicates node on event, timestamp and conversationId (or surveyId for ratings) drops the copy. Put it in front of anything that writes rows or sends messages.

n8n Cloud or self hosted

n8n Cloud needs no server and is priced by executions. n8n's pricing page counts one run of the whole workflow as one execution, however many steps it has, and lists 2,500 executions a month on the Starter plan (checked October 2026). Every event you send starts a run, so tick only the events you need in Deskwoot. Workflow 2 alone can use up a Starter plan.

Self hosted n8n is free in its Community edition, according to n8n's own comparison, which also puts maintenance on you. Deskwoot sends only to public HTTPS addresses, so n8n on a laptop or behind the office router receives nothing. Behind a reverse proxy, set the webhook URL variable from n8n's hosting docs, or the node shows an internal address as its Production URL.

Either way, n8n keeps past executions, and with them customer names, emails and message text. Give access to n8n only to people who may read your help desk.

Which Deskwoot plan covers which workflow

What n8n should doWhat Deskwoot usesPlan
Receive events (workflows 1 to 6)A webhook under Settings > WebhooksStartup and up, trial included
Receive CSAT ratings (workflow 3)CSAT surveysBusiness and up
Answer customers as a botA Custom Webhook bot under Settings > BotsStartup and up
Write back (workflow 7) or get a secret to check signaturesThe REST API with a token from Settings > API TokensEnterprise, paid (not in the trial)

Seats cost $4 on Startup, $8 on Business and $12 on Enterprise per agent a month, or $3.20, $6.40 and $9.60 billed yearly; the free Hacker plan sends no webhooks. Details are on the pricing page, and the webhooks guide lists every event.

For most small teams the place to start is workflow 3: one event, 3 nodes, and the next bad rating reaches the team lead the same day. Every new Deskwoot workspace starts with a 7 day trial that includes webhooks and CSAT surveys, so you can connect your n8n before you pay anything.

Share this article

Also available in:DeutschPortuguês

Frequently asked questions

The short answers are here. For anything else, ask Fynn below.

Can I connect n8n to my help desk without a ready made integration?

Yes, if your help desk sends webhooks. Add a Webhook node in n8n, copy its Production URL into the help desk's webhook settings and publish the workflow. In Deskwoot that is Settings > Webhooks, on the Startup plan and up, and the 7 day trial includes it.

What is the difference between the Test URL and the Production URL in n8n?

The Test URL only listens while you click "Listen for test event" in the editor, and the incoming data shows on the canvas. The Production URL listens once the workflow is published, and its runs appear in the Executions tab. Your help desk needs the Production URL, or events stop the moment you close the editor.

Does n8n Cloud work with help desk webhooks, or do I have to self host?

n8n Cloud works with the Webhook node, and so does n8n on your own server. Cloud plans are priced by executions, and every event you send starts one, so tick only the events a workflow needs. A self hosted n8n needs a public HTTPS address, because Deskwoot does not send to private or internal addresses.

How do I verify a webhook signature in n8n?

Turn on Raw Body in the Webhook node, compute an HMAC SHA256 of the raw bytes with the Crypto node (Hmac action, Binary File on, Encoding HEX) and compare sha256= plus the result with the signature header in an If node. For Deskwoot the header is x-deskwoot-signature. You need the webhook's secret, which Deskwoot returns once when the webhook is created through the REST API on Enterprise; the dashboard never shows it.

Can n8n reply to customers or update conversations in Deskwoot?

Not through the webhook, which only sends events out. To let n8n answer customers as a bot, add a Custom Webhook bot under Settings > Bots (Startup plan and up). To assign, label, resolve or edit contacts from n8n, call the REST API with the HTTP Request node, which needs a paid Enterprise plan.

What happens if n8n is down when an event is sent?

Deskwoot waits up to 10 seconds, tries once more after 5 seconds, and then drops the event. Events from a longer outage are lost. On Enterprise you can catch up by listing conversations through the REST API.

Browse all articles

Deskwoot interactive demo