AutomationFlowsSocial Media › Dub Telegram Video Links with Elevenlabs and Publish to Youtube and Tiktok

Dub Telegram Video Links with Elevenlabs and Publish to Youtube and Tiktok

ByDr. Firas @drfiras on n8n.io

This workflow accepts a video URL from Telegram, sends it to the ElevenLabs Dubbing API to generate a dubbed version in a target language, then uploads the result to Blotato to publish it on YouTube and TikTok and confirms completion back in Telegram. Triggers when a Telegram…

Event trigger★★★★☆ complexity17 nodesTelegram TriggerHTTP Request@Blotato/N8N Nodes BlotatoTelegramStop And Error
Social Media Trigger: Event Nodes: 17 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #16773 — we link there as the canonical source.

This workflow follows the Blotaton8N Nodes Blotato → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "YfKb6ZBMU1xXKf05",
  "meta": {
    "builderVariant": "mcp",
    "aiBuilderAssisted": true
  },
  "name": "Dub videos with ElevenLabs and publish them to YouTube and TikTok",
  "tags": [],
  "nodes": [
    {
      "id": "eb244f3b-7e4f-41e6-94a3-dfce65f7a442",
      "name": "Receive video link on Telegram",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        32,
        528
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "a3ffb596-f7f7-43f0-89e8-23ce6d986c19",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        528
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "cfg-video-url",
              "name": "video_url",
              "type": "string",
              "value": "={{ $('Receive video link on Telegram').item.json.message.text }}"
            },
            {
              "id": "cfg-source-lang",
              "name": "source_lang",
              "type": "string",
              "value": "auto"
            },
            {
              "id": "cfg-target-lang",
              "name": "target_lang",
              "type": "string",
              "value": "en"
            },
            {
              "id": "cfg-num-speakers",
              "name": "num_speakers",
              "type": "number",
              "value": 0
            },
            {
              "id": "cfg-watermark",
              "name": "watermark",
              "type": "boolean",
              "value": false
            },
            {
              "id": "cfg-drop-bg",
              "name": "drop_background_audio",
              "type": "boolean",
              "value": false
            },
            {
              "id": "cfg-poll-wait",
              "name": "poll_wait_seconds",
              "type": "number",
              "value": 30
            },
            {
              "id": "cfg-yt-title",
              "name": "youtube_title",
              "type": "string",
              "value": "My dubbed video"
            },
            {
              "id": "cfg-caption",
              "name": "post_caption",
              "type": "string",
              "value": "Translated and dubbed automatically with n8n."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9a6bcfbc-2646-4734-9ca4-df7c9cd8f739",
      "name": "Create dubbing job",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        464,
        528
      ],
      "parameters": {
        "url": "https://api.elevenlabs.io/v1/dubbing",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "source_url",
              "value": "={{ $('Configuration').item.json.video_url }}"
            },
            {
              "name": "target_lang",
              "value": "={{ $('Configuration').item.json.target_lang }}"
            },
            {
              "name": "source_lang",
              "value": "={{ $('Configuration').item.json.source_lang }}"
            },
            {
              "name": "num_speakers",
              "value": "={{ $('Configuration').item.json.num_speakers }}"
            },
            {
              "name": "watermark",
              "value": "={{ $('Configuration').item.json.watermark }}"
            },
            {
              "name": "drop_background_audio",
              "value": "={{ $('Configuration').item.json.drop_background_audio }}"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "15420687-e456-457d-ad14-205777ab6048",
      "name": "Get dubbing status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        688,
        528
      ],
      "parameters": {
        "url": "=https://api.elevenlabs.io/v1/dubbing/{{ $('Create dubbing job').item.json.dubbing_id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "788b52a9-46fe-48c8-a73d-6533b17eac31",
      "name": "Check dubbing status",
      "type": "n8n-nodes-base.switch",
      "position": [
        944,
        528
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Done",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "cond-done",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "dubbed"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Failed",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "cond-failed",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "failed"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Processing",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "cond-processing",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "dubbing"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.4
    },
    {
      "id": "c1bca44f-a271-4dc7-9aa3-c5f034b30084",
      "name": "Download dubbed video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1248,
        512
      ],
      "parameters": {
        "url": "=https://api.elevenlabs.io/v1/dubbing/{{ $('Create dubbing job').item.json.dubbing_id }}/audio/{{ $('Configuration').item.json.target_lang }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        },
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "2b5838ed-42c3-4090-8218-a5f5bc389c2c",
      "name": "Upload dubbed video to Blotato",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1472,
        512
      ],
      "parameters": {
        "resource": "media",
        "useBinaryData": true
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "204655c3-fb3b-4229-b236-1809f9da8334",
      "name": "Publish to YouTube",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1664,
        512
      ],
      "parameters": {
        "options": {},
        "platform": "youtube",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "8047",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/8047",
          "cachedResultName": "DR FIRASS (Dr. Firas)"
        },
        "postContentText": "={{ $('Configuration').item.json.post_caption }}",
        "postContentMediaUrls": "={{ $('Upload dubbed video to Blotato').item.json.url }}",
        "postCreateYoutubeOptionTitle": "={{ $('Configuration').item.json.youtube_title }}",
        "postCreateYoutubeOptionContainsSyntheticMedia": true
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "70b1cc60-5b64-456f-9228-5f47ec14c910",
      "name": "Publish to TikTok",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2016,
        512
      ],
      "parameters": {
        "options": {},
        "platform": "tiktok",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "30526",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/30526",
          "cachedResultName": "eliteshicos"
        },
        "postContentText": "={{ $('Configuration').item.json.post_caption }}",
        "postContentMediaUrls": "={{ $('Upload dubbed video to Blotato').item.json.url }}",
        "postCreateTiktokOptionIsAiGenerated": true
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "1db0c0ed-21fb-4158-963f-6e24eeb24c43",
      "name": "Notify on Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2400,
        512
      ],
      "parameters": {
        "text": "=\u2705 Dub finished and published!\n\nTarget language: {{ $('Configuration').item.json.target_lang }}\nPosted to YouTube and TikTok via Blotato.",
        "chatId": "={{ $('Receive video link on Telegram').item.json.message.chat.id }}",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1e62102c-0d56-4957-aff8-4c51160198ec",
      "name": "Dubbing failed",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        1136,
        656
      ],
      "parameters": {
        "errorMessage": "ElevenLabs reported the dubbing job as failed. Check the source URL, target language and ElevenLabs credit."
      },
      "typeVersion": 1
    },
    {
      "id": "a8adf37f-efad-422f-a9a7-bc4e47fa5f3b",
      "name": "Wait for dubbing",
      "type": "n8n-nodes-base.wait",
      "position": [
        704,
        672
      ],
      "parameters": {
        "amount": "={{ $('Configuration').item.json.poll_wait_seconds }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "6501e2a1-a939-4bb5-989d-059a1fd9d07f",
      "name": "Sticky Note 4de2dbf3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -656,
        128
      ],
      "parameters": {
        "color": 0,
        "width": 600,
        "height": 1020,
        "content": "# Dub videos with ElevenLabs and publish them to YouTube and TikTok\n\n# \ud83d\udce5  [Open full documentation on Notion](https://automatisation.notion.site/Dub-a-video-with-ElevenLabs-and-publish-to-YouTube-TikTok-Course-material-38a3d6550fd981469f3bd1ca2c020da8)\n\nSend any video link to your Telegram bot. The workflow sends it to the ElevenLabs Dubbing API for AI dubbing into the language of your choice, waits for the dub to finish, then republishes the translated video to YouTube and TikTok through [Blotato](https://blotato.com/?ref=firas). One link in, a dubbed video out on two platforms.\n\n## How it works\n- A Telegram message containing a video URL starts the run (YouTube, TikTok, Vimeo, Google Drive, S3 or a direct link).\n- The **Configuration** node centralises every setting: target language, source language, number of speakers, polling delay and captions.\n- **Create dubbing job** posts the URL to ElevenLabs and receives a dubbing id.\n- **Wait \u2192 Get dubbing status \u2192 Check dubbing status** poll the job until ElevenLabs returns `dubbed` (or `failed`).\n- **Download dubbed video** retrieves the translated MP4 as a binary file.\n- **Upload dubbed video to Blotato** re-hosts the file and returns a public URL.\n- **Publish to YouTube** and **Publish to TikTok** post the dubbed video, flagged as AI-generated.\n- **Notify on Telegram** sends you a confirmation.\n\n## Setup\n1. Import this workflow.\n2. **Telegram**: create a bot with @BotFather, copy the token, add a Telegram API credential, and select it on the trigger and on Notify on Telegram.\n3. **ElevenLabs**: create an API key (Profile \u2192 API Keys). Add a Header Auth credential named `ElevenLabs API` with Name `xi-api-key` and Value your key. Select it on the three ElevenLabs HTTP nodes.\n4. **Blotato**: install the verified community node, add a Blotato API credential, then open both publish nodes and pick your connected YouTube and TikTok accounts in the Account dropdown.\n5. In **Configuration**, set `target_lang` (e.g. `en`, `es`, `fr`) and a default `youtube_title`.\n6. Send a video link to your Telegram bot to run it.\n\n## Requirements\n- An ElevenLabs account with API access (dubbing is billed per minute of source audio \u2014 check the ElevenLabs pricing page).\n- A Telegram bot token.\n- A [Blotato](https://blotato.com/?ref=firas) account with YouTube and TikTok connected.\n- n8n self-hosted, or n8n Cloud with Verified Community Nodes enabled (required for the Blotato node).\n- Binary upload to Blotato is capped at 60 MB, so this template targets short-form videos. For longer videos, host the dub on Drive/S3 and switch the Blotato upload to URL mode.\n\n## Customization\n- Change `target_lang` to dub into any of the 90+ supported languages.\n- Set `num_speakers` to a fixed number if auto-detection misreads your video.\n- Add more Blotato publish nodes (Instagram, Facebook, Threads) after the upload to reach more platforms.\n- Swap the Telegram trigger for a Schedule or Form trigger to feed URLs differently."
      },
      "typeVersion": 1
    },
    {
      "id": "b9003038-43ed-46fd-83f3-258cdb9ceccf",
      "name": "Sticky Note 4f84a42b",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 548,
        "content": "## 1. Receive & configure\nSend a video URL to your Telegram bot. Every adjustable setting lives in the Configuration node \u2014 beginners only need to touch this node."
      },
      "typeVersion": 1
    },
    {
      "id": "8236c124-e8d5-455a-a923-51642fd8ea19",
      "name": "Sticky Note 956c717e",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 980,
        "height": 560,
        "content": "## 2. Dub with ElevenLabs\nSubmit the video to the ElevenLabs Dubbing API, then poll (Wait \u2192 Get status \u2192 Check status) until the translated video is dubbed. A failed status stops the run cleanly."
      },
      "typeVersion": 1
    },
    {
      "id": "2df3867f-2f44-4785-843d-4f2cd53f4657",
      "name": "Sticky Note af0f062a",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1456,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 564,
        "content": "## 3. Fetch & re-host\nDownload the dubbed MP4 as binary, then upload it to Blotato to get a public media URL the social platforms can read."
      },
      "typeVersion": 1
    },
    {
      "id": "50b8ffa5-9b26-4113-bf51-88822444461c",
      "name": "Sticky Note 4580c3a2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1904,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 700,
        "height": 564,
        "content": "## 4. Publish everywhere\nPost the dubbed video to YouTube and TikTok (flagged as AI-generated), then send a Telegram confirmation.\n\n\u26a0\ufe0f Blotato is a verified community node \u2014 enable Verified Community Nodes (n8n Cloud) or community nodes (self-hosted) before importing, and select your accounts in each Blotato node."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": true,
    "executionOrder": "v1"
  },
  "versionId": "0de65b74-f480-4ed4-861d-4c690458b956",
  "nodeGroups": [],
  "connections": {
    "Configuration": {
      "main": [
        [
          {
            "node": "Create dubbing job",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for dubbing": {
      "main": [
        [
          {
            "node": "Get dubbing status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to TikTok": {
      "main": [
        [
          {
            "node": "Notify on Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create dubbing job": {
      "main": [
        [
          {
            "node": "Get dubbing status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get dubbing status": {
      "main": [
        [
          {
            "node": "Check dubbing status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to YouTube": {
      "main": [
        [
          {
            "node": "Publish to TikTok",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check dubbing status": {
      "main": [
        [
          {
            "node": "Download dubbed video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Dubbing failed",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait for dubbing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download dubbed video": {
      "main": [
        [
          {
            "node": "Upload dubbed video to Blotato",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive video link on Telegram": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload dubbed video to Blotato": {
      "main": [
        [
          {
            "node": "Publish to YouTube",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow accepts a video URL from Telegram, sends it to the ElevenLabs Dubbing API to generate a dubbed version in a target language, then uploads the result to Blotato to publish it on YouTube and TikTok and confirms completion back in Telegram. Triggers when a Telegram…

Source: https://n8n.io/workflows/16773/ — original creator credit. Request a take-down →

More Social Media workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Social Media

This workflow takes a Telegram message containing an idea or URL, uses OpenAI to generate platform-ready captions plus an image prompt, creates an image via AtlasCloud (Grok Imagine), then publishes t

Telegram Trigger, Agent, OpenAI Chat +7
Social Media

This workflow listens for a Telegram message containing an idea or URL, extracts any linked page text, uses OpenAI to generate LinkedIn/X/Instagram captions plus an image prompt, creates an illustrati

Telegram Trigger, Agent, OpenAI Chat +6
Social Media

This workflow listens for a Telegram message containing a photo and caption, generates an image-to-video clip via AtlasCloud (WAN 2.7), then publishes the resulting video to TikTok, Instagram, and Fac

Telegram Trigger, Telegram, HTTP Request +1
Social Media

This workflow listens for a TikTok URL sent to a Telegram bot, downloads the source video file without a watermark, uploads it to Blotato, publishes it to YouTube (and optionally TikTok), and then sen

Telegram Trigger, HTTP Request, @Blotato/N8N Nodes Blotato +1
Social Media

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

@Blotato/N8N Nodes Blotato, Google Sheets, OpenAI +8