Telegram Bot API
🌐 Русский

Как создать бота в Телеграм: от @BotFather до первого сообщения

· 8 мин чтения

Чтобы создать бота в Телеграм, напишите @BotFather команду /newbot, задайте имя и username с окончанием bot — в ответ придёт токен, с которым бота уже можно вызывать через Bot API. Регистрация занимает пару минут и ничего не стоит. Ниже — пошаговая инструкция: проверим токен через getMe, узнаем chat id, отправим первое сообщение на curl и Python, настроим команды и разберём, куда двигаться дальше.

Что понадобится

Шаг 1. Создайте бота через BotFather

@BotFather — официальный бот Telegram, через который создают и настраивают всех остальных ботов. Ищите именно @BotFather с отметкой верификации: у подделок бывают похожие имена.

  1. Откройте @BotFather и отправьте команду /newbot.
  2. Введите имя (name) — оно показывается в профиле и списке чатов. Можно по-русски и с пробелами, позже его меняют командой /setname.
  3. Введите username — 5–32 символа: латинские буквы, цифры и подчёркивания, в конце обязательно bot, например tetris_bot или TetrisBot. Регистр не важен. Если имя занято, BotFather попросит придумать другое.
  4. BotFather пришлёт сообщение со ссылкой на бота вида t.me/your_bot и токеном для доступа к HTTP API.

Выбирайте username внимательно: в отличие от имени, по документации его нельзя изменить позже. Те же действия доступны в Mini App @BotFather — функции там те же, только через кнопки.

Шаг 2. Сохраните токен

Токен выглядит как 123456789:AAEexampleTokenReplaceWithYours: число, двоеточие и секретная строка. Это одновременно логин и пароль бота — любой, у кого он есть, полностью управляет ботом. Поэтому:

Где найти токен позже, как его проверить и отозвать — в отдельном гайде как получить токен бота.

Шаг 3. Проверьте токен через getMe

Метод getMe не требует параметров и нужен ровно для этого — проверить токен. Адрес любого метода выглядит как https://api.telegram.org/bot<token>/ИМЯ_МЕТОДА, причём слово bot пишется слитно с токеном.

export BOT_TOKEN="123456789:AAEexampleTokenReplaceWithYours"

curl -s "https://api.telegram.org/bot$BOT_TOKEN/getMe"

Если токен рабочий, придёт "ok": true, а в result — объект бота: id, first_name, username и флаги вроде can_join_groups и can_read_all_group_messages. Ответ 401 Unauthorized означает, что токен скопирован с ошибкой или уже отозван, а 404 Not Found — что адрес собран неверно: чаще всего забыли bot перед токеном.

Без терминала: откройте getMe в Bot API Tester, вставьте токен и нажмите Ctrl+Enter. Токен остаётся в localStorage вашего браузера, а запросы уходят напрямую на api.telegram.org.

Шаг 4. Узнайте chat id и отправьте первое сообщение

Бот не может написать человеку первым: сначала пользователь должен открыть чат с ботом и нажать «Запустить» (Start) — клиент отправит команду /start. Сделайте это со своего аккаунта, а затем заберите апдейты методом getUpdates:

curl -s "https://api.telegram.org/bot$BOT_TOKEN/getUpdates"
{
  "ok": true,
  "result": [
    {
      "update_id": 851234567,
      "message": {
        "message_id": 1,
        "from": {"id": 123456789, "is_bot": false, "first_name": "Иван", "language_code": "ru"},
        "chat": {"id": 123456789, "first_name": "Иван", "type": "private"},
        "date": 1793275200,
        "text": "/start"
      }
    }
  ]
}

Нужное значение — message.chat.id. В личном чате оно совпадает с id пользователя в from.id. Если result пустой, напишите боту ещё раз: апдейты хранятся не дольше 24 часов. Как найти id группы или канала, разобрано в гайде как узнать chat id.

Теперь отправим сообщение методом sendMessage:

curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{"chat_id": 123456789, "text": "Привет! Это мой первый бот"}'

То же на Python, а заодно простейший эхо-бот на long polling — он отвечает на каждое текстовое сообщение:

import os
import requests

TOKEN = os.environ.get("BOT_TOKEN", "123456789:AAEexampleTokenReplaceWithYours")
API = f"https://api.telegram.org/bot{TOKEN}"


def call(method, **params):
    data = requests.post(f"{API}/{method}", json=params, timeout=40).json()
    if not data["ok"]:
        raise RuntimeError(f"{method}: {data['error_code']} {data['description']}")
    return data["result"]


call("sendMessage", chat_id=123456789, text="Привет из Python!")

offset = 0
while True:
    # long polling: Telegram держит запрос до 30 секунд, пока не появятся апдейты
    for update in call("getUpdates", offset=offset, timeout=30):
        offset = update["update_id"] + 1  # подтверждаем полученные апдейты
        message = update.get("message")
        if message and "text" in message:
            call("sendMessage", chat_id=message["chat"]["id"], text="Вы написали: " + message["text"])

Запустите скрипт (BOT_TOKEN=... python bot.py) и напишите боту — он ответит. Параметр offset обязателен: без него getUpdates будет снова и снова возвращать одни и те же апдейты. Форматирование, кнопки и ошибки отправки подробно разобраны в гайде как отправить сообщение через бота.

Шаг 5. Описание и команды бота

Необязательный, но полезный шаг: пользователь сразу поймёт, что умеет бот. Основные команды @BotFather:

Команды удобнее задавать из кода методом setMyCommands: так список хранится в репозитории вместе с ботом.

curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{"commands": [
        {"command": "start", "description": "Запустить бота"},
        {"command": "help", "description": "Что умеет бот"},
        {"command": "settings", "description": "Настройки"}
      ]}'

Ограничения: команда — 1–32 символа (строчные латинские буквы, цифры и подчёркивания), описание — 1–256 символов, всего не больше 100 команд. Параметры scope и language_code позволяют показывать разные списки в группах, администраторам и пользователям с разными языками. Telegram просит все боты поддерживать /start и /help, а при наличии настроек — /settings. Описания тоже задаются из кода: методы setMyDescription и setMyShortDescription.

Если что-то не работает

СимптомПричина и решение
401 UnauthorizedНеверный или отозванный токен. Скопируйте его заново: /mybots → бот → API Token
getUpdates возвращает "result": []Новых сообщений нет или прошло больше 24 часов. Напишите боту и повторите запрос
409 Conflict в ответ на getUpdatesУ бота установлен вебхук или токен параллельно использует другой процесс. Вызовите deleteWebhook или остановите второй экземпляр
403 Forbidden: bot can't initiate conversation with a userПользователь ещё не запускал бота — пусть откроет чат и нажмёт «Запустить»
400 Bad Request: chat not foundНеверный chat_id или бота нет в этом чате
Бот молчит в группеВключён privacy mode: бот видит только команды вида /start@your_bot, ответы на свои сообщения и служебные сообщения

Что дальше: polling, вебхук, библиотеки и Mini Apps

Polling или вебхук. Эхо-бот выше работает на long polling: он сам забирает апдейты через getUpdates, поэтому запускается где угодно, даже за NAT. В продакшене часто выбирают вебхук — Telegram сам присылает апдейты на ваш HTTPS-адрес. Одновременно оба способа не работают. Настройка описана в гайде вебхук для Telegram-бота.

Библиотеки. Работать с HTTP вручную полезно для понимания, но реального бота проще писать на фреймворке: он возьмёт на себя polling, роутинг команд, клавиатуры и состояние диалогов.

Mini Apps. Если интерфейс не помещается в сообщения и кнопки, бот может открывать веб-приложение прямо внутри Telegram. Как его сделать и отладить, рассказано в гайде тестирование Mini App, а попробовать Telegram.WebApp API можно в Mini App Tester. Все методы Bot API с параметрами и примерами собраны в справочнике методов.

Частые вопросы

Сколько стоит создать бота в Телеграм?

Нисколько: регистрация в @BotFather и запросы к Bot API бесплатны. Платить придётся только за сервер, если бот должен работать круглосуточно, и за отдельные функции вроде платных рассылок.

Можно ли создать бота без программирования?

Зарегистрировать бота в @BotFather можно без кода, но сам по себе он ничего не делает. Отвечать на сообщения будет ваш скрипт, фреймворк или сервис автоматизации вроде n8n, которому вы передадите токен.

Какой username можно дать боту?

5–32 символа: латинские буквы, цифры и подчёркивания, в конце обязательно bot — например, tetris_bot или TetrisBot. В отличие от имени, username потом не изменить.

Почему созданный бот не отвечает?

Бот отвечает, только пока работает ваш код: он получает апдейты через getUpdates или вебхук и вызывает sendMessage. Проверьте токен через getMe и убедитесь, что запущен ровно один экземпляр бота.

Как добавить боту команды в меню?

Командой /setcommands в @BotFather или методом setMyCommands. Команда — до 32 символов из строчных латинских букв, цифр и подчёркиваний, описание — до 256 символов, всего до 100 команд.

На чём писать Telegram-бота: Python или JavaScript?

Подойдёт любой язык, который умеет отправлять HTTP-запросы. На Python чаще выбирают aiogram или python-telegram-bot, на Node.js — grammY или Telegraf.

Что нового в Telegram Bot API 10.0–10.3: rich-сообщения, эфемерные сообщения и гостевой режим

Что нового в Telegram Bot API 10.0–10.3: rich-сообщения, эфемерные сообщения, гостевой режим, заявки на вступление — с примерами и чек-листом миграции.

Лимиты Telegram Bot API: сообщения в секунду, ошибка 429 и размеры файлов

Все лимиты Telegram Bot API в одном месте: сообщения в секунду, ошибка 429 и retry_after, платные рассылки, размеры файлов, длина текста и подписи.

Как отправить сообщение через бота Telegram: sendMessage, разметка и кнопки

Как отправить сообщение через бота Telegram: sendMessage на curl, Python и JavaScript, parse_mode HTML и MarkdownV2, кнопки и ошибки 400, 403, 429.

Токен бота Telegram: как получить, где найти, как проверить и отозвать

Как получить токен бота Телеграм в @BotFather, где взять токен уже созданного бота, как проверить его через getMe и что делать, если токен утёк.

Вебхук для Telegram-бота: настройка setWebhook, проверка и удаление

Как настроить вебхук Телеграм-бота: требования к HTTPS и портам, setWebhook с secret_token, проверка через getWebhookInfo, удаление и частые ошибки.

Как узнать chat id в Telegram: пользователь, группа, канал и тема форума

Как узнать chat id в Telegram через getUpdates: личный чат, группа, супергруппа, канал и тема форума. Форматы id с -100 и что делать с пустым result.

Тестирование Telegram Mini App: от браузера до отладки на телефоне

Тестирование Telegram Mini App по шагам: mock-режим в браузере, HTTPS-туннель для localhost, тестовая среда, DevTools на телефоне и проверка initData.