Шаг «Формула» — это блок редактора кода, где можно выполнять логические и арифметические действия, использовать встроенные функции и управлять переменными.
С его помощью можно присваивать значения полям и переменным, рассчитывать показатели, сравнивать данные и строить сложные сценарии прямо внутри BotHelp.

Где найти и как включить

  1. Во флоубилдере выберите Добавить шаг → Формула.

  2. Внутри шага откроется редактор кода.

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

Как работает шаг «Формула»

  1. Подписчик попадает в шаг.

  2. Выполняется код в редакторе «Формула» (сверху вниз, строка за строкой).

  3. При успешном выполнении значения записываются в выбранные переменные, и бот идёт дальше по настроенному переходу «Следующий шаг».

  4. Если во время вычислений возникает ошибка (например, деление на 0, пустое значение или несовместимые типы), выполнение останавливается на строке, где произошла ошибка.Результаты из уже выполненных строк сохраняются, оставшаяся часть кода не выполняется.
    После этого подписчик переходит к следующему шагу по переходу «Следующий шаг».

Работа с переменными

Внутри шага можно использовать переменные разных типов. Они позволяют хранить и передавать значения между шагами, пользователями и ботами.

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

  1. Пользовательские поля:  доступны к чтению и записи
    Используются через префикс client. а также  {%название_переменной%}
    Примеры: client.price, {%Должность%}

  2. Глобальные переменные : доступны к чтению и записи
    Используются через префикс globals. а также  {@название_переменной@}
    Примеры: globals.order,{@discount@}

  3. Локальные переменные: Используются как вспомогательные переменные и работают только в конкретном шаге “Формула”. Доступны к чтению и записи.
    Используются без префикса
    Пример: age_years = 25.

  4. Системные поля: UserId, BotHelpId, CUID  доступны только к чтению. Попытка записи приведет к ошибке.
    Доступны как с префиксом client. (если есть соответствие), так и через макросы.

Правила названия переменных

1. Общие правила

  • Имя переменной может начинаться только с буквы, а не с цифры.
    Сумма1  ❌ 1Сумма

  • Допустимые символы: латиница, кириллица, цифры и нижнее подчёркивание.

  • Запрещено использовать имена, совпадающие с:

    • названиями системных полей (user_id, bh_user_id, cuid и т. п.);

    • префиксами client и globals.

    • зарезервированные слова языков программирования, например: print, true, false и т.д.

2. Пробелы в названии

Если в имени нужно использовать пробелы — обращайтесь к переменной через индексный доступ:

globals['возраст клиента'] = 27
client['ORDER ID'] = 'A-42'

3. Ограничения на код

  • Общий размер кода: до 50 строк и 5000 символов (учитываются переводы строк и табуляция).

  • Строковые литералы (текст в кавычках "...") — до 1000 символов.

4. Рекомендации

  • Используйте латиницу в именах переменных.

  • Для нескольких слов применяйте нижнее подчёркивание:
    blog_webinar, order_total.

  • Давайте переменным смысловые и уникальные названия — это упрощает отладку и работу в команде.

Типы данных:

  • Число (целое и дробное): 10, 2.5

  • Строка: "текст"

  • Булево: True, False

  • Дата/время: "2025-10-10" или "10.10.2025 12:00:00"

  • Пустое значение: null

В шаге «Формула» не поддерживаются списки ([1,2,3]), словари ({"a":1}) и объекты (None).

Преобразования:

  • str(число) → строка

  • int("42"), float("12.5") → число

  • Сравнение разных типов приводит их к строке.

Комментирование

Чтобы упростить чтение и поддержку кода, вы можете добавлять комментарии.
Комментарии не влияют на выполнение формул и нужны только для пояснений логики.

Варианты записи комментариев

  1. Однострочный комментарий

    # Это пример однострочного комментария
    a = 10 # Можно писать после выражения
  2. Многострочный комментарий

    """
    Многострочный комментарий
    Например, для описания логики вычислений
    """

Подсказки и автодополнение

Доступна система подсказок и автодополнения — она помогает быстрее писать выражения и избегать ошибок в названиях переменных и функций.

