Weekly
Send a weekly Telegram message to every chat in a sheet
Write your announcement once in a sheet and every Telegram chat on your list gets it on Monday morning, with each one marked as sent.
- Runs
- Weekly
- Apps
- Google Sheets, Telegram
- AI
- Not needed
- Access
- Telegram bot token; Sheets read+write
Send this to your assistant
Create a ClickRuntime automation: every Monday at 10am, send the message in my Broadcast sheet to every chat ID listed there through my Telegram bot, and mark each row as sent.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A community organiser runs a Telegram bot for a running club with a few hundred members and several group chats. Every week there is a route, a meeting point and sometimes a change of time. Copying the same message into each chat by hand takes most of an hour, and someone always gets missed or gets it twice.
With the message and the list of chats kept in one sheet, the weekly announcement goes out on its own at the same time each week. Clubs, course providers, small shops with a customer bot and teams with several group chats use it to keep everyone told without a copy-and-paste session.
What you get out of it
One place to write the message
You edit a single cell in the sheet and that text reaches every chat. There is no risk of one group getting an older version because you forgot to update it.
Nobody is skipped or sent it twice
Each row is marked as sent once its message goes out. If a send fails, that row stays unmarked, so you can see exactly who did not get it.
Sends at a pace Telegram accepts
Messages are spaced out instead of fired all at once. That keeps a large list from being cut off part way through by Telegram's sending limits.
The list is easy to manage
Adding or removing a chat is a matter of adding or deleting a row. Anyone on the team who can edit the sheet can maintain the audience without touching the bot.
A regular slot people expect
Members learn that the update arrives every Monday at 10am. A predictable time makes the message more likely to be read and acted on.
How it works
What happens, step by step
Every Monday at 10am, ClickRuntime reads the announcement from the Broadcast sheet and the list of chats below it.
It skips any chat already marked as sent for this week's message.
Your Telegram bot sends the announcement to each chat, a few at a time, so Telegram does not block the sends.
Each row is marked as sent with the date, or with an error if that chat could not be reached.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- Connect Telegram
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Google Sheets and Telegram steps into one automation
Under the hood
The code that runs this automation
import time
from datetime import date
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http
SHEET_ID = "your-spreadsheet-id"
@on_trigger
def run(event):
token = credentials.secret("TELEGRAM_BOT_TOKEN")
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")),
cache_discovery=False).spreadsheets().values()
message = values.get(spreadsheetId=SHEET_ID, range="Broadcast!B1").execute()["values"][0][0]
rows = values.get(spreadsheetId=SHEET_ID, range="Broadcast!A3:B").execute().get("values", [])
today, sent, statuses = date.today().isoformat(), 0, []
for i, row in enumerate(rows):
status = row[1] if len(row) > 1 else ""
if row and not status.startswith("sent"):
r = http.post(f"https://api.telegram.org/bot{token}/sendMessage", json={"chat_id": row[0], "text": message})
status = f"sent {today}" if r.ok else f"error {r.status_code}"
sent += r.ok
if i % 20 == 19:
time.sleep(1)
statuses.append([status])
values.update(spreadsheetId=SHEET_ID, range="Broadcast!B3", valueInputOption="RAW", body={"values": statuses}).execute()
return {"chats": len(rows), "sent": sent}
FAQ
Common questions
Why does a chat not receive the message?
Where do I find a chat ID?
Can I send to only part of the list?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Get Telegram alerts when a site in your sheet goes down
Every site in your sheet is checked every 5 minutes, its status is kept up to date, and you get a Telegram message when one goes down or recovers.
See how it worksTrack competitor prices from a sheet
List competitor product pages in a sheet and get a Telegram message whenever one of their prices changes, with the latest price recorded in the sheet.
See how it worksGet Telegram warnings before SSL certificates expire
Each day the domains in your sheet are checked, the days left on each certificate are written next to them, and you get a Telegram message for any under 14 days.
See how it worksKeep exploring
Set up “Send a weekly Telegram message to every chat in a sheet” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.