Téléchargement de vidéos TikTok sans filigrane via un bot Telegram
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
- •Token Bot Telegram
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
Nœuds utilisés (20)
Catégorie
{
"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
}
]
]
}
}
}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.
Workflows recommandés
Nguyen Thieu Toan
@nguyenthieutoanAn 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.
Partager ce workflow