Типы блоков

Текстовый блок

Отправляет пользователю текстовое сообщение. Поддерживает Markdown-форматирование:

"жирный" → жирный "курсив" → курсив "" "код" "" "{{переменная}}" — подстановка переменной

Автоматическая разбивка длинных сообщений

Telegram ограничивает одно текстовое сообщение 4096 символами. Если итоговый текст блока превышает этот лимит (например, ответ от ИИ), бот автоматически разбивает его на несколько сообщений:

  • Текст разбивается по абзацам, затем по предложениям и словам — естественным образом, без обрыва посередине слова.
  • Все части отправляются последовательно одним блоком.
  • Кнопки (инлайн или клавиатура), а также эффект сообщения, прикрепляются только к последнему сообщению, чтобы пользователь видел их под финальной частью текста.
  • Параметры «Ответом на сообщение» применяются только к первой части; настройки «Отправить в другой чат» и «Тред форума» — ко всем частям.

Никакой настройки включать не нужно — разбивка работает автоматически для блока «Текст».

Медиа-блоки

Блоки Изображение, Видео, Аудио, Голосовое и Документ отправляют соответствующий файл.

Файл можно загрузить с компьютера или выбрать из библиотеки бота (кнопка «Файлы»).

Telegram кэширует файлы: при повторной отправке одного файла он не загружается заново.

Голосовое сообщение

Блок Голосовое отправляет файл через метод "sendVoice" — Telegram отображает его как воспроизводимое голосовое сообщение (с волновой формой).

Поддерживаемые форматы: OGG/OPUS (рекомендуется), MP3, M4A. Максимальный размер — 50 МБ.

В отличие от блока «Аудио», у голосового сообщения нет полей «Исполнитель» и «Название трека» — Telegram не поддерживает эти теги для голосовых сообщений.

Кнопки

Существует два типа кнопок:

  • Инлайн-кнопки — прикреплены к сообщению, нажатие переходит в другую ноду.
  • Кнопки клавиатуры — появляются под полем ввода, работают как команды.

Ссылка на другую ноду задаётся выбором ноды из выпадающего списка.

Условие

Блок Условие позволяет строить разветвлённые сценарии по принципу "if / elseif / … / else":

  • Добавьте одно или несколько условий (кнопка «Новое условие»). Каждое условие — отдельная ветка.
  • В каждой ветке укажите набор правил, объединённых логикой И, и действие при совпадении (куда пойдёт бот, если ветка выполнилась).
  • Бот проверяет ветки по порядку: первая прошедшая ветка выполняется, остальные пропускаются.
  • Если ни одна ветка не выполнилась, бот переходит в команду «Ни одно условие не выполнено» (аналог "else").

Источник данных (общий для всех веток):

Значение Что проверяется
Текст (сообщение) Последнее текстовое сообщение пользователя
Тип сообщения Тип входящего сообщения (команда, текст, фото, видео и т.д.)
Файл Метаданные прикреплённого файла (размер, формат, размеры)
Переменная Значение указанной переменной "{{имя}}"
Диплинк (/start) Параметр из ссылки вида t.me/bot?start=... (доступен после команды /start)
Подключённый ресурс Состояние пользователя в подключённых каналах и группах

Поддерживаемые операторы для текста и переменных: равно, не равно, содержит, не содержит, начинается с, заканчивается на, больше/меньше (числа), существует/не существует.

На канвасе каждая ветка отображается отдельным ребром с подписью «Условие N выполнено», ветка "else" — «Ни одно условие не выполнено».

Действие при выполнении условия

Для каждой ветки можно выбрать одно из двух действий:

Действие Описание
Перейти к команде Выполнить другую команду (ноду). Дальнейшие блоки текущей команды не выполняются.
Установить переменные Задать одну или несколько переменных и продолжить выполнение оставшихся блоков текущей команды.

Режим «Установить переменные» удобен для преобразования системных значений в читаемые строки без создания дополнительных нод. Например: проверить "user.sex = male" → установить "sex_label = Мужчина" → продолжить и отправить текст "Ваш пол: {{sex_label}}".

При добавлении переменных укажите:

  • Название переменной — имя без фигурных скобок (например "sex_label").
  • Значение — поддерживает подстановку "{{переменных}}" и математические выражения ("{{price}} * 1.2").

