Telegram + Blotato: publish short videos everywhere
Posting a short video is never “just posting.” It’s exporting, rendering, writing a caption, resizing, re-uploading, then doing it again for every platform. And the worst part is how easy it is to lose track of what went where.
This Telegram Blotato automation hits social media managers hardest, but founders doing their own marketing and small teams running client accounts feel it too. You get a repeatable way to go from a single Telegram message to a finished video, ready captions, and posts across nine channels.
Below, you’ll see exactly what the workflow does, what you need to run it, and how the moving parts fit together so you can ship more content without living in upload screens.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Telegram + Blotato: publish short videos everywhere
flowchart LR
subgraph sg0["Trigger Telegram Prompt or Image Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Upload Video to Blotato"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to Instagram"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to YouTube"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to TikTok"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to Facebook Page"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to Threads"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to Twitter (X)"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to LinkedIn"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to Bluesky"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to Pinterest"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Trigger Telegram Prompt or I.."]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Split Prompt or Image Input"]
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Condition Input Type (Image ..", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Download Image from Telegram"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Extract Image File URL"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Upload Image to Cloudinary"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Convert Image to Video"]
n17@{ icon: "mdi:cog", form: "rounded", label: "Wait for Image-to-Video Rend..", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Image-Based Video URL"]
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Video with blotato"]
n20@{ icon: "mdi:cog", form: "rounded", label: "Wait for blotato Video Rende..", pos: "b", h: 48 }
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get blotato Video URL"]
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Merge Video Data (Image or P..", pos: "b", h: 48 }
n23["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Music with Piapi"]
n24@{ icon: "mdi:cog", form: "rounded", label: "Wait for Music Generation", pos: "b", h: 48 }
n25["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Music File URL"]
n26@{ icon: "mdi:robot", form: "rounded", label: "Generate Script (GPT-4o-mini)", pos: "b", h: 48 }
n27["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Split Script"]
n28["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Merge Video + Music"]
n29@{ icon: "mdi:cog", form: "rounded", label: "Wait for Fusion Completion", pos: "b", h: 48 }
n30["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Final Video URL"]
n31@{ icon: "mdi:robot", form: "rounded", label: "Generate Social Caption (GPT..", pos: "b", h: 48 }
n32@{ icon: "mdi:robot", form: "rounded", label: "Generate SEO Title (GPT-4)", pos: "b", h: 48 }
n33@{ icon: "mdi:database", form: "rounded", label: "Append Video Data to Google ..", pos: "b", h: 48 }
n34["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Final Video to Telegram"]
n35["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Caption to Telegram"]
n36@{ icon: "mdi:swap-vertical", form: "rounded", label: "Assign Platform IDs for Blot..", pos: "b", h: 48 }
n27 --> n28
n25 --> n26
n30 --> n31
n28 --> n29
n21 --> n22
n16 --> n17
n14 --> n15
n0 --> n1
n0 --> n2
n0 --> n3
n0 --> n4
n0 --> n5
n0 --> n6
n0 --> n7
n0 --> n8
n0 --> n9
n35 --> n36
n23 --> n24
n18 --> n22
n24 --> n25
n32 --> n33
n15 --> n16
n29 --> n30
n19 --> n20
n11 --> n12
n13 --> n14
n34 --> n35
n26 --> n27
n36 --> n0
n31 --> n32
n10 --> n11
n20 --> n21
n33 --> n34
n17 --> n18
n22 --> n23
n12 --> n19
n12 --> n13
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n10 trigger
class n26,n31,n32 ai
class n12 decision
class n33 database
class n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n14,n15,n16,n18,n19,n21,n23,n25,n28,n30 api
class n11,n27 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n13,n14,n15,n16,n18,n19,n21,n23,n25,n27,n28,n30,n34,n35 customIcon
Why This Matters: Multi-platform posting eats your week
You can have a great idea and still lose the day to production and distribution. One tool generates a video, another adds music, something else handles text overlays, and then you’re juggling caption formats and title lengths for each platform. If you’re doing this manually, you’re also babysitting downloads, re-uploads, and “where did I save that final version?” moments. It’s not just time. It’s mental clutter, broken momentum, and inconsistency that shows up as missed posting days. Honestly, that inconsistency is what kills growth.
It adds up fast. Here’s where it breaks down in real workflows.
- You end up rendering the same content multiple times because each platform wants a slightly different upload or format.
- Captions and titles get rushed, which means weaker hooks and more edits after publishing.
- Manual uploading across nine platforms can burn about 2 hours per video when you include switching accounts and adding details.
- No central log of posted URLs makes reporting feel like detective work at the end of the week.
What You’ll Build: Telegram-driven video creation + auto-publishing to 9 platforms
This workflow turns Telegram into your content command center. You send a text prompt or an image prompt to a Telegram bot, and the automation decides what to do with it. If it’s an image, it fetches the file, uploads it to Cloudinary, and converts it into a video source. If it’s text-only, it goes straight into video generation via Blotato (and optionally Kling, depending on your setup). Then it creates music with Piapi, merges the audio with the video, and uses GPT‑4 to write on-screen text plus a platform-ready caption and SEO-friendly title. Finally, it posts the finished video through Blotato to nine platforms and logs the title, caption, and URL in Google Sheets so you always have a clean record.
The workflow starts with a Telegram message. AI handles overlays, captions, and titles while the video and music are rendered in the background. At the end, you receive the final video back in Telegram, your posts go live across your selected channels, and Google Sheets becomes your reporting hub.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you publish one short video a day to 9 platforms. Manually, even a “quick” workflow is maybe 10 minutes per platform once you include uploads, captions, and double-checking accounts, so you’re at about 90 minutes daily. With this automation, you spend about 2 minutes sending the Telegram prompt, then wait roughly 30 minutes while video, music, and overlays render and posts publish. That’s about an hour back each day, and your links are already logged in Sheets.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Telegram Bot to receive prompts and send results.
- Blotato to generate and publish videos to platforms.
- OpenAI API key (get it from your OpenAI dashboard)
Skill level: Intermediate. You’ll be connecting APIs, setting account IDs, and running a self-hosted n8n instance because this workflow uses community nodes.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A Telegram message triggers everything. You send either a text prompt or an image prompt to your Telegram bot. The workflow parses the input and decides which generation route to use.
The workflow prepares media sources. If you sent an image, it fetches the file from Telegram, uploads it to Cloudinary, and transforms it into a video. If you sent text only, it kicks off a Blotato video render. In both cases, n8n waits for rendering to complete and then retrieves the final media link.
AI writes the parts you normally rush. GPT‑4 drafts overlay lines (split into clean, timed segments), generates a social caption, and composes a more SEO-friendly title you can reuse across channels. You can keep it generic, but you will get better results once you add your brand voice.
Publishing and logging happen automatically. The workflow fuses music into the video, sends the final video back to Telegram, pushes the post to nine platforms through Blotato, and appends Title, Caption, and URL to Google Sheets for reporting.
You can easily modify the platform list to publish only where you care about, and adjust the caption style to match each channel. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Telegram Trigger
Set up the Telegram entry point so users can send text prompts or images to start the video pipeline.
- Add and configure Telegram Input Trigger to listen for updates set to
message. - Credential Required: Connect your
telegramApicredentials in Telegram Input Trigger. - Verify the workflow starts with Telegram Input Trigger → Parse Prompt or Image.
Step 2: Parse Input and Route by Mode
Split the incoming Telegram message into video prompt, caption idea, and music style, then route based on text vs. image input.
- In Parse Prompt or Image, keep the provided JavaScript to parse
videoPrompt,captionIdea, andmusicStyle. - In Check Input Mode, confirm the condition uses
{{ $('Telegram Input Trigger').item.json.message.text }}with operator set tonotEmpty. - Confirm routing: Check Input Mode branches to Create Blotato Video (text-based) and Fetch Telegram Image (image-based).
generate video: prompt, caption idea, music style.Step 3: Configure Image-to-Video and Music Generation
Prepare the image pipeline and the music creation chain before composing the final video.
- In Fetch Telegram Image, set fileId to
{{ $('Telegram Input Trigger').item.json.message.photo[3].file_id }}and resource tofile. - Credential Required: Connect your
telegramApicredentials in Fetch Telegram Image. - In Retrieve Image File Link, set url to
https://api.telegram.org/file/bot_[CONFIGURE_YOUR_TOKEN]/{{ $('Fetch Telegram Image').item.json.result.file_path }}. - In Send Image to Cloudinary, set url to
https://api.cloudinary.com/v1_1/dc5wapno3/image/uploadwith contentTypemultipart-form-dataand upload_presetn8n_video. - Credential Required: Connect your
httpBasicAuthcredentials in Send Image to Cloudinary. - In Transform Image into Video, keep the JSON body using
{{ $('Parse Prompt or Image').item.json.videoPrompt }}and{{ $json.secure_url }}. - Credential Required: Connect your
httpBasicAuthandhttpHeaderAuthcredentials in Transform Image into Video. - In Pause for Image Render, set unit to
minutesand amount to2, then in Fetch Image Video Link usehttps://api.piapi.ai/api/v1/task/{{ $json.data.task_id }}. - Credential Required: Connect your
httpHeaderAuthcredentials in Fetch Image Video Link. - In Create Music via Piapi, keep
style_promptas{{ $('Parse Prompt or Image').item.json.musicStyle }}. - Credential Required: Connect your
httpHeaderAuthcredentials in Create Music via Piapi and Fetch Music File Link. - In Pause for Music Render, set unit to
minutesand amount to2, then in Fetch Music File Link set url tohttps://api.piapi.ai/api/v1/task/{{ $json.data.task_id }}.
bot_[CONFIGURE_YOUR_TOKEN]. Replace this with your real Telegram bot token.Step 4: Set Up AI Copy Generation and Video Fusion
Generate overlay text, captions, and a YouTube title using AI, then fuse video, text, and music.
- In Draft Overlay Script, ensure the prompt uses
{{ $('Parse Prompt or Image').first().json.captionIdea }}and the model is set togpt-4o-mini. - Credential Required: Connect your
openAiApicredentials in Draft Overlay Script. - Keep the parsing logic in Separate Script Lines to split output into
text1andtext2. - In Fuse Video and Music, verify url is
https://api.json2video.com/v2/moviesandsrcpoints to{{ $('Combine Video Sources').item.json.url_video }}with audio{{ $('Fetch Music File Link').item.json.data.output.audio_url }}. - Credential Required: Connect your
httpCustomAuthcredentials in Fuse Video and Music and Retrieve Final Video Link. - In Wait for Fusion Finish, set unit to
minutesand amount to1, then use Retrieve Final Video Link withhttps://api.json2video.com/v2/movies?id={{ $json.project }}. - In Craft Social Caption and Compose SEO Title, keep the prompt using
{{ $('Parse Prompt or Image').first().json.captionIdea }}and the modelgpt-4o-mini. - Credential Required: Connect your
openAiApicredentials in Craft Social Caption and Compose SEO Title.
text1: and text2:.Step 5: Store Output and Notify Telegram
Save the final assets in Google Sheets and send a Telegram confirmation plus the rendered video back to the user.
- In Append Data to Sheet, set operation to
appendand map fields: url to{{ $('Retrieve Final Video Link').item.json.movie.url }}, Title to{{ $json.message.content }}, and caption to{{ $('Craft Social Caption').item.json.message.content }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Append Data to Sheet. - In Notify Telegram with Video, keep text as
Here's your scheduled video: ...and chatId as{{ $('Telegram Input Trigger').first().json.message.chat.id }}. - Credential Required: Connect your
telegramApicredentials in Notify Telegram with Video and Send Video via Telegram. - In Send Video via Telegram, set operation to
sendVideo, file to{{ $('Append Data to Sheet').item.json['url '] }}, and chatId to{{ $json.result.chat.id }}.
Step 6: Configure Blotato Publishing and Parallel Social Posts
Publish the finished video to multiple social platforms via Blotato, using parallel execution.
- In Set Blotato Platform IDs, replace all
[YOUR_ID]placeholders with your actual Blotato account and platform IDs. - In Send Video to Blotato, keep url as
https://backend.blotato.com/v2/mediaand set body param url to{{ $('Append Data to Sheet').item.json['url '] }}. - Send Video to Blotato outputs to both Publish to Instagram and Publish to YouTube and Publish to TikTok and Publish to Facebook Page and Publish to Threads and Publish to Twitter X and Publish to LinkedIn and Publish to Bluesky and Publish to Pinterest in parallel.
- Verify each publish node’s JSON body points to IDs from Set Blotato Platform IDs and captions from Append Data to Sheet, e.g.,
{{ $('Append Data to Sheet').item.json.caption }}.
blotato-api-key header. Add the header or configure credentials manually in Send Video to Blotato, Create Blotato Video, Retrieve Blotato Video Link, and all Publish to ... nodes.Step 7: Test & Activate Your Workflow
Validate end-to-end execution and enable the workflow for production use.
- Click Execute Workflow and send a Telegram message to your bot with a prompt like
generate video: travel tip, packing hack, chill beats. - Confirm successful runs: a final video URL in Append Data to Sheet and a Telegram message from Notify Telegram with Video.
- Check that social posts are created after Send Video to Blotato triggers the parallel publish nodes.
- Once verified, toggle the workflow to Active to run continuously.
Troubleshooting Tips
- Blotato credentials can expire or the account IDs can be wrong. If posting fails, check your Blotato API key and the platform-specific account IDs in the “Set Blotato Platform IDs” step first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
Plan for about 60–90 minutes if you already have all API keys.
No. You’ll mostly paste API keys, map a few fields, and test with sample Telegram prompts.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs plus whatever Blotato, Piapi, and media hosting cost for your volume.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you probably should. You can add an approval gate by inserting a Telegram “confirm” step right before “Send Video to Blotato,” so nothing publishes until you reply. You can also disable platforms by removing the HTTP Request publish nodes you don’t need (like Bluesky or Pinterest), and tweak the “Craft Social Caption” and “Compose SEO Title” prompts to match your brand voice and CTA style. If you want heavier branding, change text styling in the JSON2Video part so overlays match your fonts and colors.
Usually it’s an invalid API key or a mismatched platform account ID in the “Set Blotato Platform IDs” step. Double-check that the Blotato project has access to the channels you’re trying to post to, then re-run a single-platform test (Instagram only, for example) before turning everything back on. Rate limits can also show up if you trigger a lot of renders back-to-back, so spacing runs out a bit helps.
On a typical self-hosted setup, you can run as many executions as your server can handle, but video generation APIs will be your real bottleneck. Practically, most teams start with a handful of videos per day and scale up once waits, retries, and costs are dialed in. If you use n8n Cloud, your monthly execution limit depends on the plan.
Often, yes, because this workflow has branching logic (text vs image), multiple “wait for render” stages, and a lot of HTTP calls that get awkward and expensive in simpler tools. n8n also gives you self-hosting, which matters when you’re running frequent jobs. Zapier or Make can still work if you only want “message in, post out” with minimal processing and you’re fine paying for volume. The moment you need multi-step rendering checks, retries, and richer AI prompting, n8n tends to feel more controllable. Talk to an automation expert if you want help choosing.
Once this is running, publishing stops being a separate job you dread. The workflow handles the repetitive parts so you can focus on better ideas and stronger series.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.