How to post to a Telegram channel from n8n
n8n-nodes-postwire and use Post → Publish with Networks set to Telegram, or send one HTTP Request to https://postwire.io/api/post. The workflow sends a message of up to 4,096 characters, or a photo or a video with its caption, and gets back the message's t.me link. The same node can send that news to Discord, Bluesky, LinkedIn or any of PostWire's other networks in the same step, each with its own text, and PostWire spaces bursts to one channel so Telegram does not refuse them.n8n also has its own Telegram node, which talks to the Bot API for Telegram alone. The PostWire node is for the workflow that announces one thing everywhere: a new article in an RSS feed, a release on GitHub, an approved row in a sheet, a new YouTube video.
Updated . Written from PostWire's own code; vendor prices read on Oct 28, 2026. Live networks: TikTok, Instagram, YouTube, LinkedIn (personal profiles), Facebook Pages, Bluesky, Mastodon, Telegram, Discord, and X on paid plans.
Post to a Telegram channel from n8n, step by step
About seven minutes, on the free plan. You need a Telegram channel or group where you can add an admin.
- Create a free PostWire account
Open postwire.io/dashboard.html, type your email and press Create my free account. PostWire emails you a link to confirm the address; connecting accounts and publishing unlock once it is confirmed. No password and no card (free plan: 1 business, 10 posts a month, 5 AI drafts a day (about 20 a month), 2 networks per post, 3 scheduled posts at a time — every network connects free, no card).
- Create a bot and make it an admin
In Telegram, message @BotFather, send
/newbot, pick a name and copy the token it gives you. Then open your channel or group and add that bot as an admin, so it is allowed to post there. Messages appear under the channel's name. - Connect Telegram
In the dashboard open Accounts, press Connect on Telegram and paste the Bot token and Your channel as
@yourchannel(a private channel or group goes by its numeric id, which starts with-100). Before saving, PostWire asks Telegram whether that bot can reach that chat, so a mistyped channel or a bot that is not an admin yet is caught right there, with the fix. - Copy your API key
In the dashboard, open API & MCP and press Copy key on the API key card. It is sent as
Authorization: Bearer pw_live_…(theX-API-Keyheader also works). Keep it server-side. - Install the PostWire node
In n8n: Settings → Community nodes → Install, enter
n8n-nodes-postwire(version 0.4.3 on npm on Oct 28, 2026), then add a PostWire API credential with the key and press Test, which checks the key at once. Where community nodes cannot be installed, the HTTP Request node further down does the same job. - Configure Post → Publish
Networks: Telegram (add Discord, Bluesky or LinkedIn to send the news there too). Content: Smart Distribute: Write a Native Post per Network, with the Idea from the previous node (e.g.
{{ $json.title }} — {{ $json.link }}): the Telegram draft is clear and direct, with light formatting, links welcome and no hashtags. To send your own words, set Content to Same Text on Every Network. Media: None, or URL / Binary File for one photo or one video, which the text then captions. Options → Dry Run checks everything without publishing. - Or one HTTP Request node
POST to the REST API with header
Authorization: Bearer pw_live_….per_platform.telegram.textis the message;photo_urlorvideo_url(a public https link) turns it into a photo or video post with that text as the caption:POST https://postwire.io/api/post Authorization: Bearer pw_live_… Content-Type: application/json { "platforms": ["telegram"], "per_platform": { "telegram": { "text": "New on the blog: {{ $json.title }}\n\n{{ $json.summary }}\n\nRead it: {{ $json.link }}" } }, "photo_url": "{{ $json.image }}", "idempotency_key": "{{ $json.guid }}" } - Read the result, or schedule it
The result lists Telegram with
ok, the message id and its link:https://t.me/yourchannel/123for a public channel,https://t.me/c/…/123for a private one (it opens for members). To publish later, use Post → Schedule with When: At a Specific Time (up to 365 days ahead) or In the Next Free Queue Slot (orPOST /api/schedulewithrun_at). A scheduled post is sent by PostWire's servers at its time, whether or not n8n is running then.
With an RSS trigger, put the item's guid in Options → Idempotency Key (or idempotency_key): PostWire refuses a second post with the same key for 24 hours, so a re-run never posts the same article twice. A whole workflow, from the trigger to the post, is laid out in n8n social media automation.
Three ways to post to Telegram from n8n
n8n's own documentation and each vendor's page, read on Oct 28, 2026.
| Route | How it plugs into n8n | Telegram's rate limit (429) | Free to start |
|---|---|---|---|
| PostWire | The node n8n-nodes-postwire (Telegram under Networks, with the other networks), or an HTTP Request | Spaced per chat, waited out, or queued for after the wait | Free plan: 10 posts a month |
| n8n's Telegram node | Built in: a Telegram credential with your bot token, Message → Send | Retry On Fail or Loop Over Items with a Wait node, set by you | Part of n8n |
| Upload-Post | Its community node with platform[]=telegram, then poll the status | Not listed on its n8n page | Free plan: 10 uploads a month |
Checked on Oct 28, 2026 (2026-10-28) on each vendor's own pricing or docs page, linked in the first column and below. Monthly billing in USD unless noted. "Not listed" means we could not find it on their page, not that it is missing.
Where PostWire is ahead
- One node, every network. The step that posts to Telegram can also post to Discord, Bluesky, Mastodon, LinkedIn, Facebook Pages, TikTok, Instagram, YouTube, and X on paid plans. n8n's Telegram node posts to Telegram.
- Each network's text written in the node: a clear Telegram message, a casual Discord one, a 300-character Bluesky post, from the previous step's data.
- Telegram's rate limit handled: 3 seconds between posts to one channel, a 429 waited out, a long wait queued. n8n's docs suggest Retry On Fail or Loop Over Items and a Wait node.
- The bot is checked before it is saved, and a revoked token or a bot removed from the channel shows up in the dashboard before a scheduled post is due.
- Scheduling run by PostWire: a post scheduled from n8n goes out at its time from PostWire's servers, even if n8n is down then.
- A re-run posts once: with the RSS item's guid as the Idempotency Key, PostWire refuses a second post with that key for 24 hours.
- n8n docs — Telegram node (operations; the bot has to be added to the channel): docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/
- n8n docs — Handle rate limits (Retry On Fail, or Loop Over Items with a Wait node): docs.n8n.io/integrations/builtin/rate-limits/
- Upload-Post — n8n Telegram upload (its community node with platform[]=telegram, bot token and chat_id, poll the status): www.upload-post.com/n8n/telegram-upload/
- Upload-Post plans (llms-full.txt: Free 10 uploads a month; Basic $24 a month): www.upload-post.com/llms-full.txt
- Telegram Bot API (message text 1-4096 characters; a caption 0-1024): core.telegram.org/bots/api
Telegram's rate limit, handled for the workflow
Telegram allows a bot about one message a second per chat and 20 a minute in a group, and answers anything faster with 429 Too Many Requests: retry after N. On Sept 13, 2026 an n8n workflow sent 24 posts to one Telegram group through PostWire in 19 seconds, five at a time: Telegram took the first 19 and refused the rest with "retry after 40". Since then, in this order:
- Bursts are spaced: PostWire leaves 3 seconds between posts to the same channel or group (1 second in a private chat), so a batch from a Loop or a Split node is smoothed instead of refused.
- A 429 is waited out: when Telegram says "retry after N seconds", PostWire waits exactly that long and sends once more.
- A long wait is queued, not lost: when the wait does not fit in the request, the Telegram post is queued for after it and goes out by itself; the result says so.
Without that, n8n's own advice for a service's rate limit is to turn on Retry On Fail with a wait between tries, or to batch items with Loop Over Items and a Wait node (n8n docs). Source: PostWire's Telegram publisher, read Oct 28, 2026.
What a Telegram post from n8n can carry
| You send | Your channel gets | Limit |
|---|---|---|
| Text only | A message, links clickable | 4,096 characters |
Text and a photo (photo_url or the node's Media) | The photo with the text as its caption | Caption up to 1,024 characters |
Text and a video (video_url) | The video with the text as its caption | Caption up to 1,024 characters |
| The same idea with Smart Distribute | A Telegram message written for Telegram, next to the other networks' versions | Kept under 4,000 characters |
Telegram's limits are its own (Bot API, read Oct 28, 2026): for a long update with a picture, keep the caption short, or post the text on its own. Telegram fetches the photo or video from its link, so the link has to be public.
What it does not do
PostWire posts and schedules messages in the channel or group you connected, as the bot you created; it never logs in as your personal Telegram account. It sends one photo or one video per message, not albums, and it does not edit, pin or delete messages, read your chats, answer people or manage members. For those, n8n's own Telegram node talks to the Bot API directly.
Questions people ask
How do I post to a Telegram channel from n8n?
Create a bot with @BotFather and add it to your channel as an admin, connect it in PostWire with the bot token and @yourchannel, install n8n-nodes-postwire and use Post → Publish with Networks set to Telegram. Or send an HTTP Request to https://postwire.io/api/post with "platforms": ["telegram"].
Doesn't n8n already have a Telegram node?
Yes: n8n's built-in Telegram node sends messages, photos, videos and albums to Telegram with your bot token. The PostWire node is for posting the same news to Telegram and other networks in one step, each with its own text, with Telegram's rate limit handled and scheduling run by PostWire.
Why does my n8n workflow get "Too Many Requests" from Telegram?
Telegram allows a bot about one message a second per chat and 20 a minute in a group, and refuses faster sends with a 429 and a "retry after" time. Through PostWire, posts to one channel or group are spaced 3 seconds apart, a 429 is waited out, and a long wait is queued for after it instead of failing.
Can n8n post a photo or a video to Telegram?
Yes. Send one photo or one video by URL or as a binary file from a previous node; the text becomes its caption, which Telegram limits to 1,024 characters. A message without media takes up to 4,096 characters.
Can it post to a private channel or a group?
Yes. Connect it with its numeric id, which starts with -100, and make the bot an admin. The result's link for a private channel is t.me/c/…, which opens for members.
How do I stop an RSS workflow posting the same article twice?
Put the item's guid in Options → Idempotency Key (idempotency_key in the API). PostWire refuses a second post with the same key for 24 hours, so a re-run or a retried execution publishes once.
How much does it cost?
Telegram, the API and the n8n node are on the free plan: 1 business, 10 posts a month, 5 AI drafts a day, 2 networks per post, no card. Starter is $9 a month for 3 businesses and Pro $29 for 10, with every network in each post; paid plans have a 14-day refund.
Try it on one business, free.
The free plan is 1 business, 10 posts a month, 5 AI drafts a day (about 20 a month) and 2 networks per post — every network connects free, no card, no time limit. Paid plans start at $9 a month and have a 14-day refund; Pro can be tried free for 7 days and Agency for 14, with a card at checkout and nothing charged that day.