Можно добавить несколько пар, нажав «Добавить переменную». Все переменные устанавливаются последовательно перед продолжением выполнения.

Источник «Диплинк (/start)»

Позволяет проверить параметр, переданный пользователем при переходе по ссылке вида https://t.me/bot?start=s_tg_1_2.

Диплинк доступен только для пользователей, перешедших по ссылке с параметром /start. Значение сохраняется в сессии в системной переменной {{DEEPLINK}} и остаётся доступным в последующих блоках.

Настройки:

Поле Описание
Сохранять в переменную Имя переменной, в которую будет сохранён диплинк. При разбивке сохраняется массив частей, доступный по индексу: {{varName.0}}, {{varName.1}}
Разбивать через разделитель Если диплинк состоит из нескольких параметров — включите разбивку, чтобы обращаться к каждой части по индексу.
Разделитель Символ-разделитель (по умолчанию _). Каждая часть доступна по индексу, начиная с 0.
Условное свойство Выберите, по какому фрагменту (индексу) после разбивки проверять условие. «нет» — условие применяется ко всей строке целиком.

Пример: ссылка https://t.me/bot?start=param1_param2, разделитель _:

Индекс Значение
0 param1
1 param2

Поддерживаемые операторы — те же, что для источника «Переменная»: равно, не равно, содержит, начинается с, заканчивается на, больше/меньше, существует/не существует.

Типичный сценарий:

  1. Пользователь переходит по ссылке https://t.me/bot?start=s_tg_1_2.
  2. Блок «Условие» с источником «Диплинк», разбивка по _, индекс 1, оператор «Равно», значение tg — проверяет канал привлечения.
  3. При совпадении — переходим в команду, где через {{prefix.2}} (ID реферера) и {{prefix.3}} (ID нового пользователя) отправляем уведомления нужным людям.

Источник «Тип сообщения»

Позволяет проверить тип входящего сообщения от пользователя: команда, обычный текст, фото, видео, аудио, голосовое сообщение или документ.

Доступные операторы:

Оператор Условие Поле значения
Команда [/name] Сообщение начинается с "/" ✅ Опционально — имя команды (например "/start" или "start"). Если не указано — любая команда
Текст Обычное текстовое сообщение (не команда)
Фото Пользователь отправил фотографию
Видео Пользователь отправил видео
Аудио Пользователь отправил аудиофайл
Голосовое сообщение Пользователь отправил голосовое
Документ Пользователь отправил документ/файл

💡 Для типов без поля значения условие срабатывает, если сообщение именно этого типа — независимо от содержимого.

Источник «Подключённый ресурс»

Позволяет проверить, является ли пользователь подписчиком, администратором или выполнил ли какое-либо действие в одном или нескольких ваших каналах/группах.

Настройки:

  • Ресурсы для проверки — выберите один или несколько подключённых каналов/групп. Условие считается выполненным, только если оно выполняется во всех выбранных ресурсах одновременно (логика И).
  • Telegram ID пользователя — ID для проверки. По умолчанию "{{CHAT_ID}}" (текущий пользователь). Можно подставить другую переменную.

Доступные операторы:

Оператор Описание Каналы Группы
Подписка/Вступление Пользователь является участником
Является администратором Имеет права администратора
Является владельцем Является создателем чата
В бане Заблокирован/удалён из чата
Рид-онли Ограничены права на отправку
Может слать сообщения Право "can_send_messages"
Может приглашать Право "can_invite_users"
Может слать медиа Право на медиафайлы
Титул Кастомный титул администратора совпадает со значением
Premium Пользователь имеет Telegram Premium
Давал бусты Пользователь давал буст этому каналу/группе
Оставил сообщение Пользователь писал в группе (зафиксировано ботом)
Стаж < / > дней Первое зафиксированное сообщение появилось менее/более N дней назад
Участников > / < Размер аудитории чата
Есть подарок У пользователя есть хотя бы один Telegram-подарок
Подарок по ID У пользователя есть подарок с конкретным "sticker_id"

⚠️ Важно: операторы «Оставил сообщение» и «Стаж» работают только на основе сообщений, которые бот зафиксировал после подключения ресурса. Исторические данные не доступны.

Права "can_send_messages", "can_invite", "can_send_media" применимы только к группам и пропускаются без ошибки для каналов.

Ввод данных

Блок Ввод данных ожидает ответа пользователя и сохраняет его в переменную. После ввода бот переходит к следующей ноде.

