Skip to content

Daily

Draft on-brand social posts and approve them in Telegram

Each morning you get social post drafts written in your brand voice, with Approve and Reject buttons in Telegram.

Runs
Daily
Apps
Google Docs, Telegram
AI
Yes, uses the built-in AI allowance
Access
doc read; bot token

Send this to your assistant

Create a ClickRuntime automation: every morning, write today's social posts using the brand voice in my Brand Guidelines Google Doc and send them to me in Telegram with Approve and Reject buttons.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A small brand wants to post every day but nobody has the time to write fresh posts each morning. When posts are written in a rush they drift away from the tone and rules in the brand guide, and nobody remembers which drafts were approved.

Keeping the guidelines in one Google Doc and drafting from it each day keeps the voice consistent. Approval happens in Telegram with one tap, so the owner signs off from their phone and every decision is recorded.

What you get out of it

  • Drafts follow your own rules

    Posts are written from the guidelines you keep in the doc: tone, words to avoid, hashtags, calls to action. Update the doc and tomorrow's drafts follow the new rules.

  • Approval in one tap

    Approve or reject from your phone between meetings. Nothing is posted without someone saying yes, which matters for a brand's public voice.

  • A steady posting rhythm

    Drafts arrive every morning whether or not anyone remembered to write them. Consistency is what builds an audience, and this removes the daily blank page.

  • A record of what was approved

    Each decision is stored with the post text. You can see what went out and learn which kinds of posts tend to be rejected.

How it works

What happens, step by step

  1. Every morning, ClickRuntime reads your brand guidelines from your Google Doc.

  2. AI writes a few social post drafts that follow those guidelines.

  3. Each draft is sent to you in Telegram with Approve and Reject buttons.

  4. When you tap a button, your decision is recorded, the message updates to show it, and the same draft is never asked about twice.

Before it runs live

  • Connect Google Docs
  • Connect Telegram

What you get

RunsDaily
Draft on-brand social posts and approve them in Telegramtoday, 9:00Succeeded
Telegram · Brand postsRainy Monday? Our Contoso Roasters house blend is 20% off until noon. Bring your own cup. [Approve] [Reject]

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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 Google Docs and Telegram steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
ai_social_posts_using_brand_guidelines_in_docs_approved_in_telegram.pyexample
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, on_event, credentials, http, ai, state

DOC_ID, CHAT_ID = "your-guidelines-doc-id", "your-telegram-chat-id"

def tg(method, **body):
    return http.post(f"https://api.telegram.org/bot{credentials.secret('TELEGRAM_BOT_TOKEN')}/{method}", json=body)

@on_trigger
def run(event):
    doc = build("docs", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    body = doc.documents().get(documentId=DOC_ID).execute()["body"]["content"]
    guide = "".join(r.get("textRun", {}).get("content", "") for b in body for r in b.get("paragraph", {}).get("elements", []))
    schema = {"type": "object", "properties": {"posts": {"type": "array", "items": {"type": "string"}}}}
    posts = ai.generate(f"Brand guidelines:\n{guide[:6000]}\n\nWrite 3 social posts for today.", json_schema=schema, max_output_tokens=600).json["posts"]
    for i, p in enumerate(posts):
        key = f"{event.scheduled_time or 'manual'}-{i}"
        state.set(f"post:{key}", {"text": p, "status": "pending"})
        tg("sendMessage", chat_id=CHAT_ID, text=p, reply_markup={"inline_keyboard": [[
            {"text": "Approve", "callback_data": f"ok|{key}"}, {"text": "Reject", "callback_data": f"no|{key}"}]]})
    return {"drafts": len(posts)}

@on_event
def decide(event):
    cb = (event.json or {}).get("callback_query") or {}
    action, _, key = cb.get("data", "").partition("|")
    post = state.get(f"post:{key}")
    if not post or post["status"] != "pending":
        return {"skipped": True}
    post["status"] = "approved" if action == "ok" else "rejected"
    state.set(f"post:{key}", post)
    tg("answerCallbackQuery", callback_query_id=cb["id"], text=post["status"])
    tg("editMessageText", chat_id=cb["message"]["chat"]["id"], message_id=cb["message"]["message_id"], text=f"[{post['status']}] {post['text']}")
    return {"post": key, "status": post["status"]}

FAQ

Common questions

What should the guidelines doc contain?
Your tone of voice, audience, topics you post about, words and claims to avoid, and two or three example posts you like. Concrete examples help the drafts sound like you more than general adjectives do.
Does it publish the posts for me?
Approved posts are recorded and can be sent on to a scheduling or social media tool that has an API. Many teams prefer to copy approved posts across by hand at first.
Can several people approve?
Yes. The drafts can go to a Telegram group, and the first person to tap Approve or Reject decides. The record notes who made the call.
What permissions does it need?
doc read; bot token. Nothing else in your accounts is used.
Does it need AI?
Yes. It uses ClickRuntime's built-in AI, so you don't need an OpenAI or Anthropic key. Every plan includes a monthly AI allowance.
How many runs does it use?
One run each time it runs (daily). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Draft on-brand social posts and approve them in Telegram” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.