Synthetic Support Ticket Triage Lite
Credential-free manual demo that classifies three synthetic support tickets into billing, technical, and general queues, assigns priority/SLA/next step, and fails if its three assertions do not pass. Tested by real import and execution on n8n 2.30.6. Verification, SHA-256, and the complete packaged starter: https://ideals2201.github.io/ai-monkey-value-audit/support-ticket-triage-lite.html
Shared 7/16/2026
1 views
Visual Workflow
JSON Code
{
"id": "supportTicketTriageLiteV1",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Synthetic Support Ticket Triage Lite",
"tags": [],
"nodes": [
{
"id": "a24c49a4-8be5-4a1f-90db-5dd97f4b6161",
"name": "Run synthetic ticket tests",
"type": "n8n-nodes-base.manualTrigger",
"position": [
260,
300
],
"parameters": {},
"typeVersion": 1
},
{
"id": "e721673b-12c3-4e6b-8e63-849e513ce242",
"name": "Three synthetic tickets",
"type": "n8n-nodes-base.code",
"position": [
500,
300
],
"parameters": {
"jsCode": "const fixtures = [\n { test: 'billing refund', subject: 'Refund not received', message: 'My refund is overdue after seven days.' },\n { test: 'technical outage', subject: 'Production login outage', message: 'All users are blocked and cannot sign in.' },\n { test: 'general question', subject: 'Update company name', message: 'Where can I update our company name?' }\n];\nreturn fixtures.map((json, index) => ({ json, pairedItem: { item: index } }));"
},
"typeVersion": 2
},
{
"id": "9577b3da-1c4b-4f40-85ef-51bb05e7f5aa",
"name": "Classify and assert tickets",
"type": "n8n-nodes-base.code",
"position": [
760,
300
],
"parameters": {
"jsCode": "const results = $input.all().map((item, index) => {\n const text = `${item.json.subject || ''} ${item.json.message || ''}`.toLowerCase();\n const category = /refund|invoice|billing|charge/.test(text) ? 'billing' : /outage|blocked|error|cannot sign in/.test(text) ? 'technical' : 'general';\n const priority = /outage|all users|blocked/.test(text) ? 'high' : /refund|overdue/.test(text) ? 'medium' : 'normal';\n const slaHours = priority === 'high' ? 2 : priority === 'medium' ? 8 : 24;\n const nextStep = category === 'billing' ? 'verify_payment_timeline' : category === 'technical' ? 'collect_reproduction_and_status' : 'route_to_support_queue';\n return { json: { test: item.json.test, synthetic: true, category, priority, slaHours, nextStep }, pairedItem: { item: index } };\n});\nconst byTest = Object.fromEntries(results.map(r => [r.json.test, r.json]));\nconst checks = [\n byTest['billing refund'].category === 'billing' && byTest['billing refund'].priority === 'medium',\n byTest['technical outage'].category === 'technical' && byTest['technical outage'].priority === 'high' && byTest['technical outage'].slaHours === 2,\n byTest['general question'].category === 'general' && byTest['general question'].priority === 'normal'\n];\nif (checks.some(v => !v)) throw new Error('Support triage Lite assertions failed: ' + JSON.stringify(checks));\nreturn [{ json: { synthetic: true, liteSample: true, passed: checks.length, failed: 0, results: results.map(r => r.json), boundary: 'Manual synthetic demo only; no webhook, credentials, customer data, or help-desk connection.' } }];"
},
"typeVersion": 2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "1c89bbd4-20fb-446a-85c7-09f3056b95fd",
"connections": {
"Three synthetic tickets": {
"main": [
[
{
"node": "Classify and assert tickets",
"type": "main",
"index": 0
}
]
]
},
"Run synthetic ticket tests": {
"main": [
[
{
"node": "Three synthetic tickets",
"type": "main",
"index": 0
}
]
]
}
}
}