Перейти к основному содержимому

Пересчёт цен по расписанию

Модуль ТЗ: 5.3 · Репрайсер

Что это​

Расписание позволяет запускать репрайсер автоматически через заданный интервал — без нажатия кнопки «Запустить». Прогоны по расписанию записываются в «Журнал прогонов» с пометкой «По расписанию».

Текущее состояние​

Механизм периодического запуска в «Оптиме» есть, но включить его самостоятельно сейчас нельзя:

  • в форме правила нет поля частоты;
  • API правил не принимает интервал расписания (поле scheduleIntervalHours отклоняется проверкой запроса) и не возвращает его;
  • интервал хранится в правиле и может быть задан только администратором платформы напрямую в базе данных;
  • расписания считываются только при запуске сервиса: новый или изменённый интервал начинает работать после перезапуска «Оптимы», а выключение правила или очистка интервала полностью убирает расписание тоже только после перезапуска.

Если вам нужен автоматический пересчёт — обратитесь к администратору платформы.

Где найти​

Боковое меню → «Цены» → «Репрайсер» (/app/wb/<кабинет>/repricer):

  • колонка «Частота» в таблице правил — сейчас всегда показывает «По расписанию сервиса», потому что API не отдаёт интервал;
  • подпись «Следующий …» рядом с фильтрами — ближайший плановый прогон, если у активного правила задан интервал (время ориентировочное, см. ниже);
  • «Журнал прогонов» — прогоны с пометкой «По расписанию».

Как это работает​

  1. Для каждой пары «кабинет + интервал» из активных правил с заданным интервалом при старте сервиса регистрируется одно расписание. Первый прогон происходит через один интервал после запуска сервиса, дальше — с тем же шагом.
  2. На каждом срабатывании «Оптима» берёт по каждому товару последнюю цену из истории изменений цен «Оптимы» (ручные изменения и изменения репрайсером). Если истории цен по кабинету нет, прогон пропускается.
  3. Движок применяет все активные правила кабинета — не только правило с интервалом — по тем же правилам, что и при ручном запуске (см. «Запуск репрайсера»). Показатели товаров и бренд не передаются, поэтому срабатывают только безусловные правила (always) по артикулу или списку артикулов.
  4. Изменённые цены отправляются в 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.