Back to Resources
AI Automation9 min read

Connect Telegram to Claude: A Working Cowork Automation Guide

A tested, step-by-step way to connect Telegram to Claude Cowork using a bot token instead of the native connector, plus the fixes for every failure mode that actually happens.

Haojun See
Haojun See

Founder & Director, On The Ground

Updated 12 August 2026

Why connect Telegram to Claude at all

Most AI tools only work while you're staring at the screen. Connecting Telegram to Claude Cowork builds something that works while you're not — a scheduled task that checks something (your calendar, a spreadsheet, a client list), messages you the result on Telegram, and picks up any corrections you reply with on its next run. The shape is always the same: a fast capture layer (you, messaging Telegram, all day) and a batched processing layer (Cowork, running on a schedule). That split isn't a workaround — for most admin work it's the better design, because you get one tidy summary instead of a stream of notifications. For the broader case for this kind of automation, see Five Claude Workflows Every SME Admin Team Should Run and Claude for Small Business in Singapore & Malaysia, which covers what Cowork is and how it authenticates to other tools generally.

Why the built-in Telegram connector often fails

Claude has a built-in Telegram connector under Customize → Connectors. In practice, it's the single most common point of failure we've seen — including across an entire room of people following identical steps in order. The more reliable path is a Telegram bot token, created through Telegram's own BotFather, with Cowork calling the Telegram Bot API directly (getUpdates / sendMessage) rather than going through the connector's auth flow. It's more setup up front — you're creating a bot instead of clicking "connect" — but it fails in ways you can actually diagnose, because every failure maps to a specific, documented Telegram API response rather than an opaque connector error. This guide uses the bot-token method throughout.

Step 1: Create your Telegram bot

1. Open Telegram, search for BotFather — the official bot for creating bots (verified account, blue checkmark). 2. Send /newbot. Give it a display name, then a username ending in bot. 3. BotFather replies with a bot token — a string like 123456789:ABCdefGhIJKlmNoPQRstuVwxYZ. Copy it somewhere safe. Anyone who has this token can control your bot, so don't paste it into a public chat, a shared doc, a screenshot, or an AI chat transcript you might later publish or share. 4. The step almost everyone skips: open a chat with your new bot and send it any message — hi or /start works. Telegram bots cannot message you first; you have to message the bot before it can message you back. Skip this and everything downstream fails, and it will look like a technical problem when it's really just this one click.

Step 2: Get your chat ID through Cowork

You need your chat ID — a number Telegram assigns to your conversation with the bot. Rather than reading raw JSON in a browser yourself, ask Cowork to do it: *"Call https://api.telegram.org/bot<TOKEN>/getUpdates and tell me my chat ID"* (with your real token in place of <TOKEN>). Cowork will read the response and pull the number out of result[].message.chat.id. If it comes back empty, you skipped messaging the bot in Step 1 — send it one more message and ask again. getUpdates only returns messages it hasn't returned before, so a second message after an empty result usually resolves it.

Step 3: Give Cowork network access to Telegram

Cowork will only let Claude reach websites you've explicitly allowed — a separate setting from connecting apps like Gmail or Notion. On a Team/Enterprise plan: an admin goes to Settings → Capabilities (the admin view) and finds "Allow network egress" (tagged Chat and Cowork). This control has three levels — None, Package managers only, or All domains — and there is no way to scope it to a single domain. It needs to be on All domains for Telegram (or any other external API) to be reachable at all. On a personal Pro/Max plan without a team, the equivalent lives under your own Settings → Capabilities — check what's actually there before relying on a specific path, since the UI varies by plan and changes over time. The step people miss on either plan: this setting does not apply retroactively to a session you already have open. After changing it, start a brand-new Cowork chat or task. A session built under the old rules won't notice the update.

Step 4: Test before you automate

Run this once as a normal, non-scheduled Cowork task — not as a scheduled task yet: *"I'm testing a Telegram bot integration before building an automation on top of it. Don't schedule anything yet — just run these steps once, right now, and tell me exactly what each call returns (status code and body). Bot token: [PASTE TOKEN]. 1. Call the getMe endpoint and confirm the token is valid. 2. Call getUpdates and show me the raw response. 3. Find the chat ID from the most recent message. 4. Call sendMessage with that chat_id and a short test message. 5. Confirm with me whether the message actually landed in Telegram, don't assume success from the API response alone."* Only once you've confirmed a message actually lands in your Telegram chat should you ask Cowork to save the automation as a scheduled task. Building the schedule before confirming the round-trip works is how a broken setup quietly runs for days before anyone notices.

Troubleshooting: what actually goes wrong

Work through these in order — the fix is almost always one of the first two. • getUpdates always returns empty — you haven't sent the bot a first message. Message it directly, then retry. • sendMessage fails with "chat not found" — same root cause. Message the bot first, then get a fresh chat ID. • getUpdates returns 409 Conflict — two processes are polling the same bot token at once. Only run getUpdates from one place at a time. • Nothing comes through in a group chat — group chats have privacy mode on by default. In BotFather, use /setprivacy to disable it, or make the bot a group admin. • getUpdates returns nothing despite messaging the bot — a webhook may already be registered, which disables getUpdates. Call the deleteWebhook endpoint, then retry. • sendMessage returns 429 Too Many Requests — you're sending faster than Telegram's rate limits allow. Add a short delay between messages. • You set network egress to All domains and it's still not working — you're almost certainly still in the session you had open when you made the change. Start a completely new Cowork task.

Where to go from here

Once the connection works, the Telegram side becomes a capture layer for almost any admin workflow — see Five Claude Workflows Every SME Admin Team Should Run for patterns beyond a single expense tracker, and 7 Internal Tools Every SME Should Build with Claude Code if you'd rather build a standing tool than a chat-based one. Before you put anything client-related through this pipeline, read the PDPA Prompting Checklist — a Telegram capture layer is exactly the kind of always-on channel where identifiers end up pasted in without anyone deciding that on purpose. If you'd rather have this built for you than build it yourself, book a free 30-minute call.

Frequently asked questions

Why won't Claude's built-in Telegram connector work?

It often does, but it's the most common point of failure we've seen in practice. The bot-token method in this guide calls Telegram's API directly and fails in specific, diagnosable ways instead of an opaque connector error — which is why we recommend it as the default, not just a fallback.

Why can't my Telegram bot message me first?

Telegram's platform rule, not a Claude limitation: bots cannot initiate a conversation. You must send the bot a message yourself first. Only after that will getUpdates return anything, and only after that can the bot reply to your chat ID.

Is it safe to paste a Telegram bot token into a Cowork chat?

Treat any token as compromised once it's typed anywhere outside Telegram's own BotFather flow, including into an AI chat. Anyone with the token can control the bot. If you ever paste one into a chat transcript, screenshot, or shared document, revoke it via BotFather immediately and generate a fresh one.

Do I need to know how to code to set this up?

No. Every step in this guide is either a Telegram app action (BotFather commands, messaging your own bot) or a plain-English instruction to Cowork. The only technical-looking part — calling getUpdates and sendMessage — is something you ask Cowork to do, not something you run yourself.

Where exactly do I change Cowork's network access setting?

On Team/Enterprise plans: an account admin goes to Settings → Capabilities and sets "Allow network egress" to All domains (it only has three levels — None, Package managers only, All domains — with no per-domain list). On personal Pro/Max plans, check your own Settings → Capabilities, since the exact layout varies by plan.

Want to Apply This to Your Business?

We're a Singapore AI development and automation agency. Let's discuss how we can help solve your specific challenges.