ARTIFACT // N8N-WEBHOOK-TRIAGE-GUARD.JSON (JSON)
Webhook Ticket Triage Workflow with Schema Guard & Dead-Letter Fallback (n8n-webhook-triage-guard.json)
Validates incoming payload, enforces strict JSON output, caps token cost, and routes malformed responses to a safe fallback queue.
[KEY VERIFIED TAKEAWAY / TL;DR]This reproducible configuration artifact "Webhook Ticket Triage Workflow with Schema Guard & Dead-Letter Fallback" (n8n-webhook-triage-guard.json, JSON) is paired with Tinker AI Lab's hardware-verified guide "n8n-webhook-ticket-triage". It exposes 3 customizable browser variables (WEBHOOK_PATH=tinker-ticket-triage, API_BASE_URL=http://host.docker.internal:11434/v1, TRIAGE_MODEL=qwen2.5:7b) with loopback-first security defaults.
02 // WORKFLOWNo-Code AI Workflows· Verified: 2026-10-23
Browse All 42 Artifacts →n8n-webhook-triage-guard.json
View Paired Guide →Webhook Ticket Triage Workflow with Schema Guard & Dead-Letter Fallback
Validates incoming payload, enforces strict JSON output, caps token cost, and routes malformed responses to a safe fallback queue.
Customizable Variables (Saved in Browser)
UTF-8 Encoded · Live Client-Side Compilation
{
"name": "Tinker AI — Webhook Ticket Triage with Schema Guard",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "tinker-ticket-triage",
"responseMode": "lastNode"
},
"name": "Inbound Ticket Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [200, 280]
},
{
"parameters": {
"method": "POST",
"url": "http://host.docker.internal:11434/v1/chat/completions",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ model: 'qwen2.5:7b', temperature: 0, max_tokens: 256, response_format: { type: 'json_object' }, messages: [{ role: 'system', content: 'Return JSON with keys: urgency (low|medium|high), department (billing|tech|general), reason (string).' }, { role: 'user', content: String($json.body?.message || '').slice(0, 2000) }] }) }}",
"options": { "timeout": 30000 }
},
"name": "Structured Triage LLM",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"retryOnFail": true,
"maxTries": 2,
"continueOnFail": true,
"position": [460, 280]
}
],
"connections": {
"Inbound Ticket Webhook": {
"main": [[{ "node": "Structured Triage LLM", "type": "main", "index": 0 }]]
}
}
}
PARAMETER SPECIFICATION // 参数化变量规范说明表
Customizable Parameter Reference for n8n-webhook-triage-guard.json
This JSON artifact exposes 3 template variables compiled client-side in your browser.
| Template Token | Parameter Description | Verified Default | Example Format |
|---|---|---|---|
{{WEBHOOK_PATH}} | Webhook Route Path | tinker-ticket-triage | tinker-ticket-triage |
{{API_BASE_URL}} | OpenAI-Compatible Base URL | http://host.docker.internal:11434/v1 | http://host.docker.internal:11434/v1 |
{{TRIAGE_MODEL}} | Triage Model ID | qwen2.5:7b | qwen2.5:7b |
PAIRED HARDWARE MANIFEST // 配套实测环境与边界记录
Verified Environment for "Automated Webhook Ticket Triage: Schema Guard, Dead-Letter Fallback, Cost & Permissions"
Tested Hardware & OS
Docker n8n 1.76+ · Compatible with Local Ollama or Any OpenAI-Compatible Endpoint
Pinned Stack & Model Versions
n8n 1.76.xOpenAI-Compatible Chat Completions v1qwen2.5:7b / gpt-4o-mini
Offline Boundary (Configurable: Local-Only or Cloud API)
When handling PII customer tickets, point API_BASE_URL to local Ollama (`http://host.docker.internal:11434/v1`) so customer data never leaves your server.
Known Operational Limits & Failure Modes
- Unbounded user webhook bodies can inject 50K+ tokens or prompt-injection payloads if not sliced (`slice(0, 2000)`) before the LLM node.
- Giving the workflow full Read/Write admin API keys to downstream CRM/Slack exposes the system if a webhook secret is leaked.
DEPLOYMENT CHECKLIST // 配置落地核验步骤
3-Step Verification Checklist After Deploying n8n-webhook-triage-guard.json
- Enforced 2,000-character input truncation and `max_tokens: 256` on the LLM request.
- Verified downstream webhook/API credentials have write-only scope for the target queue.
- Tested the dead-letter fallback branch by simulating an LLM timeout or invalid JSON.