Telegram logoTelegram
Bot Development
Automation
Scheduled Messages
Bot API
News Feed
Deployment
Cron Jobs

What are the exact steps to build a Telegram bot that sends daily news updates?

Telegram Technical Team
March 13, 2026
How to create scheduled Telegram bot, Telegram bot daily news setup, Telegram Bot API message scheduling, Host Telegram bot for periodic updates, Fix Telegram bot not sending scheduled messages, Best practices for Telegram news bot reliability, Integrate RSS with Telegram bot, Cloud function vs VPS for Telegram bot hosting
Learn the exact steps to build a Telegram bot that delivers daily news updates: register, code, schedule, deploy, and monitor with zero guesswork.

Why a Daily-News Bot Belongs in Your Team Toolkit

A Telegram bot that sends daily news updates is a lightweight broadcast layer that turns the same cloud channel you already use for chat into a programmable noticeboard. Unlike email digests that compete with spam or RSS readers that users must remember to open, a Telegram message lands in the same inbox where colleagues react with emoji, thread replies, or forward externally—no extra apps, no passwords. From an admin perspective the bot is simply another member you can add or remove, yet it posts on a clock you control and can be paused, rolled back, or handed to another maintainer in under a minute.

The trade-off is scope: the Bot API is one-way by default. If you need two-way surveys or payment checkout, you will outgrow the pattern described below. For pure daily headline delivery, however, the setup is faster than provisioning a company Twitter account and far less exposed to algorithmic reach collapse.

Why a Daily-News Bot Belongs in Your Team Toolkit
Why a Daily-News Bot Belongs in Your Team Toolkit

What You Need Before You Touch Code

Telegram accounts are free, but bots live outside your personal profile. Create one dedicated Telegram account for the team (for example acme-news-admin) so that the bot token is not tied to an employee who may leave. You will also need a server that can fire a cron job or scheduled cloud function once every 24 h; a $5/month VPS or a free-tier GCP Cloud Run job is enough for a 100-word POST request. Finally, pick a news source that exposes an HTTP endpoint or RSS feed; otherwise you will be scraping HTML, which breaks whenever the site redesigns.

Tip: If your company already runs GitHub Actions for CI, you can piggy-back on the scheduled workflow feature and skip server rent entirely.

Step 1 – Create the Bot Entity and Capture the Token

Open any Telegram client and start a chat with the official BotFather. The path is identical on Android, iOS, and desktop: tap the search bar, type BotFather, choose the verified one with the blue check, then tap START. Send the command /newbot, choose a display name (users will see it in the chat list) and a username ending in bot. BotFather replies with an HTTP token such as 1234567890:AAHhi8...-...9kJM. Copy it into a password manager immediately; if you lose it you must revoke and regenerate.

Still in BotFather, run /setdescription and /setabouttext so newcomers who find the bot in search understand its purpose. Skip /setinline and /setjoingroups unless you want interactive queries—daily news bots rarely need them.

Step 2 – Decide Where the Bot Will Speak

You have three legal destinations: a private chat with yourself, a group, or a channel. Channels are the admin-friendly choice because only admins can post, messages support unlimited subscribers, and the bot remains silent except for its scheduled burst. Create a channel (Android: New message → New channel; iOS: Chats → Compose → New channel; Desktop: hamburger menu → New channel), set it public if you want a t.me link, then copy the channel ID: invite the bot once, post any message, forward that message to UserInfoBot or JsonDumpBot and read the forward_from_chat.id field—prefix the negative sign, e.g. -1001234567890.

Warning: Channel IDs are always negative and large; forgetting the minus sign is the common reason for "chat not found" errors later.

Step 3 – Fetch News Without Violating Terms

The lightest path is an RSS feed—still the lingua franca of news sites. Use a tiny Python script with the feedparser library to pull the latest item, or a no-code service such as IFTTT’s RSS trigger if your policy allows external SaaS. If the target site offers no RSS, empirical observation shows that many outlets expose a JSON endpoint for their mobile apps; open the site in a desktop browser, open DevTools → Network, reload, and watch for /api/articles-style calls. Reproduce that GET request in your script with the same User-Agent string; keep the polling interval to once per day to stay polite.

Whatever you fetch, store only the fields you will forward—usually title, URL, and a 250-character excerpt. Caching the last GUID in a local file or SQLite table prevents duplicate posts if the cron job ever runs twice.

Step 4 – Send the Message With One POST

Telegram’s Bot API is HTTPS-only. A minimal cURL call looks like:

curl -X POST \
  https://api.telegram.org/bot<TOKEN>/sendMessage \
  -d chat_id=-1001234567890 \
  -d parse_mode=MarkdownV2 \
  -d disable_web_page_preview=false \
  -d text="📰 *${title}*%0A${excerpt}%0A[Read more](${url})"

Wrap that in your language of choice; Python’s requests module, Node’s node-fetch, or a Bash script all work. Use parse_mode=MarkdownV2 so you can bold the headline and keep the link tappable. Always URL-encode the text payload; otherwise an unexpected ampersand will truncate the message.

If the article includes an image, swap sendMessage for sendPhoto and pass the JPEG URL as photo; Telegram caches the file automatically, so your server bandwidth stays flat.

Step 5 – Schedule Reliably, Not Just on Your Laptop

