AutomationFlowsSlack & Telegram › Asistente Interno Flujo Principal

Asistente Interno Flujo Principal

asistente-interno-flujo-principal. Uses slack. Webhook trigger; 9 nodes.

Webhook trigger★★★☆☆ complexity9 nodesSlack
Slack & Telegram Trigger: Webhook Nodes: 9 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": "asistente-interno-flujo-principal",
  "nodes": [
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "ID_WORKFLOW_CLASIFICACION",
          "mode": "id",
          "cachedResultUrl": "/workflow/ID_WORKFLOW_CLASIFICACION"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "mensaje": "={{ $json.mensaje }}"
          },
          "matchingColumns": [
            "mensaje"
          ],
          "schema": [
            {
              "id": "mensaje",
              "displayName": "mensaje",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.3,
      "position": [
        128,
        176
      ],
      "id": "c4bc6340-0a9e-44a0-b34f-5ec2c128c511",
      "name": "Execute Workflow"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "ID_WORKFLOW_ENRUTADO",
          "mode": "list",
          "cachedResultUrl": "/workflow/ID_WORKFLOW_ENRUTADO",
          "cachedResultName": "sub-enrutado"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "output_categoria": "={{ $('Execute Workflow').item.json.output.categoria }}",
            "usuario": "={{ $('Extraer y Preparar Datos').item.json.usuario }}",
            "mensaje": "={{ $('Extraer y Preparar Datos').item.json.mensaje }}",
            "ejecucion_id": "={{ $('Extraer y Preparar Datos').item.json.ejecucion_id }}",
            "fecha": "={{ $('Extraer y Preparar Datos').item.json.fecha }}",
            "prioridad": "={{ $('Extraer y Preparar Datos').item.json.prioridad }}"
          },
          "matchingColumns": [
            "output_categoria",
            "usuario",
            "mensaje",
            "ejecucion_id",
            "fecha",
            "prioridad"
          ],
          "schema": [
            {
              "id": "output_categoria",
              "displayName": "output_categoria",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "usuario",
              "displayName": "usuario",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "mensaje",
              "displayName": "mensaje",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "ejecucion_id",
              "displayName": "ejecucion_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "fecha",
              "displayName": "fecha",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "prioridad",
              "displayName": "prioridad",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        352,
        176
      ],
      "name": "Call sub-enrutado",
      "id": "a14ee35e-0209-45b3-8c9d-ac9a9760f912"
    },
    {
      "parameters": {
        "multipleMethods": true,
        "path": "asistente-interno",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -544,
        176
      ],
      "id": "ad101a94-c392-4310-b2f6-50cb60de8d32",
      "name": "Recibir Solicitud"
    },
    {
      "parameters": {
        "respondWith": "text",
        "responseBody": "<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Asistente Interno - Enviar Mensaje</title>\n    <script src=\"https://cdn.tailwindcss.com\"></script>\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap\" rel=\"stylesheet\">\n    <style>\n        body { font-family: 'Inter', sans-serif; }\n        .glass {\n            background: rgba(255, 255, 255, 0.95);\n            backdrop-filter: blur(10px);\n            border: 1px solid rgba(255, 255, 255, 0.2);\n        }\n    </style>\n</head>\n<body class=\"bg-gradient-to-br from-blue-50 to-indigo-100 min-h-screen flex items-center justify-center p-6\">\n\n    <div class=\"glass max-w-md w-full p-8 rounded-2xl shadow-2xl transition-all hover:shadow-indigo-200/50\">\n        <div class=\"text-center mb-8\">\n            <h1 class=\"text-3xl font-bold text-indigo-900\">Asistente Interno</h1>\n            <p class=\"text-gray-500 mt-2\">Env\u00eda tu consulta al equipo t\u00e9cnico</p>\n        </div>\n\n        <form id=\"webhookForm\" class=\"space-y-6\">\n            <div>\n                <label for=\"usuario\" class=\"block text-sm font-semibold text-gray-700 mb-1\">Nombre de Usuario</label>\n                <input type=\"text\" id=\"usuario\" name=\"usuario\" required\n                    class=\"w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 outline-none transition-all placeholder-gray-400\"\n                    placeholder=\"Ej: juan_perez\">\n            </div>\n\n            <div>\n                <label for=\"mensaje\" class=\"block text-sm font-semibold text-gray-700 mb-1\">Mensaje</label>\n                <textarea id=\"mensaje\" name=\"mensaje\" rows=\"4\" required\n                    class=\"w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 outline-none transition-all placeholder-gray-400\"\n                    placeholder=\"\u00bfEn qu\u00e9 podemos ayudarte?\"></textarea>\n            </div>\n\n            <button type=\"submit\" id=\"btnEnviar\"\n                class=\"w-full bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-3 rounded-lg transition-colors shadow-lg hover:shadow-indigo-500/30 flex justify-center items-center\">\n                <span>Enviar Petici\u00f3n</span>\n            </button>\n        </form>\n\n        <div id=\"status\" class=\"mt-6 text-center text-sm hidden\"></div>\n    </div>\n\n    <script>\n        const form = document.getElementById('webhookForm');\n        const statusDiv = document.getElementById('status');\n        const btn = document.getElementById('btnEnviar');\n\n        form.addEventListener('submit', async (e) => {\n            e.preventDefault();\n            \n            const formData = {\n                usuario: document.getElementById('usuario').value,\n                mensaje: document.getElementById('mensaje').value\n            };\n\n            // Est\u00e9tica de carga\n            btn.disabled = true;\n            btn.innerHTML = 'Enviando...';\n            statusDiv.classList.add('hidden');\n\n            try {\n                const response = await fetch('your-url', {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application/json'\n                    },\n                    body: JSON.stringify(formData)\n                });\n\n                if (response.ok) {\n                    showStatus('\u00a1Mensaje enviado con \u00e9xito! \ud83d\ude80', 'text-green-600');\n                    form.reset();\n                } else {\n                    showStatus('Error al enviar. Int\u00e9ntalo de nuevo.', 'text-red-600');\n                }\n            } catch (error) {\n                showStatus('Error de conexi\u00f3n con el servidor.', 'text-red-600');\n                console.error('Error:', error);\n            } finally {\n                btn.disabled = false;\n                btn.innerHTML = 'Enviar Petici\u00f3n';\n            }\n        });\n\n        function showStatus(msg, colorClass) {\n            statusDiv.textContent = msg;\n            statusDiv.className = `mt-6 text-center text-sm font-medium ${colorClass}`;\n            statusDiv.classList.remove('hidden');\n        }\n    </script>\n</body>\n</html>",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        -320,
        80
      ],
      "id": "652d35f5-b052-4b7c-9145-25e2ccb74b3b",
      "name": "Mostrar Formulario",
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "e868d719-4a5d-4677-9868-efbcfadeaa7c",
              "name": "usuario",
              "value": "={{ $json.body.usuario }}",
              "type": "string"
            },
            {
              "id": "07a3657c-f39d-4b95-b140-45624ca377dd",
              "name": "mensaje",
              "value": "={{ $json.body.mensaje }}",
              "type": "string"
            },
            {
              "id": "cf06eb9b-008c-4b49-9bec-e94d4d13fe4a",
              "name": "prioridad",
              "value": "={{ $json.body.mensaje.includes(\"urgente\") ? \"alta\": \"normal\" }}",
              "type": "string"
            },
            {
              "id": "0c1d445e-c32c-4525-952d-b93777487155",
              "name": "fecha",
              "value": "={{$now.toISO()}}",
              "type": "string"
            },
            {
              "id": "f8b1d47e-fa01-48af-9594-e4c4a5756675",
              "name": "flujo",
              "value": "={{ $workflow.name }}",
              "type": "string"
            },
            {
              "id": "18f46415-1e5b-40ba-b1ae-9eb42c46dbf7",
              "name": "ejecucion_id",
              "value": "={{$execution.id}}",
              "type": "number"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -320,
        272
      ],
      "id": "c94d53cb-8fd0-46fa-a626-c79b93e22612",
      "name": "Extraer y Preparar Datos"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\n  \"estado\": \"error\",\n  \"detalle\": \"el mensaje esta vacio o es demasiado corto\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        128,
        368
      ],
      "id": "25d833f3-bccf-4062-841d-cffd0c178a36",
      "name": "Responde: Mensaje Invalido"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\n\"usuario\": \"Success\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        576,
        176
      ],
      "id": "1fd5a460-cec1-4c98-a625-77ca7d5b20c0",
      "name": "Responde: Mensaje Recibido"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "c54c4edb-4eda-47b6-8d45-70bef269c91f",
              "leftValue": "={{ $json.mensaje }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            },
            {
              "id": "f0e5dcc3-c207-4c72-8cfc-07bd6fcbcfbf",
              "leftValue": "={{ $json.mensaje.length }}",
              "rightValue": 10,
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        -96,
        272
      ],
      "id": "9dd720e4-1f39-4e8a-bcdf-e2628cb4e224",
      "name": "\u00bfMensaje Valido?"
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "SLACK_CHANNEL_ID",
          "mode": "list",
          "cachedResultName": "workflow-fallido"
        },
        "text": "Error",
        "otherOptions": {}
      },
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.4,
      "position": [
        -96,
        80
      ],
      "id": "70467430-4d36-45c0-8033-e8ec4756232a",
      "name": "Send a message",
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Execute Workflow": {
      "main": [
        [
          {
            "node": "Call sub-enrutado",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call sub-enrutado": {
      "main": [
        [
          {
            "node": "Responde: Mensaje Recibido",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Recibir Solicitud": {
      "main": [
        [
          {
            "node": "Mostrar Formulario",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extraer y Preparar Datos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extraer y Preparar Datos": {
      "main": [
        [
          {
            "node": "\u00bfMensaje Valido?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Responde: Mensaje Recibido": {
      "main": [
        []
      ]
    },
    "\u00bfMensaje Valido?": {
      "main": [
        [
          {
            "node": "Execute Workflow",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Responde: Mensaje Invalido",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mostrar Formulario": {
      "main": [
        [],
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "timeSavedMode": "fixed",
    "errorWorkflow": "ID_ERROR_WORKFLOW",
    "callerPolicy": "workflowsFromSameOwner",
    "availableInMCP": false
  },
  "versionId": "WORKFLOW_VERSION_ID",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "WORKFLOW_ID",
  "tags": []
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

asistente-interno-flujo-principal. Uses slack. Webhook trigger; 9 nodes.

Source: https://github.com/micael305/n8n-ai-assistant-mcp/blob/b31db718ac92bfdffe5c5f36e55e3bd60d15520e/main/asistente-interno-flujo-principal.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

T+0 — Onboarding Email + Portal Activity (KAIA-756). Uses httpRequest, slack. Webhook trigger; 6 nodes.

HTTP Request, Slack
Slack & Telegram

Portal Timeline — Status Change Watcher (KAIA-762 UUID→cuid resolution). Uses httpRequest, slack. Webhook trigger; 6 nodes.

HTTP Request, Slack
Slack & Telegram

Automates website downtime detection and notifications using UptimeRobot. Triggers alerts via Slack, WhatsApp, or Email when a website goes down. Creates a task in Notion and tags the responsible engi

Slack, Email Send, Notion +1
Slack & Telegram

Slack AI Assistant with PraisonAI. Uses n8n-nodes-praisonai, slack. Webhook trigger; 4 nodes.

N8N Nodes Praisonai, Slack
Slack & Telegram

Advanced Slackbot With N8N. Uses slack, httpRequest, stickyNote, executeWorkflow. Webhook trigger; 34 nodes.

Slack, HTTP Request, Execute Workflow Trigger +1