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 →
{
"name": "Vantra - FAQ Router Demo",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "vantra-faq-router",
"responseMode": "responseNode",
"options": {}
},
"id": "6d545948-b33c-426f-a197-d2908ac7b0b9",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-620,
0
]
},
{
"parameters": {
"jsCode": "const body = $json.body ?? $json;\nreturn [{\n json: {\n message: String(body.message ?? '').trim().toLowerCase(),\n language: String(body.language ?? 'es').trim().toLowerCase()\n }\n}];"
},
"id": "5e24a5c8-58b9-4e0e-bd16-3f53ad1c82f5",
"name": "Normalize Input",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-380,
0
]
},
{
"parameters": {
"jsCode": "const { message, language } = $json;\nconst faq = [\n {\n key: 'shipping',\n terms: ['envio', 'env\u00edo', 'shipping', 'delivery'],\n es: 'El tiempo y costo de env\u00edo dependen de la zona. Confirma la ciudad para consultar la informaci\u00f3n aprobada.',\n en: 'Shipping time and cost depend on the destination. Confirm the city to check the approved information.'\n },\n {\n key: 'materials',\n terms: ['material', 'oro', 'gold', 'acero', 'steel'],\n es: 'Consulta la ficha oficial del producto antes de confirmar el material. No se deben inventar especificaciones.',\n en: 'Check the official product record before confirming materials. Never invent specifications.'\n },\n {\n key: 'human',\n terms: ['persona', 'humano', 'agent', 'human'],\n es: 'La conversaci\u00f3n debe transferirse a una persona.',\n en: 'The conversation should be transferred to a person.'\n }\n];\n\nconst match = faq.find(item => item.terms.some(term => message.includes(term)));\nif (!message) {\n return [{ json: { ok: false, category: 'invalid', reply: 'A message is required.', escalate: false } }];\n}\nif (!match) {\n return [{\n json: {\n ok: true,\n category: 'unknown',\n reply: language === 'en'\n ? 'I do not have an approved answer. I will route this to a person.'\n : 'No tengo una respuesta aprobada. Transferir\u00e9 la consulta a una persona.',\n escalate: true\n }\n }];\n}\nreturn [{\n json: {\n ok: true,\n category: match.key,\n reply: language === 'en' ? match.en : match.es,\n escalate: match.key === 'human'\n }\n}];"
},
"id": "7e101847-8ed7-44e7-bcf9-b27d74ce57fa",
"name": "Process Request",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-120,
0
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ $json }}",
"options": {
"responseCode": 200
}
},
"id": "3dc08e18-495a-470e-94d5-a24f13c8db73",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
140,
0
]
},
{
"parameters": {
"content": "### Test payload\n```json\n{\n \"message\": \"\u00bfCu\u00e1nto tarda el env\u00edo?\",\n \"language\": \"es\"\n}\n```\n\nSend this body to the Webhook test URL.",
"height": 300,
"width": 360
},
"id": "ae0c08b4-8612-4a27-8e57-6edd9a138be0",
"name": "How to test",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-620,
-360
]
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Normalize Input",
"type": "main",
"index": 0
}
]
]
},
"Normalize Input": {
"main": [
[
{
"node": "Process Request",
"type": "main",
"index": 0
}
]
]
},
"Process Request": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "d36ff1a4-6e5c-4f29-9918-3e380ed7d6ae",
"meta": {
"templateCredsSetupCompleted": true
},
"tags": []
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Vantra - FAQ Router Demo. Webhook trigger; 5 nodes.
Source: https://github.com/escolatico122-collab/vantra-automation-hub/blob/main/automation-hub/workflows/n8n/faq-router.json — 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.
GiveWP Donations to Beacon. Uses httpRequest, stopAndError. Webhook trigger; 43 nodes.
Use this workflow to book, cancel, or reschedule appointments using Vapi and Google Calendar
Remove Video Background & Compose on Custom Image Background with Google Drive. Uses httpRequest, googleDrive. Webhook trigger; 25 nodes.
AI Website Chatbot — Main Handler. Uses httpRequest. Webhook trigger; 22 nodes.
REST API with Google Sheets. Uses googleSheets, respondToWebhook, stickyNote. Webhook trigger; 17 nodes.