English
Telegram publishing
Write posts in Obsidian, publish to your Telegram channel on a schedule or instantly.
How publishing works
flowchart TD
A[Create bot in BotFather] --> B[Add bot token in admin panel TG bots]
B --> C[Create Telegram channel]
C --> D[Add bot as channel admin<br/>Post messages + Add members]
D --> E[Write note in Obsidian]
E --> F[Add telegram_publish_at + telegram_publish_tags]
F --> G[Sync the note]
G --> H{Tag matches?}
H -->|Instant Tag| I[Publish immediately]
H -->|Scheduled tag| J[Queued until publish_at]
I --> K[Post live in channel]
J --> K
Set up a bot
Create the bot:
- Open @BotFather in Telegram
- Send the command
/newbot - Enter a display name for the bot
- Enter a username ending in
_bot(e.g.myposts_bot) - Copy the token — keep it private
Add the bot to the admin panel:
- Open the admin panel
- Go to TG bots
- Click + Add
- Paste the token into the Token field
- Enter a description, e.g. "Main bot"
- The system will verify the token and show the bot's name
- Refresh the page to see the bot in the list
Connect a Telegram channel
Create a channel (public or private — either works).
Add the bot as admin:
- Open the channel settings → Administrators
- Add your bot
- Grant two permissions only:
- Post messages
- Add members
Note: the "Add members" permission is currently required for the bot to connect. This is a known limitation that will be fixed.
If the channel does not appear in the admin panel, remove the bot from the channel and re-add it with the correct permissions.
Schedule a post
Add two properties to a note, then sync:
telegram_publish_at — type must be Date & time (not plain Date)
telegram_publish_at: 2025-01-15T09:00
telegram_publish_tags — type must be List
telegram_publish_tags:
- My channel
The system matches these tags to channels configured in the admin panel. A note publishes to every channel whose tags overlap.
Sync the note after adding the properties. The post will appear in the queue.
Set the tags before the first publish. Adding a tag to a note that is already published does not deliver it to the newly matched channel — publish state is tracked per note, not per channel. To reach the extra channel, open admin panel → Telegram posts → the post → Sent tab → Reset, then sync again. Reset deletes the post from every channel it already reached and re-sends it with new message IDs, so links to the old post break.
Preview a post instantly
Give a private test channel an Instant Tag and a note carrying that tag arrives there the moment you sync it, so you see the finished post before your readers do. See en/user/telegram-instant.
Check post status
Go to admin panel → Telegram posts.
- Date in the past → post already sent
- Date in the future → post is queued
Click a queued post to send it immediately. Click a sent post → open the Sent tab → click Reset to delete it from the channel and re-queue it.
Editing published posts
After a post is published, sync an updated note and the post updates in the channel automatically.
flowchart TD
E[Want to change a published post] --> Q{What changes?}
Q -->|Text, formatting,<br/>links, lists| A[Edit note in Obsidian -> Sync<br/>Post updates automatically]
Q -->|Photos, videos, post type,<br/>number of album photos| B[Open post in admin -> Reset]
Q -->|Rename the note| B
B --> C[Edit note in Obsidian]
C --> D[Sync again<br/>Re-queued and published]
What can be edited:
- Text content
- Formatting (bold, italic, code)
- Links and lists
What cannot be changed:
- Photos and videos — Telegram freezes media after publication
- Post type — you cannot add media to a text post or remove media from a photo post
- Number of photos in an album
To change media or post type: go to admin panel → find the post → click Reset → edit the note in Obsidian → sync again.
Renaming notes: The system identifies posts by file path and name. Renaming a note creates a second post. If you must rename a published note, reset it first, rename, then sync.
Post types and limits
The system determines post type from the note's content automatically:
| Post type | Condition | Text limit |
|---|---|---|
| Text post | No media in note | 4,096 characters |
| Photo post | 1 media file | 1,024 characters (caption) |
| Album | 2–10 media files | 1,024 characters (caption) |
The limit is measured on visible text — formatting tags are not counted. If the limit is exceeded, the post will not publish and a warning appears in the admin panel.
If a note has more than 10 media files, the system uses the first 10.
Formatting in posts
Write in Markdown — the service converts it to Telegram formatting.
| Element | Syntax |
|---|---|
| Bold | **bold** |
| Italic | *italic* |
| Bold italic | ***bold italic*** |
| Strikethrough | ~~strikethrough~~ |
| Inline code | `code` |
| Underline | <u>underline</u> |
| Spoiler | ==spoiler== |
| Code block | ```python ... ``` |
| Blockquote | > quote |
| Collapsible blockquote | `> quote |
| Link | [text](https://example.com) |
| Wikilink to published note | [[note-name]] → becomes a link |
| Wikilink to unpublished note | [[note-name]] → becomes underlined text |
When a wikilink points to an unpublished note that has a scheduled telegram_publish_at, the system appends a "Coming soon" block to the post automatically.
What is not supported:
- Tables
- Nested lists
- Regular images embedded in text (use media attachments instead)
- Unknown HTML tags (only
<u>is supported)
Notes containing unsupported elements will not publish. A warning appears in the admin panel post list.
Scheduling tips
- Write a week of posts in advance, set dates, sync once — they publish automatically at the scheduled times
- Keep posts in a dedicated folder to avoid accidentally renaming published notes
- Always preview in a test channel before publishing to your main channel
Related
- en/user/publishing — property types and how to use
telegram_publish_atandtelegram_publish_tagscorrectly - en/user/telegram-access — link a group to a subgraph: members read gated notes, subscribers join the group
- en/user/monetization — gate content by Telegram group membership or third-party subscriptions