База данных

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

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

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


Доступные источники

Источник Что хранит
Пользователь Профиль, баланс, кредиты, метки и другие поля участника бота
Товар Карточки товаров из магазина: название, цена, количество, статистика
Файлы Медиафайлы из библиотеки бота
Заказы Заказы из встроенного магазина
Конфиг пользователя Произвольные настройки, привязанные к участнику бота
Записи пользователя Логи, история диалогов, счётчики токенов AI
Статистика пользователя Произвольные данные по дням и типам (ключ–значение)
Платежи Записи об оплатах через бота
Подписки Записи о рекуррентных (периодических) подписках
Расписания пользователя Персональные расписания рассылок: тип + время + дни + часовой пояс

Пользователь

Чтение и изменение данных профиля любого участника бота.

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

Действие Описание
Получить пользователя Загружает данные участника в переменную (по умолчанию "user")
Изменить имя Устанавливает новое имя
Изменить фамилию Устанавливает фамилию
Изменить отчество Устанавливает отчество
Изменить язык Двухбуквенный код: "ru", "en" и т.д.
Изменить статус Включён или Заблокирован
Изменить пол Мужской / Женский / Неизвестен
Изменить телефон Устанавливает номер телефона
Изменить email Устанавливает адрес электронной почты
Изменить возраст Целое число от 1 до 200
Изменить дату рождения Дата в формате "ГГГГ-ММ-ДД"
Изменить время рождения Произвольная строка
Изменить место рождения Произвольная строка
Изменить город Устанавливает город
Изменить адрес Устанавливает адрес доставки
Изменить локацию Координаты или текстовая локация
Изменить биографию Произвольный текст
Изменить интересы Произвольный текст
Изменить устройство Информация об устройстве
Указать метку Произвольная строка-тег (например: "vip", "partner")
Заблокировать Блокирует пользователя в боте
Разблокировать Снимает блокировку
Начислить кредиты Увеличивает счётчик кредитов (целое число)
Списать кредиты Уменьшает счётчик кредитов (целое число)
Начислить бонусы Увеличивает сумму бонусов (десятичное число)
Вычесть бонусы Уменьшает сумму бонусов; при превышении текущего значения становится 0
Увеличить доступный баланс Добавляет к балансу (десятичное число)
Уменьшить доступный баланс Вычитает из баланса; при превышении становится 0
Увеличить заработок Добавляет к полю «заработано» (десятичное число)
Уменьшить заработок Вычитает из поля «заработано»; при превышении становится 0
Увеличить заработок с рефералов Добавляет к заработку с рефералов
Уменьшить заработок с рефералов Вычитает из заработка с рефералов; при превышении становится 0
Обновить срок оплаты Дата в формате "ГГГГ-ММ-ДД ЧЧ:ММ" или Unix-timestamp
Обновить время оплаты Дата последней оплаты

Свойства пользователя

После действия «Получить пользователя» переменная ("user") содержит:

