Как настроить кнопки Telegram в n8n: Полное руководство
Интеграция Telegram с n8n позволяет автоматизировать общение с пользователями, рассылать уведомления и создавать интерактивные ботов. Ключевым элементом такого взаимодействия являются кнопки, которые значительно улучшают пользовательский опыт. В этой статье детально рассмотрены все аспекты настройки кнопок Telegram в визуальном конструкторе рабочих процессов n8n.
Основы работы с Telegram-ботом в n8n
Перед настройкой кнопок необходимо создать и подключить бота Telegram к n8n. Для этого используется узел «Telegram Trigger» или «Telegram».
- Создайте бота через @BotFather в Telegram, получите API-токен.
- В n8n добавьте узел «Telegram Trigger» для обработки входящих сообщений или узел «Telegram» для исходящих действий.
- В настройках узла введите полученный токен в поле «Access Token».
- Для узла-триггера необходимо настроить Webhook. В большинстве случаев при развертывании n8n в облаке или с доступом из интернета это происходит автоматически при нажатии кнопки «Create Webhook». При локальном развертывании могут потребоваться дополнительные шаги, такие как использование ngrok.
Типы кнопок в Telegram API и их реализация в n8n
Telegram Bot API предоставляет несколько типов кнопок, каждый из которых имеет свое назначение и ограничения. В n8n они настраиваются через параметры узла «Telegram» при выборе операции «Send Message», «Send Photo», «Send Animation» и других.
1. Inline-кнопки (InlineKeyboardMarkup)
Эти кнопки встраиваются непосредственно в сообщение. Они не исчезают после нажатия и могут обновляться. При нажатии на такую кнопку бот получает callback-запрос, который можно обработать в n8n с помощью узла «Telegram Trigger», настроенного на событие «Callback Query».
2. Кнопки Reply-клавиатуры (ReplyKeyboardMarkup)
Эта клавиатура появляется вместо стандартной и предлагает пользователю набор вариантов для ответа. После выбора кнопки она отправляется как обычное текстовое сообщение. Клавиатуру можно скрыть, отправив сообщение с параметром `remove_keyboard`.
3. Кнопки для удаления Reply-клавиатуры (ReplyKeyboardRemove)
Специальный объект для скрытия кастомной клавиатуры.
4. Кнопка для запроса местоположения или телефона (KeyboardButton)
Особый тип кнопки в Reply-клавиатуре, который запрашивает у пользователя контактный телефон или геолокацию. Требует дополнительных разрешений от бота.
Подробная настройка Inline-кнопок
Создание inline-кнопок в n8n выполняется через поле «Inline Keyboard» в узле «Telegram». Данные передаются в формате JSON.
Структура JSON для Inline-кнопок:
Клавиатура представляет собой массив строк (rows), каждая из которых является массивом кнопок (buttons).
{
"inline_keyboard": [
[
{ "text": "Кнопка 1", "callback_data": "action_1" },
{ "text": "Кнопка 2", "url": "https://example.com" }
],
[
{ "text": "Кнопка 3", "callback_data": "action_2" }
]
]
}
Каждая кнопка может иметь следующие основные параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| text | String | Да | Текст, отображаемый на кнопке (до 64 символов). |
| callback_data | String | Нет (взаим. искл. с `url`, `web_app` и др.) | Данные, которые будут отправлены боту в callback-запросе при нажатии (до 64 байт). Рекомендуется использовать структурированные строки, например, `action:value`. |
| url | String | Нет | HTTP- или tg://-ссылка, которая откроется при нажатии на кнопку. |
| web_app | WebAppInfo | Нет | Запуск веб-приложения. |
| login_url | LoginUrl | Нет | Для авторизации пользователя. |
| switch_inline_query | String | Нет | Переключит чат на инлайн-режим с заданным запросом. |
Практический пример в n8n:
- Добавьте узел «Telegram» и выберите операцию «Send Message».
- Заполните обязательные поля: Chat ID и текст сообщения.
- В разделе «Additional Fields» найдите поле «Inline Keyboard».
- Выберите режим «JSON» и вставьте подготовленную структуру. Альтернативно можно использовать режим «Key/Value» для простых кнопок.
- Для обработки нажатия добавьте узел «Telegram Trigger» в workflow. В его настройках выберите событие «Callback Query».
- Свяжите узлы. Данные из `callback_data` будут доступны в последующем узле-триггере в выражении
{{$node["Telegram Trigger"].json["callback_query"]["data"]}}. - Для корректной обратной связи (например, уведомление «загрузка» или обновление сообщения) используйте в узле для ответа на callback операцию «Answer Callback Query» или «Edit Message Text».
Подробная настройка Reply-кнопок
Reply-клавиатура настраивается в поле «Reply Markup» узла «Telegram».
Структура JSON для Reply-клавиатуры:
{
"keyboard": [
[ { "text": "Кнопка A" }, { "text": "Кнопка B" } ],
[ { "text": "Отправить контакт", "request_contact": true } ],
[ { "text": "Отправить локацию", "request_location": true } ]
],
"resize_keyboard": true,
"one_time_keyboard": false,
"selective": false
}
| Параметр клавиатуры | Тип | Описание |
|---|---|---|
| keyboard | Array of Array of KeyboardButton | Массив рядов кнопок. Каждая кнопка имеет обязательное поле `text`. Дополнительно может содержать `request_contact` или `request_location`. |
| resize_keyboard | Boolean | Опционально. Подгоняет размер клавиатуры по высоте. |
| one_time_keyboard | Boolean | Опционально. Скрывает клавиатуру после первого использования. |
| selective | Boolean | Опционально. Показывает клавиатуру только определенным пользователям. |
Для удаления Reply-клавиатуры отправьте сообщение со следующим Reply Markup:
{
"remove_keyboard": true,
"selective": false
}
Динамическое формирование кнопок на основе данных
Мощь n8n раскрывается при динамическом создании клавиатур на основе данных из предыдущих узлов (например, из базы данных, Google Sheets, HTTP-запроса).
- Используйте узел «Code» (Function или Function Item) для преобразования входящих данных в корректный JSON для клавиатуры.
- Пример кода в узле Function для создания inline-кнопок из массива продуктов:
const items = $input.all();
const keyboardRows = [];
let row = [];
items.forEach((item, index) => {
row.push({
text: item.json.productName,
callback_data: `select_product_${item.json.id}`
});
// Размещаем по 2 кнопки в ряду
if ((index + 1) % 2 === 0) {
keyboardRows.push(row);
row = [];
}
});
if (row.length > 0) {
keyboardRows.push(row);
}
return {
inline_keyboard: keyboardRows
};
- Выход этого узла подключите к полю «Inline Keyboard» узла Telegram, используя режим «JSON» и выражение
{{$node["Код"].json["inline_keyboard"]}}(или просто{{$node["Код"].json}}, если объект содержит корневой элемент `inline_keyboard`).
Обработка нажатий на кнопки и управление состоянием
Для создания сложного интерактивного бота необходимо обрабатывать callback-запросы и управлять сообщениями.
- Ответ на callback (Answer Callback Query): Обязателен для снятия индикатора загрузки у кнопки. Может использоваться для показа всплывающего уведомления. В n8n для этого добавьте узел «Telegram» с операцией «Answer Callback Query». Поле «Callback Query ID» можно получить из триггера:
{{$node["Telegram Trigger"].json["callback_query"]["id"]}}. - Редактирование сообщения (Edit Message Text): Позволяет изменить текст и inline-клавиатуру исходного сообщения после нажатия. Используйте операцию «Edit Message Text». Важно передать `chat_id` и `message_id` исходного сообщения. Эти данные также доступны в callback-запросе.
- Удаление сообщения (Delete Message): Удаляет сообщение с кнопками.
Работа с медиа и кнопками
Inline-кнопки можно прикреплять к сообщениям любого типа: фото, видео, документы, анимации. В узле «Telegram» при выборе операций «Send Photo», «Send Document» и других также присутствует поле «Inline Keyboard» или «Reply Markup», которое заполняется аналогично текстовым сообщениям.
Часто задаваемые вопросы (FAQ)
Вопрос 1: Кнопки не отображаются в Telegram. В чем может быть причина?
- Некорректный JSON в поле «Reply Markup» или «Inline Keyboard». Проверьте синтаксис с помощью валидатора JSON.
- Превышен лимит размера (для `callback_data` — 64 байта, для `text` на кнопке — 64 символа).
- Использование взаимоисключающих параметров в одной кнопке (например, одновременно `callback_data` и `url`).
- Для inline-кнопок поле должно называться именно «Inline Keyboard», а не «Reply Markup».
Вопрос 2: Как получить данные от нажатия inline-кнопки в другом workflow?
Обработка callback-запроса должна происходить в том же workflow, где установлен «Telegram Trigger», так как он привязан к конкретному вебхуку бота. Для передачи данных между workflow можно использовать триггер «Webhook» для приема внутренних вызовов, узел «Execute Workflow» или внешнее хранилище (база данных, Redis).
Вопрос 3: Можно ли создать многоуровневое меню с кнопками?
Да. Реализуется через комбинацию обработки `callback_data` и операции «Edit Message Text». При нажатии на кнопку главного меню (например, с `callback_data: «main_menu»`) ваш workflow должен отредактировать исходное сообщение, полностью заменив inline-клавиатуру на новую, соответствующую выбранному пункту.
Вопрос 4: Как отправить кнопки только определенному пользователю?
Для Reply-клавиатуры используйте параметр `»selective»: true` в сочетании с указанием `chat_id`. Inline-кнопки видны всем, кто имеет доступ к сообщению. Управление доступом на уровне отображения кнопок невозможно, но логику обработки нажатий можно ограничить, проверяя `from.id` в объекте `callback_query`.
Вопрос 5: Почему не скрывается Reply-клавиатура после нажатия на кнопку?
Параметр `»one_time_keyboard»: true` не всегда гарантирует скрытие. Для гарантированного удаления клавиатуры отправьте новое сообщение с `{«remove_keyboard»: true}`. Убедитесь, что поле «Reply Markup» в узле отправки этого сообщения заполнено корректным JSON.
Вопрос 6: Как использовать кнопки с веб-приложениями (Web App)?
В объекте кнопки укажите параметр `»web_app»` с объектом, содержащим поле `»url»`. Например: {"text": "Open App", "web_app": {"url": "https://your-app.com"}}. Пользовательский клиент Telegram должен поддерживать эту функцию.
Заключение
Настройка кнопок Telegram в n8n требует внимания к структуре данных Telegram Bot API, но предоставляет широкие возможности для создания гибких и интерактивных автоматизированных систем. Ключ к успеху — правильное формирование JSON-объектов для клавиатур, корректная обработка callback-запросов и использование узла «Code» для динамического построения интерфейсов. Комбинируя различные типы кнопок и операции с сообщениями, можно построить сложного Telegram-бота с многоуровневым меню, интерактивными формами и интеграцией с внешними системами, полностью управляемого через визуальные рабочие процессы n8n.
Добавить комментарий