EnotPRO Logo EnotPRO

Локальные переменные

Локальные переменные — это временные переменные, которые существуют только в рамках выполнения текущего триггера. После завершения триггера (включая Глобальный Триггер После) они автоматически удаляются.

Что такое локальные переменные

Локальные переменные — это переменные, которые создаются, изменяются и удаляются в процессе работы триггера.

Ключевые особенности:

Особенность Описание
Время жизни С момента создания до завершения триггера (включая Глобальный Триггер После)
Область видимости Только внутри текущего триггера
Автоудаление Удаляются автоматически после завершения триггера
Изоляция Разные триггеры не видят локальные переменные друг друга

💡 Совет: Используйте локальные переменные для промежуточных вычислений, временного хранения данных из API, формирования сложных структур перед сохранением.

Когда использовать

Сценарий Пример
Промежуточные вычисления Собрать JSON из нескольких переменных перед отправкой
Кэширование данных в триггере Сохранить результат HTTP-запроса, чтобы не повторять его
Формирование сложных сообщений Построить многострочный текст из нескольких частей
Временные флаги и счётчики Отслеживание шагов внутри сложного ветвления

⚠️ Важно: Если данные нужно сохранить между разными вызовами бота (через 5 минут, при следующем сообщении) — используйте облачные переменные.

Доступные реакции

Реакция Назначение Ссылка
SetVarLocal Создать или полностью перезаписать локальную переменную Подробнее
AddVarLocal Изменить значение (прибавить к числу, добавить в массив) Подробнее
DelVarLocal Полностью удалить локальную переменную Подробнее

Сравнение с облачными переменными

Характеристика Локальные переменные Облачные переменные
Время жизни До конца триггера Постоянно (до удаления)
Доступность Только в текущем триггере В любом триггере
Требует загрузки Нет (доступны сразу после создания) Да (через GetVarCloud или !{varcloud})
Автоудаление ✅ Да (автоматически) ❌ Нет (нужно удалять вручную)
Назначение Временные данные, промежуточные вычисления Постоянные данные (баланс, настройки)
Передача между триггерами ❌ Нет ✅ Да

💡 Совет: Правило большого пальца — если данные нужны только внутри одного обработчика команды, используйте локальные переменные. Если данные нужны позже (при следующем сообщении или через час) — используйте облачные.

Примеры использования

Пример 1: Промежуточное вычисление скидки

Задача: Рассчитать итоговую сумму с учётом скидки 15% и отправить пользователю.

Реакции в триггере:

  1. GetVarCloud → загружаем cart_total (облачная переменная)
  2. SetVarLocal → название: discount, значение: !{math|${var.person.cart_total} * 0.15}
  3. SetVarLocal → название: final, значение: !{math|${var.person.cart_total} - ${localVar.discount}}
  4. SendMessage → текст: Итого к оплате: ${localVar.final} ₽ (скидка ${localVar.discount} ₽)

Пример 2: Сборка JSON перед отправкой в API

Задача: Собрать данные пользователя в JSON и отправить через HTTP-запрос.

Реакции в триггере (подготовка к SendRequest):

  1. GetVarCloud → загружаем name, email, phone
  2. SetVarLocal → название: payload, значение: {"name": "${var.person.name}", "email": "${var.person.email}", "phone": "${var.person.phone}"}
  3. SendRequest → тело запроса: ${localVar.payload}

Пример 3: Формирование сложного сообщения

Задача: Собрать отчёт из нескольких переменных.

Реакции в триггере:

  1. GetVarCloud → загружаем balance, orders_count, last_order_date
  2. SetVarLocal → название: report, значение: Ваш баланс: ${var.person.balance} ₽\nКоличество заказов: ${var.person.orders_count}\nПоследний заказ: ${var.person.last_order_date}
  3. SendMessage → текст: ${localVar.report}

Пример 4: Кэширование результата макроса

Задача: Случайное приветствие — сгенерировать один раз и использовать в нескольких местах триггера.

Реакции в триггере:

  1. SetVarLocal → название: greeting, значение: !{random.select|list: Привет!, Здравствуй!, Добрый день!}
  2. SendMessage → текст: ${localVar.greeting} ${user.name}
  3. SendMessage → текст: ${localVar.greeting} Рады тебя видеть!

💡 Совет: Без локальной переменной макрос !{random.select} выполнялся бы дважды, и приветствия могли бы быть разными.

Частые ошибки

Ошибка 1: Попытка использовать локальную переменную в другом триггере

Причина: Локальные переменные живут только в рамках одного триггера. Решение: Используйте облачные переменные (SetVarCloud / GetVarCloud) для данных, которые нужно передавать между триггерами.

Ошибка 2: Использование переменной до её создания

Причина: SetVarLocal не был вызван, но переменная уже используется в ${localVar.xxx}. Решение: Всегда сначала создавайте переменную через SetVarLocal, затем используйте.

❌ Неправильно:

SendMessage → текст: ${localVar.greeting}
SetVarLocal → название: greeting, значение: Привет

✅ Правильно:

SetVarLocal → название: greeting, значение: Привет
SendMessage → текст: ${localVar.greeting}

Ошибка 3: Путаница с синтаксисом

Причина: Использование !{localvar} (макрос) вместо ${localVar.name} (переменная). Решение:

  • Для доступа к значению: ${localVar.имя}
  • Макрос !{...} для локальных переменных не существует

Ошибка 4: Ожидание, что локальная переменная сохранится после ошибки

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

Ошибка 5: Излишнее использование DelVarLocal

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

Связанные разделы

Раздел Описание
Облачные переменные Постоянное хранение данных между триггерами
SetVarLocal Создание локальной переменной
AddVarLocal Изменение локальной переменной
DelVarLocal Удаление локальной переменной
Макрос math Вычисления для локальных переменных
Макрос string Работа со строками

🔗 Быстрая навигация

  • Вверх
  • Когда использовать
  • Доступные реакции
  • Сравнение с облачными переменными
  • Примеры использования
  • Частые ошибки
  • Связанные разделы
© 2025 EnotPRO. Все права защищены.