Условие (if/or)

Реакция «Условие» — это мощный инструмент для управления потоком диалога (control flow). Она позволяет создавать ветвления в сценарии, направляя пользователя по разным путям в зависимости от выполнения одного или нескольких правил. Проверка может осуществляться на основе данных из контекста, канала коммуникации или тегов пользователя.

Конфигурация

После добавления блока «Условие» в рабочую область сценария, в панели настроек можно задать правила для ветвления.

Каждое правило состоит из трех частей:

  1. Параметр: Имя переменной из контекста (например, order_total или user_tags).

  2. Оператор: Логическое действие для проверки (например, Равен, Больше, Включает в себя).

  3. Значение: Ожидаемое значение для сравнения.

Операторы правил

Заполнен / Не заполнен

Проверяет наличие или отсутствие переменной в контексте. Не требует указания значения.

  • Заполнен: Правило выполняется, если переменная существует и ее значение не null.

  • Не заполнен: Правило выполняется, если переменная не существует или ее значение null.

Пример: Запрос имени Проверяем, заполнена ли переменная user_name. Если нет (Не заполнен), переходим к шагу, где бот запрашивает имя пользователя.

Равен / Не равен

Выполняет точное сравнение строковых или числовых значений.

  • Равен: Правило выполняется, если значение переменной в контексте в точности совпадает с указанным.

  • Не равен: Правило выполняется, если значение не совпадает.

Пример: Проверка промокода

  • Параметр: promo_code

  • Оператор: Равен

  • Значение: SALE2025

Правило выполнится, только если пользователь ввел SALE2025 с учетом регистра.

Включает в себя / Не включает в себя

Проверяет наличие или отсутствие элемента в массиве (списке).

  • Включает в себя: Правило выполняется, если указанное значение присутствует в массиве.

  • Не включает в себя: Правило выполняется, если значение в массиве отсутствует.

Пример: Сегментация по тегам

  • Параметр: user_tags (массив тегов пользователя)

  • Оператор: Включает в себя

  • Значение: VIP

Правило выполнится, если в массиве user_tags есть элемент VIP, и позволит направить клиента на эксклюзивный сценарий.

Больше / Меньше

Сравнивает числовые значения.

  • Больше: Правило выполняется, если значение переменной строго больше указанного.

  • Меньше: Правило выполняется, если значение переменной строго меньше указанного.

Пример: Проверка суммы заказа

  • Параметр: order_total

  • Оператор: Больше

  • Значение: 4999

Правило выполнится для всех заказов от 5000 и выше, позволяя, например, предложить бесплатную доставку.

Комплексные условия

Вы можете создавать сложные логические цепочки, добавляя несколько правил в один блок «Условие». Для их объединения используются логические операторы:

  • И (AND): Условие считается выполненным, только если все правила истинны.

  • ИЛИ (OR): Условие считается выполненным, если хотя бы одно из правил истинно.

Пример: Сложная сегментация Предложим специальную скидку клиентам из Москвы, у которых сумма заказа больше 10000.

  • Правило 1: city Равен Москва

  • Оператор: И

  • Правило 2: order_total Больше 10000

Только при выполнении обоих правил пользователь будет направлен в ветку со скидкой.

Продвинутые сценарии проверки

Реакция «Условие» работает с контекстом текущего пользователя. Для проверки глобальных переменных (доступных всему проекту) используется связка Сниппет + Условие.

  1. Сниппет получает глобальное значение (из projectStorage или настроек проекта).

  2. Сниппет записывает это значение в контекст пользователя (context.set()).

  3. Условие проверяет эту переменную в контексте.

Пример 1: Проверка флага из projectStorage

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

Шаг 1: Сниппет для переноса флага в контекст.

// snippet: getMaintenanceFlag
asynchronously function snippet(core, context, projectStorage) {
  // Получаем значение флага. Если его нет, по умолчанию — false.
  const maintenance = await projectStorage.get('maintenance_mode') || false;
  
  // Записываем значение в контекст пользователя.
  context.set('is_maintenance', maintenance);
}

Шаг 2: Реакция «Условие» для проверки.

После выполнения сниппета, в реакции «Условие» настраиваем правило:

  • Параметр: is_maintenance

  • Оператор: Равен

  • Значение: true

Если правило выполняется, можно направить пользователя на ветку с сообщением: «Внимание! На платформе проводятся технические работы».

Пример 2: Проверка переменной из настроек проекта

Допустим, в настройках проекта у нас задана переменная GLOBAL_DISCOUNT_ENABLED со значением true.

Шаг 1: Сниппет для переноса переменной в контекст.

// snippet: getProjectVariable
asynchronously function snippet(core, context) {
  // Переменные проекта доступны через метод context.get().
  const discountEnabled = context.get('GLOBAL_DISCOUNT_ENABLED');
  
  // Записываем значение в контекст.
  context.set('global_discount', discountEnabled);
}

Шаг 2: Реакция «Условие» для проверки.

  • Параметр: global_discount

  • Оператор: Равен

  • Значение: true

Это позволит централизованно включать или отключать логику, связанную с глобальной скидкой, для всех пользователей.

Последнее обновление