AutomationFlowsGeneral › Vantra - Faq Router Demo

Vantra - Faq Router Demo

Vantra - FAQ Router Demo. Webhook trigger; 5 nodes.

Webhook trigger★★★★☆ complexity5 nodes
General Trigger: Webhook Nodes: 5 Complexity: ★★★★☆ Added:

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 →

Download .json
{
  "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": []
}
Pro

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 →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

GiveWP Donations to Beacon. Uses httpRequest, stopAndError. Webhook trigger; 43 nodes.

HTTP Request, Stop And Error
General

Use this workflow to book, cancel, or reschedule appointments using Vapi and Google Calendar

Google Calendar
General

Remove Video Background & Compose on Custom Image Background with Google Drive. Uses httpRequest, googleDrive. Webhook trigger; 25 nodes.

HTTP Request, Google Drive
General

AI Website Chatbot — Main Handler. Uses httpRequest. Webhook trigger; 22 nodes.

HTTP Request
General

REST API with Google Sheets. Uses googleSheets, respondToWebhook, stickyNote. Webhook trigger; 17 nodes.

Google Sheets