How to add buttons to a Telegram post
Buttons in Telegram posts — known as inline keyboards — allow you to add clickable URL links, reaction prompts, and interactive elements directly beneath your channel messages. You can add them using Telegram bots (like @ControllerBot or @BotFather-created bots), or through the Telegram Bot API if you have a custom solution. Regular channel posts without a bot cannot include inline buttons natively.
Understanding Telegram Post Buttons
Telegram supports two main types of buttons that can appear in channel posts:
Inline URL Buttons
These are the most common buttons in channel posts. Each button contains a text label and a URL link. When a reader taps the button, they're directed to the specified web page, another Telegram channel, a bot, or any valid URL.
For example, a tech news channel might post an article summary with buttons like:
- "Read Full Article" → links to the original source
- "Join Discussion" → links to a linked group chat
- "More from Author" → links to another channel
Reaction and Callback Buttons
These buttons trigger bot-side actions rather than opening URLs. They're used for polls, quizzes, rating systems, and interactive engagement. When a subscriber taps one, the bot processes the callback and can update the message, send a response, or record data.
A typical use case: a movie review channel posts a review with buttons like "👍 Like" and "👎 Dislike," and the bot tallies votes in real time, updating the button labels with current counts.
Adding Buttons Using @ControllerBot
The most popular no-code method for adding buttons to Telegram channel posts is @ControllerBot. It requires no programming knowledge and works directly in Telegram.
Step 1: Connect Your Channel to @ControllerBot
- Open Telegram and search for
@ControllerBot - Start the bot by tapping Start
- Send the
/addchannelcommand - Add
@ControllerBotas an administrator to your channel (it needs permission to post messages) - Forward any message from your channel to the bot to confirm ownership
Step 2: Create a Post with Buttons
- Send the
/newpostcommand to@ControllerBot - Select your channel from the list
- Type or paste the text of your post
- When prompted for buttons, use the following syntax:
[Button Text 1](https://example.com) [Button Text 2](https://example.com)
[Button on Second Row](https://example.com)
Each line represents a row of buttons. Multiple buttons on the same line appear side by side. A new line creates a new row.
Step 3: Preview and Publish
- The bot will show you a preview of your post with buttons
- Review the layout — check that all buttons display correctly and links work
- Tap Publish to send the post to your channel immediately, or schedule it for a specific time
Example Button Layout
For a channel called "Tech Digest" with 15,000 subscribers, you might structure buttons like this:
[🔗 Source Article](https://techsite.com/article) [💬 Discuss](https://t.me/techdigest_chat)
[📢 Share with Friends](https://t.me/share/url?url=https://t.me/techdigest/248)
This creates two buttons in the first row and one full-width button in the second row.
Adding Buttons Using @PostBot
Another popular option is @PostBot, which offers a slightly different workflow:
- Start
@PostBotand connect your channel - Create a new post using the inline interface
- Use the bot's built-in button editor — it provides a visual interface for adding and arranging buttons without remembering syntax
- Choose between URL buttons and reaction buttons
- Arrange rows and columns visually, then publish
@PostBot is especially convenient for reaction-style buttons, where you want subscribers to vote or react using custom emoji buttons rather than Telegram's native reactions.
Adding Buttons via the Telegram Bot API
If you run your own bot or use a custom publishing tool, you can add inline keyboards programmatically through the Telegram Bot API.
Basic API Request
To send a message with buttons, use the sendMessage method with the reply_markup parameter:
{
"chat_id": "@yourchannel",
"text": "Check out our latest article about Telegram marketing!",
"reply_markup": {
"inline_keyboard": [
[
{"text": "📖 Read Article", "url": "https://tgchannel.space/blog/telegram-marketing"},
{"text": "📢 Share", "url": "https://t.me/share/url?url=https://example.com"}
],
[
{"text": "👍 Useful", "callback_data": "vote_useful"},
{"text": "👎 Not Useful", "callback_data": "vote_not_useful"}
]
]
}
}
Each nested array within inline_keyboard represents one row. Each object in the row is a button with either a url (for link buttons) or callback_data (for interactive buttons that your bot handles).
Editing Existing Posts to Add Buttons
You can also add buttons to already-published posts using the editMessageReplyMarkup method:
{
"chat_id": "@yourchannel",
"message_id": 1234,
"reply_markup": {
"inline_keyboard": [
[{"text": "🔗 Updated Link", "url": "https://example.com/new"}]
]
}
}
This is particularly useful when you want to add a button to an older post — for instance, linking to a follow-up article or a correction.
Button Design and Layout Rules
Telegram imposes specific constraints on inline buttons:
- Maximum 8 buttons per row (though 2-3 per row is optimal for readability)
- Maximum 100 buttons per message total
- Button text limit: up to 64 characters, but shorter is better (aim for 15-25 characters)
- Rows: you can have multiple rows; each row is independent
- URL buttons display a small arrow icon to indicate they open an external link
- Callback buttons can display a loading spinner or a brief notification when tapped
Recommended Layouts
Purpose Layout Single CTA 1 button, full width Two equal options 2 buttons in 1 row Primary + secondary 1 wide button + 2 smaller buttons in next row Voting/reactions 3-5 emoji buttons in 1 row Navigation 2-3 rows, 1-2 buttons eachTips & Best Practices
Keep button text short and action-oriented. Use verbs like "Read," "Join," "Download," or "Vote" rather than vague labels like "Click here" or "More info." A button reading "📥 Download PDF Guide" outperforms "Link" every time.
Limit buttons to 2-3 per post for most content. Channels with 5,000-50,000 subscribers report that posts with 1-3 buttons get the highest click-through rates. Too many buttons cause decision paralysis.
Use emoji in button labels strategically. A single relevant emoji at the start of a button (like 🔗, 📖, 💬, or ▶️) improves visual scanning and tap rates. Avoid cluttering with multiple emojis.
Place the most important button first. Telegram users read top-to-bottom, left-to-right. Your primary call-to-action should be the first button, ideally as a full-width button on its own row.
Test all links before publishing. Once a post is live, you can edit button URLs via the bot or API, but broken links erode subscriber trust. Always preview your post.
Use UTM parameters in URLs to track which buttons drive traffic. For example:
https://yoursite.com/article?utm_source=telegram&utm_medium=button&utm_campaign=weekly_digest. This pairs well with services like tgchannel.space that help bring your Telegram content to the web and make it discoverable by search engines.Combine buttons with Telegram's native reactions. Since Telegram now supports emoji reactions on channel posts, you don't need bot-based reaction buttons for simple like/dislike — use inline buttons for more complex interactions like multi-option polls or linking to external resources.
Common Mistakes
Mistake 1: Adding buttons without a bot
Why it's wrong: Telegram's native channel editor does not support inline buttons. You cannot add clickable buttons by simply typing bracket syntax in a regular post — it will appear as plain text.
How to avoid: Always use a bot (like @ControllerBot, @PostBot, or your own bot via the API) to create posts with buttons.
Mistake 2: Using too many buttons on every post
Why it's wrong: If every single post has 4-6 buttons, subscribers develop "button blindness" and stop clicking. Engagement drops significantly after the novelty wears off.
How to avoid: Reserve buttons for posts where they add real value — linking to sources, enabling votes, or directing to important pages. Many successful channels use buttons on only 30-50% of their posts.
Mistake 3: Forgetting to give the bot admin rights
Why it's wrong: Bots need to be channel administrators with "Post Messages" permission to publish posts with buttons. Without this, the bot simply cannot send to the channel.
How to avoid: After adding the bot to your channel, go to Channel Settings → Administrators and verify the bot appears with the correct permissions.
Mistake 4: Using callback buttons without handling them
Why it's wrong: If you add buttons with callback_data but your bot has no code to process the callbacks, users will see a perpetual loading spinner or an error when they tap the button.
How to avoid: Only use callback_data buttons when you have a running bot that listens for and responds to callback queries. For simple links, always use url buttons instead.
Mistake 5: Making button rows too crowded
Why it's wrong: Placing 4-5 long-text buttons in a single row makes them unreadable on mobile devices. Text gets truncated and buttons become too small to tap accurately.
How to avoid: Test your button layout on a phone screen. Generally, use a maximum of 3 buttons per row, and keep combined text short enough that nothing gets cut off on a standard mobile display.
Frequently Asked Questions
Can I add buttons to a post that's already published?
Yes. If the post was originally sent by a bot, you can edit it to add, modify, or remove buttons using the bot's edit function or the editMessageReplyMarkup API method. You cannot add buttons to posts that were published natively through the channel editor — those would need to be deleted and re-posted via a bot.
Do buttons work in forwarded messages?
URL buttons remain functional when a post is forwarded — tapping them still opens the link. However, callback buttons (the interactive ones that communicate with a bot) will not work when forwarded because the bot can only process callbacks for messages in the original chat.
Are buttons visible on all devices?
Inline buttons are supported on all official Telegram clients — iOS, Android, Desktop, and Web. They render consistently across platforms. Some very old third-party Telegram clients may not display them, but this affects a negligible percentage of users.
Can I track how many people click a button?
For URL buttons, Telegram does not provide built-in click analytics. Use UTM parameters and your own website analytics (Google Analytics, Plausible, etc.) to track clicks. For callback buttons, your bot receives every tap as a callback query, so you can count and log them server-side.
Is there a limit to how many posts can have buttons?
No. There is no limit on the number of posts with buttons in a channel. You can add buttons to every post if you want, though as noted above, selective usage tends to perform better for engagement.