# Telegram Bot API: Кнопки под сообщением и обработка нажатий

Сценарий из mcp-everything. Актуально на 2026-10-24.

Inline-кнопки: «Подтвердить заказ», «Отменить», выбор варианта — без ввода текста.

1. Отправь сообщение с кнопками: POST /bot{token}/sendMessage с reply_markup = inline_keyboard. У каждой кнопки — text и callback_data (до 64 байт): по ней ты поймёшь, что нажали.
2. Нажатие приходит как update с callback_query: в нём id, data (твоя callback_data) и message, к которому была кнопка.
3. Обязательно ответь на нажатие: POST /bot{token}/answerCallbackQuery с callback_query_id — иначе у пользователя будет крутиться индикатор загрузки. В text можно показать короткое уведомление.
4. Обнови исходное сообщение: POST /bot{token}/editMessageText с chat_id, message_id и новым текстом (и новыми кнопками или без них).

```bash
# Сообщение с кнопками
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 подтверждён ✅"}'
```

## Базовые URL

- Боевой: `https://api.telegram.org`
- URL метода: `https://api.telegram.org/bot<token>/METHOD_NAME`

## Авторизация

Тип: API-ключ

Токен бота (выдаёт @BotFather) передаётся в пути запроса после `bot`.

```
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe
```

## Методы сценария

### POST /bot{token}/sendMessage — Отправка текстового сообщения

Возвращает отправленный 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 | нет | Бизнес-подключение, от имени которого отправляем |

### POST /bot{token}/answerCallbackQuery — Ответ на нажатие inline-кнопки

Показывает уведомление или алерт; возвращает `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 |

### POST /bot{token}/editMessageText — Редактирование текста сообщения

Возвращает отредактированный 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-клавиатура |

## Нюансы

- Поддерживаются GET и POST; параметры — строкой запроса, `application/x-www-form-urlencoded`, `application/json` (кроме загрузки файлов) или `multipart/form-data` (для файлов).
- Имена методов нечувствительны к регистру; все запросы — в UTF-8 и только по HTTPS.
- Ответ — JSON с полем `ok`; при успехе результат в `result`, при ошибке — `description` и `error_code`.
- `getUpdates` и вебхук взаимоисключающие: пока вебхук установлен, `getUpdates` не работает. Порты вебхука: 443, 80, 88, 8443.
- Чтобы не получать дубли при long polling, пересчитывайте `offset` после каждого ответа.
- ID чатов могут превышать 32 бита (до 52 значимых бит) — храните их в 64-битных целых.
- `allow_paid_broadcast` снимает лимиты рассылки до 1000 сообщений в секунду за 0,1 Telegram Stars за сообщение.

## Другие сценарии

- [Отправлять уведомления в чат или канал](https://mcp-everything.ru/integrations/telegram-bot-api/scenarios/otpravlyat-uvedomleniya-v-chat-ili-kanal.md)
- [Принимать сообщения через вебхук](https://mcp-everything.ru/integrations/telegram-bot-api/scenarios/prinimat-soobscheniya-cherez-vebhuk.md)
- [Бот без своего сервера с HTTPS: long polling](https://mcp-everything.ru/integrations/telegram-bot-api/scenarios/bot-bez-svoego-servera-s-https-long.md)
- [Отправить файл и скачать файл от пользователя](https://mcp-everything.ru/integrations/telegram-bot-api/scenarios/otpravit-fayl-i-skachat-fayl.md)

---

Если этого недостаточно — официальная документация: https://core.telegram.org/bots/api
Вся интеграция одним документом: https://mcp-everything.ru/integrations/telegram-bot-api.md
