How to post to a Telegram channel from n8n

To post to a Telegram channel from n8n, connect your @BotFather bot and channel to PostWire once, add the community node 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.

  1. 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).

  2. 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.

  3. 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.

  4. 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_… (the X-API-Key header also works). Keep it server-side.

  5. 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.

  6. 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.

  7. Or one HTTP Request node

    POST to the REST API with header Authorization: Bearer pw_live_…. per_platform.telegram.text is the message; photo_url or video_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 }}"
    }
  8. Read the result, or schedule it

    The result lists Telegram with ok, the message id and its link: https://t.me/yourchannel/123 for a public channel, https://t.me/c/…/123 for 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 (or POST /api/schedule with run_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.

RouteHow it plugs into n8nTelegram's rate limit (429)Free to start
PostWireThe node n8n-nodes-postwire (Telegram under Networks, with the other networks), or an HTTP RequestSpaced per chat, waited out, or queued for after the waitFree plan: 10 posts a month
n8n's Telegram nodeBuilt in: a Telegram credential with your bot token, Message → SendRetry On Fail or Loop Over Items with a Wait node, set by youPart of n8n
Upload-PostIts community node with platform[]=telegram, then poll the statusNot listed on its n8n pageFree 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.
Sources, all read on Oct 28, 2026:

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 sendYour channel getsLimit
Text onlyA message, links clickable4,096 characters
Text and a photo (photo_url or the node's Media)The photo with the text as its captionCaption up to 1,024 characters
Text and a video (video_url)The video with the text as its captionCaption up to 1,024 characters
The same idea with Smart DistributeA Telegram message written for Telegram, next to the other networks' versionsKept 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.