A daily job needs a daily trigger. On a VPS, add a single line to crontab:

0 8 * * * /usr/bin/python3 /home/news/bot.py >> /home/news/cron.log 2>&1

That fires at 08:00 server time; change the hour to match your audience’s morning. If you prefer serverless, create a scheduled GitHub Action:

on:
  schedule:
    - cron: '0 8 * * *'
jobs:
  send:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install -r requirements.txt
      - run: python bot.py
        env:
          BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
          CHAT_ID: ${{ secrets.CHAT_ID }}

Empirical observation shows GitHub’s cron runner can start up to 15 min late during high load; if wall-clock precision matters, stay on a VPS.

Step 6 – Verify Delivery and Roll Back Fast

Log every API response; Telegram returns ok:true and a message_id on success. Store that ID in a tiny log file. If you accidentally spam, delete the message with:

curl -X POST https://api.telegram.org/bot<TOKEN>/deleteMessage \
  -d chat_id=-1001234567890 -d message_id=<ID>

Because channels support unlimited editing, you can also fix typos within 48 h without deleting: call editMessageText with the same message_id.

Tip: Add a small health-check section to your script: if the RSS fetch returns empty, post nothing instead of a “no news today” stub; your subscribers will thank you for the silence.

Side Effects and Rate Limits You Can’t Ignore

Telegram allows bots to send up to 30 messages per second to different chats, but only 1 message per second inside the same chat. A single daily post is far below either cap, yet if you add error-retry loops without backoff you can still hit 429 errors. Sleep one second between retries and log the retry_after field when present.

More importantly, bot messages can be forwarded by anyone; there is no “do not forward” flag. If your headlines come from a pay-walled source, paraphrase instead of copy-pasting to avoid copyright complaints. Finally, channels you create are public by default and can be found via search; set the channel to private if internal memos are involved.

When Not to Use a Bot for News

If your audience needs threaded discussions under each headline, a group is better than a channel, but groups larger than 200 members disable the message preview for links, hurting CTR. If you need rich analytics (open rates, click maps) consider email or a SaaS newsletter platform; Telegram provides only a view counter on channels, and bots cannot read it. Finally, if your compliance department requires audit trails older than one year, export the channel history yourself—Telegram keeps messages in the cloud indefinitely but offers no corporate export API.

Security Checklist for Team Admins

  • Store the bot token in an environment variable, never in Git history.
  • Scope the RSS fetching server to outbound 443 only; it does not need inbound ports.
  • Rotate the token if any team member with console access leaves; use /revoke in BotFather.
  • Enable two-factor authentication on the Telegram account that owns the channel.
  • Document the rollback procedure (deleteMessage or editMessageText) in the run-book.
Security Checklist for Team Admins
Security Checklist for Team Admins

Cost Reality Check

A VPS with 1 vCPU and 512 MB RAM can run the cron job and fetch RSS for thousands of channels; the script uses perhaps 20 MB of RAM for a few seconds. If you choose GitHub Actions, the job consumes one free runner minute per day—well inside the 2 000 free minutes per month. Telegram itself charges nothing for bot messages. Your only scaling bottleneck is the news source; respect its robots.txt and cache aggressively.

Troubleshooting Quick-Reference

Symptom Likely Cause Verification Fix
400 Bad Request: chat not found Missing minus sign in channel ID Echo $CHAT_ID in log Prefix ID with -100
429 Too Many Requests Loop retrying without delay Check cron log for rapid retries Sleep 1 s; respect retry_after
Empty message posted RSS guid already seen; script exits Check sqlite row count Delete last guid row to re-post once

Applicable / Non-applicable Scenario Checklist

Use the pattern when you need daily headlines delivered to 10–100 000 recipients who already live in Telegram, you control the source list, and you can tolerate a 48-hour edit window. Do not use it for time-critical alerts (use SMS or push), for confidential briefings (channels can be forwarded), or when you must prove read receipts to an auditor.

Next Actions in One Sitting

1) Create the bot with BotFather and copy the token. 2) Make a channel, add the bot, and note the negative ID. 3) Write a 30-line script that fetches one RSS entry and POSTs it. 4) Schedule the script on a cron or GitHub Action at 08:00 local. 5) Add two lines of logging and one line of deleteMessage insurance. Sixty minutes from now your team will have a zero-maintenance daily news bot that costs nothing to run and can be handed to the next admin by sharing one environment file.

Frequently Asked Questions

Can the bot post rich cards with images and buttons?

Yes. Replace sendMessage with sendPhoto and supply a URL in the photo field; Telegram auto-embeds the link. For inline buttons, add a reply_markup JSON object with inline_keyboard array.

Is there a way to preview how the message will look before it goes live?

Send the message to a private test channel first; the JSON response includes the formatted text. Copy the exact string to your production run once satisfied.

What happens if the RSS feed goes down for a day?

The script should exit silently and log the HTTP error. No message is posted, and the next successful fetch continues normally without duplicates.

Can I tag @everyone in the channel?

No. Bots cannot use @all or @everyone; only human admins can. Pin the message if you need extra visibility.

How do I transfer ownership when the original admin leaves?

Promote another user to admin in the channel, then use BotFather /revoke to regenerate the token and share the new one securely.

📺 Related Video Tutorial

Build an AI Agent That Reads & Replies to Gmail (No Code)