Telegram Bot API работает через обычный HTTPS. Любой запрос : URL с токеном, методом и параметрами. Никаких SDK и фреймворков для первых шагов не нужно: curl в терминале или requests в Python справляются с sendMessage, getMe и getUpdates за несколько строк кода.
В этой статье разберём структуру URL, как получить токен и chat_id, как проверить бота через getMe, и как отправить первое сообщение: сначала через curl, потом через Python.
Обновлено: июнь 2026
TL;DR. Telegram Bot API: REST API по адресу https://api.telegram.org/bot<TOKEN>/METHOD. Три шага для старта: создать бота через @BotFather, получить токен, найти chat_id через getUpdates. Отправка сообщения через curl: одна строка. Через Python requests: пять строк. Никаких библиотек и фреймворков.Что такое Telegram Bot API и как устроен запрос?
Telegram Bot API: HTTP-интерфейс для управления ботом: отправка сообщений, получение апдейтов, работа с файлами и кнопками. Базовый URL: https://api.telegram.org/bot<TOKEN>/METHOD.
Вся архитектура простая. У каждого запроса три части:
- Базовый адрес:
https://api.telegram.org - Идентификатор бота:
/bot123456789:ABCdef...(токен, который выдаёт BotFather) - Метод:
/sendMessage,/getMe,/getUpdatesи так далее
Параметры передаются прямо в URL (GET) или в теле запроса (POST). Telegram принимает оба способа. Официальная документация API живёт по адресу core.telegram.org/bots/api: там список всех методов, параметров и типов ответов.

Пример запроса getMe в браузере:
https://api.telegram.org/bot123456789:ABCdef.../getMeВставь этот URL в адресную строку браузера, подставив свой токен. Сразу увидишь JSON-ответ. Это самый быстрый способ проверить, что бот живой.
Шаг 1. Как создать бота и получить токен?
Токен получают через @BotFather, встроенный бот Telegram для управления ботами. Команда /newbot, имя, username с окончанием bot: и BotFather выдаёт токен.
Без токена нет смысла двигаться дальше. Токен: ключ доступа к API. Любой, у кого он есть, полностью контролирует бота, поэтому его нельзя публиковать в коде, в README или в скриншотах.
Пошагово:
- Открыть Telegram, найти
@BotFather - Нажать Start или написать
/start - Написать
/newbot - Ввести имя бота (например,
My Test Bot) - Ввести username : должен заканчиваться на
bot(например,mytestbot123_bot) - Скопировать токен из ответа
Токен выглядит так: 7456321894:AAFHjk8-реальная_длинная_строка. Это не паттерн для копирования: у каждого бота свой токен.
Дальше в примерах я буду использовать <TOKEN> как заглушку, подставляй свой.
Шаг 2. Как проверить бота через getMe?
getMe возвращает информацию о боте: id, username, имя, is_bot. Если в ответе ok: true: токен рабочий и бот зарегистрирован.
Это первый запрос, который стоит выполнить после получения токена. Он не требует никаких дополнительных параметров.
Через curl:
curl -s "https://api.telegram.org/bot<TOKEN>/getMe"Через Python:
import requests
TOKEN = "7456321894:AAFHjk8..."
response = requests.get(f"https://api.telegram.org/bot{TOKEN}/getMe")
print(response.json())Ответ JSON:
{
"ok": true,
"result": {
"id": 7456321894,
"is_bot": true,
"first_name": "My Test Bot",
"username": "mytestbot123_bot"
}
}Если ok: false, проверь токен. Скорее всего скопирован с пробелами или не полностью.
Шаг 3. Как получить chat_id через getUpdates?
getUpdates возвращает последние сообщения, которые бот получил. Из ответа берём message.chat.id. этот числовой ID нужен для отправки сообщений конкретному пользователю.
Здесь есть один нюанс, который путает новичков. Чтобы getUpdates вернул данные, нужно сначала написать боту сообщение в Telegram. Пустой result: []: просто значит, что бот ещё ничего не получал.
Порядок действий:
- Найти своего бота в Telegram по username
- Написать ему любое слово:
/startили просто текст - Выполнить запрос getUpdates
Через curl:
curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates"Через Python:
import requests
TOKEN = "7456321894:AAFHjk8..."
response = requests.get(f"https://api.telegram.org/bot{TOKEN}/getUpdates")
data = response.json()
print(data)Как найти chat_id в ответе:
{
"ok": true,
"result": [
{
"update_id": 123456789,
"message": {
"chat": {
"id": 987654321,
"type": "private"
},
"text": "привет"
}
}
]
}message.chat.id и есть chat_id. В этом примере 987654321. Скопируй его: он нужен для отправки сообщений.
| Тип чата | Формат chat_id | Пример |
|---|---|---|
| Личный чат с пользователем | Положительное число | 987654321 |
| Публичная группа | @username группы | @mytestgroup |
| Приватная группа / канал | Отрицательное число с -100 | -1001234567890 |
Шаг 4. Как отправить сообщение через sendMessage?
sendMessage: основной метод Telegram API. Обязательные параметры: chat_id и text. Работает через GET и POST. Ответ содержит объект Message с id отправленного сообщения.
Вот тут начинается самое интересное. После получения токена и chat_id можно отправить первое реальное сообщение.
Отправка через curl
GET-запрос (параметры в URL):
curl -s "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Привет%20из%20curl"POST-запрос (параметры в теле):
curl -s -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-d "chat_id=<CHAT_ID>" \
-d "text=Привет из curl"POST удобнее для русского текста и длинных сообщений: не нужно заботиться об URL-кодировании.
Отправка через Python requests
import requests
TOKEN = "7456321894:AAFHjk8..."
CHAT_ID = "987654321"
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
params = {
"chat_id": CHAT_ID,
"text": "Привет из Python!"
}
response = requests.get(url, params=params)
print(response.json())Или через POST:
import requests
TOKEN = "7456321894:AAFHjk8..."
CHAT_ID = "987654321"
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
data = {
"chat_id": CHAT_ID,
"text": "Привет из Python через POST!"
}
response = requests.post(url, data=data)
print(response.json())Успешный ответ:
{
"ok": true,
"result": {
"message_id": 42,
"chat": { "id": 987654321, "type": "private" },
"text": "Привет из Python!",
"date": 1750000000
}
}Что делать с параметрами sendMessage?
sendMessage поддерживает форматирование текста, переносы строк, отключение уведомлений и разбивку длинных сообщений. Все необязательные параметры передаются рядом с chat_id и text.
Базовых двух параметров хватает для большинства задач. Но когда нужно больше: вот что ещё принимает sendMessage:

