Daily
Approve AI-written X posts in Telegram
Each day AI drafts posts for your X account and sends them to Telegram, where one tap publishes the ones you like.
- Runs
- Daily
- Apps
- Telegram, X
- AI
- Yes, uses the built-in AI allowance
- Access
- bot token; tweet.write
Send this to your assistant
Create a ClickRuntime automation: every morning, write three X post drafts about our product area, send each to me on Telegram with Post and Skip buttons, and publish the ones I tap Post on.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Founders and solo creators know they should post on X every day, but sitting down to write is the hard part. Letting AI post on its own is risky for a brand, and reviewing drafts in a web dashboard is one more thing to log into.
Getting drafts on your phone with Post and Skip buttons makes review a few seconds of thumb work, wherever you are. You keep full control over what goes out, without the blank-page problem.
What you get out of it
Review from your phone
Drafts arrive in Telegram, so you can approve them on the bus or between meetings without opening a laptop.
Nothing posts without a tap
Only drafts you approve are published. Skipped ones disappear, so the AI never speaks for you unchecked.
A choice each day
Several drafts give you options, and the best one goes out. Daily posting becomes picking, not writing.
Steady activity on X
With drafts waiting every morning, posting regularly stops depending on having a free hour.
How it works
What happens, step by step
Every morning AI writes a few post drafts for your X account.
Each draft is sent to you in Telegram with Post and Skip buttons.
When you tap Post, the draft is published on X and the message is updated to show it went out.
Each draft can only be posted once, and taps from anyone but you are ignored.
Before it runs live
- Connect Telegram
- Connect X
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
- 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 and X steps into one automation
Under the hood
The code that runs this automation
import uuid
from clickruntime import on_trigger, on_event, credentials, http, state, ai
MY_CHAT = 123456789
def tg(method, **params):
return http.post(f"https://api.telegram.org/bot{credentials.secret('TELEGRAM_BOT_TOKEN')}/{method}", json=params).json()
@on_trigger
def draft(event):
out = ai.generate("Write 3 X posts under 260 characters about small-business bookkeeping, one per line.", max_output_tokens=300).text
for text in [t.strip() for t in out.splitlines() if t.strip()][:3]:
key = uuid.uuid4().hex[:12]
state.set(f"draft:{key}", text)
tg("sendMessage", chat_id=MY_CHAT, text=text, reply_markup={"inline_keyboard": [[
{"text": "Post", "callback_data": f"post:{key}"}, {"text": "Skip", "callback_data": f"skip:{key}"}]]})
return {"drafts": 3}
@on_event
def tap(event):
cb = (event.json or {}).get("callback_query") or {}
if cb.get("from", {}).get("id") != MY_CHAT:
return {"ignored": True}
action, key = cb.get("data", ":").split(":", 1)
text = state.get(f"draft:{key}")
state.delete(f"draft:{key}")
if action == "post" and text:
http.post("https://api.x.com/2/tweets", headers={"Authorization": "Bearer " + credentials.connection("x", "main")},
json={"text": text}).raise_for_status()
tg("editMessageText", chat_id=MY_CHAT, message_id=cb["message"]["message_id"],
text=("✅ Posted: " if action == "post" and text else "Skipped: ") + (text or ""))
return {"action": action}FAQ
Common questions
What do the buttons do?
Can I edit a draft before posting?
Who can approve drafts?
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
Share the best posts from your sources on X
Every few hours the most interesting article from sources you follow is shared on X with your own comment, and you get a note in Telegram.
See how it worksPost crypto news summaries to X and Telegram
Breaking crypto news from your chosen feeds is summarised in a line or two and posted to X and your Telegram channel.
See how it worksApprove article posts for X in Telegram
New articles from your feeds become X post drafts in Telegram, and one tap publishes the ones worth sharing.
See how it worksKeep exploring
Set up “Approve AI-written X posts in Telegram” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.