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": "## 📥 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など)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数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で表示

このワークフローを共有

カテゴリー

カテゴリー: 34