Zendesk meets Slack for always updated ticket threads
Your support conversations are split in two. The ticket lives in Zendesk, but the “quick updates” happen in Slack, and suddenly nobody knows which one is the source of truth.
This Zendesk Slack threads automation hits Support Leads first, but Customer Success and an Ops Manager end up cleaning up the same mess. You get one Slack thread per ticket, and every new Zendesk comment appears there automatically, so the team stops asking for status every hour.
Below, you’ll see exactly how the workflow behaves, what you need to run it, and what changes when ticket context finally stays in one place.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Zendesk meets Slack for always updated ticket threads
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/zendesk.svg' width='40' height='40' /></div><br/>Get ticket"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/zendesk.svg' width='40' height='40' /></div><br/>Update ticket"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>On new Zendesk ticket"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Create thread"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Create reply on existing thr.."]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code"]
n1 --> n5
n1 --> n4
n7 --> n1
n0 --> n7
n4 --> n2
n3 --> n0
end
subgraph sg1["Flow 2"]
direction LR
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Configure", pos: "b", h: 48 }
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n1 decision
class n3 api
class n7 code
classDef customIcon fill:none,stroke:none
class n0,n2,n3,n4,n5,n7 customIcon
The Problem: Ticket updates get lost in Slack
A ticket comes in. Someone pastes the link in Slack. A few replies later, the conversation becomes a mini-war room, but the actual Zendesk ticket keeps moving too. Then the customer adds a new comment, and the team misses it because they’re watching Slack, not the ticket. Or the opposite: the ticket has the details, but the person who can help only saw the Slack summary. Multiply that by a normal day’s volume and you get constant interruptions, duplicated answers, and a lot of “wait, what did the customer say?”
It adds up fast. Here’s where it breaks down in real teams.
- People ask for updates in Slack because they don’t want to open Zendesk again.
- Key context gets paraphrased, so the next handoff misses important details.
- Replies happen in the wrong place, which means the customer-facing record is incomplete.
- Someone eventually “reconciles” Slack and Zendesk, and that’s usually about an hour of tedious copying each week.
The Solution: Slack threads that mirror Zendesk ticket comments
This workflow keeps Zendesk as the system of record, while giving your team the Slack experience they actually want. When a new Zendesk ticket appears, n8n creates a dedicated message in a chosen Slack channel and treats it as the “parent” of a thread. Right after that, it writes the Slack thread identifier back into the Zendesk ticket (in a custom field you create, usually called “Slack thread ID”). From that point on, every time a customer (or agent) adds a new comment to the ticket, the workflow looks up the stored thread ID and posts the comment as a reply in the same Slack thread. No manual copying. No “which ticket was this?” guessing.
The workflow starts from a Zendesk webhook event tied to “new” tickets (and later comments). It then retrieves ticket details, decides if it needs to start a fresh Slack thread or continue an existing one, and posts the right message into Slack. Finally, Zendesk gets updated with the thread ID so the next comment lands in the same place.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team handles about 20 new tickets a day, and each one sparks at least two “any update?” moments in Slack. If someone spends roughly 5 minutes finding the ticket, summarizing it, and pasting the latest comment, that’s about 3 hours a day of pure context-switching. With this workflow, the ticket creates the Slack thread automatically, and new comments appear as replies without anyone touching them. You still discuss the fix in Slack, but the updates stop being a manual chore.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Zendesk for ticket events and ticket fields.
- Slack to create a channel thread per ticket.
- Zendesk webhook + trigger (set up in Admin Center).
Skill level: Intermediate. You’ll connect Zendesk + Slack credentials and create one Zendesk custom field to store the thread ID.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Zendesk triggers the workflow via webhook. A Zendesk trigger fires when a new ticket meets your condition (commonly “Status is New”), and it sends the ticket ID (and latest comment HTML) into n8n.
The workflow pulls full ticket context. n8n retrieves ticket details, then reshapes the data so it can decide what to do next, including reading your custom “Slack thread ID” field.
It either starts a thread or posts a reply. If the ticket has no thread ID yet, n8n posts a new Slack message in your chosen channel and treats it as the head of a thread. If a thread ID already exists, it posts the new Zendesk comment as a reply in that same thread.
Zendesk stores the thread identifier for next time. After creating the thread, n8n updates the Zendesk ticket field so every future comment routes to the right Slack thread.
You can easily modify the Slack channel and message format to match your team’s process. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
This workflow starts when Zendesk sends a webhook payload for a ticket update to Zendesk Ticket Webhook.
- Add the Zendesk Ticket Webhook node and set HTTP Method to
POST. - Set Path to
b7845b15-0a44-4be5-b513-f4f4bb8989a6. - Copy the production webhook URL from n8n and configure Zendesk to send ticket update events to this endpoint.
id and comment in the webhook body, since downstream nodes reference {{$node["Zendesk Ticket Webhook"].json["body"]["id"]}} and {{$node["Zendesk Ticket Webhook"].json["body"]["comment"]}}.Step 2: Connect Zendesk and Retrieve Ticket Details
Use Zendesk to fetch the ticket details that contain the Slack thread ID in a custom field.
- Add Retrieve Ticket Details and set Operation to
get. - Set ID to
{{$node["Zendesk Ticket Webhook"].json["body"]["id"]}}. - Credential Required: Connect your zendeskApi credentials in Retrieve Ticket Details.
Step 3: Set Up Thread Lookup and Branching
The workflow extracts the stored Slack thread ID and decides whether to reply in an existing thread or create a new one.
- In Transform Thread Lookup, keep the JavaScript as provided to read the custom field with ID
7022397804317and outputSlack Thread ID. - Configure Branch Condition to check String → Value 1 as
{{$node["Transform Thread Lookup"].json["Slack Thread ID"]}}with Operation set toisNotEmpty. - Understand the flow: Transform Thread Lookup → Branch Condition, then the true path sends to Post Thread Reply and the false path sends to Start Slack Thread.
Step 4: Configure Slack Posting and Ticket Updates
Set the Slack channel once, then post either a new thread or a reply, and store the thread ID back in Zendesk.
- In Utility: Channel Config, set Slack channel to your channel ID, e.g.
[YOUR_ID]. - Configure Start Slack Thread with Text set to
{{$node["Retrieve Ticket Details"].json["subject"]}}and Channel set to{{$node["Utility: Channel Config"].parameter["values"]["string"][0]["value"]}}. - Credential Required: Connect your slackOAuth2Api credentials in Start Slack Thread.
- Configure Post Thread Reply with Text set to
{{$node["Zendesk Ticket Webhook"].json["body"]["comment"]}}, Channel set to{{$node["Utility: Channel Config"].parameter["values"]["string"][0]["value"]}}, and Thread_ts set to{{$node["Transform Thread Lookup"].json["Slack Thread ID"]}}. - Credential Required: Connect your slackOAuth2Api credentials in Post Thread Reply.
- In Modify Ticket Record, set Operation to
update, ID to{{$node["Zendesk Ticket Webhook"].json["body"]["id"]}}, and update custom field7022397804317to{{$node["Start Slack Thread"].json["ts"]}}. - Credential Required: Connect your zendeskApi credentials in Modify Ticket Record.
Step 5: Test and Activate Your Workflow
Run a test to confirm the thread is created or replied to, and that Zendesk is updated with the Slack thread ID.
- Click Execute Workflow and send a sample Zendesk webhook payload that includes
idandcomment. - Verify that Start Slack Thread posts a new message when no thread ID exists, or Post Thread Reply replies when a thread ID is present.
- Check that Modify Ticket Record writes the Slack thread ID into custom field
7022397804317in Zendesk. - When successful, toggle the workflow to Active to enable production use.
Common Gotchas
- Zendesk credentials can expire or need specific permissions. If things break, check the connection in n8n’s Credentials and confirm your Zendesk role can read and update ticket fields.
- Slack permissions matter more than people expect. If thread creation fails, confirm the Slack app is allowed to post in the target channel and that it has chat:write (and related) scopes.
- The “Slack thread ID” field must be mapped correctly in the Zendesk update step. If replies keep starting new threads, it usually means the field name or ID isn’t the one you created in Zendesk Admin Center.
Frequently Asked Questions
About 45 minutes if you already have Zendesk admin access and a Slack channel picked.
No. You’ll mostly connect accounts and paste a webhook URL into Zendesk. The only “technical” part is creating one custom ticket field to store the Slack thread ID.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Slack and Zendesk plan limits, if your workspace is locked down.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll want to be intentional about it. The channel is typically set in the configuration step (often a “Channel Config” set node), so you can route by ticket form, brand, or group. Common customizations include posting to different Slack channels based on ticket priority, adding the requester name and subject to the thread starter, and stripping HTML from the Zendesk comment so replies read cleanly. If you need true privacy, use private channels and make sure your Slack app is invited to each one.
Usually it’s missing Slack scopes or the app simply isn’t allowed to post in that channel. Reconnect the Slack credential in n8n, then verify the app has permission to write messages and create threaded replies. If it works in one channel but not another, it’s almost always a channel access issue.
A lot, as long as your n8n plan and server can keep up.
It depends on how strict you are about “one thread per ticket.” Zapier and Make can do basic Zendesk-to-Slack posting, but threaded reply logic usually gets fiddly once you have to store and reuse a Slack thread ID on the Zendesk ticket. n8n is comfortable with that kind of branching and lookup, and self-hosting means you’re not paying more just because your ticket volume spikes. If you expect to expand the flow later (routing by group, formatting, AI summaries, escalation rules), n8n tends to stay manageable. If all you need is “post a message when a ticket is created,” then Zapier or Make may feel faster. Talk to an automation expert if you’re not sure which fits.
Once ticket threads stay updated automatically, Slack becomes a help channel again, not a place where context goes to die. Set it up, let it run, and enjoy the quiet.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.