| Параметр | Тип | Что делает |
|---|---|---|
| chat_id | String / Integer | Куда отправить. Обязательный |
| text | String | Текст сообщения. Обязательный |
| parse_mode | String | HTML или MarkdownV2: форматирование |
| disable_notification | Boolean | true: сообщение без звука |
| reply_to_message_id | Integer | Ответить на конкретное сообщение |
| protect_content | Boolean | Запретить пересылку |
Пример с HTML-форматированием:
import requests
TOKEN = "7456321894:AAFHjk8..."
CHAT_ID = "987654321"
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
data = {
"chat_id": CHAT_ID,
"text": "<b>Важно:</b> скрипт завершился за <i>3.2 секунды</i>",
"parse_mode": "HTML"
}
response = requests.post(url, data=data)Перенос строки в URL-запросе: используй %0A для одного переноса, %0A%0A для абзаца. В Python params это делается автоматически.
Максим: «Мы используем sendMessage для уведомлений в NanaBanana: когда скрипт обработки заказов завершается или падает с ошибкой, бот сразу пишет в личку. Это 5 строк на Python: токен, chat_id, текст: и всё. Никаких библиотек, никакого overhead. Ребят, это работает.»
Как отправить сообщение в группу через Telegram Bot API?
Для публичной группы chat_id: это @username группы. Для приватной: числовой ID, начинающийся с -100. Бот должен быть добавлен в группу как участник и иметь права на отправку.
Здесь лайфхак из транскрипций видео: chat_id публичной группы: это просто её публичный username. Если ссылка на группу t.me/mytestgroup1, то chat_id будет @mytestgroup1.
Порядок настройки для группы:

