This workflow corresponds to n8n.io template #7516 — we link there as the canonical source.
This workflow follows the OpenAI → Slack recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "6d945286-6889-45c1-9f64-be5c704f9b87",
"name": "Zendesk Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"position": [
660,
40
],
"parameters": {
"path": "zendesk-YOUR_OPENAI_KEY_HERE",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1
},
{
"id": "52dc8682-3625-414b-a298-e5c9a2516d4e",
"name": "Workflow Instructions",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
-200
],
"parameters": {
"color": 4,
"width": 432,
"height": 464,
"content": "## \ud83c\udfab Zendesk AI Ticket Prioritization Workflow\n\n**What this workflow does:**\nAutomatically analyzes incoming Zendesk tickets using OpenAI to determine urgency levels and sends Slack alerts for high-priority issues.\n\n**How it works:**\n1. Receives webhook from Zendesk when new tickets are created\n2. Extracts ticket content and customer information\n3. Uses OpenAI GPT to analyze urgency based on keywords, sentiment, and context\n4. Assigns priority scores (1-5 scale)\n5. Updates ticket in Zendesk with priority tags\n6. Sends Slack notifications for urgent tickets (priority 4-5)\n7. Assigns tickets to appropriate team members\n\n**Setup Requirements:**\n- Zendesk account with API access\n- OpenAI API key\n- Slack webhook URL\n- Configure the webhook URL in your Zendesk triggers\n\n**Customization:**\n- Modify priority scoring logic in the Code node\n- Adjust Slack notification thresholds\n- Add additional integrations (email, Teams, etc.)\n- Customize urgency keywords and phrases\n\n**Use Cases:**\n- Customer support teams\n- SaaS companies\n- Service businesses\n- Help desk automation"
},
"typeVersion": 1
},
{
"id": "16a1998f-dc1a-42a2-8a37-996f34172dee",
"name": "Extract Data Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
680,
-200
],
"parameters": {
"width": 280,
"content": "\ud83d\udcdd **Step 1: Extract Ticket Data**\n\nExtracts key information from the Zendesk webhook:\n- Ticket ID and subject\n- Customer details\n- Ticket content/description\n- Current priority\n- Created timestamp\n\nThis data will be used by the AI for analysis."
},
"typeVersion": 1
},
{
"id": "58eef0e2-c7e3-4fee-a00c-0bd17aff3c2f",
"name": "Extract Ticket Data",
"type": "n8n-nodes-base.set",
"position": [
900,
40
],
"parameters": {
"options": {}
},
"typeVersion": 3.2
},
{
"id": "9ffd84f6-7b57-413f-8863-f236304fad87",
"name": "AI Analysis Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1000,
-200
],
"parameters": {
"width": 280,
"height": 180,
"content": "\ud83e\udd16 **Step 2: AI Analysis**\n\nUses OpenAI GPT-4 to analyze ticket urgency:\n- Sentiment analysis\n- Keyword detection\n- Context understanding\n- Priority scoring (1-5)\n\nThe AI considers factors like:\n- Emotional language\n- Business impact keywords\n- Technical severity indicators\n- Customer tier/importance"
},
"typeVersion": 1
},
{
"id": "7d0a3e7c-2634-4fbc-9706-02bdac34e80c",
"name": "Analyze Ticket with OpenAI",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1140,
40
],
"parameters": {
"resource": "chat"
},
"typeVersion": 1.3
},
{
"id": "e537d024-ce4d-480e-bfc1-33ff656b3f64",
"name": "Process Response Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1300,
-200
],
"parameters": {
"width": 280,
"content": "\u2699\ufe0f **Step 3: Process AI Response**\n\nParses the AI response and extracts:\n- Urgency score (1-5)\n- Priority classification\n- Key urgency indicators\n- Recommended response time\n\nAlso determines if Slack notification is needed (score 4+)."
},
"typeVersion": 1
},
{
"id": "eb826f0a-1d6e-4e0f-ad8f-91da5fcfb442",
"name": "Process AI Analysis",
"type": "n8n-nodes-base.code",
"position": [
1380,
40
],
"parameters": {
"jsCode": "// Parse OpenAI response and process urgency data\nconst response = $input.first();\nlet aiAnalysis;\n\ntry {\n // Extract JSON from AI response\n const content = response.json.choices[0].message.content;\n aiAnalysis = JSON.parse(content);\n} catch (error) {\n // Fallback if JSON parsing fails\n aiAnalysis = {\n urgency_score: 3,\n reasoning: \"Failed to parse AI response, using default priority\",\n suggested_priority: \"normal\",\n key_indicators: [],\n estimated_impact: \"medium\",\n recommended_response_time: \"4\"\n };\n}\n\n// Determine if Slack notification needed (urgency 4 or 5)\nconst needsSlackNotification = aiAnalysis.urgency_score >= 4;\n\n// Map urgency score to Zendesk priority\nlet zendeskPriority;\nswitch(aiAnalysis.urgency_score) {\n case 5:\n zendeskPriority = \"urgent\";\n break;\n case 4:\n zendeskPriority = \"high\";\n break;\n case 3:\n zendeskPriority = \"normal\";\n break;\n case 2:\n zendeskPriority = \"low\";\n break;\n default:\n zendeskPriority = \"normal\";\n}\n\n// Prepare output data\nreturn {\n json: {\n ticket_id: $('Extract Ticket Data').first().json.ticket_id,\n ticket_subject: $('Extract Ticket Data').first().json.ticket_subject,\n customer_name: $('Extract Ticket Data').first().json.customer_name,\n customer_email: $('Extract Ticket Data').first().json.customer_email,\n urgency_score: aiAnalysis.urgency_score,\n ai_reasoning: aiAnalysis.reasoning,\n suggested_priority: aiAnalysis.suggested_priority,\n zendesk_priority: zendeskPriority,\n key_indicators: aiAnalysis.key_indicators,\n estimated_impact: aiAnalysis.estimated_impact,\n recommended_response_time: aiAnalysis.recommended_response_time,\n needs_slack_notification: needsSlackNotification,\n analysis_timestamp: new Date().toISOString()\n }\n};"
},
"typeVersion": 2
},
{
"id": "c079c4a4-ec70-4738-86d5-cef2c18cbfdb",
"name": "Update Zendesk Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1620,
-200
],
"parameters": {
"width": 280,
"height": 140,
"content": "\ud83c\udff7\ufe0f **Step 4: Update Zendesk**\n\nUpdates the ticket with:\n- New priority level\n- AI analysis tags\n- Priority reasoning in private note\n\nUses Zendesk API to maintain audit trail."
},
"typeVersion": 1
},
{
"id": "9b212cff-afe1-48e4-877b-b46a0a77b676",
"name": "Update Zendesk Ticket",
"type": "n8n-nodes-base.zendesk",
"position": [
1620,
40
],
"parameters": {
"id": "={{ $json.ticket_id }}",
"operation": "update",
"updateFields": {
"tags": "ai-analyzed,urgency-{{ $json.urgency_score }},{{ $json.estimated_impact }}-impact"
}
},
"typeVersion": 1
},
{
"id": "e93dfce0-fbd7-42be-abdb-e2001be5fb3f",
"name": "Check if High Priority",
"type": "n8n-nodes-base.if",
"position": [
1860,
40
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "needs_notification",
"operator": {
"type": "boolean",
"operation": "equal"
},
"leftValue": "={{ $json.needs_slack_notification }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "12cb1668-828c-4e99-b204-d5cdaa663d1f",
"name": "Slack Notification Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1920,
-180
],
"parameters": {
"width": 280,
"content": "\ud83d\udd14 **Step 5: Slack Notification**\n\nSends urgent ticket alerts to Slack when:\n- Urgency score is 4 or 5\n- High business impact detected\n- Critical keywords found\n\nIncludes ticket details and direct links for quick access."
},
"typeVersion": 1
},
{
"id": "7be5729c-1b6b-4f0b-a9e6-1092a9106529",
"name": "Send Urgent Alert to Slack",
"type": "n8n-nodes-base.slack",
"position": [
2060,
0
],
"parameters": {
"text": "\ud83d\udea8 **HIGH PRIORITY TICKET ALERT**",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "name",
"value": "={{ $('Configuration Variables').first().json.SLACK_CHANNEL }}"
},
"otherOptions": {}
},
"typeVersion": 2.1
},
{
"id": "d563ed0f-46be-4fb4-9c1a-3bd42fe949bc",
"name": "Response Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
2260,
-180
],
"parameters": {
"width": 280,
"content": "\u2705 **Step 6: Completion Response**\n\nSends success response back to Zendesk webhook confirming:\n- Ticket processed successfully\n- Priority assigned\n- Notifications sent (if applicable)\n\nThis ensures proper webhook completion."
},
"typeVersion": 1
},
{
"id": "b56c81c7-b312-4f00-9903-8abefca85de0",
"name": "Webhook Response - Success",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2300,
0
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "{\n \"status\": \"success\",\n \"message\": \"Ticket {{ $('Extract Ticket Data').first().json.ticket_id }} processed successfully\",\n \"urgency_score\": {{ $json.urgency_score }},\n \"priority_assigned\": \"{{ $json.zendesk_priority }}\",\n \"slack_notification_sent\": {{ $json.needs_slack_notification }},\n \"processed_at\": \"{{ $json.analysis_timestamp }}\"\n}"
},
"typeVersion": 1
},
{
"id": "7138e8b6-547e-4001-bb22-fef7d3f3ff6c",
"name": "Webhook Response - Normal",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2300,
120
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "{\n \"status\": \"success\",\n \"message\": \"Ticket {{ $('Extract Ticket Data').first().json.ticket_id }} processed - normal priority\",\n \"urgency_score\": {{ $json.urgency_score }},\n \"priority_assigned\": \"{{ $json.zendesk_priority }}\",\n \"slack_notification_sent\": false,\n \"processed_at\": \"{{ $json.analysis_timestamp }}\"\n}"
},
"typeVersion": 1
},
{
"id": "3ea300f9-6418-4f7e-9974-4b5371e6889c",
"name": "Configuration Variables",
"type": "n8n-nodes-base.set",
"position": [
660,
240
],
"parameters": {
"options": {}
},
"typeVersion": 3.2
},
{
"id": "8382f894-763b-4e22-84b9-40dcbaec5195",
"name": "Setup Instructions",
"type": "n8n-nodes-base.stickyNote",
"position": [
900,
240
],
"parameters": {
"color": 6,
"width": 400,
"height": 320,
"content": "\u2699\ufe0f **CONFIGURATION REQUIRED**\n\n**Before using this workflow:**\n\n1. **Set up credentials:**\n - OpenAI API key\n - Zendesk API credentials\n - Slack API token\n\n2. **Update Configuration Variables node:**\n - ZENDESK_SUBDOMAIN: your Zendesk subdomain\n - SLACK_CHANNEL: channel for urgent alerts\n - URGENCY_THRESHOLD: minimum score for alerts (1-5)\n - DEFAULT_ASSIGNEE: fallback assignee email\n\n3. **Configure Zendesk webhook:**\n - Copy the webhook URL from the trigger node\n - Add to Zendesk Admin > Settings > Extensions\n - Set trigger conditions for new tickets\n\n4. **Test the workflow:**\n - Create a test ticket in Zendesk\n - Verify AI analysis and Slack notifications work\n - Check that priorities are updated correctly"
},
"typeVersion": 1
}
],
"connections": {
"Extract Ticket Data": {
"main": [
[
{
"node": "Analyze Ticket with OpenAI",
"type": "main",
"index": 0
}
]
]
},
"Process AI Analysis": {
"main": [
[
{
"node": "Update Zendesk Ticket",
"type": "main",
"index": 0
}
]
]
},
"Update Zendesk Ticket": {
"main": [
[
{
"node": "Check if High Priority",
"type": "main",
"index": 0
}
]
]
},
"Check if High Priority": {
"main": [
[
{
"node": "Send Urgent Alert to Slack",
"type": "main",
"index": 0
}
],
[
{
"node": "Webhook Response - Normal",
"type": "main",
"index": 0
}
]
]
},
"Configuration Variables": {
"main": [
[
{
"node": "Extract Ticket Data",
"type": "main",
"index": 0
}
]
]
},
"Zendesk Webhook Trigger": {
"main": [
[
{
"node": "Configuration Variables",
"type": "main",
"index": 0
}
]
]
},
"Analyze Ticket with OpenAI": {
"main": [
[
{
"node": "Process AI Analysis",
"type": "main",
"index": 0
}
]
]
},
"Send Urgent Alert to Slack": {
"main": [
[
{
"node": "Webhook Response - Success",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Customer support teams, SaaS companies, and service businesses that need to quickly identify and respond to urgent customer issues. Perfect for organizations handling high ticket volumes where manual prioritization creates delays and missed critical issues.
Source: https://n8n.io/workflows/7516/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Eliminate the manual chaos of HR and legal document management. This workflow automates the transition from a raw document upload to a structured, audit-ready archive by combining UploadToURL for inst
Venafi Presentation - Watch Video
Automatically detects missed Zoom demos booked via Calendly and triggers AI-powered follow-up sequences.
Pyragogy AI Village - Orchestrazione Master (Architettura Profonda V2). Uses start, postgres, openAi, emailSend. Webhook trigger; 36 nodes.
Pyragogy AI Village - Orchestrazione Master (Architettura Profonda V2). Uses start, postgres, openAi, emailSend. Webhook trigger; 35 nodes.