VibeCoderzVibeCoderz
Все статьи
Вайбкодинг: гайды2026/06/248 мин чтения

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

Получите токен у BotFather, найдите chat_id и отправьте сообщение в Telegram за пару строк кода: одна команда curl или пять строк requests в Python. Это самый простой способ начать работу с Bot API.

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

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-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. Там все методы, параметры, типы ответов с примерами.



Если хочешь не писать запросы вручную, а сразу строить ботов с логикой и обработкой команд: смотри инструменты в каталоге AI-инструментов. Для более быстрой разработки ботов хорошо работает Cursor или Claude Code: они дописывают рутину сами, пока ты занимаешься логикой.

Есть вопросы по интеграции Telegram API в свой продукт: запишись на консультацию к Максиму.


Статья обновлена: октябрь 2026. Данные по API актуальны на дату публикации.

Автор

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

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

2026/06/24

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

Об авторе →
All Posts

Читать далее

📄 Статья

Повысить качество фото онлайн бесплатно без регистрации

[ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Повысить качество фото онлайн бесплатно без регистрации в 2026", "description": "В октябре 2026 повысить качество фото онлайн бесплатно можно через GoBanana, Qwen, Seedream и…

2026/10/1210 мин
📄 Статья

ИИ на телефоне Самсунг, Гугл и айфон в России в 2026 году

Встроенный ИИ в смартфонах 2026: Galaxy AI, Gemini, Apple

2026/10/0611 мин
📄 Статья

Создать песню ИИ на телефон в 2026 и поставить на звонок

Создать песню ИИ на телефон можно без студии и нот: ставите приложение Suno, описываете трек словами и через минуту слушаете два варианта. Дальше файл режется до 30 секунд и превращается в рингтон. Ниже разбираем Android и iPhone, что поменял запуск…

2026/10/0611 мин
📄 Статья

Миграции базы данных для новичка: как менять схему без потери данных

Миграции базы данных — это версионированные скрипты, которые переводят схему БД из одного состояния в другое без ручных правок и без потери данных. Разберем, зачем они нужны, чем отличаются Alembic, Drizzle и Prisma migrate, и что делать, если миграц…

2026/10/0610 мин
📄 Статья

Локальный ИИ на телефоне без интернета в 2026 честные цифры

Локальный ИИ на телефоне без интернета ставится примерно за десять минут: одно приложение из трех, модель весом 1-4 ГБ, авиарежим. На флагмане 2025-2026 годов это 15-26 токенов в секунду, на бюджетнике около трех, и разница чувствуется сразу. Ниже ра…

2026/10/0112 мин
📄 Статья

SonarQube в 2026: что это, редакции и как запустить первый анализ кода

SonarQube это платформа автоматического ревью кода, которую вы ставите на свой сервер. Она прогоняет исходники через набор правил и показывает баги, уязвимости и запахи кода в 30+ языках, а потом встраивается в CI и блокирует сборку, если новый код х…

2026/10/019 мин