Пересчёт цен по расписанию
Модуль ТЗ: 5.3 · Репрайсер
Что это
Расписание позволяет запускать репрайсер автоматически через заданный интервал — без нажатия кнопки «Запустить». Прогоны по расписанию записываются в «Журнал прогонов» с пометкой «По расписанию».
Текущее состояние
Механизм периодического запуска в «Оптиме» есть, но включить его самостоятельно сейчас нельзя:
- в форме правила нет поля частоты;
- API правил не принимает интервал расписания (поле
scheduleIntervalHoursотклоняется проверкой запроса) и не возвращает его; - интервал хранится в правиле и может быть задан только администратором платформы напрямую в базе данных;
- расписания считываются только при запуске сервиса: новый или изменённый интервал начинает работать после перезапуска «Оптимы», а выключение правила или очистка интервала полностью убирает расписание тоже только после перезапуска.
Если вам нужен автоматический пересчёт — обратитесь к администратору платформы.
Где найти
Боковое меню → «Цены» → «Репрайсер» (/app/wb/<кабинет>/repricer):
- колонка «Частота» в таблице правил — сейчас всегда показывает «По расписанию сервиса», потому что API не отдаёт интервал;
- подпись «Следующий …» рядом с фильтрами — ближайший плановый прогон, если у активного правила задан интервал (время ориентировочное, см. ниже);
- «Журнал прогонов» — прогоны с пометкой «По расписанию».
Как это работает
- Для каждой пары «кабинет + интервал» из активных правил с заданным интервалом при старте сервиса регистрируется одно расписание. Первый прогон происходит через один интервал после запуска сервиса, дальше — с тем же шагом.
- На каждом срабатывании «Оптима» берёт по каждому товару последнюю цену из истории изменений цен «Оптимы» (ручные изменения и изменения репрайсером). Если истории цен по кабинету нет, прогон пропускается.
- Движок применяет все активные правила кабинета — не только правило с
интервалом — по тем же правилам, что и при ручном запуске (см.
«Запуск репрайсера»). Показатели товаров и бренд не
передаются, поэтому срабатывают только безусловные правила (
always) по артикулу или списку артикулов. - Изменённые цены отправляются в Wildberries и попадают в
историю изменений цен с источником «Репрайсер»
и автором
repricer-scheduler.
Ограничения
- Настройка — только администратором платформы, вступает в силу после перезапуска сервиса (см. «Текущее состояние»). Диапазон интервала в коде не проверяется; в интерфейсе предусмотрены значения 4 и 12 часов, 1, 3 и 7 дней.
- Цены берутся из истории «Оптимы», а не из Wildberries. Если цена менялась напрямую в кабинете WB, расчёт пойдёт от устаревшего значения. Товары, цену которых через «Оптиму» никогда не меняли, в прогон по расписанию не попадают.
- Время «Следующий …» — ориентировочное. Оно считается по сетке интервала, а фактический отсчёт идёт от момента запуска сервиса и сбрасывается при каждом перезапуске.
- Правила с условием по показателю и правила по бренду в прогонах по расписанию не срабатывают.
Связанные страницы
Для интеграторов
- Колонка
repricer_rules.schedule_interval_hours(часы,null— без расписания); в DTO правил (POST/PATCH/GET /repricer/rules) её нет. - Регистрация —
RepricerScheduleService.onModuleInit, очередьrepricer-schedule, джобаrepricer:run, имя расписанияrepricer:<кабинет>:<N>h. - Источник цен — последняя запись
price_changesс типомpriceпо каждому nmId. GET /repricer/summary→nextRunAt,lastRunAt,lastRunStatus.- Решение — ADR-0024.