Build a Telegram Bot with Claude Code: Your Team's First Internal Tool
By Jonah, Founder of FindClout — July 2026
If you want to know what a growth team looks like once it stops waiting on engineering, look at the group chat. Ours has a bot that pings the moment a high-value lead fills out a form, another that drops content into a queue for review, and one that just tells us when a scraper job fails. None of them took an engineer to build. Each one took an afternoon, a BotFather token, and Claude Code.
A Telegram bot is the highest-leverage first internal tool you can build, because everyone on your team already has Telegram open, and "the bot messaged me" beats "check the dashboard" every time. This is the exact build, start to finish.
Install Claude Code first if you haven't — the 20-minute setup guide covers it.
Step 1: Get a token from BotFather
Before any code, open Telegram and message @BotFather — Telegram's own official bot for creating bots. This is a conversation, not a codebase:
You: /newbot
BotFather: Alright, a new bot. How are we going to call it?
You: FindClout Alerts
BotFather: Now let's choose a username for your bot. It must end in 'bot'.
You: findclout_alerts_bot
BotFather: Done! Use this token to access the HTTP API:
123456789:AAExampleTokenStringGoesHere
That token is the only credential this whole build needs. Copy it somewhere safe — it's effectively a password for your bot.
Step 2: Describe the bot to Claude Code
Open a terminal in a fresh folder, run cc, and hand over the token plus what you want built:
tell cc: "I have a Telegram bot token: [paste token]. Build a small
Node.js bot that, when a message is sent to it, checks if the sender's
Telegram user ID is in an allowlist, and if so replies with a status
message. I want to run this locally first to test it, then deploy it
so it runs continuously."
Claude Code writes a small script using Telegram's Bot API (either long-polling for updates, or a webhook — it'll pick whichever fits your use case and explain the tradeoff if you ask). Run it locally, message your bot from your phone, and watch the reply come back in your terminal logs in real time. That loop — see it respond immediately — is the moment this stops feeling abstract.
Want the full internal-tooling playbook?
Jonah's Guide to the Agentic Future is the free one-page PDF that covers the Cloudflare/hosting side, the API keys, and how growth teams stack bots, dashboards, and scrapers into one system.
Get the Free Guide (PDF) →Step 3: Give it a real job — lead alerts
A bot that only replies to messages is a toy. A bot that pushes alerts unprompted is a tool. The most common first real job: notify a group chat the moment a form gets submitted or a lead lands.
tell cc: "Add the bot to a group chat and get the chat ID. Then, when
a new row is added to [your leads database/spreadsheet/webhook], send
a message to that group chat with the lead's name, email, and source.
I want this to run automatically, not require anyone to ask for it."
Claude Code will show you how to grab the group's chat ID (a quick trick involving a test message and one API call), then wire whatever your lead source is — a form webhook, a CRM API, a database trigger — to call Telegram's sendMessage with that chat ID. This is exactly the connective tissue behind Claude for lead generation workflows: capture, notify, act, without a human checking a dashboard.
Step 4: Content queues — the other everyday use case
The second most common first bot: a content approval queue. Someone drops a link or a draft into the bot, it gets logged to a database or spreadsheet, and a reviewer approves or rejects with a button tap.
tell cc: "When someone sends a link to the bot, save it to a queue
with status 'pending' and reply with two inline buttons: Approve and
Reject. When someone taps a button, update the status and reply
confirming the change."
Telegram's inline keyboard buttons make this feel like a real internal tool rather than a chat script — Claude Code knows the Bot API's button and callback-query patterns well and wires them up without you needing to understand the JSON structure underneath.
Step 5: Deploy it so it runs forever
A bot running in your terminal dies the moment you close the laptop. Two solid options, and Claude Code can set up either:
- An always-on process on a small server (using long-polling, and a process manager like PM2 to keep it alive and auto-restart on crash) — the right call if the bot needs to react instantly and do heavier work.
- A Cloudflare Worker using webhook mode — Telegram pushes each message directly to your Worker's URL instead of you polling for it. No server to maintain, stays on Cloudflare's free tier for typical bot traffic as of 2026.
tell cc: "Set this up as a Cloudflare Worker using Telegram's webhook
mode instead of polling, so it doesn't need a server running 24/7."
Step 6: Lock it down
Before connecting the bot to anything sensitive, add authorization:
tell cc: "Add an allowlist of Telegram user IDs that are allowed to
use this bot's commands. Anyone not on the list gets a polite 'not
authorized' reply and nothing else happens."
Keep the bot token itself out of your code — Claude Code will default to an environment variable, but confirm it did if you're skimming past the setup. Never hardcode a token into a file you might accidentally make public.
Where this goes next
Once you have one bot running, the second and third are trivial reuse of the same pattern — different trigger, same delivery mechanism. Pair it with the web scraper build to get alerts when a tracked page changes, or with the marketing dashboard to push a daily summary straight into the group instead of making anyone open a URL. This kind of stacking — one small tool feeding the next — is the actual shape of what Claude Code gets used for once you're past the first build.
Want help scoping your first bot?
Book 15 minutes and tell me what your team keeps checking manually — I'll help you turn it into the first thing your bot does.
Book a Setup Call →FAQ
Do I need to know how to code to build a Telegram bot?
No. You get a token from BotFather — a chat conversation, not code — hand it to Claude Code, and describe what you want the bot to do. Claude Code writes the small Node.js script that listens for messages and responds, and runs it for you.
What is BotFather?
Telegram's official bot for creating other bots. Message it inside Telegram, run /newbot, name your bot, and it hands you back an API token — the only credential you need to start building.
Where does the bot actually run once it's built?
Two common options: a small always-on process on a server for instant reactions, or a Cloudflare Worker using Telegram's webhook mode for lighter bots, which stays on the free tier. Claude Code can set up either.
Can the bot post to a group chat automatically, not just reply to messages?
Yes. Add the bot to your group, grab the chat ID, and any script or scheduled job can call Telegram's sendMessage API with that chat ID to push alerts without anyone typing a command first.
Is it secure to give a bot access to internal data?
As secure as you build it. Keep the token out of your code, restrict which Telegram user IDs the bot responds to, and don't wire it to anything destructive without a confirmation step. Ask for an allowlist before connecting it to anything sensitive.
Jonah is the founder of FindClout, a curated creator distribution network that has generated 3.3B+ views for brands across sports, prediction markets, AI, and more, built on verified American audiences. He builds most of FindClout's internal tooling himself, in a terminal, with zero formal coding background. Reach him at [email protected] or book a call.
findclout.com