Можно задать валидацию: тип (текст, число, email, телефон) и сообщение об ошибке.

Инлайн кнопки формы

Вместо текстового ввода можно предложить пользователю нажать одну из инлайн-кнопок. При нажатии значение кнопки записывается в переменную мгновенно — без отправки сообщения. Доступны три суффикса: {перем} и {перем.value} — сохранённое значение, {перем.key} — текст кнопки.

Разрешить несколько вариантов (мульти-выбор)

Включите чекбокс Разрешить несколько вариантов в разделе инлайн кнопок формы, чтобы пользователь мог отметить несколько кнопок перед подтверждением.

Как это работает:

  1. Бот показывает клавиатуру с кнопками вариантов и кнопкой подтверждения.
  2. Нажатие на вариант переключает его выделение (✅ появляется/исчезает) — сообщение не отправляется, только клавиатура обновляется.
  3. Нажатие кнопки подтверждения финализирует выбор. Если пользователь ничего не выбрал — появляется тост-уведомление с текстом из поля «Текст ошибки» блока (если оно заполнено), иначе — стандартная подсказка.

Сохранённые переменные (где перем — имя переменной блока):

Переменная Значение
{перем} Значения всех выбранных кнопок через запятую: val1,val2,val3
{перем.0.key} Текст первой выбранной кнопки (по порядку в списке)
{перем.0.value} Значение первой выбранной кнопки
{перем.1.key} Текст второй выбранной кнопки
{перем.1.value} Значение второй выбранной кнопки
И так далее

Настройки:

Поле Описание
Разрешить несколько вариантов Включает режим мульти-выбора
Текст кнопки подтверждения Подпись кнопки «подтвердить выбор» (по умолчанию «Отправить»)

⚠️ Мульти-выбор несовместим с кнопками «Пропустить» и «Прерывание» в одном блоке. Кнопка прерывания закроет форму без сохранения результата.

  • Перейти к ноде — безусловный переход.
  • Перейти к команде — переход по значению команды (полезно для циклов).

Видео-кружок

Отправляет видео в формате «кружка» — короткое видео в круглом окне (до 1 минуты). Загружается и используется так же, как обычный видеоблок.

Группа медиа (альбом)

Отправляет несколько изображений или видео одним сообщением-альбомом (до 10 файлов). Получатель видит все файлы в виде галереи.

JavaScript

Выполняет произвольный JavaScript-код на стороне сервера в изолированной и безопасной среде. Позволяет реализовывать сложную логику обработки данных прямо в сценарии бота.

Настройки блока

Поле Описание
Переменная результата Имя переменной, в которую запишется значение, возвращённое через "return".
Переменная ошибки Если скрипт завершится ошибкой (синтаксис, таймаут, исключение), текст ошибки сохранится здесь. При успехе — пустая строка. Если ошибка произошла и это поле не задано, сценарий всё равно продолжается.
Код JavaScript Сам скрипт с подсветкой синтаксиса.

Доступные переменные

Все текущие переменные бота передаются в скрипт через объект "botContext":

"""javascript // Получить значение переменной бота const price = Number(botContext['price']); const userName = botContext['user_name'];

// Вернуть результат (записывается в «Переменную результата») return price * 1.2; """

Пример: форматирование текста

"""javascript const raw = botContext['api_response_text'] || ''; // Обрезаем до 200 символов и добавляем многоточие return raw.length > 200 ? raw.slice(0, 200) + '…' : raw; """

Пример: работа с JSON-строкой

"""javascript const json = botContext['webhook_body'] || '{}'; const data = JSON.parse(json); return data.items ? data.items.length : 0; """

Ограничения безопасности

  • Нет доступа к сети — "fetch", "XMLHttpRequest" и любые HTTP-вызовы недоступны.
  • Нет файловой системы — "require", "fs", "process" не определены.
  • Таймаут 1 секунда — при превышении скрипт принудительно завершается.
  • Лимит памяти 32 МиБ — при превышении изолят уничтожается.

Платный контент (Telegram Stars)

Блок для продажи медиафайлов за Telegram Stars. Пользователь видит размытый превью и кнопку «Разблокировать за X звёзд». После оплаты файл открывается.

Локация

Отправляет геолокацию — точку на карте с конкретными координатами. Координаты (широта, долгота) задаются вручную или через переменные.

Контакт

