Téléchargement de vidéos TikTok sans filigrane via un bot Telegram

Avancé

Ceci est unSocial Mediaworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme If, Set, Code, Telegram, HttpRequest. Télécharger des vidéos TikTok sans filigrane avec un bot Telegram

Prérequis
  • Token Bot Telegram
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "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": "Valider l'URL 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": "Envoyer un message d'URL invalide",
      "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": "Envoyer une action 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": "Envoyer un message de traitement",
      "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": "Configurer les 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": "Obtenir le HTML de la page 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": "Extraire l'URL de la vidéo",
      "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": "Télécharger le fichier vidéo",
      "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": "Envoyer la vidéo à l'utilisateur",
      "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": "Formater l'erreur",
      "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": "Envoyer un message d'erreur",
      "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": "Note - 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": "Note - Validation",
      "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": "Note - Feedback",
      "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": "Note - Processing",
      "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": "Note - 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": "Note autocollante",
      "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": "Note autocollante 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": "Note autocollante 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": "Supprimer la notification de processus",
      "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Réseaux sociaux

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds20
Catégorie1
Types de nœuds7
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
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.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34