Descargar videos de TikTok sin marca de agua a través de un bot de Telegram

Avanzado

Este es unSocial Mediaflujo de automatización del dominio deautomatización que contiene 20 nodos.Utiliza principalmente nodos como If, Set, Code, Telegram, HttpRequest. Descargar videos de TikTok sin marca de agua a través de un bot de Telegram

Requisitos previos
  • Bot Token de Telegram
  • Pueden requerirse credenciales de autenticación para la API de destino

Categoría

Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "735886904af210643f438394a538e64374f0cb4ab13fd94d97005987482d652a",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "0b75420f-8be7-4da1-bc93-df2877de4adc",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -288,
        880
      ],
      "webhookId": "85eca1dd-c6bb-4ca5-8679-0e4f783db978",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "s1d5gRfBoQ9ZZAIM",
          "name": "Video Download Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ad042de8-2758-4fcd-9887-f015daecbf22",
      "name": "Validar URL de TikTok",
      "type": "n8n-nodes-base.if",
      "position": [
        0,
        880
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "url-check-1",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.message.text }}",
              "rightValue": "tiktok.com"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "fdadd1c3-37d8-4d36-a445-6904705d894e",
      "name": "Enviar mensaje de URL inválida",
      "type": "n8n-nodes-base.telegram",
      "position": [
        240,
        976
      ],
      "webhookId": "d36fec4f-53f2-43d1-833b-a2aaab8b4ed4",
      "parameters": {
        "text": "❌ Please send a valid TikTok link!\n\nExamples:\n• https://www.tiktok.com/@user/video/123\n• https://vm.tiktok.com/abc123",
        "chatId": "={{ $json.message.from.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "s1d5gRfBoQ9ZZAIM",
          "name": "Video Download Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c98646f6-47dd-475d-9625-a90b19f9b246",
      "name": "Enviar acción de chat",
      "type": "n8n-nodes-base.telegram",
      "position": [
        240,
        784
      ],
      "webhookId": "b0e58cb4-92f5-482f-8675-a8c183020c2c",
      "parameters": {
        "action": "upload_video",
        "chatId": "={{ $json.message.from.id }}",
        "operation": "sendChatAction"
      },
      "credentials": {
        "telegramApi": {
          "id": "s1d5gRfBoQ9ZZAIM",
          "name": "Video Download Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9c8b5462-99ca-49c6-85ad-069338299d1f",
      "name": "Enviar mensaje de procesamiento",
      "type": "n8n-nodes-base.telegram",
      "position": [
        464,
        784
      ],
      "webhookId": "76ab519a-0865-47d6-b019-59b737f93ae2",
      "parameters": {
        "text": "⏳ Downloading video... Please wait!",
        "chatId": "={{ $('Telegram Trigger').item.json.message.from.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "s1d5gRfBoQ9ZZAIM",
          "name": "Video Download Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7a1d2ad9-6007-4797-8320-0f7d21924354",
      "name": "Configurar variables",
      "type": "n8n-nodes-base.set",
      "position": [
        688,
        784
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0f5772c0-1f84-45e9-b131-8be1c8dd6d85",
              "name": "share_video_url",
              "type": "string",
              "value": "={{ $json.message.text.trim() }}"
            },
            {
              "id": "781d5f1b-1724-4cd4-9e0d-916de65b43e5",
              "name": "chat_id",
              "type": "string",
              "value": "={{ $json.message.from.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "225bfc1b-93fb-4a51-912c-0aff791f98b3",
      "name": "Obtener HTML de la página de TikTok",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        864,
        784
      ],
      "parameters": {
        "url": "={{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "timeout": 30000,
          "redirect": {
            "redirect": {}
          },
          "response": {
            "response": {
              "fullResponse": true,
              "responseFormat": "text"
            }
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
            },
            {
              "name": "Accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
            },
            {
              "name": "Accept-Language",
              "value": "en-US,en;q=0.9"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "993c6555-94ec-49dd-97a8-fd03c31ac894",
      "name": "Extraer URL del video",
      "type": "n8n-nodes-base.code",
      "onError": "continueErrorOutput",
      "position": [
        1040,
        784
      ],
      "parameters": {
        "jsCode": "const html = $input.first().json.data;\nconst headers = $input.first().json.headers || {};\nconst cookies = headers['set-cookie'] || [];\n\nif (!html) {\n  throw new Error(\"Unable to load TikTok page. Please try again!\");\n}\n\n// Find JSON data from script tag\nconst regex = /<script id=\"__UNIVERSAL_DATA_FOR_REHYDRATION__\" type=\"application\\/json\">([\\s\\S]*?)<\\/script>/;\nconst match = html.match(regex);\n\nif (!match) {\n  throw new Error(\"Video data not found. The link may be deleted or private.\");\n}\n\nconst jsonStr = match[1];\nlet data;\n\ntry {\n  data = JSON.parse(jsonStr);\n} catch (e) {\n  throw new Error(\"Unable to parse video data. Please try again!\");\n}\n\n// Get video URL from multiple possible paths\nconst itemInfo = data?.__DEFAULT_SCOPE__?.[\"webapp.video-detail\"]?.itemInfo?.itemStruct;\nconst videoUrl = itemInfo?.video?.playAddr || itemInfo?.video?.downloadAddr;\n\nif (!videoUrl) {\n  throw new Error(\"Video URL not found. The video may be restricted from downloading.\");\n}\n\nconst videoInfo = {\n  videoUrl: videoUrl,\n  cookies: cookies.join('; '),\n  description: itemInfo?.desc || 'TikTok Video',\n  author: itemInfo?.author?.uniqueId || 'unknown',\n  stats: {\n    plays: itemInfo?.stats?.playCount || 0,\n    likes: itemInfo?.stats?.diggCount || 0,\n    comments: itemInfo?.stats?.commentCount || 0\n  }\n};\n\nreturn [{ json: videoInfo }];"
      },
      "typeVersion": 2
    },
    {
      "id": "a7a82681-5e5d-47ff-b8b2-b06d25a46764",
      "name": "Descargar archivo de video",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        1248,
        784
      ],
      "parameters": {
        "url": "={{ $json.videoUrl }}",
        "options": {
          "timeout": 60000,
          "response": {
            "response": {
              "responseFormat": "file"
            }
          },
          "allowUnauthorizedCerts": true
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
            },
            {
              "name": "Referer",
              "value": "https://www.tiktok.com/"
            },
            {
              "name": "Accept",
              "value": "video/mp4,video/webm,video/*;q=0.9,application/octet-stream;q=0.8"
            },
            {
              "name": "Accept-Language",
              "value": "en-US,en;q=0.9"
            },
            {
              "name": "Connection",
              "value": "keep-alive"
            },
            {
              "name": "Cookie",
              "value": "={{ $json.cookies }}"
            },
            {
              "name": "Range",
              "value": "bytes=0-"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a4d0002b-3bca-41ca-970f-7fb6f00b86af",
      "name": "Enviar video al usuario",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1504,
        640
      ],
      "webhookId": "e9287d60-0bee-4d5b-9438-31ec9a0aced5",
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.from.id }}",
        "operation": "sendVideo",
        "binaryData": true,
        "additionalFields": {
          "caption": "=✅ Video downloaded successfully!\n\n👤 Author: @{{ $('Extract Video URL').item.json.author }}\n👁 Views: {{ $('Extract Video URL').item.json.stats.plays.toLocaleString() }}\n❤️ Likes: {{ $('Extract Video URL').item.json.stats.likes.toLocaleString() }}"
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "s1d5gRfBoQ9ZZAIM",
          "name": "Video Download Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1d66e474-5c33-4785-96fe-7cf470e1506a",
      "name": "Formatear error",
      "type": "n8n-nodes-base.code",
      "position": [
        1088,
        1072
      ],
      "parameters": {
        "jsCode": "// Capture and format error message\nconst errorData = $input.first().json;\nconst error = errorData.error || errorData.message || 'Unknown error occurred';\n\nreturn [{\n  json: {\n    error: error,\n    chat_id: $('Configure Variables').first().json.chat_id\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "1b10fdd9-80fd-4387-b8d4-79c38234e397",
      "name": "Enviar mensaje de error",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1488,
        1072
      ],
      "webhookId": "81cf605b-0f05-43dc-8ea4-7896a0bc4b6b",
      "parameters": {
        "text": "=❌ Error: {{ $json.error }}\n\n💡 Possible reasons:\n• Video was deleted or set to private\n• Invalid link\n• TikTok is under maintenance\n• Video is restricted from downloading\n\nPlease try again or use a different link!",
        "chatId": "={{ $json.chat_id }}",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "s1d5gRfBoQ9ZZAIM",
          "name": "Video Download Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ac4f9ce6-c84f-4bd2-9297-0fca86e6a233",
      "name": "Nota - Trigger",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        592
      ],
      "parameters": {
        "color": 4,
        "width": 272,
        "height": 636,
        "content": "## 📥 TRIGGER\nReceives messages from Telegram users"
      },
      "typeVersion": 1
    },
    {
      "id": "b62ec2e9-f8a4-4fdb-95a0-74784f2134ed",
      "name": "Nota - Validación",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        592
      ],
      "parameters": {
        "color": 5,
        "height": 636,
        "content": "## ✅ VALIDATION\nChecks if the message contains a valid TikTok URL"
      },
      "typeVersion": 1
    },
    {
      "id": "1335249e-7ceb-4f3d-b442-e7d0e25ef23c",
      "name": "Nota - Retroalimentación",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        592
      ],
      "parameters": {
        "color": 6,
        "width": 460,
        "height": 636,
        "content": "## 💬 USER FEEDBACK\nSends status messages to keep user informed"
      },
      "typeVersion": 1
    },
    {
      "id": "053de0eb-8169-48ce-bae6-d83a3ab5a009",
      "name": "Nota - Procesamiento",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        592
      ],
      "parameters": {
        "color": 7,
        "width": 1032,
        "height": 348,
        "content": "## 🎬 VIDEO PROCESSING\nFetches HTML → Extracts video URL → Downloads file"
      },
      "typeVersion": 1
    },
    {
      "id": "15ed8c93-95b4-4697-9d66-630e9ff0fdc2",
      "name": "Nota - Error",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        960
      ],
      "parameters": {
        "color": 2,
        "width": 1036,
        "height": 268,
        "content": "## ⚠️ ERROR HANDLING\nCatches errors and sends user-friendly messages"
      },
      "typeVersion": 1
    },
    {
      "id": "1c93ba5d-2bfa-460a-902c-7322660760c2",
      "name": "Nota adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        192
      ],
      "parameters": {
        "color": 3,
        "width": 528,
        "height": 384,
        "content": "# ▶️ Telegram Bot TikTok Video Downloader (No Watermark)\n**👤 Author:** Nguyễn Thiệu Toàn (n8n Creator)  \n**🌐 Website:** [nguyenthieutoan.com](https://nguyenthieutoan.com)  \n---\n## ✨ What This Workflow Does\nThis powerful automation turns your Telegram bot into a **TikTok video downloader**. Simply send any TikTok link, and the bot will:\n- ✅ Validate the URL automatically  \n- ⚡ Extract video without watermark  \n- 📊 Display video statistics (views, likes, author)  \n- 🚀 Send the clean video file directly to you  \n**No ads. No watermarks. Pure automation magic.**"
      },
      "typeVersion": 1
    },
    {
      "id": "3e3f5f1e-eea9-4ae4-8950-2b277c6337a0",
      "name": "Nota adhesiva 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        192
      ],
      "parameters": {
        "color": 3,
        "width": 464,
        "height": 384,
        "content": "## **Workflow Flow Diagram**\n\n```\n📱 User sends TikTok link\n    ↓\n✅ URL Validation\n    ├─ Valid → Continue\n    └─ Invalid → Send error message\n    ↓\n💬 Send \"Processing...\" status\n    ↓\n🌐 Fetch TikTok page HTML\n    ↓\n🔍 Extract video URL from page data\n    ↓\n⬇️ Download video file (no watermark)\n    ↓\n📤 Send video to user with stats\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "f38ab8fe-2ae9-4257-adda-827c7be950ac",
      "name": "Nota adhesiva 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        192
      ],
      "parameters": {
        "color": 3,
        "width": 1024,
        "height": 384,
        "content": "## **Technical Process**\n1. **Trigger Reception**: Telegram webhook receives user message\n2. **URL Validation**: IF node checks for `tiktok.com` or `vm.tiktok.com` domains\n3. **User Feedback**: Bot sends \"uploading video...\" chat action + status message\n4. **Variable Configuration**: Stores chat ID and video URL for later use\n5. **HTML Fetching**: HTTP request to TikTok with browser-like headers\n6. **Data Extraction**: JavaScript code parses `__UNIVERSAL_DATA_FOR_REHYDRATION__` JSON\n7. **Video Download**: HTTP request with proper cookies and referrer headers\n8. **Delivery**: Telegram sends video file with formatted caption including stats\n\n## **Error Handling Strategy**\nEach critical node (HTTP requests, code execution) has error output enabled:\n- **On Success**: Continues to next processing step\n- **On Error**: Routes to \"Format Error\" → \"Send Error Message\" path\n- **User Experience**: Clear, actionable error messages instead of silent failures"
      },
      "typeVersion": 1
    },
    {
      "id": "7b73bb06-ee9c-4997-9443-8c573f4da365",
      "name": "Eliminar notificación de proceso",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1504,
        800
      ],
      "webhookId": "9b63981a-be98-4f28-8728-9fe12584e4ed",
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.from.id }}",
        "messageId": "={{ $('Send Processing Message').item.json.result.message_id }}",
        "operation": "deleteMessage"
      },
      "credentials": {
        "telegramApi": {
          "id": "s1d5gRfBoQ9ZZAIM",
          "name": "Video Download Bot"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {},
  "connections": {
    "1d66e474-5c33-4785-96fe-7cf470e1506a": {
      "main": [
        [
          {
            "node": "1b10fdd9-80fd-4387-b8d4-79c38234e397",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c98646f6-47dd-475d-9625-a90b19f9b246": {
      "main": [
        [
          {
            "node": "9c8b5462-99ca-49c6-85ad-069338299d1f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b75420f-8be7-4da1-bc93-df2877de4adc": {
      "main": [
        [
          {
            "node": "ad042de8-2758-4fcd-9887-f015daecbf22",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "993c6555-94ec-49dd-97a8-fd03c31ac894": {
      "main": [
        [
          {
            "node": "a7a82681-5e5d-47ff-b8b2-b06d25a46764",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "1d66e474-5c33-4785-96fe-7cf470e1506a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7a1d2ad9-6007-4797-8320-0f7d21924354": {
      "main": [
        [
          {
            "node": "225bfc1b-93fb-4a51-912c-0aff791f98b3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a7a82681-5e5d-47ff-b8b2-b06d25a46764": {
      "main": [
        [
          {
            "node": "7b73bb06-ee9c-4997-9443-8c573f4da365",
            "type": "main",
            "index": 0
          },
          {
            "node": "a4d0002b-3bca-41ca-970f-7fb6f00b86af",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "1d66e474-5c33-4785-96fe-7cf470e1506a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ad042de8-2758-4fcd-9887-f015daecbf22": {
      "main": [
        [
          {
            "node": "c98646f6-47dd-475d-9625-a90b19f9b246",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "fdadd1c3-37d8-4d36-a445-6904705d894e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7b73bb06-ee9c-4997-9443-8c573f4da365": {
      "main": [
        []
      ]
    },
    "225bfc1b-93fb-4a51-912c-0aff791f98b3": {
      "main": [
        [
          {
            "node": "993c6555-94ec-49dd-97a8-fd03c31ac894",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "1d66e474-5c33-4785-96fe-7cf470e1506a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9c8b5462-99ca-49c6-85ad-069338299d1f": {
      "main": [
        [
          {
            "node": "7a1d2ad9-6007-4797-8320-0f7d21924354",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Redes sociales

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos20
Categoría1
Tipos de nodos7
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
Nguyen Thieu Toan

Nguyen Thieu Toan

@nguyenthieutoan

An AI Automation consultant and system builder specializing in business workflow optimization with n8n. As the Founder of GenStaff, Toan empowers teams to automate complex processes using no-code/low-code tools and AI Agents, making operations smarter and more efficient. He actively shares expertise and tutorials about n8n, AI, and automation on his blog and social channels.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34