Действие «Операции с данными»
«Операции с данными (Переменные, Списки)» — самое часто используемое действие в сценарии действий. Здесь происходит вся работа с данными: создание переменных, сохранение/чтение/изменение списков, валидация ответов, перебор массивов, работа с глобальными переменными.
Одно действие может содержать несколько операций — они выполняются по порядку.
Как добавить
В сценарии действий → кнопка «Добавить действие» → «Операции с данными (Переменные, Списки)».
Скриншот 1. Выбор типа действия.
Часть 1. Типы операций
Внутри действия — кнопка «+ Операция». Каждая операция работает с одним источником данных:
| Тип | Источник данных | Когда использовать |
|---|---|---|
| Переменная | Локальная переменная клиента | Имя, телефон, временные значения |
| Список | Таблица с записями | Корзина, каталог, база клиентов |
| Глобальная переменная | Общая переменная бота | Промокод, курс, флаг |
Данные из сценария ([DataN]) | Параметры, переданные в сценарий извне | Цена товара из каталога, ID заказа |
| Ответ | Ответ клиента в конкретном блоке | Текст из блока-вопроса |
Скриншот 2. Выбор типа операции.
Часть 2. Операция «Переменная»
Создание/изменение локальной переменной. Состоит из двух блоков:
Блок «Проверки»
Опциональный. Валидация значения перед присвоением.
Доступные типы проверок:
- Число — значение должно быть числом;
- Телефон — формат телефонного номера;
- Эл. почта — корректный e-mail;
- Регулярное выражение — собственный regex;
- Выражение — произвольное условие (например,
#{x} > 10).
Несколько проверок объединяются через И / ИЛИ.

Скриншот 3. Блок проверок переменной.
Блок «Присвоения»
Куда и что сохранить:
- Куда присвоить: Переменная / Список / Глобальная переменная.
- Имя переменной: куда записать.
- Значение: любая комбинация шаблонов замен, переменных, выражений.
- Условие выполнения: «Успех» (если проверки пройдены) / «Неуспех» (если нет) — даёт ветвление прямо внутри операции.
Пример
Задача: проверить, что клиент ввёл корректный телефон, и сохранить его.
- Источник: «Переменная», переменная
#{client_phone_raw}=[Answer1]. - Проверка: Телефон.
- Присвоение при Успехе: переменная
client_phone=#{client_phone_raw}. - Присвоение при Неуспехе: переменная
phone_error=1(потом сравним в условии блока).
Часть 3. Операция «Список»
См. подробно: Списки.
Внутри операции «Список» доступны четыре действия:
| Действие | Что делает |
|---|---|
| Добавить новую запись | Создать строку в списке |
| Чтение записей | Найти по условиям отбора |
| Изменить запись | Обновить поле в строках, попадающих под отбор |
| Удалить запись | Удалить попадающие под отбор |
Условия отбора (для чтения, изменения, удаления)
Поле + условие сравнения + значение. Дополнительные галочки:
- Обратное сравнение — искать поле в строке сравнения;
- По основе слова — без учёта склонений;
- Сравнить с полем — значение = поле этого же списка;
- Поле из списка — значение = поле другого списка.
Объединение условий через И / ИЛИ.
Уточнение отбора (диапазон)
- Старт / Конец — номера строк;
- Последний элемент / Только последний.
Сортировка и уникальность (для чтения)
- Сортировка — по полю, по возрастанию/убыванию;
- Уникальные строки — оставить уникальные по полю.
Автопеременные после чтения
listlength— количество найденных записей;- «Имя переменной» наличия отбора —
0(пусто) или1(есть).
Часть 4. Операция «Глобальная переменная»
См. подробно: Глобальные переменные.
Выбирается из выпадающего списка существующих глобальных переменных бота. Дальше — те же блоки «Проверки» и «Присвоения», что у локальной переменной.
Особенности:
- Изменяет значение, доступное всем клиентам бота.
- Изменения видны в админке в разделе «Глоб. перем.».
- Чтобы только прочитать значение — никаких операций не нужно, подставляйте
#{имя_глобал}прямо в блок.
Часть 5. Операция «Данные из сценария» ([DataN])
Источник — параметры, переданные в сценарий из внешнего вызова (другой сценарий, HTTP-запрос, кнопка с данными).
В операции укажите ID данных (номер N или текстовый ID). Дальше — проверки и присвоения, как у переменной.
В сообщении блока эти данные доступны через [DataN], [Данные1] или [D1].
Где используется
- Отправка строки данных через кнопку в сценарий другого подписчика через «отправку в бот»
- В кнопке передаётся параметр (например, ID товара) → в сценарии действий следующего блока его читаем через
[Data1]. - Универсальный сценарий «Купить товар» вызывается из разных мест, каждый передаёт свой набор
[Data1],[Data2].
Часть 6. Операция «Ответ»
Источник — ответ клиента из конкретного блока сценария.
Указывается номер или ID блока с ответом. Дальше — проверки и присвоения.
Эквивалентно [Answer1], [AnswerN], [AnswerID(...)] в шаблонах, но удобнее для проверок и валидации.
Пример: валидация email и сохранение
- Источник: «Ответ», номер блока —
3. - Проверка: Эл. почта.
- Присвоение при Успехе: переменная
client_email=[Answer3]. - Присвоение при Неуспехе: переменная
email_invalid=1.
Часть 7. Перебор массива
Если переменная или результат чтения списка — это массив (несколько значений), его можно обработать построчно через «Перебор» (iterate).
Действия в переборе
| Действие | Что делает |
|---|---|
| Сохранить в переменную | Записать значение текущего элемента в локальную переменную |
| Сохранить в глобальную переменную | То же, в глобальную |
| Сформировать строку | Склеить значения с разделителем — для отправки клиенту |
| Добавить в список | Скопировать элементы в другой список |
| Изменить список | Обновить связанный список на каждой итерации |

Скриншот 5. Действия в переборе массива.
Альтернатива: «Склеить»
Если нужно просто соединить массив в одну строку — вывод переменной в сообщении склеивает массив в строку.
Полезно для:
- Перечисления товаров корзины через запятую;
- Сборки текста рассылки из набора шаблонов;
- Формирования URL с параметрами.
Часть 8. Обращение к элементам массива
Если переменная содержит массив (например, после чтения списка), можно обратиться к конкретному элементу через |:
#{items|1}— первый элемент (нумерация с 1);#{items|3}— третий элемент;#{items|last}или#{items|l}— последний элемент.
Часть 9. Архитектура
Принцип 1. Группируйте логически
В одно действие «Операции с данными» кладите связанные операции:
- «Подготовить данные клиента» — Переменная (имя), Переменная (телефон), Переменная (email);
- «Записать заказ» — Список (Корзина → addrow), Список (Заказы → addrow);
- «Очистить корзину» — Список (Корзина → delrow по
ClientID).
Принцип 2. Сначала проверки, потом запись
Если данные приходят от клиента — всегда валидируйте. Иначе в списке окажутся «ZxC123», «не знаю», пустые строки.
Принцип 3. Используйте «Успех/Неуспех» как ветвление
Не делайте отдельный блок «если ошибка» — добавьте присвоение с условием «Неуспех» в той же операции. Меньше блоков, чище доска.
Принцип 4. Хранение по сроку жизни
| Срок жизни | Хранилище |
|---|---|
| 1 диалог | Локальная переменная |
| Несколько визитов клиента | Список с фильтром по ClientID |
| Для всего бота | Глобальная переменная |
Принцип 5. Не «теряйте» данные между сценариями
Локальная переменная живёт в рамках одного диалога. Если клиент уйдёт и вернётся — её не будет. Для долговременного хранения — список или глобальная переменная.
Частые ошибки
- Переменная пустая в сообщении — присвоение делается в «После отправки» того же блока. Перенесите в «До отправки».
- Проверка не срабатывает — проверьте регистр и тип значения.
#{x} = "5"и#{x} = 5могут вести себя по-разному. - Список фильтруется и возвращает пусто — посмотрите регистр значений в условиях и галочку «По основе слова».
- Глобальная переменная случайно очистилась — она доступна всем сценариям бота. Если важна — закрепите комментарий и не давайте сценариям её перезаписывать без проверок.
- Перебор работает не в том порядке — задайте сортировку при чтении списка перед перебором.
Что дальше
- Списки — таблицы данных.
- Переменные — локальное хранилище.
- Глобальные переменные — общие настройки бота.
- Шаблоны замен — синтаксис подстановок.
- HTTP-запросы — внешние данные.