Переменная Описание
"{{user.id}}" ID участника
"{{user.name}}" Имя
"{{user.last_name}}" Фамилия
"{{user.login}}" Логин (@username)
"{{user.avatar}}" Ссылка на аватар пользователя (URL из публичного хранилища, например https://example.com/storage/img/photos/123/abc.jpg). null, если аватара нет
"{{user.phone}}" Телефон
"{{user.email}}" Email
"{{user.credits}}" Кредиты
"{{user.balance}}" Доступный баланс
"{{user.bonuses}}" Бонусы
"{{user.earn}}" Заработано
"{{user.earn_from_ref}}" Заработано с рефералов
"{{user.status}}" Статус (1 — включён, 2 — заблокирован)
"{{user.ban}}" Заблокирован (0 / 1)
"{{user.sex}}" Пол ("male" / "female" / "unknown")
"{{user.lang}}" Язык ("ru", "en" и т.д.)
"{{user.age}}" Возраст
"{{user.date_birth}}" Дата рождения
"{{user.place_birth}}" Место рождения
"{{user.city}}" Город
"{{user.address}}" Адрес
"{{user.bio}}" Биография
"{{user.interests}}" Интересы
"{{user.device}}" Устройство
"{{user.tag}}" Метка
"{{user.pay_until}}" Срок оплаты
"{{user.last_payment}}" Дата последней оплаты
"{{user.is_premium}}" Telegram Premium (0 / 1)

Товар

Работа с карточками товаров из встроенного магазина.

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

Действие Описание
Получить товар Загружает данные товара по ID в переменную (по умолчанию "shop")
Изменить название Устанавливает новое название товара
Изменить описание Краткое описание
Изменить длинное описание Полный текст описания
Изменить цену Десятичное число (например: "99.99")
Изменить старую цену Отображается как зачёркнутая цена
Изменить SKU Уникальный артикул товара
Изменить валюту Выбрать из списка (₽, $, € и др.)
Увеличить количество Добавляет к остатку на складе
Уменьшить количество Вычитает из остатка
Увеличить сумму продаж Добавляет к общей сумме продаж
Уменьшить сумму продаж Вычитает из суммы продаж
Увеличить заказы Увеличивает счётчик заказов
Уменьшить заказы Уменьшает счётчик заказов
Увеличить ожидающих Увеличивает счётчик ожидающих покупателей
Уменьшить ожидающих Уменьшает счётчик ожидающих
Увеличить просмотры Добавляет к счётчику просмотров
Увеличить добавления в корзину Добавляет к счётчику добавлений в корзину

Свойства товара

Переменная Описание
"{{shop.id}}" ID товара
"{{shop.name}}" Название
"{{shop.description}}" Описание
"{{shop.description_full}}" Полное описание
"{{shop.price}}" Цена
"{{shop.old_price}}" Старая цена
"{{shop.currency}}" Валюта
"{{shop.amount}}" Количество в наличии
"{{shop.status}}" Статус товара
"{{shop.sku}}" SKU
"{{shop.orders}}" Количество заказов
"{{shop.summa}}" Сумма продаж
"{{shop.waiting}}" Ожидающих покупателей
"{{shop.views}}" Просмотры
"{{shop.cart_added}}" Добавлений в корзину
"{{shop.image}}" Изображение
"{{shop.video}}" Видео
"{{shop.last_order}}" Последний заказ
"{{shop.created_at}}" Дата создания

Файлы

Работа с медиафайлами из библиотеки бота.

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

Действие Описание
Получить файл Загружает данные файла по ID в переменную (по умолчанию "file")
Получить файл по внешнему ID Загружает данные файла по полю «Внешний ID» (out_id) в переменную (по умолчанию "file")
Изменить название Устанавливает новое название файла
Изменить описание Текстовое описание
Изменить описание для Telegram Подпись, которая отображается при отправке файла в чат
Изменить исполнителя Для аудиофайлов — имя исполнителя
Увеличить счётчик отправлений Шаг — целое число 1–100

Свойства файла

Переменная Описание
"{{file.id}}" ID файла
"{{file.name}}" Название
"{{file.description}}" Описание
"{{file.file_size}}" Размер файла
"{{file.file_type}}" Тип файла
"{{file.file_ext}}" Расширение
"{{file.file_telegram_id}}" Telegram file_id
"{{file.caption}}" Подпись для Telegram
"{{file.duration}}" Длительность (секунды)
"{{file.width}}" Ширина
"{{file.height}}" Высота
"{{file.performer}}" Исполнитель
"{{file.sent}}" Количество отправлений
"{{file.status}}" Статус
"{{file.votes}}" Голоса
"{{file.rate}}" Рейтинг
"{{file.out_id}}" Внешний ID
"{{file.created_at}}" Дата создания

Заказы

Работа с заказами из встроенного магазина.

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

Действие Описание
Получить заказ по ID Загружает данные заказа в переменную (по умолчанию "order")
Получить заказы Выборка заказов с фильтрами: статус, диапазон сумм, даты и др.
Получить заказы пользователя Все заказы конкретного участника
Добавить заказ Создаёт новый заказ
Обновить заказ Изменяет поля существующего заказа
Добавить товар в заказ Добавляет позицию в заказ
Удалить товар из заказа Удаляет позицию из заказа
Изменить количество товара в заказе Устанавливает новое количество для позиции
Удалить заказ Удаляет заказ по ID

Статусы заказа: Новый · В обработке · Ожидает оплаты · Оплачен · Отправлен · Доставлен · Отменён · Ожидание · Выполнен

Свойства заказа

Переменная Описание
"{{order.id}}" ID заказа
"{{order.status}}" Статус
"{{order.summa}}" Сумма
"{{order.delivery_cost}}" Стоимость доставки
"{{order.delivery_days}}" Дней доставки
"{{order.discount}}" Скидка
"{{order.used_promo}}" Использованный промокод
"{{order.delivery_date}}" Дата доставки
"{{order.created_at}}" Дата создания
"{{order.goods}}" Товары в заказе (массив)

Конфиг пользователя

Хранит произвольные настройки, привязанные к конкретному участнику бота. Структура данных — объект с ключами на ваш выбор.

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

Действие Описание
Получить настройки пользователя Загружает весь конфиг в переменную (по умолчанию "user_config")
Обновить настройки Изменяет указанные ключи. Поддерживает вложенные ключи через точку, например "settings.theme"
Добавить настройки Добавляет только отсутствующие ключи; существующие значения не перезаписывает
Удалить настройки Удаляет указанные ключи из конфига

Доступ к данным

После получения конфига поля доступны через точку:

{{user_config.theme}} {{user_config.settings.color}} {{user_config.notifications}}

Блок содержит кнопку Тест — загружает реальные данные пользователя и автоматически обновляет список доступных полей для автодополнения.


Записи пользователя

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

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

Действие Описание
Получить все записи пользователя Список записей с фильтрами (тип, значение, диапазон дат, лимит, сортировка). Результат в переменную "user_logs"
Получить все записи бота Список записей по всему боту без привязки к пользователю. Результат в переменную "bot_logs"
Получить запись по ID Загружает одну запись в переменную (по умолчанию "user_log")
Добавить запись Создаёт новую запись. ID созданной записи сохраняется в переменную (по умолчанию "new_log_id")
Обновить запись Изменяет поля существующей записи по ID
Удалить запись Удаляет запись по ID
Количество записей Возвращает число записей по условию в переменную (по умолчанию "user_logs_count")
Очистить диалог Удаляет историю диалога в указанной записи
Очистить все диалоги пользователя Удаляет историю диалогов во всех записях пользователя
Добавить в список Добавляет значение в конец поля list указанной записи
Обновить список Обновляет элемент поля list по указанному индексу
Удалить из списка Удаляет элемент поля list по указанному индексу

Свойства записи

Переменная Описание
"{{user_log.id}}" ID записи
"{{user_log.tg_user_id}}" ID пользователя
"{{user_log.type}}" Тип записи
"{{user_log.name}}" Название
"{{user_log.value}}" Значение
"{{user_log.total_tokens}}" Расход токенов (AI-интеграции)
"{{user_log.dialog_history}}" История диалога (массив сообщений)
"{{user_log.dialog_history_count}}" Количество сообщений в истории
"{{user_log.list}}" Список (массив значений)
"{{user_log.list.0}}" Значение элемента списка по индексу (0, 1, 2...)
"{{user_log.list_count}}" Количество элементов в списке, по умолчанию 0
"{{user_log.created_at}}" Дата создания
"{{user_log.updated_at}}" Дата обновления

Для массива записей обращайтесь через индекс: "{{user_logs[0].value}}", "{{bot_logs[0].type}}" и т.д.


Платежи

Чтение записей об оплатах, проведённых через бота.

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

Действие Описание
Получить платёж по ID Загружает данные платежа в переменную (по умолчанию "payment")
Получить платёж по Order ID Поиск платежа по уникальному номеру заказа
Получить платежи пользователя Список платежей конкретного участника с фильтром по статусу и лимитом
Получить все платежи Список всех платежей бота с фильтром по статусу и лимитом

Статусы платежа: Ожидает оплаты · Оплачен · Ошибка · Истёк

Свойства платежа

Переменная Описание
"{{payment.id}}" ID записи
"{{payment.order_id}}" Уникальный номер заказа
"{{payment.status}}" Статус
"{{payment.amount}}" Сумма
"{{payment.currency}}" Валюта
"{{payment.description}}" Описание
"{{payment.pay_url}}" Ссылка на страницу оплаты
"{{payment.paid_at}}" Дата и время оплаты
"{{payment.payload}}" Дополнительные параметры (JSON-объект)
"{{payment.payload.KEY}}" Конкретный доп. параметр, переданный в кнопке оплаты

Для массива: "{{payments[0].status}}", "{{payments[0].amount}}" и т.д.


Подписки

Чтение и изменение записей о рекуррентных (периодических) подписках.

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

Действие Описание
Получить все подписки Список подписок с фильтрами: пользователь, провайдер, статус, сумма, период, диапазон дат, лимит и сортировка
Получить активную подписку пользователя Первая активная подписка пользователя. ID пользователя необязателен — по умолчанию берётся текущий участник
Обновить статус подписки При смене на «Отменена» автоматически проставляется дата отмены
Обновить период подписки Изменяет количество дней между списаниями
Обновить сумму подписки Изменяет сумму следующего списания
Обновить валюту подписки Изменяет валюту (например, "RUB", "USD")

Статусы подписки: Ожидает · Активная · Просроченная · Неудачная · Отменённая

Свойства подписки

Переменная Описание
"{{subscription.id}}" ID подписки
"{{subscription.chat_id}}" Telegram chat_id пользователя
"{{subscription.tg_user_id}}" ID пользователя в боте
"{{subscription.payment_provider_id}}" ID провайдера оплаты
"{{subscription.card_mask}}" Последние 4 цифры карты
"{{subscription.card_type}}" Тип карты (Visa, MasterCard и др.)
"{{subscription.amount}}" Сумма списания
"{{subscription.currency}}" Валюта
"{{subscription.period_days}}" Период в днях
"{{subscription.max_attempts}}" Максимальное число попыток списания
"{{subscription.charge_attempts}}" Число неудачных попыток
"{{subscription.status}}" Статус
"{{subscription.payload}}" Дополнительные данные
"{{subscription.next_charge_at}}" Дата следующего списания
"{{subscription.last_charged_at}}" Дата последнего успешного списания
"{{subscription.expires_at}}" Дата окончания подписки
"{{subscription.cancelled_at}}" Дата отмены
"{{subscription.created_at}}" Дата создания
"{{subscription.updated_at}}" Дата обновления

Для массива: "{{subscriptions[0].status}}", "{{subscriptions[0].amount}}" и т.д.


Статистика пользователя

Источник Статистика пользователя позволяет хранить произвольные данные в виде набора ключ–значение, привязанных к конкретному пользователю, дате и типу. Удобен для фиксации ежедневных показателей, накопленных значений, результатов тестов и т.п.

Данные хранятся в таблице bot_user_stat. Уникальный ключ: bot_id + tg_user_id + date + type. Если запись с такой комбинацией уже существует, её данные обновляются (поведение updateOrCreate).

Действия

Действие Описание
Создать запись Создаёт новую запись или обновляет существующую для указанного пользователя, даты и типа. Данные задаются в виде пар «название → значение» (мин. 1 пара).
Получить записи Возвращает список записей с фильтрацией по пользователю, диапазону дат, типу, лимиту и сортировке.
Удалить запись Удаляет одну запись по её ID.
Удалить записи пользователя Удаляет все записи пользователя с возможностью фильтрации по диапазону дат и типу.

Создать запись — поля

Поле Обязательное Описание
ID пользователя Telegram ID пользователя. По умолчанию {{USER_ID}}.
Дата Дата записи в формате YYYY-MM-DD. По умолчанию {{$NOW.toDate()}}.
Тип Произвольная строка-классификатор (например, steps, score, mood).
Данные Одна или несколько пар «название → значение». Оба поля поддерживают переменные.

Получить записи — фильтры и результат

Поле Описание
ID пользователя Фильтр по пользователю.
Дата от Начало диапазона (включительно). По умолчанию {{$NOW.subDays(7).toDate()}}.
Дата до Конец диапазона (включительно). По умолчанию {{$NOW.toDate()}}.
Тип Фильтр по типу.
Лимит Максимальное количество записей (1–100, по умолчанию 10).
Сортировать дата ↓ (новые вперёд) или дата ↑ (старые вперёд).
Префикс переменной Имя переменной для сохранения массива результатов. По умолчанию result_stat.

Каждый элемент результирующего массива содержит следующие свойства:

Переменная Описание
{{result_stat[0].id}} ID записи
{{result_stat[0].date}} Дата (YYYY-MM-DD)
{{result_stat[0].type}} Тип записи
{{result_stat[0].tg_user_id}} ID пользователя Telegram
{{result_stat[0].data}} Данные (объект JSON)

Удалить запись — поля

Поле Описание
ID записи ID записи для удаления (например, из результата «Получить записи»).

Удалить записи пользователя — поля

Поле Обязательное Описание
ID пользователя Telegram ID пользователя.
Дата от Начало периода удаления.
Дата до Конец периода удаления.
Тип Удалять только записи указанного типа.

Пример сценария

  1. Добавьте блок База данных, выберите источник Пользователь.
  2. Добавьте действие Получить пользователя, укажите переменную "user".
  3. В блоке «Условие» проверьте "{{user.credits}}" — если кредитов достаточно, выполните следующий шаг, иначе предложите их пополнить.
  4. После оплаты снова добавьте блок База данных и действие Начислить кредиты, чтобы обновить счёт пользователя.

Расписания пользователя

Источник Расписания пользователя позволяет управлять персональными расписаниями рассылок каждого пользователя. Это необходимо, если вам нужно отправлять несколько рассылок в разное время с учётом часового пояса конкретного пользователя — например, утренняя и вечерняя рассылки.

Как это работает в связке с Автосообщениями

  1. Включите в ноде «Автосообщение» (Общий таймер → Календарный) опцию Индивидуальное расписание.
  2. Укажите Тип расписания, например morning или evening.
  3. Боtra будет отправлять сообщение только тем пользователям, у которых в базе есть запись с данным типом.
  4. Управляйте записями через блок «База данных» → источник «Расписания пользователя».

Если поле «Тип расписания» оставить пустым — используется устаревшее поведение: поля preferred_time и preferred_days из профиля пользователя.

Действия

Действие Описание
Создать / обновить расписание Добавляет или обновляет запись по типу. Поля: тип, время (ЧЧ:ММ), дни, часовой пояс
Получить расписание по типу Возвращает объект записи в переменную или null
Получить все расписания Возвращает массив всех записей пользователя
Удалить расписание Удаляет запись по типу

Поля объекта расписания ({{schedule.поле}})

Поле Описание
{{schedule.id}} ID записи
{{schedule.schedule_type}} Тип расписания
{{schedule.time}} Время в формате HH:MM
{{schedule.days}} Дни недели через запятую (mon,tue,wed) или пусто = все дни
{{schedule.timezone}} IANA часовой пояс или пусто (используется timezone пользователя)
{{schedule.created_at}} Дата создания
{{schedule.updated_at}} Дата обновления

Пример: утренняя и вечерняя рассылки

Шаг 1. Пользователь выбирает удобное время — бот сохраняет:

База данных → Расписания пользователя → Создать/обновить
  Тип: morning
  Время: {{user_input_time}}  ← например 08:00
  Дни: mon,tue,wed,thu,fri
  Часовой пояс: {{user.timezone}}

Шаг 2. Создайте ноду «Автосообщение» → Общий таймер → Календарный:

  • Включите «Индивидуальное расписание»
  • Тип расписания: morning

Шаг 3. Повторите для вечерней рассылки (тип evening, время 20:00).

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