- Создать публичную группу в Telegram
- Добавить бота в группу
- Назначить бота администратором (нужно для отправки сообщений в некоторые типы групп)
- Написать что-нибудь в группу сам
- Запустить getUpdates: найти числовой ID группы в
message.chat.id
Запрос:
curl -s -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-d "chat_id=@mytestgroup" \
-d "text=Сообщение в группу"Числовой ID группы начинается с -100: это нормально, не ошибка.
Что ещё можно сделать через Telegram Bot API без библиотек?
Кроме sendMessage, API поддерживает отправку файлов, фото, геолокации, инлайн-кнопок и удаление сообщений. Каждая операция: отдельный метод с таким же базовым URL.
Три метода, которые чаще всего нужны вместе с sendMessage:
getUpdates с offset: для опроса новых сообщений в цикле:
import requests
import time
TOKEN = "7456321894:AAFHjk8..."
offset = 0
while True:
url = f"https://api.telegram.org/bot{TOKEN}/getUpdates"
response = requests.get(url, params={"offset": offset, "timeout": 30})
updates = response.json().get("result", [])
for update in updates:
print(update)
offset = update["update_id"] + 1
time.sleep(1)sendMessage с отправкой каждые N секунд: для автоматических уведомлений:
import requests
import time
TOKEN = "7456321894:AAFHjk8..."
CHAT_ID = "987654321"
while True:
requests.post(
f"https://api.telegram.org/bot{TOKEN}/sendMessage",
data={"chat_id": CHAT_ID, "text": f"Статус: OK | {time.strftime('%H:%M:%S')}"}
)
time.sleep(60) # Раз в минутуdeleteMessage: удалить отправленное сообщение (нужен message_id из ответа sendMessage):
import requests
TOKEN = "7456321894:AAFHjk8..."
CHAT_ID = "987654321"
MESSAGE_ID = 42 # из ответа sendMessage
requests.post(
f"https://api.telegram.org/bot{TOKEN}/deleteMessage",
data={"chat_id": CHAT_ID, "message_id": MESSAGE_ID}
)
| Метод | Что делает | Обязательные параметры |
|---|---|---|
| getMe | Информация о боте | : |
| getUpdates | Входящие сообщения | : |
| sendMessage | Текстовое сообщение | chat_id, text |
| sendPhoto | Фото с подписью | chat_id, photo |
| sendDocument | Файл | chat_id, document |
| deleteMessage | Удалить сообщение | chat_id, message_id |
| editMessageText | Редактировать текст | chat_id, message_id, text |
Как безопасно хранить токен?
Токен нельзя хардкодить в коде. Правильный подход: переменные окружения через .env файл и python-dotenv. Так токен не попадёт в git-репозиторий.
Это критически важно. Любой, у кого есть токен, полностью контролирует бота: может слать сообщения от его имени, читать переписку, удалять данные.

Простой способ через .env:
Создай файл .env рядом со скриптом:
TELEGRAM_TOKEN=7456321894:AAFHjk8...
TELEGRAM_CHAT_ID=987654321Добавь .env в .gitignore:
.envИспользуй в Python:
import os
import requests
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv("TELEGRAM_TOKEN")
CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
response = requests.post(
f"https://api.telegram.org/bot{TOKEN}/sendMessage",
data={"chat_id": CHAT_ID, "text": "Безопасный запрос"}
)Установить python-dotenv: pip install python-dotenv.
На сервере переменные задаются через системные env, а не через файл: export TELEGRAM_TOKEN=... или через панель деплоя.
Практические юзкейсы для Telegram Bot API
Прямые HTTP-запросы без библиотек подходят для серверных уведомлений, мониторинга, автопостинга и простых скриптов. Для сложных диалоговых ботов удобнее python-telegram-bot или aiogram.
Реальные сценарии, где хватает curl и requests:
Уведомления о событиях на сервере. Скрипт отработал, база бэкапнулась, ошибка в логах: одна функция с requests.post() шлёт сообщение в личку или в рабочий чат. Из транскрипций видео: это буквально 2-5 строк кода.
Автопостинг в канал. Интеграция с News API, парсер новостей, ежедневный дайджест: цикл while True с time.sleep(interval) и sendMessage. Для простых задач этого достаточно.
Мониторинг скриптов. Запустил тяжёлый скрипт: хочешь знать, когда он закончится. Добавь две строки в конец скрипта: запрос к sendMessage с результатом. Не нужно держать терминал открытым.
Быстрое тестирование API. Curl прямо из браузера или из командной строки: проверить метод, структуру ответа, работу параметров. Быстрее, чем поднимать Postman.
Если задача сложнее: диалоги, состояния, webhook, инлайн-кнопки с callbacks: тогда уже смотри в сторону библиотек. Например, aiogram или python-telegram-bot берут рутину на себя.
Частые ошибки и как их исправить
Большинство проблем с Telegram Bot API: неверный токен, пустой getUpdates или неправильный chat_id. Каждая из них диагностируется за 30 секунд.

