8
n8n 中文网amn8n.com

通过Telegram机器人下载无水印TikTok视频

高级

这是一个Social Media领域的自动化工作流,包含 20 个节点。主要使用 If, Set, Code, Telegram, HttpRequest 等节点。 通过Telegram机器人下载无水印的TikTok视频

前置要求
  • Telegram Bot Token
  • 可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "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": "## 📥 触发器"
      },
      "typeVersion": 1
    },
    {
      "id": "b62ec2e9-f8a4-4fdb-95a0-74784f2134ed",
      "name": "注释 - 验证",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        592
      ],
      "parameters": {
        "color": 5,
        "height": 636,
        "content": "## ✅ 验证"
      },
      "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": "## 💬 用户反馈"
      },
      "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": "## 🎬 视频处理"
      },
      "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": "## ⚠️ 错误处理"
      },
      "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 机器人 TikTok 视频下载器(无水印)"
      },
      "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": "## **工作流流程图**"
      },
      "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": "## **技术流程**"
      },
      "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": {
    "Format Error": {
      "main": [
        [
          {
            "node": "Send Error Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Chat Action": {
      "main": [
        [
          {
            "node": "Send Processing Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Validate TikTok URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Video URL": {
      "main": [
        [
          {
            "node": "Download Video File",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Format Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configure Variables": {
      "main": [
        [
          {
            "node": "Get TikTok Page HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Video File": {
      "main": [
        [
          {
            "node": "Delete Process Notif",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Video to User",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Format Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate TikTok URL": {
      "main": [
        [
          {
            "node": "Send Chat Action",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Invalid URL Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete Process Notif": {
      "main": [
        []
      ]
    },
    "Get TikTok Page HTML": {
      "main": [
        [
          {
            "node": "Extract Video URL",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Format Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Processing Message": {
      "main": [
        [
          {
            "node": "Configure Variables",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 社交媒体

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量20
分类1
节点类型7
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
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.

外部链接
在 n8n.io 查看

分享此工作流