How a scheduled bot message works
Three pieces: a bot (an account that programs can send through, identified by its token), a chat id(where it sends — you, a group, a channel), and something that calls the bot's sendMessage at the right times. The first two take a minute. The third is the part that usually needs a server, because a web page cannot act while it is closed.
Google Apps Script fills that gap for free: it runs small scripts on Google's servers on a timer, under your own Google account. The Telegram tool writes the script, so the only thing you do there is paste and press Run.
1. Make the bot
- In Telegram, open @BotFather — Telegram's own bot for making bots — and send
/newbot. - Give it a display name, then a username that ends in
bot. - BotFather replies with a token like
123456789:AAH…. That is the bot's password: paste it into the tool and press Check token.
2. Find the chat id
A bot cannot message anyone who has not talked to it first — that is Telegram's spam protection. So open your bot and press Start, then press Find my chat in the tool. It asks Telegram which chats have written to the bot and lists them with their ids.
- Yourself: a positive number. Press Start in the bot.
- A group: a negative number. Add the bot to the group and send a message there (a
/commandalways reaches it; ordinary messages need the bot's privacy mode off — @BotFather →/setprivacy). - A channel: a number starting
-100. Make the bot an administrator and post once; a public channel can also be addressed as@channelname.
Only the id is needed — the chat id finder is the same step on its own.
3. Write and test the message
Write it as you want it to arrive. Four placeholders are filled in, in your time zone, every time it is sent: {date}, {time}, {weekday} and {datetime} — so “Good morning! Today is {weekday}, {date}.” arrives as “Good morning! Today is Monday, 2026-11-02.”
Switch formatting to HTML for <b>bold</b>, <i>italic</i> and links with <a href="…">; tick Silent to deliver without a notification sound. Then press Send a test message — if it arrives, the schedule will work too.
4. Schedule it with Google Apps Script
- Choose every day, weekdays, once a week, every few hours or every few minutes, and check the time zone.
- Copy the script the tool writes, open script.new, delete the sample code, paste, and save.
- Choose
setupin the function menu and press Run. Google asks you to allow the script to connect to an external service and manage its triggers — it is your own script, so allow it. If a screen says Google hasn't verified this app, press Advanced, then Go to … (unsafe): Google shows that for every personal script that has not been through its review, which yours never needs. One message is sent straight away and the schedule is installed. - To stop it, run
stop— or delete the project.
To change the message or the time later, make a new script in the tool, paste it over the old one, and run setup again: it removes the old schedule before adding the new one.
Limits worth knowing
- Timing: Google runs daily and weekly triggers within about 15 minutes of the time you set. For an exact minute you need your own server and cron.
- Frequency: every 5 minutes at most here; Telegram also limits bots to about one message a second per chat.
- Length: up to 4,096 characters per message.
- Who can receive it: only chats that have started the bot, groups it belongs to and channels where it is an admin.
When it does not arrive
- Unauthorized (401): the token is wrong or was revoked. Copy it again from @BotFather.
- Chat not found (400): the bot has never been started in that chat, or the id is missing its minus sign.
- Forbidden (403): you blocked the bot, it was removed from the group, or it is not an admin of the channel.
- Can't parse entities: an HTML tag is not closed — or the text contains a bare < or &. Use plain text, or write < and &.
- Nothing at the scheduled time: open the script and look at Executions on the left — every run and its error is listed there.
Keeping the token safe
The token is the whole key to the bot: whoever has it can send as it and read what people send it. Keep it out of shared documents and screenshots, keep the Apps Script project private, and if it ever leaks, send /revoke to @BotFather for a new one. That is also why the tool calls Telegram from your browser rather than through a server: there is no copy of your token anywhere but Telegram and your own script.
Frequently asked questions
How do I schedule a message in Telegram with a bot?
Make a bot with @BotFather, find your chat id, and have something call the bot’s sendMessage on a timer. The free way without a server is Google Apps Script: PDFGami’s Telegram tool writes the script — you paste it into script.new and run setup once.
Can Telegram schedule messages without a bot?
Yes, for one-off messages: in a chat, long-press (or right-click) the send button and choose Schedule message. That is for single messages you send yourself. A bot is for messages that repeat every day or week, or that should come from an automated sender.
Is Google Apps Script really free?
Yes, under Google’s quotas for consumer accounts, which a few messages a day or even every few minutes stay well within. It runs on Google’s servers, so your computer can be off.
How do I find my Telegram chat id?
Press Start in your bot (or send a message in the group it is in), then ask the Bot API for getUpdates — or let PDFGami’s chat id finder do it: paste the token and press Find my chat.
What happens if my bot token leaks?
Whoever has it can send as your bot and read what people send it. Send /revoke to @BotFather to replace it, then paste the new token into your script.

