Telegram 로봇을 통해 무물감 TikTok 비디오 다운로드
이것은Social Media분야의자동화 워크플로우로, 20개의 노드를 포함합니다.주로 If, Set, Code, Telegram, HttpRequest 등의 노드를 사용하며. Telegram 로봇을 통해 무물감 TikTok 비디오 다운로드
- •Telegram Bot Token
- •대상 API의 인증 정보가 필요할 수 있음
카테고리
{
"meta": {
"instanceId": "735886904af210643f438394a538e64374f0cb4ab13fd94d97005987482d652a",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "0b75420f-8be7-4da1-bc93-df2877de4adc",
"name": "Telegram 트리거",
"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": "TikTok URL 유효성 검사",
"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": "잘못된 URL 메시지 전송",
"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": "채팅 액션 전송",
"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": "처리 중 메시지 전송",
"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": "변수 설정",
"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": "TikTok 페이지 HTML 가져오기",
"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": "영상 URL 추출",
"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": "영상 파일 다운로드",
"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": "사용자에게 영상 전송",
"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": "오류 형식화",
"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": "오류 메시지 전송",
"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": "노트 - 트리거",
"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": "노트 - 유효성 검사",
"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": "노트 - 피드백",
"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": "노트 - 처리",
"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": "노트 - 오류",
"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": "스티커 노트",
"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": "스티커 노트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": "스티커 노트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": "처리 알림 삭제",
"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
}
]
]
}
}
}이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 소셜 미디어
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
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.
이 워크플로우 공유