Например: начните вводить название функции — появится список подходящих вариантов.
При вводе add вы увидите варианты addDays, addMoth, и т. д.

Доступные функции в шаге «Формула»

Шаг «Формула» поддерживает набор встроенных функций для работы с числами, строками, датами и логическими условиями.
Они помогают выполнять вычисления, преобразования и проверки прямо внутри сценария, без внешних систем.

Математические функции

Функция Описание Пример
round(x) Округляет число до ближайшего целого (0.5 округляется вверх). round(2.5)3
abs(x) Возвращает абсолютное значение числа. abs(-5)5
int(x) Преобразует значение в целое число. int("42")42
float(x) Преобразует строку в число с плавающей точкой. float("12.34")12.34
str(x) Преобразует значение в текстовую строку. str(100)"100"

Поддерживаются арифметические операции: +, -, *, /

Логические и условные функции

Функция Описание Пример
if(condition, then_value, else_value) Проверяет условие. Если оно истинно — возвращает then_value, иначе else_value. if(client.age >= 18, "Взрослый", "Несовершеннолетний")
if(condition, then_value) Если не указан else_value, возвращает пустую строку. if(is_null(client.phone), "Номер не указан")
is_null(var) Проверяет, пустая ли переменная. is_null(client.email)True
and, or, not Логические операторы для объединения условий. if(a > 0 and b < 10, "ok")

Поддерживаются булевы значения: True, False.

Работа со строками

Функция Описание Пример
len(text) Возвращает количество символов в строке. len("Привет")6
substring(str, n1, n2) Обрезает строку: n1 — сколько оставить слева, n2 — сколько обрезать справа. substring("BotHelp", 3, -2)"tHel"
upper(text) Преобразует текст в верхний регистр. upper("привет")"ПРИВЕТ"
lower(text) Преобразует текст в нижний регистр. lower("HELLO")"hello"
split(text, separator) Делит строку по разделителю и возвращает первую часть. split("Иван Петров", " ")"Иван"
match(text, pattern, ignore_case=True) Проверяет, содержит ли строка указанное слово (по шаблону). match("купить товар", "купить")True

Работа с датами и временем

Функция Описание Пример
get_current_time() Возвращает текущие дату и время в часовом поясе кабинета. Формат: %Y-%m-%d %H:%M:%S. globals.now = get_current_time()"2025-11-11 16:30:00"
addYear(date, years) Добавляет или вычитает годы (с учётом високосных лет). Для вычитания используйте отрицательное число. addYear("2020-01-01", 3)"2023-01-01"
addMonth(date, months) Добавляет или вычитает месяцы (учитывает длину месяцев и високосные года). addMonth("2025-01-10", 2)"2025-03-10"
addDays(date, days) Добавляет или вычитает дни. Для вычитания передайте отрицательное значение. addDays("20.08.2019", -99)"13.05.2019"
addMinutes(date, minutes) Добавляет или вычитает минуты (для значений типа «Дата и время»). addMinutes(get_current_time(), 20)"2025-11-11 16:50:00"
format_date(date, "формат") Преобразует дату к заданному формату. Поддерживаемые форматы: %Y-%m-%d, %d.%m.%Y, %Y-%m-%d %H:%M:%S, %d.%m.%Y %H:%M:%S. format_date("2025-10-10", "%d.%m.%Y")"10.10.2025"
date_diff(date1, date2, unit) Возвращает разницу между двумя датами. Параметр unit принимает значения "days" или "minutes". date_diff(get_current_time(), client.birth_date, "days")9125

Все операции выполняются в часовом поясе кабинета.
Умножение или деление дат вызывает ошибку «Ошибка типов».

Особенности функционала

  • Код в шаге «Формула» выполняется построчно, сверху вниз, в изолированной среде BotHelp.
    Синтаксис близок к Python, но не идентичен ему.
  • Поддерживаются только простые выражения, без циклов (for, while), функций (def) и внешних импортов.

  • Код не может вызывать API или обращаться к внешним системам.

  • Переменные создаются при первом присвоении.

Была ли статья полезна?

Спасибо за обратную связь!