The moment it happens
Weekly reading list by email from links sent to Telegram
Links you send or forward to your bot during the week arrive every Friday at 17:00 as one email with titles and a one-line summary each.
- Runs
- The moment it happens
- Apps
- Telegram
- AI
- Optional
- Access
- bot token
Send this to your assistant
Create a ClickRuntime automation: collect every link I send or forward to my Telegram bot, and every Friday at 17:00 email me a reading list with each page's title, a one-line summary and the link.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
You see a good article in a Telegram channel or a friend sends you a link, and you mean to read it later. Saved Messages fills up with links next to photos and notes, and most of them are never opened again.
This automation gives those links a home. Forward or send them to your bot as you go, and on Friday afternoon you get one email with each page's title, a one-line summary and the link, ready for the weekend.
It suits people who read a lot on their phone and want a simple read-later list without another app.
What you get out of it
Save with one forward
Forwarding to the bot takes a second and works from any chat or channel.
Titles instead of bare URLs
The email shows what each link is, so you can pick what to read.
Short summaries
A one-line summary helps you skip pages that are not worth your time.
A fresh list each week
The list resets after every email, so it never turns into a backlog.
Reads well on any device
Plain email works on your laptop, phone or e-reader browser.
How it works
What happens, step by step
You send or forward any message with a link to your bot. It replies with a short "saved".
ClickRuntime keeps each link with the time you sent it.
On Friday at 17:00 it opens each page to get its title and, optionally, writes a one-line summary with ClickRuntime's built-in AI.
You get one email with the week's links, and the list starts over.
Before it runs live
- Connect Telegram
- Paste your automation's link into the other app's webhook settings
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
- Act only on the items that match your own rules, and skip the rest
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Telegram steps into one automation
Under the hood
The code that runs this automation
import re
from clickruntime import on_trigger, credentials, http, state, notify, ai
OWNER = 123456789
def tg(method, **params):
r = http.post(f"https://api.telegram.org/bot{credentials.secret('TELEGRAM_BOT_TOKEN')}/{method}", json=params)
r.raise_for_status()
return r.json()["result"]
def urls(msg):
text = msg.get("text") or msg.get("caption") or ""
ents = msg.get("entities") or msg.get("caption_entities") or []
found = [e["url"] for e in ents if e["type"] == "text_link"]
found += [text[e["offset"]:e["offset"] + e["length"]] for e in ents if e["type"] == "url"]
return found
@on_trigger
def run(event):
links = state.get("links") or []
msg = (event.get("json") or {}).get("message")
if msg:
if msg["chat"]["id"] != OWNER:
return {"skipped": True}
new = urls(msg)
links += [u for u in new if u not in links]
state.set("links", links)
if new:
tg("sendMessage", chat_id=OWNER, text=f"Saved ({len(links)} this week)", reply_to_message_id=msg["message_id"])
return {"saved": len(new)}
if not links:
return {"sent": False}
items = []
for i, u in enumerate(links, 1):
try:
html = http.get(u, timeout=15).text[:200000]
title = (re.search(r"<title[^>]*>(.*?)</title>", html, re.S | re.I) or [None, u])[1].strip()
line = ai.generate(f"In one plain sentence, what is this page about? Title: {title}\n{re.sub('<[^>]+>', ' ', html)[:4000]}",
max_output_tokens=60).text.strip()
except Exception:
title, line = u, ""
items.append(f"{i}. {title}\n {line}\n {u}")
notify.email_me(subject=f"Your reading list: {len(links)} links", body="\n".join(items))
state.set("links", [])
return {"sent": len(links)}
FAQ
Common questions
Can I forward posts from channels?
What if a page blocks automated requests?
Do I need AI for this?
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
Have your Telegram bot answer messages
Anyone who messages your bot gets a helpful reply straight away, and the bot remembers the last few messages.
See how it worksTurn voice notes into text with a reply
Send your bot a voice note and get the transcript back with a short answer.
See how it worksRead receipts you photograph
Send your bot a photo of a receipt and get the merchant, date and total back.
See how it worksKeep exploring
Set up “Weekly reading list by email from links sent to Telegram” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.