Telegram Bot API: полное руководство разработчика 2026
Telegram Bot API — это фундамент, на котором построены миллионы ботов: от уведомлений о заказах до полноценных Mini Apps с оплатой. В 2026 году аудитория Telegram превысила 1 миллиард активных пользователей, а через Bot API ежедневно проходит более 8 миллиардов запросов. По данным аналитики, средний бизнес-бот обрабатывает от 5 000 до 200 000 сообщений в сутки, а открываемость сообщений достигает 92% — против 22% у email.
Это руководство собрано как готовая telegram bot api документация на русском: от получения токена до production-архитектуры, лимитов и приёма платежей. Разберём, как устроен API, какие методы использовать, чем отличаются webhook и long polling, и какие библиотеки выбрать для разработки telegram бота.
Что такое Telegram Bot API
Bot API (он же бот api telegram) — это HTTP-интерфейс на базе REST поверх HTTPS. Бот не подключается к Telegram напрямую: вместо этого ваше приложение отправляет запросы на единый эндпоинт, а Telegram сам доставляет сообщения пользователям.
Принцип работы:
Пользователь → Сервер Telegram → Ваше приложение (бот) → Bot API → ПользовательБазовый адрес всех запросов:
https://api.telegram.org/bot<ТОКЕН>/<МЕТОД>Каждый метод возвращает JSON-ответ фиксированной структуры:
{
"ok": true,
"result": { ... }
}При ошибке поле ok равно false, а в description указана причина — например, Unauthorized при неверном токене или Too Many Requests при превышении лимитов.
Бот API vs клиентский MTProto API
| Параметр | Bot API | MTProto (TDLib) |
|---|---|---|
| Для кого | Боты | Пользовательские клиенты, юзерботы |
| Авторизация | По токену | По номеру телефона |
| Лимиты | Чёткие, документированные | Зависят от аккаунта |
| Сложность | Низкая (REST) | Высокая (бинарный протокол) |
| Применение | 95% бизнес-задач | Автоматизация от лица человека |
Для бизнес-задач — уведомлений, продаж, поддержки, интеграций с CRM — Bot API закрывает 95% потребностей. MTProto нужен лишь в специфических сценариях.
Шаг 1. Регистрация бота и получение токена
Токен — это «паспорт» вашего бота. Его выдаёт официальный бот @BotFather.
- Откройте @BotFather в Telegram и отправьте
/newbot - Введите отображаемое имя, например «Магазин Кофе»
- Введите уникальный username, обязательно оканчивающийся на
bot— напримерcoffee_shop_bot - BotFather вернёт токен вида:
1234567890:AAH...-secret_partЭтот токен нужно подставлять во все запросы. Дополнительная настройка через BotFather:
/setdescription— описание в пустом чате/setabouttext— текст в профиле бота/setuserpic— аватар/setcommands— меню команд/setmenubutton— кнопка, открывающая Mini App
⚠️ Никогда не публикуйте токен в открытом коде и репозиториях. Если токен утёк — немедленно перевыпустите его командой
/revokeв @BotFather.
Шаг 2. Архитектура: webhook или long polling
Бот получает события (обновления) одним из двух способов. Это ключевое решение в разработке telegram бота api.
| Критерий | Long polling (getUpdates) |
Webhook (setWebhook) |
|---|---|---|
| Принцип | Бот сам опрашивает сервер | Telegram сам присылает события |
| Задержка | 1–2 секунды | Мгновенно |
| Требования | Любой хостинг | Доверенный HTTPS-сертификат |
| Нагрузка | Постоянные запросы | По событию |
| Масштаб | Один процесс | Несколько инстансов за балансером |
| Назначение | Разработка, тесты | Production |
Long polling — для старта и тестов
# Чтение обновлений вручную (для понимания механики)
import requests
TOKEN = "ВАШ_ТОКЕН"
offset = 0
while True:
r = requests.get(
f"https://api.telegram.org/bot{TOKEN}/getUpdates",
params={"offset": offset, "timeout": 30},
)
for update in r.json()["result"]:
offset = update["update_id"] + 1
print(update["message"]["text"])Параметр timeout=30 держит соединение открытым до 30 секунд — это и есть «длинный опрос».
Webhook — для production
Регистрация вебхука одной командой:
curl "https://api.telegram.org/bot<ТОКЕН>/setWebhook" \
-d "url=https://bot.example.com/webhook" \
-d "secret_token=$(openssl rand -hex 32)" \
-d "max_connections=40" \
-d "allowed_updates=[\"message\",\"callback_query\"]"Параметр secret_token — критичный элемент безопасности: Telegram дублирует его в заголовке X-Telegram-Bot-Api-Secret-Token, и ваш сервер должен сверять значение перед обработкой запроса.
Проверить состояние вебхука:
curl "https://api.telegram.org/bot<ТОКЕН>/getWebhookInfo"Шаг 3. Основные методы Bot API
Бот общается с пользователем через методы. Вот ядро, которое покрывает 90% задач.
| Метод | Назначение |
|---|---|
getMe |
Информация о самом боте |
sendMessage |
Отправка текста |
sendPhoto / sendDocument |
Медиа и файлы |
sendMediaGroup |
Альбом до 10 медиа |
editMessageText |
Редактирование сообщения |
answerCallbackQuery |
Реакция на нажатие inline-кнопки |
sendInvoice |
Выставление счёта на оплату |
setWebhook / deleteWebhook |
Управление вебхуком |
Отправка первого сообщения
Простейший запрос к API — через curl:
curl "https://api.telegram.org/bot<ТОКЕН>/sendMessage" \
-d "chat_id=123456789" \
-d "text=<b>Привет!</b> Я бот на Bot API." \
-d "parse_mode=HTML"Параметр parse_mode поддерживает HTML и MarkdownV2. Для бизнес-ботов рекомендуется HTML — он предсказуемее при экранировании.
Готовый бот на Python (aiogram 3.x)
import asyncio
from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.types import Message
bot = Bot(token="ВАШ_ТОКЕН")
dp = Dispatcher()
@dp.message(Command("start"))
async def start(message: Message):
await message.answer(
"👋 Привет! Я бот на <b>aiogram 3.x</b>.",
parse_mode="HTML",
)
@dp.message(F.text)
async def echo(message: Message):
await message.answer(f"Вы написали: {message.text}")
async def main():
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot)
asyncio.run(main())Готовый бот на Node.js (Telegraf)
const { Telegraf, Markup } = require("telegraf");
require("dotenv").config();
const bot = new Telegraf(process.env.BOT_TOKEN);
bot.start((ctx) =>
ctx.reply("👋 Привет! Я бот на Telegraf.", { parse_mode: "HTML" })
);
bot.on("text", (ctx) => ctx.reply(`Вы написали: ${ctx.message.text}`));
bot.launch();
console.log("Бот запущен");Оба примера полностью рабочие — достаточно подставить токен и установить зависимости (pip install aiogram или npm install telegraf).
Обработка обновлений и типов событий
Каждое событие приходит в объекте Update. Внутри него — конкретный тип, который вы обрабатываете:
| Тип | Когда приходит |
|---|---|
message |
Текст, фото, файл, новый участник |
edited_message |
Пользователь отредактировал сообщение |
callback_query |
Нажата inline-кнопка |
inline_query |
Пользователь упомянул бота через @ в любом чате |
pre_checkout_query |
Подтверждение перед оплатой |
my_chat_member |
Бота добавили/удалили из чата |
Корректная обработка callback_query обязательна — иначе пользователь увидит «часики» на кнопке до 10 секунд:
@dp.callback_query(F.data.startswith("buy_"))
async def process_buy(callback: CallbackQuery):
product_id = callback.data.split("_")[1]
await callback.message.answer(f"Оформляем заказ #{product_id}")
await callback.answer("Принято!") # снимает «часики»Клавиатуры: reply и inline
Клавиатуры — главный инструмент интерфейса в боте.
Reply-клавиатура (под полем ввода)
Для постоянных действий, которые видны всегда:
from aiogram.utils.keyboard import ReplyKeyboardBuilder
kb = ReplyKeyboardBuilder()
kb.button(text="📦 Каталог")
kb.button(text="🛒 Корзина")
kb.button(text="📞 Связаться")
kb.adjust(2)
await message.answer("Выберите действие:", reply_markup=kb.as_markup(resize_keyboard=True))Inline-клавиатура (в сообщении)
Для контекстных действий, привязанных к конкретному сообщению:
from aiogram.utils.keyboard import InlineKeyboardBuilder
kb = InlineKeyboardBuilder()
kb.button(text="✅ Купить", callback_data="buy_123")
kb.button(text="ℹ️ Подробности", callback_data="info_123")
kb.adjust(1)
await message.answer("Оформить заказ?", reply_markup=kb.as_markup())Inline-кнопки могут также открывать URL, запускать Mini App (web_app) или переключать в игровой режим — это позволяет строить полноценные интерфейсы внутри чата.
Управление состоянием диалога (FSM)
Реальные сценарии — заказ в несколько шагов, анкета, онбординг — требуют хранения состояния пользователя между сообщениями. Этот механизм называется FSM (Finite State Machine) и встроен в современные фреймворки.
Пример на aiogram: пользователь проходит три шага оформления заявки.
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import StatesGroup, State
class OrderForm(StatesGroup):
name = State()
phone = State()
comment = State()
@dp.message(Command("order"))
async def start_order(message: Message, state: FSMContext):
await state.set_state(OrderForm.name)
await message.answer("Как вас зовут?")
@dp.message(OrderForm.name)
async def process_name(message: Message, state: FSMContext):
await state.update_data(name=message.text)
await state.set_state(OrderForm.phone)
await message.answer("Укажите телефон:")В production состояние хранят не в памяти процесса, а в Redis или БД — тогда бот переживает перезапуск и масштабируется на несколько инстансов за балансером. Перезапуск без внешнего хранилища = сброс всех диалогов, поэтому Redis — стандарт де-факто для нагруженных ботов.
Telegram Mini Apps
Кнопки с типом web_app открывают внутри Telegram полноценное веб-приложение — Mini App. Это интерфейс на React/Vue, который может обращаться к данным пользователя, геолокации, теме оформления и платёжному API. Mini App — это следующий уровень после классического бота: в нём можно реализовать каталог, корзину, личный кабинет и оплату в едином интерфейсе, не уводя пользователя из мессенджера.
Библиотеки для разработки Telegram-бота
Писать на «голом» HTTP можно, но для production используют фреймворки, берущие на себя маршрутизацию, FSM и middleware.
| Язык | Библиотека | Сильные стороны |
|---|---|---|
| Python | aiogram 3.x | Полностью async, FSM, роутеры, плагины |
| Python | python-telegram-bot | Зрелая, синхронный и async API |
| Node.js | Telegraf | Популярная, middleware-архитектура |
| TypeScript | grammY | Современная, плагины, TypeScript-first |
| Go | telebot | Высокая производительность |
| Java | TelegramBots | Стабильная, рекомендована для энтерпрайза |
Выбор зависит от стека команды. Для высоконагруженных проектов на AI-сценарии отлично сочетаются aiogram и связки из нашего гайда по AI-агентам для бизнеса.
Лимиты Bot API
Telegram жёстко нормирует нагрузку — это нужно учитывать в архитектуре.
| Ресурс | Лимит |
|---|---|
| Сообщений в секунду (весь бот) | 30 |
| Сообщений одному чату | 1/сек |
| Сообщений в одну группу | 20/мин |
Медиа в альбоме (sendMediaGroup) |
до 10 |
| Размер файла (через Bot API) | 50 МБ отправка / 20 МБ приём |
Длина текста sendMessage |
4096 символов |
При превышении API возвращает ошибку 429 Too Many Requests с полем retry_after — количеством секунд, через сколько можно повторить. Корректный обработчик делает экспоненциальную задержку:
import asyncio
from aiogram.exceptions import TelegramRetryAfter
try:
await bot.send_message(chat_id, text)
except TelegramRetryAfter as e:
await asyncio.sleep(e.retry_after)
await bot.send_message(chat_id, text)Для файлов крупнее 50 МБ используют локальный Bot API сервер (--local режим) — он снимает ограничение по размеру, но требует собственного хостинга.
Платежи через Telegram Bot API
Метод sendInvoice позволяет принимать оплату прямо в чате. В России нативные провайдеры ограничены, поэтому используют подключённых платёжных провайдеров.
from aiogram.types import LabeledPrice
await bot.send_invoice(
chat_id=chat_id,
title="Консультация специалиста",
description="1 час работы, 60 минут",
payload="consult-2026-001",
provider_token="ПРОВАЙДЕР_ТОКЕН",
currency="RUB",
prices=[LabeledPrice(label="Консультация", amount=50000)], # 500.00 ₽
start_parameter="consult",
)Сумма указывается в копейках: 50000 = 500,00 ₽. После оплаты приходит pre_checkout_query (его нужно подтвердить за 10 секунд) и затем message с successful_payment.
Для российского бизнеса платежи чаще строят через связку с СБП и фискализацией по 54-ФЗ. Как реализовать такой платёжный сценарий с фискализацией, мы разбираем в руководстве по платежам и 54-ФЗ через чат-бот.
Безопасность
| Мера | Зачем |
|---|---|
Хранение токена в .env / Vault |
Исключает утечку в репозиторий |
secret_token в webhook |
Гарантирует, что запрос пришёл от Telegram |
| Валидация входящих данных | Защита от подделки callback и login widget |
| Rate limit на своей стороне | Защита от злоупотреблений командами |
| HTTPS (TLS 1.2+) | Шифрование трафика |
Пример проверки секретного токена в webhook:
// Node.js / Express
app.post("/webhook", (req, res) => {
const secret = req.headers["x-telegram-bot-api-secret-token"];
if (secret !== process.env.WEBHOOK_SECRET) {
return res.status(401).send("Unauthorized");
}
handleUpdate(req.body);
res.sendStatus(200); // ответить за 60 секунд!
});Telegram ждёт ответ 200 OK до 60 секунд — иначе отправит обновление повторно, что приведёт к дубликатам обработки.
Кейс: онлайн-школа SkillUp
Контекст: Онлайн-школа профессий, 12 000 учеников, 8 потоков в год, ранее уведомления только по email.
Проблема: Открываемость email — 24%, доходимость на вебинары — 61%, поддержка перегружена типовыми вопросами.
Решение: Telegram-бот на Bot API (aiogram 3.x + PostgreSQL + Redis), который:
- Присылает расписание и напоминания за 1 час до вебинара
- Принимает оплату курса через
sendInvoice - Отвечает на FAQ через inline-кнопки и AI-ассистента
- Ведёт FSM-сценарий онбординга
Результаты за 4 месяца:
| Метрика | До | После | Изменение |
|---|---|---|---|
| Открываемость уведомлений | 24% | 92% | +68 п.п. |
| Доходимость на вебинары | 61% | 78% | +17 п.п. |
| Нагрузка на поддержку | 100% | 60% | −40% |
| Затраты на рассылки | 45 000 ₽/мес | 0 ₽ | −100% |
ROI: Разработка 280 000 ₽ → экономия 45 000 ₽/мес + рост выручки за счёт доходимости. Окупаемость: ~3 месяца. Похожие сценарии автоматизации воронки — в материале про CRM и чат-боты для продаж.
Чек-лист production-бота
- Токен хранится в переменных окружения, не в коде
- Используется webhook с
secret_token(не long polling) - Сервер отвечает
200 OKбыстрее чем за 60 секунд - Реализована обработка
callback_query(снятие «часиков») - Обрабатывается ошибка
429 Too Many Requests - Логи структурированы, есть метрики и алерты
- База данных и сессии пользователей вынесены из памяти процесса
- Настроен Graceful Shutdown (корректное закрытие webhook)
- Реализован retry и dead-letter для нестабильных внешних вызовов
- Покрытие тестами ключевых сценариев и команд
Заключение
Telegram Bot API — это зрелый, предсказуемый и щедро задокументированный интерфейс. Чтобы построить надёжный бот, достаточно соблюсти несколько правил: получать токен через @BotFather, в production использовать webhook с secret_token, обрабатывать лимиты и callback_query, и выбирать фреймворк под стек команды (aiogram для Python, Telegraf/grammY для Node.js).
Иными словами, разработка telegram бота api сводится к понятному набору шагов: токен, webhook, обработка обновлений, клавиатуры, FSM и платежи — и это telegram api руководство охватывает каждый из них на практике. Начинайте с одного сценария — например, уведомлений о заказах или статусах — измеряйте эффект, затем добавляйте платежи, Mini Apps и интеграции. Такой подход окупается за 1–3 месяца и масштабируется до сотен тысяч сообщений в сутки.
Нужен production-бот на Telegram Bot API? Flow Masters проектирует и внедряет ботов с нуля: от архитектуры и webhook до платежей и интеграций с CRM. Оставьте заявку — обсудим вашу задачу.
📚 Читайте также
AI-ассистент для бизнеса (Kit): корпоративный чат-бот без кода (152-ФЗ)
6 готовых system-prompts с переменными компании
AI для интернет-магазина: описания товаров, отзывы и чат-бот в Notion
Генерация продающих описаний и SEO-текстов под каждый товар по промпт-шаблонам
Финансы Pro: Notion-шаблон учёта финансов и налогов для ИП и самозанятых (УСН/НПД)
Учёт доходов/расходов с категориями и счетами