Skip to content

The moment it happens

Save Telegram voice notes and photos into a Google Doc journal

Voice notes you send to Telegram are transcribed and tagged, and photos are added to the same journal doc with a link, all in date order.

Runs
The moment it happens
Apps
Google Docs, Telegram
AI
Yes, uses the built-in AI allowance
Access
bot token; doc edit

Send this to your assistant

Create a ClickRuntime automation: when I send a voice note to my Telegram bot, transcribe it, add tags and append it to my Journal Google Doc. When I send a photo, save it and add a link to it in the same doc.

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 researcher has ideas on walks and reads printed papers with notes in the margins. Voice memos pile up unplayed in one app, photos of pages sit in the camera roll, and none of it is searchable when she needs it.

Sending each one to a Telegram bot puts spoken notes in one dated, tagged Google Doc as text, with photos linked alongside them. Ideas captured on the move end up in one place she can search and quote later.

What you get out of it

  • Ideas captured in seconds

    Recording a voice note is faster than typing on a phone. The thought is saved before it is gone.

  • One dated journal for everything

    Spoken notes become searchable text, and photos sit next to them in the same doc. Finding an idea from last month is a search, not a scroll through media.

  • Tags make it easy to review

    Each voice note gets a few topic tags. Pulling together notes on one project is quicker.

  • No new app to learn

    You use the Telegram chat you already have open. The journal grows without a separate notes app.

How it works

What happens, step by step

  1. You send a voice note or a photo to your Telegram bot.

  2. For a voice note, ClickRuntime sends the audio to a transcription service and AI adds two or three topic tags.

  3. For a photo, it saves the image to your Google Drive and keeps a link to it.

  4. The dated entry, either the transcript or the photo link with your caption, is added to your Journal Google Doc and the bot confirms.

Before it runs live

  • Connect Google Docs
  • Connect Telegram
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Save Telegram voice notes and photos into a Google Doc journaljust nowSucceeded
Telegram · Journal botSaved [pricing, onboarding, Northwind pilot]

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

  • 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 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.
voice_notes_and_photos_from_telegram_into_google_docs.pyexample
import json
from datetime import date
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_event, credentials, http, ai

DOC_ID, FOLDER_ID = "your-journal-doc-id", "your-drive-folder-id"

@on_event
def handle(event):
    msg = (event.json or {}).get("message") or {}
    media = msg.get("voice") or (msg.get("photo") or [None])[-1]
    if not media:
        return {"skipped": True}
    token = credentials.secret("TELEGRAM_BOT_TOKEN")
    path = http.get(f"https://api.telegram.org/bot{token}/getFile", params={"file_id": media["file_id"]}).json()["result"]["file_path"]
    data, name = http.get(f"https://api.telegram.org/file/bot{token}/{path}").content, path.split("/")[-1]
    if msg.get("voice"):
        text = http.post("https://api.openai.com/v1/audio/transcriptions", headers={"Authorization": f"Bearer {credentials.secret('OPENAI_API_KEY')}"},
                         data={"model": "whisper-1"}, files={"file": (name, data)}).json()["text"]
        try:
            tags = ai.generate(f"Give 3 short topic tags, comma-separated, for:\n{text[:4000]}", max_output_tokens=30).text.strip()
        except ai.AIError:
            tags = "voice note"
    else:
        up = http.post("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=webViewLink",
                       headers={"Authorization": f"Bearer {credentials.connection('google', 'work')}"},
                       files={"metadata": ("m", json.dumps({"name": name, "parents": [FOLDER_ID]}), "application/json"), "file": (name, data)}).json()
        tags, text = "photo", f"{msg.get('caption', '')} {up['webViewLink']}".strip()
    docs = build("docs", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).documents()
    end = docs.get(documentId=DOC_ID).execute()["body"]["content"][-1]["endIndex"] - 1
    docs.batchUpdate(documentId=DOC_ID, body={"requests": [{"insertText": {"location": {"index": end},
        "text": f"\n\n{date.today().isoformat()} [{tags}]\n{text}"}}]}).execute()
    http.post(f"https://api.telegram.org/bot{token}/sendMessage", json={"chat_id": msg["chat"]["id"], "text": f"Saved [{tags}]"})
    return {"saved": True}

FAQ

Common questions

How long can a voice note be?
Short notes of a few minutes work best. Longer recordings take more time to transcribe and may be split into several entries.
What happens to photos?
Photos are saved to your Google Drive and a link is added to the journal under the date, with your caption if you wrote one. The text in a photo is not read or transcribed.
Is the original audio kept?
The doc stores the transcript and tags. The original voice note stays in your Telegram chat if you want to listen again.
What permissions does it need?
bot token; doc edit. 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 for each event the app sends.
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 “Save Telegram voice notes and photos into a Google Doc journal” from your assistant

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