С нуля до первого сообщения: создание своего бота в Telegram

Иван Корнев·14.04.2026·4 мин

Чтобы создать бота в Telegram, нужно зарегистрировать его через официального бота @BotFather, получить уникальный токен доступа и написать серверную часть на любом удобном языке программирования (Python, Node.js, Go и др.). Весь процесс регистрации занимает 2–3 минуты, а первый работающий прототип можно поднять за 15 минут.

Ниже — подробный разбор всех этапов: от получения токена до настройки безопасного вебхука и добавления интерактивных кнопок.

Регистрация в BotFather: получение токена

Всё начинается с диалога с «отцом всех ботов». Именно он выдает документы для работы с API.

  1. Найдите в поиске Telegram пользователя @BotFather (убедитесь, что у него синяя галочка верификации).
  2. Отправьте команду /newbot.
  3. Придумайте имя бота (то, что будут видеть пользователи, например: Мой Магазин Бот).
  4. Придумайте юзернейм (уникальный адрес, должен оканчиваться на bot, например: my_shop_support_bot).
  5. Если имя свободно, BotFather пришлет сообщение с API Token.

Токен — это пароль вашего бота. Никогда не публикуйте его в коде на GitHub, не пересылайте посторонним и не храните в открытом виде. Используйте переменные окружения.

Пример токена: 123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw

Выбор инструментов и архитектуры

Для написания логики бота подходят любые языки, поддерживающие работу с HTTP/HTTPS. Самые популярные решения:

  • Python: библиотеки aiogram (асинхронная, современная) или python-telegram-bot. Идеально для быстрого старта и сложной логики.
  • Node.js: фреймворки Telegraf или node-telegram-bot-api. Отлично подходит для веб-разработчиков и микросервисов.
  • Другие: Go, Java, PHP, C# — у всех есть официальные или качественные сторонние обертки над Bot API.

Long Polling или Webhook?

Существует два способа получения обновлений от Telegram:

МетодКак работаетКогда использовать
Long PollingБот постоянно опрашивает сервер Telegram: «Есть новые сообщения?».Для тестов, локальной разработки или простых скриптов на домашнем ПК.
WebhookTelegram сам отправляет сообщение на ваш сервер при событии.Для продакшена, высоких нагрузок и экономии ресурсов сервера.

Для реального проекта всегда выбирайте Webhook. Это снижает задержку ответа и нагрузку на ваш сервер, так как соединения устанавливаются только при наличии новых данных.

Пишем код: примеры для запуска

Рассмотрим минимальный рабочий пример эхо-бота, который отвечает на команду /start и повторяет текст сообщений.

Вариант на Python (библиотека aiogram 3.x)

Установите зависимость: pip install aiogram

import asyncio
import os
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart

# Токен лучше хранить в переменной окружения
TOKEN = os.getenv("BOT_TOKEN")

bot = Bot(token=TOKEN)
dp = Dispatcher()

@dp.message(CommandStart())
async def cmd_start(message: types.Message):
    await message.answer("Привет! Я бот. Напиши мне что-нибудь, и я повторю.")

@dp.message()
async def echo_handler(message: types.Message):
    # Простая логика эха
    await message.copy_to(chat_id=message.chat.id)

async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Вариант на Node.js (библиотека Telegraf)

Установите зависимость: npm install telegraf

const { Telegraf } = require('telegraf');

const bot = new Telegraf(process.env.BOT_TOKEN);

bot.start((ctx) => ctx.reply('Привет! Я бот на Node.js. Жду твоих команд.'));
bot.on('text', (ctx) => ctx.reply(`Вы написали: ${ctx.message.text}`));

bot.launch();

// Обработка сигналов завершения для корректного закрытия
process.once('SIGINT', () => bot.stop('SIGINT'));
process.once('SIGTERM', () => bot.stop('SIGTERM'));

Настройка Webhook и деплой

Чтобы перевести бота на вебхук, вам понадобится сервер с белым IP и SSL-сертификатом (HTTPS). Telegram не принимает запросы по обычному HTTP.

  1. Подготовьте сервер: Разместите код на хостинге (VPS, Heroku, Railway, AWS Lambda и т.д.). Убедитесь, что домен имеет валидный сертификат (можно использовать бесплатный Let's Encrypt).

  2. Зарегистрируйте URL: Отправьте запрос к методу setWebhook.

    Формат запроса: https://api.telegram.org/bot<ТОКЕН>/setWebhook?url=https://ваш-домен.com/webhook

  3. Обработчик на сервере: Ваш код должен слушать POST-запросы на указанный путь (/webhook), парсить JSON от Telegram и формировать ответ.

Если вы используете облачные функции (Serverless), Webhook — единственный возможный вариант работы, так как там нельзя запустить постоянный процесс polling.

Расширение функционала: кнопки и меню

Стандартные текстовые команды неудобны для мобильных пользователей. Добавьте интерфейс с помощью клавиатур.

  • Reply Keyboard: Кнопки под строкой ввода текста. Подходят для основных действий меню.
  • Inline Keyboard: Кнопки, встроенные прямо в сообщение. Идеальны для навигации, выбора вариантов ответа или пагинации.

Пример создания Inline-кнопки на Python:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

keyboard = InlineKeyboardMarkup(inline_keyboard=[
    [InlineKeyboardButton(text="🌐 Наш сайт", url="https://example.com")],
    [InlineKeyboardButton(text="ℹ️ О нас", callback_data="about_us")]
])

await message.answer("Выберите действие:", reply_markup=keyboard)

Обработка нажатия такой кнопки происходит через колбэки (callback_query), что позволяет менять содержимое сообщения без засорения чата новыми текстами.

Частые ошибки новичков

При разработке ботов часто встречаются следующие проблемы:

  1. Ошибка 401 Unauthorized: Неверный токен. Проверьте, не скопировали ли вы лишние пробелы, и не истек ли токен (его можно перегенерировать в BotFather командой /revoke).
  2. Ошибка 409 Conflict: Запущено несколько экземпляров бота одновременно (например, и polling, и webhook, или два процесса polling). Оставьте только один активный источник обновлений.
  3. Игнорирование лимитов: Telegram ограничивает количество сообщений (около 30 в секунду для одного бота). При массовой рассылке обязательно делайте задержки.
  4. Отсутствие обработки ошибок: Если ваш сервер падает при одном неверном запросе от пользователя, бот перестанет отвечать. Всегда оборачивайте логику в try-catch.

FAQ

Можно ли создать бота без программирования? Да, существуют конструкторы ботов (Manybot, PuzzleBot и др.), позволяющие собирать логику из блоков. Однако они имеют ограничения по функционалу и часто требуют ежемесячную оплату. Свой код дает полную свободу.

Сколько стоит содержание бота? Сам сервис Telegram бесплатен. Вы платите только за хостинг, где крутится код. Для начала хватит дешевого VPS ($3-5/мес) или бесплатных тарифов облачных платформ.

Как добавить бота в группу? Просто найдите бота по юзернейму в поиске группы и добавьте его как участника. Не забудьте настроить права администратора, если бот должен модерировать чат или удалять сообщения.

Нужно ли проверять код перед публикацией? Обязательно. Протестируйте бота в личном чате и в тестовой группе. Проверьте реакцию на нестандартный ввод, специальные символы и длинные сообщения.