VibeCoderzVibeCoderz
Все статьи
2026/06/248 мин чтения

Как сделать HTTP-запрос к Telegram Bot API через curl и Python 2026

Telegram Bot API работает через обычный HTTPS. Любой запрос : URL с токеном, методом и параметрами. Никаких SDK и фреймворков для первых шагов не нужно: curl в терминале или requests в Python справляются с sendMessage, getMe и getUpdates за несколько…

Содержание (13)+

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.

Вся архитектура простая. У каждого запроса три части:

  1. Базовый адрес: https://api.telegram.org
  2. Идентификатор бота: /bot123456789:ABCdef... (токен, который выдаёт BotFather)
  3. Метод: /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 или в скриншотах.

Пошагово:

  1. Открыть Telegram, найти @BotFather
  2. Нажать Start или написать /start
  3. Написать /newbot
  4. Ввести имя бота (например, My Test Bot)
  5. Ввести username : должен заканчиваться на bot (например, mytestbot123_bot)
  6. Скопировать токен из ответа

Токен выглядит так: 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: []: просто значит, что бот ещё ничего не получал.

Порядок действий:

  1. Найти своего бота в Telegram по username
  2. Написать ему любое слово: /start или просто текст
  3. Выполнить запрос 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_idString / IntegerКуда отправить. Обязательный
textStringТекст сообщения. Обязательный
parse_modeStringHTML или MarkdownV2: форматирование
disable_notificationBooleantrue: сообщение без звука
reply_to_message_idIntegerОтветить на конкретное сообщение
protect_contentBooleanЗапретить пересылку

Пример с 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.

Порядок настройки для группы:

Изображение
  1. Создать публичную группу в Telegram
  2. Добавить бота в группу
  3. Назначить бота администратором (нужно для отправки сообщений в некоторые типы групп)
  4. Написать что-нибудь в группу сам
  5. Запустить 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-dotenvpip 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 актуальны на дату публикации.

All Posts

Автор

Елисавета Наговицына
Елисавета Наговицына

Предприниматель · Контент-маркетолог · SEO-стратег · AI-продуктолог

2026/06/24

400 000+ органических переходов за 3 месяца. Со-основатель GoBanana (231K пользователей, 12+ млн ₽ без рекламы) и NeuroScribe (65K пользователей). SEO/GEO-стратегии для AI-поисковиков, 1 700+ единиц контента, 17+ реализованных стратегий.

Об авторе →

Читать далее

📢 Новость

Claude Code: новый CLI-агент от Anthropic

Anthropic выпустила Claude Code — терминальный AI-агент для разработчиков. Инструмент работает прямо в командной строке и умеет писать, редактировать и запускать код.

2026/02/27
📝 Конспект

Zcode AI: Полный гид по визуальному интерфейсу для Claude Code и AI-агентов

Узнайте, как использовать Zcode для управления Claude Code, Gemini и Codex в едином GUI. Настройка провайдеров, MCP-серверов и визуальный вайбкодинг.

2026/02/28
📝 Конспект

YouTube-канал с монетизацией из любой точки мира: Пошаговый гайд 2026

Инструкция по созданию YouTube-канала: обход блокировок SMS, настройка расширенных функций через виртуальные номера и правила безопасности для монетизации.

2026/02/28
📝 Конспект

Windsurf Code Maps: Как глубоко понимать архитектуру проекта перед написанием кода

Полный гайд по Windsurf Code Maps, модели Sway 1.5 и Sway Grep. Узнайте, как визуализировать архитектуру кода и ускорить разработку в 13 раз.

2026/02/28
📝 Конспект

Vk Fast Cash Strategy

Аудитория ВКонтакте — это те же люди, что и в Instagram, но 'социальный контракт' площадки другой. Если Instagram — это 'дорогой ресторан' с демонстрацией успеха, то VK — это 'душевная шашлычная'. Здесь не работает глянцевый 'успешный успех

2026/02/28