Telegram Bot Builder
SkillCommunicationTelegram Bot Builder is a skill that lets an AI agent create and configure Telegram bots. It covers the parts of bot setup that usually require reading the Telegram API docs, such as registering commands, adding inline keyboards, setting up webhooks, handling callback queries, sending media, and implementing payments. You describe the bot you want and the agent works through the configuration.
Use Telegram Bot Builder in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Telegram Bot Builder and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Telegram Bot Builder skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Have a Telegram account and a bot token from Telegram's bot creation process.
What your AI can do with it
- Create a Telegram bot and configure its basic settings
- Register bot commands so users see them in the menu
- Add inline keyboards and handle callback queries
- Set up a Telegram webhook for receiving updates
- Send photos, videos, and other media through the bot
- Implement Telegram payments inside the bot
Getting started
- Have a Telegram account and a bot token from Telegram's bot creation process.
- Add the skill to your agent so it can work with the Telegram Bot API.
- Tell the agent what the bot should do, such as which commands and buttons it needs.
- Provide the bot token when the agent asks for it so it can configure the bot.
- Test the bot in Telegram and ask the agent to adjust commands, keyboards, or webhook settings.
What this skill tells your AI
The instructions your AI receives, as published by davila7/claude-code-templates in cli-tool/components/skills/development/telegram-bot-builder/SKILL.md and read by ahel’s review.
Comprehensive guidance for building Telegram bots using the Bot API (v9.4). Covers both Node.js and Python ecosystems with production-ready patterns for authentication, messaging, keyboards, media handling, payments, inline mode, webhooks, and deployment.
When to Use This Skill
Use this skill when:
- Building a new Telegram bot from scratch
- Integrating Telegram messaging into an existing application
- Setting up webhooks or long polling for bot updates
- Creating interactive menus with inline keyboards and callback queries
- Handling media (photos, videos, documents, stickers)
- Implementing Telegram Payments or Telegram Stars
- Building inline mode functionality
- Managing groups, channels, or forum topics via bot
- Deploying bots to production (Docker, PM2, serverless)
Core Concepts
Authentication
Every bot has a unique token obtained from @BotFather. Token format: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11.
All API calls go to: https://api.telegram.org/bot<TOKEN>/METHOD_NAME
# .env file
BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
Store the token in environment variables. Never commit it to source code.
Receiving Updates: Polling vs Webhook
Long Polling (getUpdates) - Simpler, no HTTPS required, ideal for development:
// Node.js with node-telegram-bot-api
const bot = new TelegramBot(process.env.BOT_TOKEN, { polling: true });
# Python with python-telegram-bot
app = Application.builder().token(os.getenv("BOT_TOKEN")).build()
app.run_polling()
Webhook (setWebhook) - Better for production, lower latency, requires HTTPS (ports 443, 80, 88, or 8443):
bot.setWebHook('https://yourdomain.com/webhook', { secret_token: SECRET });
Choose polling for development and small bots. Choose webhooks for production deployments handling high traffic.
Message Types & Formatting
Send text with sendMessage. Supported parse modes:
- HTML:
<b>bold</b>,<i>italic</i>,<code>code</code>,<pre>block</pre>,<a href="url">link</a>,<tg-spoiler>spoiler</tg-spoiler> - MarkdownV2:
*bold*,_italic_,`code`,```block```,[link](url),||spoiler||. Requires escaping:_*[]()~>#+-=|{}.!
Prefer HTML for easier escaping. Use MarkdownV2 when simpler formatting suffices.
Keyboards & Interactive Elements
Inline Keyboard - Buttons attached to messages:
bot.sendMessage(chatId, 'Choose:', {
reply_markup: {
inline_keyboard: [
[{ text: 'Option A', callback_data: 'a' }, { text: 'Option B', callback_data: 'b' }],
[{ text: 'Visit Site', url: 'https://example.com' }]
]
}
});
Reply Keyboard - Custom keyboard below input field:
bot.sendMessage(chatId, 'Choose:', {
reply_markup: {
keyboard: [[{ text: '📊 Stats' }, { text: '⚙️ Settings' }]],
resize_keyboard: true,
one_time_keyboard: true
}
});
Handle inline button presses with callback_query. The callback_data field is limited to 64 bytes. Always call answerCallbackQuery to dismiss the loading indicator.
Sending Media
// Photo (file_id, URL, or upload)
bot.sendPhoto(chatId, 'https://example.com/photo.jpg', { caption: 'A photo' });
// Document
bot.sendDocument(chatId, fs.createReadStream('./file.pdf'), { caption: 'Report' });
// Album (2-10 items)
bot.sendMediaGroup(chatId, [
{ type: 'photo', media: 'https://example.com/1.jpg', caption: 'First' },
{ type: 'photo', media: 'https://example.com/2.jpg' }
]);
Three ways to specify files: file_id (reuse previously uploaded), HTTP URL (Telegram downloads it), or multipart upload. File limits: 50MB upload, 20MB download via Bot API.
Conversation State
For multi-step interactions (registration, forms, wizards), maintain conversation state per chat:
- Node.js: Use a
Mapor Redis to track{ step, data }perchatId - Python: Use
ConversationHandlerfrompython-telegram-bot(built-in state machine)
See reference/patterns_and_examples.md for complete conversation flow implementations.
Error Handling
Handle common error scenarios:
- 429 Too Many Requests: Read
retry_afterfrom response, wait, then retry - 403 Forbidden: Bot was blocked by user or removed from chat
- 400 Bad Request: Invalid parameters (check
descriptionfield) - 409 Conflict: Another bot instance using same token with polling
Rate limits: ~30 messages/second to different chats, ~20 messages/minute to same group. Implement exponential backoff for retries.
Bot Commands
Register commands visible in the Telegram menu:
bot.setMyCommands([
{ command: 'start', description: 'Start the bot' },
{ command: 'help', description: 'Show help' },
{ command: 'settings', description: 'Bot settings' }
]);
Commands can be scoped to specific chats, users, or languages using BotCommandScope.
Common Patterns
Quick Start (Node.js)
mkdir my-bot && cd my-bot
npm init -y
npm install node-telegram-bot-api dotenv
echo "BOT_TOKEN=your_token_here" > .env
Quick Start (Python)
mkdir my-bot && cd my-bot
pip install python-telegram-bot python-dotenv
echo "BOT_TOKEN=your_token_here" > .env
Popular Libraries
| Language | Library | Style | Best For |
|---|---|---|---|
| Node.js | node-telegram-bot-api | Callback-based | Simple bots, quick prototypes |
| Node.js | grammy | Middleware-based | Complex bots, plugins |
| Node.js | telegraf | Middleware-based | Mature ecosystem |
| Python | python-telegram-bot | Handler-based | Full-featured, conversations |
| Python | aiogram | Async-first | High-performance async bots |
Key API Method Categories
| Category | Key Methods |
|---|---|
| Messages | sendMessage, sendPhoto, sendVideo, sendDocument, editMessageText, deleteMessage |
| Keyboards | InlineKeyboardMarkup, ReplyKeyboardMarkup, answerCallbackQuery |
| Chat Mgmt | getChat, banChatMember, promoteChatMember, setChatPermissions |
| Files | getFile, sendMediaGroup, sendDocument |
| Inline Mode | answerInlineQuery with InlineQueryResult* types |
| Payments | sendInvoice, answerPreCheckoutQuery (use currency: "XTR" for Telegram Stars) |
| Bot Config | setMyCommands, setMyDescription, setWebhook |
Deployment Options
- PM2:
pm2 start bot.js --name telegram-bot- Process manager with auto-restart - Docker: Containerized deployment with
docker-compose - Serverless: Webhook handler as Vercel/AWS Lambda function
- VPS: Direct deployment with systemd service
See reference/patterns_and_examples.md for Docker, PM2, and serverless deployment configurations.
Security Checklist
- Store
BOT_TOKENin environment variables - Validate
X-Telegram-Bot-Api-Secret-Tokenon webhook endpoints - Verify user IDs for admin commands
- Implement per-user rate limiting
- Sanitize user input before database storage
- Use HTTPS for all webhook endpoints
- Restrict
allowed_updatesto only needed types
Reference Files
For detailed API documentation and implementation patterns, consult:
reference/api_methods.md- Complete list of 100+ Bot API methods organized by category (messaging, chat management, stickers, payments, inline mode, games, forum topics, gifts, passport, and more)reference/api_types.md- Complete list of 200+ Bot API types with all fields (Update, Message, Chat, User, keyboards, media types, payment types, chat members, reactions, and more)reference/patterns_and_examples.md- Production-ready implementation patterns for Node.js and Python including: inline keyboards, webhooks, media handling, conversation state management, database integration, admin panels, multi-language support, Docker/PM2/serverless deployment, Telegram Stars payments, and inline mode
When building a bot, start with SKILL.md for core concepts, then load the appropriate reference file for detailed API information or implementation patterns as needed.
Signals
- GitHub stars
- 32k
- Forks
- 4k
- Last commit
- Oct 2026
ahel review
S4info
community integration, published by davila7, not telegramK1binfo
installs-packagesK1binfo
installs-packages (in reference/patterns_and_examples.md)
Automated review, not a security audit. Ruleset v1+k2.
Questions
- Can it create a Telegram bot?
- Yes. The skill covers creating and configuring a Telegram bot, including its commands, keyboards, webhook, media sending, and payments.
- Can it set up a Telegram webhook?
- Yes. Setting up a Telegram webhook is one of the tasks the skill handles, along with commands, inline keyboards, callback queries, media, and payments.
- Can it add inline keyboards to a bot?
- Yes. The skill can add inline keyboards and handle the callback queries that come back when a user presses a button.
Advanced
- Item type
- skill
- Key
telegram-bot-builder- Source
- github.com/davila7/claude-code-templates
github.com/davila7/claude-code-templates
Related picks
Skill · thedaviddias
The pick for JavaScriptmodern-javascript-patterns
Skill · wshobson
The pick for JavaScriptpython-performance-optimization
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythonrun-node-tests
Skill · hiroro-work
The pick for Nodeslack-gif-creator
Skill · anthropics
More in Communication