# Telegram-бот на n8n: inline-кнопки, меню и кнопка для открытия Mini App

> В n8n бот строится из Telegram Trigger, ветвления по типу события и узла отправки. Нажатия inline-кнопок приходят как callback_query и требуют ответа. Кнопку, открывающую Mini App, проще отправить через HTTP Request, а у бота может быть только один webhook.

Дата: 2026-10-30 · Источник: https://oneswitch.ru/blog/telegram-bot-n8n-knopki-menu-mini-app/

В n8n бота можно собрать без отдельного кода: приём сообщений, меню, кнопки и ответы. Разберём схему сценария, обработку нажатий и кнопку, которая открывает Mini App.

## Из чего состоит бот в n8n

1. **Telegram Trigger**: принимает обновления (сообщения и нажатия на кнопки).
2. **Ветвление (Switch или IF)**: определяет, что пришло: команда, текст или нажатие кнопки.
3. **Узлы обработки:** запросы к базе, API, расчёты.
4. **Узел отправки Telegram** или **HTTP Request**: отправляет ответ пользователю.

Чтобы триггер работал на постоянной основе, workflow должен быть **активирован**: тестовый режим подходит только для проверки, а боевой webhook регистрируется при активации. Для этого у n8n должен быть публичный адрес с HTTPS.

## Команды и меню

Команды вида `/start` приходят обычным сообщением, поэтому в ветвлении проверяйте начало текста. Подсказки команд в интерфейсе Telegram задаются у **@BotFather** (команда `/setcommands`): это только список для пользователя, логику обрабатывает ваш сценарий.

## Inline-кнопки

Inline-кнопки отправляются в узле отправки сообщения через настройку клавиатуры (Reply Markup, Inline Keyboard). У каждой кнопки есть текст и либо `callback_data`, либо ссылка.

Когда пользователь нажимает кнопку с `callback_data`, Telegram присылает обновление **callback_query**, а не сообщение. В нём лежат данные кнопки и идентификатор запроса.

Важные правила:
- **Отвечайте на нажатие.** Нужно вызвать ответ на callback-запрос (в узле Telegram это операция Answer Query), иначе у пользователя на кнопке будет крутиться индикатор загрузки.
- **Разбирайте `callback_data`** ветвлением: например, `catalog:next`, `sub:on`, `sub:off`. Держите значения короткими: у Telegram есть ограничение на длину.
- **Редактируйте исходное сообщение** вместо отправки нового, если это переключение страницы или состояния. Так чат не засоряется.

## Кнопка, которая открывает Mini App

Кнопку с открытием Mini App удобнее всего отправлять через узел **HTTP Request**, обращаясь к Bot API напрямую. Адрес: `https://api.telegram.org/bot<токен>/sendMessage`, тело в JSON:

```json
{
  "chat_id": "{{ $json.message.chat.id }}",
  "text": "Открыть каталог",
  "reply_markup": {
    "inline_keyboard": [[
      { "text": "Каталог", "web_app": { "url": "https://example.com/app" } }
    ]]
  }
}
```

Адрес Mini App должен быть доступен по HTTPS. Токен бота храните в учётных данных n8n, а не в тексте узла.

## Подводные камни

- **Один webhook на бота.** У бота может быть только один активный webhook. Если вы запускаете в n8n Telegram Trigger и одновременно опрашиваете `getUpdates` кодом или регистрируете другой webhook, получите конфликты и потерянные сообщения.
- **Тестовые и боевые адреса.** В тестовом режиме у webhook другой адрес. Не оставляйте в боте тестовый URL.
- **Повторные сообщения.** Telegram повторяет доставку, если не получил быстрый ответ. Не делайте в сценарии долгих операций до ответа и защитите критичные действия от повторов (запоминайте `update_id`).
- **Лимиты отправки.** Не рассылайте много сообщений подряд: используйте паузы и очередь.
- **Ошибки пользователю.** Если запрос к базе не удался, отправьте понятное сообщение, а не оставляйте бота молчать.

## Где это применено

На n8n работает, например, ИИ-консультант HotTrip: n8n принимает сообщения, вызывает инструменты и API, а ответы приходят в Telegram. У проектов с Mini App кнопки бота ведут в приложение. Подробности в проектах [HotTrip](/raboty/hottrip/) и [Da Nang House](/raboty/danang-house/), а также в услугах [«Telegram-боты и Mini App»](/uslugi/telegram-boty-i-mini-app/) и [«Автоматизация процессов»](/uslugi/avtomatizaciya-processov/).

## Частые вопросы

### Нужен ли код, чтобы сделать бота в n8n?

Для типового бота нет: меню, кнопки, ответы и запросы к API собираются из узлов. Код понадобится для нестандартной логики или функций, которых нет в узле Telegram.

### Почему кнопка «зависает» после нажатия?

Не отправлен ответ на callback-запрос. Добавьте в сценарий операцию ответа на нажатие.

### Можно ли сделать бота и Mini App вместе?

Да. Бот отправляет кнопку с `web_app`, Mini App открывается внутри Telegram и обращается к вашему API. Данные пользователя нужно проверять по подписи `initData`.

### Что делать, если бот перестал получать сообщения?

Проверьте, что workflow активирован, что у бота установлен нужный webhook и что нет конфликта с другим процессом, который использует тот же токен.
