Документация/Репрайсер: цены, экономика и согласование изменений
Руководство по работе с магазином
Репрайсер: цены, экономика и согласование изменений
Подробное руководство по настройке ценовых задач: какие цены читает сервис, как рассчитывает допустимое предложение, почему может отказаться и как проверяется согласованная отправка.
Зачем это нужно
Репрайсер нужен, когда цену нельзя выбирать изолированно от затрат, ограничений и предыдущих изменений. Вы задаёте целевую цену или правило по запасу, а сервис проверяет, укладывается ли предложение в экономику товара и установленные пределы. Агент помогает сформулировать условия; численный расчёт выполняет ценовой модуль.
Пример из работы магазина
«Для этих товаров подготовь движение к целевой цене. Не выходи за согласованный коридор, сохрани минимальную маржинальность моей модели и покажи причины по каждому товару».
Как начать
Подключите магазин и проверьте agent.me, capabilities.list и automations.credentials.requirements с domain=pricing.
Согласуйте в памяти магазина товары, цели, затраты, сроки действия и ограничения. Для настройки нужны operations.read, operations.plan и доступ к задаче.
Прочитайте текущую конфигурацию, подготовьте новую версию, проверьте repricer.config.validate и привяжите условия к актуальной задаче.
Сохраните конфигурацию, выполните один предварительный расчёт и прочитайте решения. Для возможной отправки используйте отдельный точный план и подтверждение владельца.
Что вы получите
По каждому товару — текущее состояние, желаемая и допустимая цена, ограничения и причина предложения, удержания или блокировки. При отдельном исполнении — план, состояние отправки и проверенный результат.
Что важно учитывать
Конфигурация и предварительные расчёты работают в observe/shadow. Отдельный исполнитель согласованных цен существует, но успешный реальный пилот изменения на WB не объявляется подтверждённым. Наличие ключа и метода не доказывает готовность конкретного магазина. Автономная переоценка без точного согласования не включена.
Из чего состоит репрайсер
Часть
Что хранит или делает
Результат
Задача в памяти
Цель, ограничения, обоснование затрат и актуальная версия договорённостей.
Основание для настройки; не разрешение на запись.
Конфигурация pricing
Полный набор задач и товаров, стратегии, срок действия и ограничения.
Неизменяемая зарегистрированная версия с контрольной суммой.
Источник цен
Наблюдаемая цена и скидка, варианты размеров, время и версия источника.
Проверяемый снимок для расчёта.
Расчётный модуль
Пересекает финансовый порог, коридор, шаг и лимит движения.
Предложения и причины по каждому товару.
Точный план
Повторно проверяет цены, условия задачи и историю исполнений.
Конкретные цены и ссылка владельцу для согласования.
Проверка исполнения
Сопоставляет статус загрузки и фактические цены после отправки.
Подтверждённый результат либо состояние, требующее разбора.
Один магазин имеет одну активную конфигурацию домена pricing, внутри которой может быть несколько задач. Обновление заменяет полный набор, а не добавляет к нему отдельное поле. Старые версии и история сохраняются.
Какие параметры читает расчёт
Параметр
Смысл
Как влияет
target_id
Артикул WB, передаваемый строкой.
Товар должен совпасть с выбранным источником цены.
discountedPrice
Цена продавца после его скидки, в рублях.
Основная управляемая величина; не цена после СПП или кошелька.
Цена и скидка размеров
Наблюдаемые варианты одного товара.
Неодинаковые или неполные цены размеров блокируют общий расчёт.
Время и версия цены
Когда получено наблюдение и к какой версии относится.
Устаревшую или неоднозначную цену нельзя использовать для нового плана.
stock_cover_days, stock_observed_at
Запас в днях и время наблюдения.
Нужны только стратегии stock-cover; не угадываются из одного остатка.
История подтверждённых действий
Последняя проверенная цена, предыдущие движения, незавершённые операции и ручная остановка.
Определяет паузу, остаток суточного лимита и блокировки.
Текущий адаптер цен не рассчитывает дни запаса автоматически из сырых заказов и остатков. Если такого входа нет, stock-cover вернёт missing_stock_cover. Для target-seller-price дни запаса не являются обязательной частью стратегии.
Структура конфигурации и задачи
Поле
Назначение
repricer_version=2
Версия ценового формата внутри конфигурации контроллера.
config_id, mode
Имя версии и режим observe/shadow.
expected_config_sha256
Контрольная сумма последней прочитанной конфигурации; пустая строка — создание при её отсутствии.
tasks[].task_id, enabled
Идентификатор задачи и явное включение её расчёта.
tasks[].binding
Ссылки на согласованную запись памяти и версию задачи.
tasks[].valid_until
Срок действия условий с часовым поясом. Истёкшая модель затрат не продолжает действовать молча.
tasks[].strategy.kind
target-seller-price, stock-cover или hold.
products[].safe_min_price / safe_max_price
Разрешённый ценовой коридор в рублях.
products[].target_price
Желаемая цена для target-seller-price. Для hold не передаётся.
economics.revision_ref
Версия согласованной модели затрат.
economics.fixed_cost_rub
Согласованные фиксированные расходы на единицу, в рублях.
economics.variable_cost_percent
Согласованная доля переменных расходов в процентах.
Неизвестные поля и стратегии отклоняются. На один товар допускается одна включённая задача. Лимит определения — до 100 задач и суммарно 1000 товарных строк; это ограничение файла, а не обещание производительности для 1000 магазинов.
Настройки ограничений
Поле guardrails
По умолчанию
Допустимый диапазон и смысл
max_snapshot_age_seconds
900 секунд
1–3600; максимальный возраст цены.
max_actions_per_cycle
5
1–100 предложений за расчёт.
max_step_percent
5%
0,01–20%; максимальное изменение за один шаг.
max_24h_movement_percent
10%
0,01–20%; сумма абсолютных движений за скользящие 24 часа.
cooldown_seconds
21600 секунд / 6 часов
900–604800; пауза после подтверждённого изменения.
minimum_margin_percent
15%
0–99%; минимум маржинальности именно заданной модели.
deadband_rub
1 ₽
0,01–100000 ₽; малое отклонение, при котором цену оставляют прежней.
interval_seconds задаётся отдельно: 60–86400 секунд, по умолчанию 900. Само сохранение интервала не включает расписание. Значения по умолчанию описывают контракт и не являются рекомендацией для вашей экономики.
Полный учебный профиль репрайсера
Шаблон отключён и содержит вымышленные идентификаторы, ссылки и суммы. Он показывает структуру, а не настройки вашего магазина. Замените их на согласованные условия и действительные версии памяти; выберите реальный срок действия. Не включайте пример как готовую конфигурацию.
Проверяется задача: включена ли, не истёк ли срок, однозначно ли выбран товар.
Проверяется цена и история: свежесть, незавершённые действия, ручная остановка и внешние изменения.
Рассчитывается нижний порог модели затрат.
Стратегия определяет желаемое направление.
Финансовый порог пересекается с коридором владельца, допустимым шагом и оставшимся лимитом движения.
Если пересечение пустое, товар блокируется; если отклонение мало — цена удерживается. Предложение сохраняется с причиной.
Порог = fixed_cost_rub / (1 − variable_cost_percent / 100 − minimum_margin_percent / 100). Знаменатель должен быть положительным. Порог округляется вверх до копейки. Расходы на налоги, возвраты, комиссию, рекламу и логистику должны быть согласованно включены в модель; сервис не угадывает их и не добавляет повторно.
Учебный расчёт: фиксированные расходы 550 ₽, переменная доля 20%, минимальная маржинальность 15%. Порог = 550 / 0,65 = 846,16 ₽ после округления вверх. При коридоре 900–1300 ₽, текущей цене 1000 ₽, цели 1100 ₽ и шаге 5% ближайшее предложение не выше 1050 ₽, если остальные проверки пройдены. Это пример механики, не прогноз прибыли.
Стратегия
Правило
target-seller-price
Движение к target_price в пределах всех ограничений.
stock-cover
Ниже low_days — повышение на step_percent; выше high_days — снижение; внутри диапазона — удержание. Нужны подтверждённые дни запаса.
hold
Удержание без новой цены.
Суточный лимит учитывает оба направления: снижение и обратное повышение расходуют его. Предварительное предложение ещё не является действием и не расходует лимит подтверждённых изменений.
Порядок работы через методы
automations.config.get
{
"domain": "pricing"
}
Возьмите текущую конфигурацию и её server SHA-256. Не передавайте обратно служебные поля ответа.
Вызовите repricer.config.validate с полным объектом config. Получите effective config и bindings[].success_criterion.
Добавьте критерий в соответствующую задачу памяти, сохранив остальные критерии. Через tasks.resume прочитайте UUID и текущую version; укажите их в binding.
Вызовите automations.config.apply с domain=pricing, config и idempotency_key. После записи перечитайте config.get.
Выполните один automations.shadow.run либо создайте automations.jobs.create. Прочитайте результат и причины через runs.list или jobs.get.
Примеры показывают форму запроса. Артикулы, Memory refs и ключи идемпотентности заменяются для реальной задачи. Вызов расчёта сохраняет результат X-MP, но не меняет цену WB.
repricer.plan принимает 1–5 артикулов и повторно читает собственные цены зарегистрированным методом. Возвращает plan_id, точные значения, контрольную сумму конфигурации, срок и approval_url. План действует 10 минут. Повтор с тем же ключом возвращает тот же план, а не новый произвольный расчёт.
Владелец открывает approval_url в своей сессии и проверяет товары, цены до/после, базовую цену и скидку.
Отправка возможна только после точного подтверждения владельца и повторной серверной проверки. Кнопка отправки — отдельное действие, не часть чтения руководства.
repricer.plan.get показывает состояние. repricer.reconcile проверяет загрузку и фактические цены, ничего не отправляя повторно.
succeeded означает совпадение подтверждённого статуса загрузки и фактической базовой цены, скидки и цены продавца. pending/unknown требуют проверки, а не слепого повторения.
Исполнитель сохраняет текущую скидку и работает с общей ценой RUB при одинаковых ценах размеров. Акции, отдельные размеры, управление персональной ценой покупателя и автоматическое следование конкуренту этим путём не поддерживаются. Возврат к старой цене — новый проверяемый план.
Причины удержания и блокировки
Причина
Что означает
Что проверить
missing_price / stale_price
Цены нет или она слишком старая.
Источник и время последнего сбора.
ambiguous_price / incomplete_price
Варианты дают неоднозначную или неполную цену.
Состав размеров и согласованность снимка.
definition_expired
Истёк срок задачи и её условий.
Актуализировать затраты и срок через новую версию задачи.
infeasible_economics / corridor_step_conflict
Безопасного допустимого решения нет.
Модель расходов, коридор, целевую цену и шаг; не обходить проверку.
movement_limit / cooldown
Исчерпан лимит движения или не закончена пауза.
Историю подтверждённых действий и время.
pending_readback / external_price_change
Есть незавершённое действие или цена изменилась вне ожиданий.
Предыдущую операцию и фактическую цену.
missing_stock_cover / stale_stock
Нет свежего запаса в днях.
Доступность входа stock-cover.
deadband / stock_in_band
Изменение по стратегии не требуется.
Это нормальное удержание, а не техническая ошибка.
Методы и параметры
Параметры ниже относятся к MCP arguments. Идентичность и ключ не передаются в них. Для полного объекта config следуйте руководству домена.