Отрасль: Связь и уведомления. Актуально на 2026-10-24.
HTTP-интерфейс для ботов Telegram: получение обновлений (long polling или вебхук), отправка и редактирование сообщений, фото и документов, ответы на нажатия inline-кнопок, работа с файлами. Каждый метод вызывается отдельным URL с токеном бота. Актуальная версия — Bot API 10.3 (24 августа 2026).
Самый частый случай: сайт или сервис пишет в Telegram о новых заказах, ошибках, заявках.
TOKEN='123456:ABC-DEF...'
curl -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-H 'Content-Type: application/json' \
-d '{
"chat_id": -1001234567890,
"text": "<b>Новый заказ №1042</b>\nСумма: 15 000 ₽\n<a href=\"https://example.ru/admin/orders/1042\">Открыть</a>",
"parse_mode": "HTML",
"link_preview_options": {"is_disabled": true}
}'
Бот на сервере с HTTPS: Telegram сам присылает каждое сообщение пользователю на твой адрес.
curl -X POST "https://api.telegram.org/bot$TOKEN/setWebhook" \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.ru/tg/webhook",
"secret_token": "s3cr3t_Random_42",
"allowed_updates": ["message", "callback_query"],
"drop_pending_updates": true
}'
Для бота на домашнем компьютере, в локальной сети или в скрипте — без публичного адреса и сертификата.
import requests
API = "https://api.telegram.org/bot<токен>"
offset = 0
while True:
r = requests.post(f"{API}/getUpdates", json={"offset": offset, "timeout": 30, "allowed_updates": ["message"]}, timeout=40).json()
for upd in r.get("result", []):
offset = upd["update_id"] + 1
msg = upd.get("message")
if msg and "text" in msg:
requests.post(f"{API}/sendMessage", json={"chat_id": msg["chat"]["id"], "text": f"Вы написали: {msg['text']}"})
Inline-кнопки: «Подтвердить заказ», «Отменить», выбор варианта — без ввода текста.
# Сообщение с кнопками
curl -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-H 'Content-Type: application/json' \
-d '{
"chat_id": 123456789,
"text": "Заказ №1042 на 15 000 ₽. Подтвердить?",
"reply_markup": {"inline_keyboard": [[
{"text": "✅ Подтвердить", "callback_data": "order:1042:ok"},
{"text": "❌ Отменить", "callback_data": "order:1042:cancel"}
]]}
}'
# После нажатия: убрать «часики» и поменять текст
curl -X POST "https://api.telegram.org/bot$TOKEN/answerCallbackQuery" \
-H 'Content-Type: application/json' -d '{"callback_query_id": "<id>", "text": "Заказ подтверждён"}'
curl -X POST "https://api.telegram.org/bot$TOKEN/editMessageText" \
-H 'Content-Type: application/json' -d '{"chat_id": 123456789, "message_id": 512, "text": "Заказ №1042 подтверждён ✅"}'
Прислать счёт или отчёт документом, принять от пользователя фото или файл.
# Отправить PDF
curl -X POST "https://api.telegram.org/bot$TOKEN/sendDocument" \
-F chat_id=123456789 \
-F document=@invoice-1042.pdf \
-F caption='Счёт по заказу №1042'
# Получить путь к файлу пользователя и скачать
FILE_PATH=$(curl -s -X POST "https://api.telegram.org/bot$TOKEN/getFile" -d file_id='<file_id>' | jq -r .result.file_path)
curl -o file.bin "https://api.telegram.org/file/bot$TOKEN/$FILE_PATH"
https://api.telegram.orghttps://api.telegram.org/bot<token>/METHOD_NAMEТип: API-ключ
Токен бота (выдаёт @BotFather) передаётся в пути запроса после bot.
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe
Параметров нет. Возвращает объект User с информацией о боте.
Возвращает массив объектов Update. Не работает, пока установлен вебхук.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
offset |
body | integer | нет | ID первого обновления; на 1 больше последнего полученного — подтверждает предыдущие |
limit |
body | integer | нет | Число обновлений, 1–100, по умолчанию 100 |
timeout |
body | integer | нет | Таймаут long polling в секундах, по умолчанию 0 |
allowed_updates |
body | array | нет | Типы обновлений, например ["message", "edited_channel_post", "callback_query"] |
Telegram отправляет на URL HTTPS POST с JSON-объектом Update; при ответе не 2XX повторяет запрос.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
url |
body | string | да | HTTPS URL для обновлений; пустая строка удаляет вебхук |
certificate |
body | file | нет | Публичный ключ для самоподписанного сертификата |
ip_address |
body | string | нет | Фиксированный IP для отправки вебхуков |
max_connections |
body | integer | нет | Одновременных соединений, 1–100, по умолчанию 40 |
allowed_updates |
body | array | нет | Типы обновлений |
drop_pending_updates |
body | boolean | нет | Сбросить накопленные обновления |
secret_token |
body | string | нет | 1–256 символов A-Z, a-z, 0-9, _, -; приходит в заголовке X-Telegram-Bot-Api-Secret-Token |
Возвращает отправленный Message.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
chat_id |
body | integer/string | да | ID чата или @username канала/супергруппы |
text |
body | string | да | Текст, 1–4096 символов после разбора сущностей |
parse_mode |
body | string | нет | Режим форматирования (Markdown-стиль или HTML) |
entities |
body | array | нет | Сущности текста вместо parse_mode |
message_thread_id |
body | integer | нет | ID темы форума |
link_preview_options |
body | object | нет | Настройки превью ссылок |
disable_notification |
body | boolean | нет | Отправить без звука |
protect_content |
body | boolean | нет | Запретить пересылку и сохранение |
reply_parameters |
body | object | нет | Сообщение, на которое отвечаем |
reply_markup |
body | object | нет | Inline-клавиатура, обычная клавиатура, её удаление или ForceReply |
business_connection_id |
body | string | нет | Бизнес-подключение, от имени которого отправляем |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
chat_id |
body | integer/string | да | ID чата или @username |
photo |
body | file/string | да | file_id, HTTP URL или загрузка через multipart/form-data |
caption |
body | string | нет | Подпись, 0–1024 символа |
parse_mode |
body | string | нет | Режим форматирования подписи |
has_spoiler |
body | boolean | нет | Скрыть фото под спойлером |
show_caption_above_media |
body | boolean | нет | Подпись над медиа |
reply_markup |
body | object | нет | Клавиатура |
Боты могут отправлять файлы любого типа до 50 МБ.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
chat_id |
body | integer/string | да | ID чата или @username |
document |
body | file/string | да | file_id, HTTP URL или загрузка через multipart/form-data |
thumbnail |
body | file/string | нет | Превью в JPEG до 200 кБ |
caption |
body | string | нет | Подпись, 0–1024 символа |
parse_mode |
body | string | нет | Режим форматирования подписи |
disable_content_type_detection |
body | boolean | нет | Отключить определение типа файла на сервере |
reply_markup |
body | object | нет | Клавиатура |
Показывает уведомление или алерт; возвращает True.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
callback_query_id |
body | string | да | ID callback-запроса |
text |
body | string | нет | Текст уведомления, 0–200 символов |
show_alert |
body | boolean | нет | Показать алерт вместо уведомления, по умолчанию false |
url |
body | string | нет | URL для открытия (игра или t.me/your_bot?start=XXXX) |
cache_time |
body | integer | нет | Время кэширования ответа на клиенте, секунд; по умолчанию 0 |
Возвращает отредактированный Message или True для inline-сообщений.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
chat_id |
body | integer/string | нет | Обязателен, если нет inline_message_id |
message_id |
body | integer | нет | Обязателен, если нет inline_message_id |
inline_message_id |
body | string | нет | Обязателен, если нет chat_id и message_id |
text |
body | string | нет | Новый текст, 1–4096 символов; обязателен, если нет rich_message |
parse_mode |
body | string | нет | Режим форматирования |
link_preview_options |
body | object | нет | Настройки превью ссылок |
reply_markup |
body | object | нет | Inline-клавиатура |
Возвращает объект File; ссылка https://api.telegram.org/file/bot<token>/<file_path> действует не меньше часа. Боты могут скачивать файлы до 20 МБ.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
file_id |
body | string | да | Идентификатор файла |
Сообщение можно удалить, если оно отправлено меньше 48 часов назад; служебные сообщения о создании супергруппы, канала или темы удалить нельзя.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
token |
path | string | да | Токен бота |
chat_id |
body | integer/string | да | ID чата или @username |
message_id |
body | integer | да | ID сообщения |
application/x-www-form-urlencoded, application/json (кроме загрузки файлов) или multipart/form-data (для файлов).ok; при успехе результат в result, при ошибке — description и error_code.getUpdates и вебхук взаимоисключающие: пока вебхук установлен, getUpdates не работает. Порты вебхука: 443, 80, 88, 8443.offset после каждого ответа.allow_paid_broadcast снимает лимиты рассылки до 1000 сообщений в секунду за 0,1 Telegram Stars за сообщение.| Код | Описание |
|---|---|
retry_after |
Превышен flood control — сколько секунд ждать до повтора |
migrate_to_chat_id |
Группа преобразована в супергруппу с указанным ID |
getFile — до 20 МБ.Если этого недостаточно — официальная документация: https://core.telegram.org/bots/api JSON: https://mcp-everything.ru/api/integrations/telegram-bot-api. MCP: https://mcp-everything.ru/mcp