1. Opening Problem Statement
Meet Sarah, a busy customer support manager at a growing e-commerce company. Every afternoon by 4:30 PM, Sarah needs to review all unassigned tickets in their Zendesk system to ensure no customer requests go unnoticed. Manual checks are tedious, take her at least 30 minutes each day, and sometimes tickets slip through the cracks leading to delayed responses and frustrated customers. Sarah wonders if there’s a way to automate these reminders so her team can immediately see the tickets that need attention, without wasting time digging through Zendesk.
Her pain is real: wasting 30 minutes daily adds up to over 2 hours a week of manual work, and missed tickets risk customer satisfaction and potential revenue loss. She needs a simple, reliable alert that delivers fresh, actionable ticket information right where her team communicates — Slack.
2. What This Automation Does ⚙️
This n8n workflow automates the process of gathering all unassigned Zendesk tickets and posts a neatly formatted alert to a specific Slack channel every day at 4:30 PM. Here’s what happens when the workflow runs:
- Automatically triggers at 4:30 PM daily (using Cron) or on manual execution.
- Queries Zendesk for all tickets that are unassigned and not pending.
- Generates a formatted Slack message listing ticket IDs, statuses, and subjects with clickable links to the Zendesk agent interface.
- Posts the message to your chosen Slack channel to notify the support team instantly.
- Helps catch unassigned tickets early, reducing response delays and improving customer satisfaction.
- Saves over 2 hours weekly by eliminating manual ticket checks.
3. Prerequisites ⚙️
- Zendesk account with API access for ticket data retrieval 🔐
- Slack workspace with a channel ready for alerts and Slack API credentials 🔐 📢
- n8n automation platform account (cloud or self-hosted) 🔧
- Optional: Self-host n8n for free automation runs using services like Hostinger
4. Step-by-Step Guide
Step 1: Start Your Workflow with a Manual Trigger or Schedule Cron
Open n8n and add a Manual Trigger node named “On clicking ‘execute'”. This allows ad-hoc runs for testing or urgent checks. Then add a Cron node configured to trigger at 16:30 (4:30 PM) daily for automatic scheduling. Connect both triggers to the Zendesk node to start the data fetching process.
Navigation: Click “+” → Search “Manual Trigger” and “Cron” → Configure Cron to 16:30 → Connect to Zendesk node.
Outcome: You can now manually run or have automated daily execution.
Common mistake: Forgetting to set cron time to your timezone or leaving manual trigger disconnected.
Step 2: Configure the Zendesk Node to Retrieve Unassigned Tickets
Add the Zendesk node and authenticate using your Zendesk API credentials. Set the operation to “Get All” tickets and add a query parameter that filters tickets where assignee:none and status
Navigation: Add Zendesk node → Select credentials → Set operation "getAll" → Use query string: assignee:none status
Expected screen: Confirm node returns JSON data with tickets when run.
Common mistake: Not using the correct query string can lead to empty results or too many tickets.
Step 3: Format the Slack Message Using the Function Node
Add a Function node that transforms the Zendesk ticket data into a human-readable Slack message. The code loops through ticket data and builds a list that includes clickable ticket URLs formatted to open in the Zendesk agent interface, ticket ID, status, and subject.
Function code snippet (JavaScript):
// Create our Slack message
let message = "*Unassigned Tickets*nn";
for (item of items) {
message += "*<" + item.json.url.replace("api/v2","agent").replace(".json","") + "|" + item.json.id + ">* [" + item.json.status.toUpperCase() + "] - " + item.json.subject + "n";
}
return [{json: {message}}];
Effect: Generates clean message text ready for Slack posting.
Common mistake: Altering URL formatting incorrectly will break ticket link functionality.
Step 4: Post the Message to Slack
Add the Slack node and connect it to the Function node. Input your Slack API credentials and choose the target channel (e.g., "jarvis-test"). Set the text field to {{$json["message"]}} to receive the formatted message.
Navigation: Add Slack node → Authenticate → Select channel → Set text to {{$json["message"]}}.
Expected Outcome: When executed, your Slack channel receives a clear list of unassigned Zendesk tickets ready to be assigned.
Common mistake: Incorrect Slack credentials or channel names cause message failures.
5. Customizations ✏️
- Change Ticket Filter: In the Zendesk node, modify the query to include tickets by priority or specific tags, e.g.,
assignee:none priority:highto alert only on high-priority unassigned tickets. - Adjust Message Timing: Edit the Cron node to run at multiple times per day or during peak ticketing hours to keep your team continuously updated.
- Add More Ticket Details: Enhance the Function node code to also include ticket creation dates or requester names for more context.
- Notify a Different Slack Channel: Change the channel field in the Slack node to send alerts to specific teams or managers based on ticket types.
6. Troubleshooting 🔧
Problem: "Zendesk node returns no tickets"
Cause: Query filter is incorrect or no unassigned tickets exist.
Solution: Verify the Zendesk query syntax, run the query manually in Zendesk API explorer, and ensure tickets matching criteria exist.
Problem: "Slack node fails to post messages"
Cause: Invalid or expired Slack API credentials or incorrect channel name.
Solution: Reauthenticate Slack in n8n, double-check channel names, and use public channels or invite bots if necessary.
7. Pre-Production Checklist ✅
- Confirm Zendesk API credentials have sufficient permissions to read tickets.
- Test Zendesk node independently to ensure it retrieves expected tickets.
- Run the Function node with sample data to validate message format.
- Verify Slack credentials and post a test message manually from the node.
- Test manual trigger and Cron schedule runs for expected execution.
8. Deployment Guide
Activate your workflow in n8n by toggling the "Active" switch. It will now run automatically every day at 4:30 PM. Use manual trigger for occasional on-demand checks.
Monitor executions in the n8n dashboard for successful Slack postings. Set up alerting if any node failures occur to maintain ticket visibility.
9. FAQs
Q: Can I notify multiple Slack channels?
A: Yes, duplicate the Slack node and configure different channels, or use conditional logic nodes to route messages.
Q: Does this consume Zendesk API call limits?
A: Yes, each run makes API calls to Zendesk to fetch tickets. Schedule frequency accordingly.
Q: Is the ticket list updated in real time?
A: This workflow runs on schedule or manually, so the ticket list reflects the moment of execution, not live updates.
10. Conclusion
By building and deploying this n8n workflow, Sarah can now automatically get a daily digest of all unassigned Zendesk tickets posted neatly to her team’s Slack channel. This automation saves her roughly 2+ hours weekly in manual ticket checks, keeps her support team more responsive, and improves customer service quality.
Next, consider expanding this workflow with automated ticket assignments, Slack reminders for overdue tickets, or integrating other customer support tools for a unified helpdesk automation.
Take control of your support workflow and let n8n do the heavy lifting to keep your customer happiness high!