Telegram to Google Drive, shorts delivered ready to post
Short-form video “production” can turn into a weird pile of half-finished clips, missing files, and links that worked yesterday but not today. Then you waste another hour trying to rebuild what should’ve been one simple post.
This Telegram Drive shorts automation hits content marketers first, honestly. But agency owners and solo creators feel it too, especially when you’re trying to post consistently without hiring an editor.
You send one prompt in Telegram. The workflow generates a visually consistent one-minute short, saves assets to Google Drive, merges everything, and delivers the final video back to you, ready to post.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Telegram to Google Drive, shorts delivered ready to post
flowchart LR
subgraph sg0["Telegram Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Generate a video1", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Telegram Trigger"]
n2@{ icon: "mdi:robot", form: "rounded", label: "Generate a video2", pos: "b", h: 48 }
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/>HTTP Request"]
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/>HTTP Request1"]
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
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/>HTTP Request2"]
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/telegram.svg' width='40' height='40' /></div><br/>Send a video"]
n8@{ icon: "mdi:cog", form: "rounded", label: "Upload video1", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Label URL 1", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Label URL 2", pos: "b", h: 48 }
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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n12@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "Generate a video3", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Label URL 3", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Upload video4", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Label URL 4", pos: "b", h: 48 }
n17@{ icon: "mdi:robot", form: "rounded", label: "Generate a video4", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Upload video5", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Label URL 5", pos: "b", h: 48 }
n20@{ icon: "mdi:robot", form: "rounded", label: "Generate a video5", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "Upload video", pos: "b", h: 48 }
n22@{ icon: "mdi:cog", form: "rounded", label: "Upload video3", pos: "b", h: 48 }
n23@{ icon: "mdi:cog", form: "rounded", label: "Upload video6", pos: "b", h: 48 }
n24@{ icon: "mdi:robot", form: "rounded", label: "Generate a video", pos: "b", h: 48 }
n25@{ icon: "mdi:swap-vertical", form: "rounded", label: "Label URL 6", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Label URL 7", pos: "b", h: 48 }
n27@{ icon: "mdi:cog", form: "rounded", label: "Upload video7", pos: "b", h: 48 }
n28@{ icon: "mdi:robot", form: "rounded", label: "Generate a video6", pos: "b", h: 48 }
n29@{ icon: "mdi:cog", form: "rounded", label: "Wait3", pos: "b", h: 48 }
n30@{ icon: "mdi:cog", form: "rounded", label: "Wait5", pos: "b", h: 48 }
n31@{ icon: "mdi:cog", form: "rounded", label: "Wait4", pos: "b", h: 48 }
n32["<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 a text message"]
n33["<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 a text message2"]
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 a text message3"]
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 a text message4"]
n36["<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 a text message5"]
n37["<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 a text message6"]
n38["<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 a text message7"]
n39["<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 a text message8"]
n40@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n41@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n42@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n43@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
n44@{ icon: "mdi:database", form: "rounded", label: "Save to Google Sheets", pos: "b", h: 48 }
n45["<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 message and wait for re.."]
n5 --> n6
n5 --> n12
n43 --> n40
n43 --> n24
n43 --> n17
n43 --> n31
n43 --> n30
n43 --> n2
n43 --> n0
n43 --> n29
n12 --> n4
n11 --> n3
n29 --> n28
n31 --> n20
n30 --> n13
n40 --> n44
n9 --> n11
n10 --> n11
n14 --> n11
n16 --> n11
n19 --> n11
n25 --> n11
n26 --> n11
n3 --> n4
n21 --> n10
n4 --> n5
n6 --> n7
n8 --> n9
n22 --> n14
n15 --> n16
n18 --> n19
n23 --> n25
n27 --> n26
n24 --> n23
n24 --> n37
n1 --> n39
n1 --> n40
n0 --> n8
n0 --> n32
n2 --> n21
n2 --> n33
n13 --> n22
n13 --> n34
n17 --> n15
n17 --> n35
n20 --> n18
n20 --> n36
n28 --> n27
n28 --> n38
n42 -.-> n40
n44 --> n45
n41 -.-> n40
n45 --> n43
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 n1 trigger
class n0,n2,n13,n17,n20,n24,n28,n40,n41 ai
class n42 aiModel
class n5,n43 decision
class n44 database
class n3,n4,n6 api
classDef customIcon fill:none,stroke:none
class n1,n3,n4,n6,n7,n11,n32,n33,n34,n35,n36,n37,n38,n39,n45 customIcon
The Problem: Short-Form Video Gets Stuck in “Almost Done”
The annoying part about short-form video isn’t coming up with ideas. It’s everything that happens after. You generate a clip, download it, rename it, upload it somewhere, then you realize you need six more clips that match the same look. Now you’re juggling links, folders, and “final_final_v7.mp4” files. Miss one upload or paste the wrong URL and your merge tool can’t fetch the assets, so you start over. That’s not creative work. It’s friction dressed up as productivity.
It adds up fast. Here’s where it breaks down in real life.
- You end up babysitting multiple clip generations just to keep the visuals consistent across scenes.
- Saving and sharing files becomes a mini project, and one broken link can kill the whole merge.
- Without a simple log, you can’t track which prompts produced which videos, so repeating what worked is hard.
- Manual stitching and re-uploading steals the time you planned to use for writing hooks and testing new angles.
The Solution: One Telegram Prompt In, One Ready-to-Post Short Out
This n8n workflow turns Telegram into your “start button” for a full short-form production pipeline. You message your bot with a trigger command (like /makevideo plus your topic). An AI agent reformats that idea into a structured plan, then generates a sequence of video clips (seven scenes) designed to feel coherent, not random. As each clip is created, it’s uploaded into a designated Google Drive folder and turned into a shareable URL so a merging service can reliably fetch it. When all clips are ready, the workflow sends an API request to merge them into a single one-minute video, checks status until it’s complete, then delivers the finished video back to you in Telegram.
The workflow starts with a Telegram message and a quick confirmation step. Then it creates and stores each clip in Google Drive, collects the URLs, and calls a merge API (with automatic re-checks). Finally, you receive the final one-minute short in Telegram, plus your Drive folder stays organized for reuse.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 5 shorts a week and each one needs 7 scenes. Manually, that often looks like generating 7 clips, downloading 7 files, uploading 7 files to storage, then copying 7 links into a merger, which is easily about 10 minutes per clip once you count the little fixes (so roughly 70 minutes per short). With this workflow, you spend about 2 minutes sending the Telegram prompt and confirming, then you wait while clips generate and merge in the background. You get the final video in Telegram, and all assets are already in Google Drive.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Telegram to send prompts and receive videos.
- Google Drive to store clips and final exports.
- Google Sheets for logging prompts and runs.
- OpenAI API key (get it from your OpenAI API dashboard).
- Google (Gemini/Veo) access for generating the video clips.
- Merge API access (FAL) (get it from your FAL account settings).
Skill level: Intermediate. You’ll connect accounts, paste a few API keys, and test one run end-to-end.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Telegram message triggers the run. You send a command like /makevideo plus a topic to your Telegram bot, and the workflow replies immediately so you know it started.
Your prompt gets “production-ready.” An AI agent (OpenAI chat + a structured parser) turns the idea into consistent scene instructions, then logs the request into Google Sheets for tracking and reuse.
Clips are generated and stored as they finish. The workflow creates seven video clips (Veo/Gemini), uploads each one to Google Drive, and records a public URL for merging. You also get progress updates in Telegram as clips become ready.
Everything merges into one final short. n8n sends the clip URLs to a merge API via HTTP request, checks status with a simple loop and waits, then fetches the final video and sends it back to you in Telegram.
You can easily modify the number of clips to match your style (for example, 5 scenes instead of 7) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Telegram Trigger
This workflow starts when a user sends a message to Telegram. You’ll wire the trigger and the immediate notification branch.
- Add and configure Telegram Intake Trigger to listen for updates set to
message. - Credential Required: Connect your Telegram credentials in Telegram Intake Trigger (this workflow does not include credentials).
- In Telegram Start Notice, set Chat ID to
={{ $('Telegram Intake Trigger').item.json.message.chat.id }}and Text to=Hey {{ $json.message.from.first_name }}! Your Request Is being processed. WARNING: DO not send an aditional message until full video is recived as it will interupt the process.. - Confirm the parallel start: Telegram Intake Trigger outputs to both Telegram Start Notice and Prompt Composer Agent in parallel.
⚠️ Common Pitfall: If Telegram credentials are missing, the trigger will never fire and notifications will fail. Add Telegram credentials to all Telegram nodes (10+ notification nodes in this workflow).
Step 2: Connect Google Sheets
The AI script and prompts are stored in a sheet before video generation begins.
- Open Append to Sheets and set Operation to
appendOrUpdate. - Set Document to
[YOUR_ID](namedVEO Videos) and Sheet Name toSheet1(valuegid=0). - Map columns exactly as shown, for example Script to
={{ $('Prompt Composer Agent').item.json.output.items[0].script }}and Prompt 1 to={{ $('Prompt Composer Agent').item.json.output.items[0].prompt1 }}through Prompt 7. - Credential Required: Connect your Google Sheets credentials in Append to Sheets (this workflow does not include credentials).
Step 3: Set Up Prompt Composer Agent (AI Orchestration)
This step builds the structured script and seven prompts using an AI agent and a structured output parser.
- In Prompt Composer Agent, keep the long prompt block and ensure the Prompt Type is
definewith Has Output Parser enabled. - Ensure OpenAI Chat Engine is connected as the language model for Prompt Composer Agent. Credential Required: Connect your OpenAI credentials in OpenAI Chat Engine (the agent uses these credentials).
- Ensure Structured JSON Parser is connected as the output parser for Prompt Composer Agent. Credential Required: Add any AI-related credentials to Prompt Composer Agent (not the parser sub-node).
- Confirm the flow: Prompt Composer Agent → Append to Sheets → Request Confirmation.
Tip: Request Confirmation uses sendAndWait and expects a free-text reply. Keep the message text as shown: LOOK AT THE MOST RECENT SPREADHSEET INPUT AND THEN REPLY WITH: "CONFIRM" OR "RETRY".
Step 4: Configure Video Generation, Storage, and Notifications
Seven clips are generated via Gemini, stored in Drive, and each completion sends a Telegram update. Several nodes run in parallel.
- For each Gemini node (Create Clip One through Create Clip Seven), set Prompt to the appropriate sheet field, e.g. Create Clip One uses
={{ $('Append to Sheets').item.json['Prompt 1'] }}. - Confirm waiting buffers: Delay Before Clip Three, Delay Before Clip Five, and Delay Before Clip Seven each set Unit to
minutesand Amount to1.5. - In each Drive storage node (Store Clip One through Store Clip Seven), set Name to
={{$now.format('yyyyLLdd')}}{{ $json.fileName }}and select the Folder[YOUR_ID](cached nameVEO VIDEOS). - In each Set node (Mark URL One through Mark URL Seven), map the output URL. Example: Mark URL One assigns prompt(1) to
={{ $json.webContentLink }}. - Confirm parallel branching: Create Clip One outputs to both Store Clip One and Notify Clip One Ready in parallel (repeat this pattern for Clips Two–Seven; Create Clip Seven also triggers Notify All Clips Ready).
- Credential Required: Connect your Google Gemini credentials to all Create Clip One–Create Clip Seven nodes (7 nodes).
- Credential Required: Connect your Google Drive credentials to all Store Clip One–Store Clip Seven nodes (7 nodes).
- Credential Required: Connect your Telegram credentials to all notification nodes (Notify Clip One Ready through Notify All Clips Ready).
⚠️ Common Pitfall: The URL fields are case-sensitive. Mark URL One uses prompt(1) while others use Prompt(2), Prompt(3), etc. This must match the JSON body in Merge API Call.
Step 5: Configure Merge and Polling Logic
Once all URLs are gathered, clips are merged via an HTTP API, then polled until completed.
- In Combine Clip URLs, set Mode to
combine, Combine By tocombineByPosition, and Number Inputs to7. - In Merge API Call, keep URL as
https://queue.fal.run/fal-ai/ffmpeg-api/merge-videosand set Method toPOSTwith Specify Body set tojson. - Set JSON Body to the provided expression block, ensuring the seven URL references match:
={{ $json["prompt(1)"] }},={{ $json["Prompt(2)"] }},={{ $json['Prompt(3)'] }},={{ $json['Prompt(4)'] }},={{ $json['Prompt(5)'] }},={{ $json['Prompt(6)'] }},={{ $json['Prompt(7)'] }}. - Set headers in Merge API Call and Check Merge Status to include Authorization
Key [CONFIGURE_YOUR_API_KEY]and Content-Typeapplication/json. - In Check Merge Status, set URL to
={{ $json.status_url }}. - In Merge Complete?, keep the condition Left Value
={{ $json.status }}equalsCOMPLETED. - In Pause Before Recheck, set Amount to
30seconds to throttle polling before looping back to Check Merge Status.
Step 6: Configure Output Delivery
When the merge is complete, the final video is fetched and delivered to the user in Telegram.
- In Fetch Merge Result, set URL to
={{ $json.response_url }}and include the same API headers as the merge request. - In Send Final Video, set Operation to
sendVideo, File to={{ $json.video.url }}, and Chat ID to={{ $('Telegram Intake Trigger').item.json.message.chat.id }}. - Credential Required: Connect your Telegram credentials to Send Final Video if not already connected.
Step 7: Test and Activate Your Workflow
Validate the end-to-end flow from Telegram intake to final merged video delivery.
- Use Telegram Intake Trigger to send a test message and verify you receive Telegram Start Notice immediately.
- Confirm that Append to Sheets writes a new row with Script and Prompt 1–7 fields populated from Prompt Composer Agent.
- Reply to Request Confirmation with
CONFIRMto proceed; verify that video creation begins and Telegram notifications arrive for clips 1–7. - Check that Merge API Call runs after Combine Clip URLs and that Merge Complete? eventually routes to Fetch Merge Result.
- A successful run ends with Send Final Video delivering the merged video to Telegram.
- When satisfied, toggle the workflow to Active for production use.
Common Gotchas
- Google Drive permissions matter. If the merge can’t fetch clips, check the sharing settings on the uploaded files and the target folder 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.
Frequently Asked Questions
About 30–60 minutes if your Telegram and Google accounts are ready.
No. You’ll mostly paste API keys and connect Telegram and Google Drive. The “logic” is already built into the workflow.
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 and video generation/merge API usage, which varies with how many shorts you generate.
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, but you’ll want to do it carefully. The easiest approach is to remove the extra “Create Clip” + “Store Clip” + “Mark URL” nodes for the scenes you don’t need, then update the Merge step that combines clip URLs so it only expects five. Common customizations include changing the Drive folder, tweaking the prompt composer to match your brand voice, and adjusting wait times so the merge status check doesn’t fire too early.
Usually it’s expired Google credentials or missing Drive permissions on the account you connected. Reconnect Google Drive in n8n, confirm the target folder still exists, and verify files are being created where the workflow expects. Also check sharing settings, because the merge service needs URLs it can actually access.
On a typical n8n Cloud plan, it can handle plenty for a small team, and self-hosting removes execution limits (your server becomes the bottleneck).
For AI-heavy, multi-step video workflows, n8n is usually a better fit because you can branch, retry, wait, and poll external APIs without turning every small step into a separate billable task. The workflow also benefits from having “state” across many nodes (seven clip URLs, merge status checks, retries), which is where simpler automation tools can get fragile. Zapier or Make can still work if you trim the scope down to something like “Telegram prompt → one clip → send link,” but you’ll lose the full studio-style pipeline. If you’re deciding between approaches, think about volume and how much you hate babysitting failures. Talk to an automation expert if you want help choosing.
Once this is running, “make a short” becomes a single message you send, not a mini editing session. The workflow handles the repetitive parts so you can focus on posting, iterating, and moving on.
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.