Ошибка: {"ok":false,"error_code":401,"description":"Unauthorized"} Причина: неверный токен. Скопируй его заново из BotFather, убедись, что нет пробелов в начале и конце строки.
Ошибка: result: [] в getUpdates Причина: бот не получал сообщений. Напиши боту что-нибудь в Telegram, потом повтори запрос.
Ошибка: {"ok":false,"error_code":400,"description":"Bad Request: chat not found"} Причина: неверный chat_id. Проверь, что скопировал числовой ID, а не username. Для групп с username: добавь @ перед названием.
Ошибка: бот не может писать в группу Причина: не добавлен как участник или нет прав администратора. Зайди в настройки группы, добавь бота и выдай права на отправку сообщений.
Ошибка: кириллица приходит кракозябрами в URL Причина: текст в GET-запросе нужно URL-кодировать. Используй POST вместо GET: тогда кодировка обрабатывается автоматически.
FAQ по Telegram Bot API
Как отправить сообщение через Telegram API в одну строку на curl? curl -s "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Текст": подставь свой токен и chat_id. Для кириллицы лучше использовать POST.
Что делать, если у меня несколько ботов? У каждого бота свой токен. В коде просто используй разные переменные: например, TOKEN_BOT1 и TOKEN_BOT2. Запросы к каждому боту независимы.
Как узнать chat_id группы, если она приватная? Добавь бота в группу, напиши там что-нибудь, запроси getUpdates. В ответе будет message.chat.id с отрицательным числом: это chat_id группы.
Можно ли использовать Telegram Bot API бесплатно? Да, полностью бесплатно без ограничений на количество ботов. Есть лимиты на частоту сообщений: не более 30 сообщений в секунду в целом и не более 1 сообщения в секунду в один чат.
Нужны ли права администратора бота в группе для sendMessage? Зависит от настроек группы. В обычной группе боту достаточно быть участником. В супергруппе с ограничениями: нужны права на отправку сообщений. Проверь настройки группы, если бот молчит.
Как отправить в Telegram файл или картинку через Python? Используй метод sendPhoto или sendDocument. Файл передаётся через files в requests: requests.post(url, data={"chat_id": id}, files={"photo": open("img.jpg", "rb")}).
Где хранится документация Telegram Bot API? На официальном сайте: core.telegram.org/bots/api. Там все методы, параметры, типы ответов с примерами.
Глоссарий
Telegram Bot API: HTTP-интерфейс для управления ботами в Telegram. Адрес: https://api.telegram.org/bot<TOKEN>/METHOD.
BotFather: официальный бот Telegram (@BotFather) для создания и настройки ботов. Выдаёт токены.
Token (токен): строковый ключ доступа к боту. Формат: 123456789:ABCdef.... Не передавать третьим лицам.
chat_id: числовой или строковый идентификатор чата. Для личных чатов: положительное число, для групп: отрицательное с -100, для публичных групп: @username.
getMe: метод API для проверки токена. Возвращает базовую информацию о боте.
getUpdates: метод для получения входящих сообщений (апдейтов). Используется для polling: периодического опроса сервера Telegram.
sendMessage: основной метод отправки текстовых сообщений. Обязательные параметры: chat_id и text.
offset: параметр getUpdates. Указывает, с какого update_id начинать выборку. Используется для обработки сообщений по одному, без повторов.
parse_mode: параметр sendMessage. Указывает формат текста: HTML (теги <b>, <i>) или MarkdownV2.
Webhook: альтернатива polling. Telegram сам шлёт обновления на твой сервер при новых сообщениях. Требует HTTPS.
Если хочешь не писать запросы вручную, а сразу строить ботов с логикой и обработкой команд: смотри инструменты в каталоге AI-инструментов. Для более быстрой разработки ботов хорошо работает Cursor или Claude Code: они дописывают рутину сами, пока ты занимаешься логикой.
Есть вопросы по интеграции Telegram API в свой продукт: запишись на консультацию к Максиму.
Статья обновлена: июнь 2026. Данные по API актуальны на дату публикации.