Telegram to LinkedIn, approve posts before they go live
If LinkedIn posting feels like a messy side project, you’re not imagining it. Ideas land in random places, drafts get rewritten three times, and you still hesitate before hitting publish.
This Telegram LinkedIn approval automation hits marketing managers first, but founders and consultants feel it too. You get a repeatable “draft → feedback → approve → publish” loop that protects your voice and stops half-finished posts from slipping through.
You’ll see how the workflow turns a Telegram text (or voice note) into a LinkedIn-ready post, keeps revisions inside the same chat, and only publishes once you explicitly approve it.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Telegram to LinkedIn, approve posts before they go live
flowchart LR
subgraph sg0["Start: Telegram Message Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "Speech to Text", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Get Voice File"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if Approved", pos: "b", h: 48 }
n4@{ icon: "mdi:memory", form: "rounded", label: "Window Buffer Memory", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Start: Telegram Message"]
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Input", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check: ist it a Voice?", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "AI: Draft & Revise Post", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Approval: Extract Final Post.."]
n10@{ icon: "mdi:cog", form: "rounded", label: "Create post with Blotato", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Give Blotat 5s :)", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Check post status", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Published?", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Send a confirmation message"]
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "In Progress?", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Give Blotat other 5s :)", pos: "b", h: 48 }
n17["<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 an error message"]
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/telegram.svg' width='40' height='40' /></div><br/>Post Suggestion Or Ask For A.."]
n13 --> n14
n13 --> n15
n15 --> n16
n15 --> n17
n6 --> n7
n2 --> n1
n1 --> n8
n3 --> n9
n3 --> n18
n12 --> n13
n11 --> n12
n0 -.-> n8
n4 -.-> n8
n7 --> n2
n7 --> n8
n8 --> n3
n16 --> n12
n5 --> n6
n10 --> n11
n9 --> n10
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 n5 trigger
class n1,n8 ai
class n0 aiModel
class n4 ai
class n3,n7,n13,n15 decision
class n9 code
classDef customIcon fill:none,stroke:none
class n2,n5,n9,n14,n17,n18 customIcon
The Challenge: Publishing consistently without sounding generic
LinkedIn rewards consistency, but consistency is hard when every post starts from scratch. One day you have a solid idea, the next day you’re staring at a blank page, rewriting the hook because it “doesn’t feel like you.” Voice notes help, until you have to transcribe them. Collaboration helps, until feedback is split across Slack, docs, and DMs. And the biggest issue is trust: if you automate publishing too early, you risk posting something slightly off-brand at the worst possible time.
It adds up fast. Here’s where it breaks down in real life.
- Drafting from a raw idea can take 30 minutes, and that’s before edits or approvals.
- Voice notes are quick to record, but converting them into clean text becomes a tedious extra step.
- Feedback arrives in fragments, so you end up doing “final” rewrites that are not final at all.
- Posting without a clear approval moment creates anxiety, which often turns into missed posting days.
The Fix: Telegram-to-draft creation with an approval loop
This workflow turns Telegram into your capture box, your writing assistant, and your “publish gate.” You send a message to your Telegram bot as plain text or a voice note. If it’s voice, the workflow downloads the audio and transcribes it using OpenAI’s speech-to-text. Then an AI agent drafts a LinkedIn post using a structured prompt (hook up top, readable paragraphs, hashtags at the end, emojis used sparingly). The draft comes back to Telegram for review, and you can reply with feedback like “shorter,” “more direct,” or “make it more technical.” Nothing gets posted yet. Only when you reply with an approval keyword (“ok,” “approved,” “sounds good”) does the workflow switch formats, extract the final post text, and publish via Blotato to LinkedIn.
The flow begins with a Telegram message trigger, then optionally transcribes audio, then runs the AI drafting and revision loop. After approval, Blotato publishes the post, and the workflow checks status until it’s published (or fails), then messages you the result with a link.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you post 4 times a week. Manually, a typical cycle might be 30 minutes to write, 10 minutes to polish formatting and hashtags, and another 10 minutes to get final sign-off or confidence to publish, so roughly 50 minutes per post (over 3 hours weekly). With this workflow, you drop a Telegram idea in about a minute, spend maybe 5 minutes refining the AI draft in chat, then reply “ok.” Publishing runs in the background with a couple short status checks. You’re usually back to work in under 10 minutes.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Telegram to capture ideas and approvals.
- OpenAI for speech-to-text and draft generation.
- Blotato API Key (get it from your Blotato account settings).
Skill level: Intermediate. You’ll connect credentials, paste API keys, and adjust a prompt, but you won’t be writing code unless you want deeper customization.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A Telegram message kicks everything off. You send either text or a voice note to your bot, and the workflow standardizes that input so the AI gets one clean “prompt.”
Voice notes become usable text. When the incoming message has no text, the workflow downloads the audio from Telegram and transcribes it with OpenAI speech-to-text so nothing gets lost.
The AI drafts, then revises in a loop. An AI agent generates a LinkedIn post using your rules (hook, structure, tone, hashtags), sends it back to Telegram, and uses conversation memory so edits like “more confident” or “cut the fluff” actually stick.
Approval triggers publishing and status checks. Once you reply with an approval keyword, the workflow extracts the final post text, publishes through Blotato, waits briefly, then checks status until it’s published or fails, and finally messages you the result.
You can easily modify the approval keywords or switch from “publish now” to “schedule for tomorrow morning” based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Telegram Message Trigger
Set up the Telegram trigger so the workflow starts whenever a new message arrives.
- Add the Telegram Message Trigger node and set Updates to
message. - Credential Required: Connect your telegramApi credentials in Telegram Message Trigger.
- Connect Telegram Message Trigger to Prepare Message Input.
Step 2: Normalize the Incoming Message
Prepare a consistent text input for the AI, whether the user typed a message or sent a voice note.
- In Prepare Message Input, add a field named text and set String Value to
{{ $json?.message?.text || "" }}. - Connect Prepare Message Input to Voice Note Check.
- In Voice Note Check, set the condition to check if
{{ $json.message.text }}is empty (string → empty). - Connect the true branch of Voice Note Check to Retrieve Voice File and the false branch to AI Draft & Revise.
Step 3: Transcribe Voice Notes and Generate the Draft
Convert voice messages to text, then let the AI generate a LinkedIn post draft.
- In Retrieve Voice File, set File ID to
{{ $('Telegram Message Trigger').item.json.message.voice.file_id }}. - Credential Required: Connect your telegramApi credentials in Retrieve Voice File.
- In Audio Transcription, set Resource to
audioand Operation totranscribe. - Credential Required: Connect your openAiApi credentials in Audio Transcription.
- In AI Draft & Revise, set Text to
{{ $json.text }}and keep Prompt Type asdefine. - Ensure OpenAI Chat Engine is connected as the language model for AI Draft & Revise.
- Credential Required: Connect your openAiApi credentials in OpenAI Chat Engine (credentials are applied to the parent AI node, not the memory sub-node).
- Attach Conversation Window Memory to AI Draft & Revise with Session Key set to
{{ $('Telegram Message Trigger').first().json.message.from.id }}and Context Window Length set to10.
Step 4: Validate Approval and Extract the Final Post
Route the AI output based on whether the user approved the draft and extract the final JSON payload.
- In Approval Validation, keep the three string conditions that check
{{ $json.output }}forvideoPrompt,socialMediaText, or a JSON start ({). - Connect the true branch of Approval Validation to Extract Approved Post.
- Connect the false branch of Approval Validation to Send Draft for Approval.
- In Send Draft for Approval, set Text to
{{ $('AI Draft & Revise').item.json.output }}and Chat ID to{{ $('Telegram Message Trigger').first().json.message.chat.id }}. - Credential Required: Connect your telegramApi credentials in Send Draft for Approval.
- Leave the Extract Approved Post code as-is to parse and validate the JSON output.
Step 5: Publish to LinkedIn via Blotato and Monitor Status
Send the approved post to Blotato, wait for processing, and poll the status until it’s published or fails.
- In Publish via Blotato, set Platform to
linkedin, Account ID to[YOUR_ID], and Post Content Text to{{ $json.Post }}. - Credential Required: Connect your blotatoApi credentials in Publish via Blotato.
- Connect Publish via Blotato → Wait for Blotato → Query Post Status.
- In Query Post Status, set Operation to
getand Post Submission ID to{{ $json.postSubmissionId }}. - Credential Required: Connect your blotatoApi credentials in Query Post Status.
- In Published Status Check, keep the condition
{{ $json.status }}equalspublished, then connect to Send Confirmation Notice. - In In Progress Check, keep the condition
{{ $('Query Post Status').item.json.status }}equalsin-progress, then connect to Wait More for Blotato and loop back to Query Post Status. - Connect the false branch of In Progress Check to Send Failure Alert for non-published states.
Step 6: Configure Telegram Notifications
Send status updates back to the user in Telegram for success or failure.
- In Send Confirmation Notice, set Text to
=Your post is online! Click here to go to the post: {{ $json.publicUrl }}and Chat ID to{{ $('Telegram Message Trigger').item.json.message.chat.id }}. - Credential Required: Connect your telegramApi credentials in Send Confirmation Notice.
- In Send Failure Alert, set Text to
There was an error uploading your post.and Chat ID to{{ $('Telegram Message Trigger').item.json.message.chat.id }}. - Credential Required: Connect your telegramApi credentials in Send Failure Alert.
Step 7: Test and Activate Your Workflow
Verify the end-to-end flow for text and voice messages, then enable the workflow for production use.
- Click Execute Workflow and send a Telegram text message to trigger Telegram Message Trigger.
- Confirm that Prepare Message Input outputs the text field and that AI Draft & Revise returns a draft.
- Reply with an approval keyword (e.g., “approved”, “ok”, “passt”) and verify Extract Approved Post produces a Post field.
- Check that Publish via Blotato returns a submission ID and that Query Post Status progresses to published.
- Verify that Send Confirmation Notice posts the public URL back to Telegram.
- When everything works, switch the workflow to Active to run continuously.
Watch Out For
- Telegram bot tokens are easy to rotate and forget. If messages stop triggering, check the Telegram credentials in n8n first, then confirm the bot is still in the right chat.
- If you’re using Wait nodes or external publishing, 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.
Common Questions
About 30 minutes once you have your API keys.
Yes. You’ll mostly connect accounts and paste keys into n8n credentials, then adjust the writing prompt to match your voice.
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 usage for transcription and generation, plus whatever Blotato charges for publishing.
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.
Start inside the “AI Draft & Revise Post” node and edit the System Prompt to reflect your tone, audience, and formatting rules. If you want different approval words, change the logic in the approval check so it recognizes what your team actually says in chat. For scheduling instead of immediate posting, adjust the “Create post with Blotato” node to a scheduling action (if available) and add a small step before it to set the scheduled time. You can also swap the “OpenAI Chat Model” node to a different model if you want faster drafts or higher quality.
Usually it’s a bot token issue or the bot isn’t allowed to read messages in the chat you’re using. Re-check the Telegram credentials in n8n, confirm you’re messaging the right bot, and make sure the workflow is enabled. If voice notes fail but text works, the file download step can also break when Telegram file permissions change, so check the “Retrieve Voice File” node run logs.
On a typical n8n Cloud plan you can run hundreds to thousands of these drafts per month, depending on your plan and how often you post. If you self-host, capacity mostly depends on your server and OpenAI rate limits, not n8n itself. Practically, most people run this a few times per day at most, which is well within limits.
Often, yes, because the “approval loop” needs branching logic, memory, and conditional checks that get awkward (and pricey) in simpler automation tools. n8n also gives you the option to self-host, which can matter once you’re iterating a lot. Zapier or Make can still be fine if you only want “Telegram message → create a draft somewhere” with no revisions. But if you care about keeping the conversation context and only publishing after explicit approval, n8n fits more naturally. Talk to an automation expert if you want help choosing the simplest setup for your team.
Once this is running, posting stops being a recurring debate in your head. The workflow handles the capture, drafting, and approval gate so you can focus on the ideas that actually move your business forward.
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.