Отправляет контактную карточку с именем и номером телефона. Полезно для передачи контактов поддержки или менеджера.

Задержка (пауза)

Делает паузу перед следующим блоком. Во время паузы Telegram показывает пользователю статус «печатает...».

Поле Описание
Длительность Задержка в секундах

Используйте задержки для создания более естественного диалога, особенно перед длинными сообщениями.

Блок «Установка переменных»

Явно устанавливает значения переменных без участия пользователя. Поддерживает подстановку переменных и математические операции ("+ - * /", скобки). Результат вычисляется автоматически и округляется до 2 знаков после запятой.

Подробнее о переменных и примерах — в разделе Переменные.

Блок «Интеграция»

Обращается к сторонним сервисам (OpenAI, Google Sheets и др.) и сохраняет результат в переменные.

Подробнее — в разделе Интеграции.

Блок «API-запрос»

Отправляет HTTP-запрос к любому внешнему сервису с произвольными заголовками и телом.

Подробнее — в разделе API-запросы.

Блок «Опрос»

Запускает кампанию опроса — серию Telegram-вопросов с вариантами ответов.

Подробнее — в разделе Опросы.

Блок «Инвойс» (счёт на оплату)

Отправляет пользователю счёт на оплату через Telegram Payments.

Подробнее — в разделе Платежи.

Блок «Ответ на кнопку» (answerCallbackQuery)

Отправляет тихое уведомление или диалог-alert пользователю без отправки сообщения в чат. Срабатывает только если команда была вызвана нажатием inline-кнопки — в противном случае блок молча пропускается.

Типичный сценарий: проверка подписки на канал.

  1. Создайте команду с блоком Условие (проверяет подписку на канал).
  2. В ветку «не выполнено» добавьте блок Ответ на кнопку с текстом «Вы не подписаны. Подпишитесь и проверьте снова!».
  3. Привяжите кнопку «Проверить подписку» → эту команду.

Пользователь нажимает кнопку → если не подписан, получает нотификейшн поверх чата, а само сообщение со списком остаётся нетронутым.

Параметры:

Поле Описание
Текст уведомления Текст всплывающего уведомления (0–200 символов). Поддерживает "{{переменные}}".
Показать как диалог (alert) Если включено — пользователь видит модальный диалог, который нужно закрыть. Иначе — короткое уведомление.
URL (необязательно) Откроет у пользователя указанный URL (используется для игр или ссылок "t.me/your_bot?start=...").
Время кеширования Количество секунд, на которое клиент Telegram кеширует ответ. 0 = без кеша.

Галерея

Блок Галерея позволяет отправить серию фото или видео с навигацией между ними с помощью кнопок / . При нажатии кнопок сообщение редактируется (Telegram editMessageMedia) — бот не отправляет новых сообщений, а обновляет существующее.

Внешний вид в чате:

[ ← ]   [ 1 / 10 ]   [ → ]
[         Выбрать        ]   ← необязательно

Кнопка [1 / 10] сбрасывает навигацию обратно на первый элемент. Навигация кольцевая: на последнем элементе нажатие возвращает на первый.

Режимы работы

Загрузить файлы

Загрузите фото или видео вручную. Все файлы должны быть одного типа: либо все фото, либо все видео (смешивать нельзя). Ограничения по минимальному или максимальному количеству файлов нет.

Для каждого файла можно указать описание (подпись), которое будет отображаться под медиа.

Файлы можно загрузить с компьютера или выбрать из библиотеки файлов бота.

Из переменной

Источником медиа служит переменная, содержащая массив. Полезно, когда список изображений/видео получен динамически (например, из API-запроса или базы данных).

Поле Описание
Переменная с массивом Название переменной, которая содержит массив с фото или видео.
Элемент с описанием Путь к полю описания внутри элемента массива. Необязательно. Например: item.caption

Кнопка выбора

Включите опцию «Вывести кнопку выбора», чтобы добавить кнопку под галереей.

Поле Описание
Название Текст кнопки. По умолчанию — «Выбрать».
Префикс переменной Название переменной, в которую будет записан весь объект элемента массива при нажатии. Затем к нему можно обращаться через {{переменная.поле}}.
Команда для перехода Команда, которая будет выполнена после нажатия кнопки «Выбрать».
Удалять кнопки после выбора Если включено — при выборе элемента все кнопки в сообщении исчезают.