Как настроить кнопки телеграмм в n8n

Как настроить кнопки 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:

    1. Добавьте узел «Telegram» и выберите операцию «Send Message».
    2. Заполните обязательные поля: Chat ID и текст сообщения.
    3. В разделе «Additional Fields» найдите поле «Inline Keyboard».
    4. Выберите режим «JSON» и вставьте подготовленную структуру. Альтернативно можно использовать режим «Key/Value» для простых кнопок.
    5. Для обработки нажатия добавьте узел «Telegram Trigger» в workflow. В его настройках выберите событие «Callback Query».
    6. Свяжите узлы. Данные из `callback_data` будут доступны в последующем узле-триггере в выражении {{$node["Telegram Trigger"].json["callback_query"]["data"]}}.
    7. Для корректной обратной связи (например, уведомление «загрузка» или обновление сообщения) используйте в узле для ответа на 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-запроса).

    1. Используйте узел «Code» (Function или Function Item) для преобразования входящих данных в корректный JSON для клавиатуры.
    2. Пример кода в узле 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
    };
    
    1. Выход этого узла подключите к полю «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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *