X·MPДокументация

Руководство по работе с магазином

Мониторинг: история цен, карточек и наблюдений

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

Зачем это нужно

Мониторинг помогает восстановить, что было изменено в товаре и когда это стало видно в данных. Это полезно для разбора падения продаж, проверки новой карточки и сравнения наблюдаемых цен. Он сохраняет факты изменений, а вывод о влиянии делает отдельный анализ.

Пример из работы магазина

«Покажи изменения цены и описания этого товара за две недели. Восстанови состояние до правки и сравни показатели вокруг события, указав пропуски данных».

Как начать

  1. Подключите данные магазина и проверьте monitor.status, права и фактическое покрытие истории.
  2. Укажите товары и период. Сначала получите summary через monitor.timeline или monitor.history.
  3. Для выбранного события откройте полный before/after с limit=1, при необходимости прочитайте snapshot и сохранённое медиа.
  4. Для сравнения результата используйте monitor.compare, проверяя покрытие и одновременные изменения.

Что вы получите

Лента наблюдаемых изменений, предыдущие/новые значения, время проверки, сохранённые версии компонентов и ограниченное сравнение показателей до/после.

Что важно учитывать

История содержит только действительно сохранённые наблюдения. Управляемый список конкурентов и полное слежение за текстом и изображениями их карточек ещё расширяются. Нет изменений в ответе — не доказательство, что источник недавно проверен. Сравнение до/после не устанавливает причинность.

Структура: версии → события → сравнение

ОбъектНазначение
Наблюдение источникаЧто удалось получить при конкретной проверке и когда.
Версия компонентаСохранённое состояние цены, текста, характеристик или другого компонента.
Событие измененияСвязь предыдущего и нового значений с источником и временем обнаружения.
МедиаСохранённые изображения с идентификатором и контрольной суммой; выдаются частями.
Временной рядКомпактная последовательность разрешённых показателей или количества событий.
Сравнение вокруг событияНаблюдаемые показатели до/после, покрытие, одновременные изменения и ограничения вывода.

Журнал не заменяет память магазина. Цели эксперимента, гипотезы и решения сохраняются в памяти; история товара предоставляет доказательства. Контроль собственных продаж и расходов — отдельный аналитический блок, Telegram — отдельная доставка.

Что наблюдается и чего из этого нельзя выводить

РазделДоступные типы данныхГраница смысла
КарточкаНазвание, описание, характеристики, ссылки на медиа и версии.Автор правки известен только при дополнительном подтверждении операции.
ЦенаЦена продавца, скидка, варианты/размеры и время версии.Не персональная цена каждой покупки.
ИзображенияДоступные сохранённые миниатюры и изменения медиа.Нет гарантии сохранения полного оригинала или всех прошлых изображений.
Открытая витринаНаблюдаемые публичные цены, рейтинг и количество отзывов.Регион и условия просмотра влияют на цену; это не чужие продажи и прибыль.
Смежные события журналаstock, supply, advertising, если их источники сохранены.Наличие этих типов в общем журнале не превращает мониторинг карточек в полный контроль кабинета.
Пробелыsource_gap, отсутствующий источник или недоступное медиа.Не заменяются нулём и не скрываются из вывода.

Три времени, baseline и отсутствие событий

Время исходного события, время проверки источника и время обнаружения изменения могут различаться. Если товар проверяли утром и вечером, изменение между проверками известно только в пределах этого окна. Нельзя выдавать время обнаружения за точный момент редактирования.

baseline — первое сохранённое состояние, а не обнаруженная правка. По умолчанию базовые снимки скрыты; include_baseline=true позволяет их запросить. Пустая лента означает отсутствие подходящих сохранённых событий, но сама по себе не подтверждает свежесть проверки или неизменность товара.

Периодические проверки не гарантируют фиксацию всех промежуточных изменений между обращениями к источнику. Сначала смотрите monitor.status и признаки пробелов, затем интерпретируйте ленту. Частоты и покрытие конкретного магазина берутся из его состояния, а не из общего обещания «в реальном времени».

Как выбрать метод

ЗадачаМетодВыбор параметров
Узнать состояние историиmonitor.statusБез параметров.
Лента типов событийmonitor.timelineПериод, nm_ids, event_type, object_type, limit и cursor.
Поиск изменения конкретного поляmonitor.historyПериод, nm_ids, tag, field, source, detail и cursor. Значения фильтров берите из наблюдаемой истории.
Состояние товара на моментmonitor.snapshotnm_id плюс at либо snapshot_id, component/source/field и offset.
Изображение из историиmonitor.mediamedia_id из результата и offset для следующей части.
Ряд рейтинга/цены/событийmonitor.seriesПериод, товары, group_by и один разрешённый metric.
Показатели вокруг правкиmonitor.compareevent_id, nm_id, окно days и выбранные metrics.

У timeline/history максимум 50 событий и 20 товаров в запросе. Полный detail=full требует limit=1. Ответ полного снимка ограничен 20 MiB. Сначала выберите событие из краткого списка, затем запрашивайте его подробности. Cursor нельзя переносить на другой набор фильтров.

Примеры запросов истории и состояния

monitor.timeline
{
  "date_from": "2026-09-01",
  "date_to": "2026-09-07",
  "nm_ids": [
    "123456"
  ],
  "event_type": "price",
  "limit": 10
}
monitor.history
{
  "date_from": "2026-09-01",
  "date_to": "2026-09-07",
  "nm_ids": [
    "123456"
  ],
  "detail": "full",
  "limit": 1
}
monitor.snapshot
{
  "nm_id": 123456,
  "at": "2026-09-07T12:00:00Z",
  "detail": "full",
  "limit": 1
}

Артикул и даты учебные. Для следующих страниц snapshot используйте возвращённые at и next_offset, чтобы оставаться на выбранном моменте. Для history/timeline продолжайте выданный cursor. Не конструируйте snapshot_id, event_id или media_id самостоятельно.

Как читать сохранённые изображения

monitor.media возвращает часть до 256 KiB в base64, а не публичную ссылку на хранилище. Агент продолжает next_offset, собирает байты в приватном файле и проверяет полный SHA-256. Нельзя считать одну часть полным изображением. Отсутствующий файл или недоступный источник нужно показать как ограничение.

Для сравнения изображений важно использовать те версии, которые относятся к выбранному событию, а не сегодняшнюю карточку. Сохранённая миниатюра подтверждает доступное изображение этой версии; она не доказывает, что на витрине не было других кадров между проверками.

Сравнение показателей вокруг изменения

monitor.compare
{
  "event_id": "00000000-0000-0000-0000-000000000001",
  "nm_id": 123456,
  "days": 7,
  "metrics": [
    "ordered_gmv",
    "ad_spend",
    "order_cr"
  ]
}

event_id в примере — заглушка: замените его реальным ID события из истории этого магазина. Окно days — 1–28 дней, metrics — до 12 показателей. Метод исключает неопределённые дни изменения, возвращает покрытие и сопутствующие изменения. Подготовленный evidence candidate для памяти требует проверки; сам метод память не записывает.

Например, после новой обложки заказы выросли, но одновременно снизилась цена и увеличился рекламный расход. Такой результат нельзя назвать доказанным эффектом обложки. В отчёте нужны обе стороны сравнения, одинаковые товары и денежная база, пропуски, сезонность и другие изменения.

Как разбирать неполную историю

СимптомПроверка
Пустая лентаПериод, артикулы, фильтры, include_baseline и свежесть источника.
source_gapКакая проверка не состоялась; это ограничение доказательств.
Нет старого состоянияБыло ли оно вообще сохранено; будущий сбор не восстанавливает прошлое автоматически.
Нет медиаИдентификатор и доступность сохранённого объекта; не заменять современной картинкой.
Полный ответ не помещаетсяdetail=full и limit=1, затем выбор компонента/поля.
Сравнение даёт nullПокрытие выбранных метрик и окна; не подставлять нулевые продажи.

Методы и параметры

Параметры ниже относятся к MCP arguments. Идентичность и ключ не передаются в них. Для полного объекта config следуйте руководству домена.

monitor.history

Найти изменения по тегу, полю и источнику; полный before/after требует limit=1.

ПараметрТипОбязателенНазначение и ограничения
date_fromстрокадаДата начала; смысл события или наблюдения зависит от метода.
date_toстрокадаВключённая дата окончания; проверяйте допустимую длину периода.
tagстроканетТег изменения из доступной истории.
fieldстроканетПуть конкретного параметра; выбирается по данным истории.
sourceстроканетФильтр источника наблюдения.
cursorстроканетНепрозрачный курсор продолжения с теми же фильтрами.
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 50
detailстроканетКраткие данные либо полный снимок; full у истории требует limit=1. варианты: ["summary", "full"]
nm_idsмассивнетСписок артикулов WB в пределах выбранного магазина. не более элементов: 20
include_baselineда/нетнетВключить первоначальные базовые снимки, не только изменения.
Точная JSON Schema
{
  "type": "object",
  "properties": {
    "date_from": {
      "type": "string"
    },
    "date_to": {
      "type": "string"
    },
    "tag": {
      "type": "string"
    },
    "field": {
      "type": "string"
    },
    "source": {
      "type": "string"
    },
    "cursor": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "detail": {
      "type": "string",
      "enum": [
        "summary",
        "full"
      ]
    },
    "nm_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20
    },
    "include_baseline": {
      "type": "boolean"
    }
  },
  "required": [
    "date_from",
    "date_to"
  ],
  "additionalProperties": false
}

monitor.snapshot

Прочитать компоненты товара на момент или по snapshot_id; полный detail требует limit=1.

ПараметрТипОбязателенНазначение и ограничения
snapshot_idстроканетТочный ID сохранённого снимка из ответа.
atстроканетМомент времени с часовым поясом для восстановления снимка.
componentстроканетСохранённый компонент товара.
sourceстроканетФильтр источника наблюдения.
fieldстроканетПуть конкретного параметра; выбирается по данным истории.
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 50
detailстроканетКраткие данные либо полный снимок; full у истории требует limit=1. варианты: ["summary", "full"]
nm_idцелоедаАртикул WB; соблюдайте тип именно этого метода. минимум: 1
offsetцелоенетСмещение следующей страницы либо байтов медиа; используйте значение ответа. минимум: 0
Точная JSON Schema
{
  "type": "object",
  "properties": {
    "snapshot_id": {
      "type": "string"
    },
    "at": {
      "type": "string"
    },
    "component": {
      "type": "string"
    },
    "source": {
      "type": "string"
    },
    "field": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "detail": {
      "type": "string",
      "enum": [
        "summary",
        "full"
      ]
    },
    "nm_id": {
      "type": "integer",
      "minimum": 1
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "required": [
    "nm_id"
  ],
  "additionalProperties": false
}

monitor.media

Прочитать часть изображения до256KiB; продолжать next_offset, проверить полный hash.

ПараметрТипОбязателенНазначение и ограничения
media_idстрокадаИдентификатор сохранённого изображения.
offsetцелоенетСмещение следующей страницы либо байтов медиа; используйте значение ответа. минимум: 0
Точная JSON Schema
{
  "type": "object",
  "properties": {
    "media_id": {
      "type": "string"
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "required": [
    "media_id"
  ],
  "additionalProperties": false
}

monitor.status

Проверить состояние и покрытие мониторинга.

Параметров нет: передайте {}.

Точная JSON Schema
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

monitor.timeline

Прочитать события по типу и товарам; baseline скрыт по умолчанию.

ПараметрТипОбязателенНазначение и ограничения
date_fromстрокадаДата начала; смысл события или наблюдения зависит от метода.
date_toстрокадаВключённая дата окончания; проверяйте допустимую длину периода.
nm_idsмассивнетСписок артикулов WB в пределах выбранного магазина. не более элементов: 20
event_typeстроканетТип сохранённого события. варианты: ["baseline", "source_gap", "card", "photos", "price", "stock", "supply", "advertising", "rating", "reviews"]
object_typeстроканетТип наблюдаемого объекта. варианты: ["store", "product", "competitor"]
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 50
cursorстроканетНепрозрачный курсор продолжения с теми же фильтрами.
include_baselineда/нетнетВключить первоначальные базовые снимки, не только изменения. по умолчанию: false
detailстроканетКраткие данные либо полный снимок; full у истории требует limit=1. по умолчанию: "summary"; варианты: ["summary", "full"]
Точная JSON Schema
{
  "type": "object",
  "properties": {
    "date_from": {
      "type": "string"
    },
    "date_to": {
      "type": "string"
    },
    "nm_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20
    },
    "event_type": {
      "type": "string",
      "enum": [
        "baseline",
        "source_gap",
        "card",
        "photos",
        "price",
        "stock",
        "supply",
        "advertising",
        "rating",
        "reviews"
      ]
    },
    "object_type": {
      "type": "string",
      "enum": [
        "store",
        "product",
        "competitor"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "type": "string"
    },
    "include_baseline": {
      "type": "boolean",
      "default": false
    },
    "detail": {
      "type": "string",
      "enum": [
        "summary",
        "full"
      ],
      "default": "summary"
    }
  },
  "required": [
    "date_from",
    "date_to"
  ],
  "additionalProperties": false
}

monitor.series

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

ПараметрТипОбязателенНазначение и ограничения
date_fromстрокадаДата начала; смысл события или наблюдения зависит от метода.
date_toстрокадаВключённая дата окончания; проверяйте допустимую длину периода.
nm_idsмассивнетСписок артикулов WB в пределах выбранного магазина. не более элементов: 20
event_typeстроканетТип сохранённого события. варианты: ["baseline", "source_gap", "card", "photos", "price", "stock", "supply", "advertising", "rating", "reviews"]
object_typeстроканетТип наблюдаемого объекта. варианты: ["store", "product", "competitor"]
group_byстроканетГруппировка данных; проверяйте разрешённые варианты. варианты: ["account", "product"]
metricстроканетОдин показатель временного ряда. варианты: ["events", "rating", "reviews", "public_price_min_rub", "public_price_max_rub", "amount", "discountedPrice_min"]
Точная JSON Schema
{
  "type": "object",
  "properties": {
    "date_from": {
      "type": "string"
    },
    "date_to": {
      "type": "string"
    },
    "nm_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20
    },
    "event_type": {
      "type": "string",
      "enum": [
        "baseline",
        "source_gap",
        "card",
        "photos",
        "price",
        "stock",
        "supply",
        "advertising",
        "rating",
        "reviews"
      ]
    },
    "object_type": {
      "type": "string",
      "enum": [
        "store",
        "product",
        "competitor"
      ]
    },
    "group_by": {
      "type": "string",
      "enum": [
        "account",
        "product"
      ]
    },
    "metric": {
      "type": "string",
      "enum": [
        "events",
        "rating",
        "reviews",
        "public_price_min_rub",
        "public_price_max_rub",
        "amount",
        "discountedPrice_min"
      ]
    }
  },
  "required": [
    "date_from",
    "date_to"
  ],
  "additionalProperties": false
}

monitor.compare

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

ПараметрТипОбязателенНазначение и ограничения
event_idстрокадаИдентификатор наблюдаемого события для сравнения. формат: "uuid"
nm_idцелоедаАртикул WB; соблюдайте тип именно этого метода. минимум: 1
daysцелоенетЧисло дней окна до/после события. минимум: 1; максимум: 28; по умолчанию: 7
metricsмассивнетСписок выбранных показателей; разные сервисы имеют собственный каталог. не менее элементов: 1; не более элементов: 12
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "event_id",
    "nm_id"
  ],
  "properties": {
    "event_id": {
      "type": "string",
      "format": "uuid"
    },
    "nm_id": {
      "type": "integer",
      "minimum": 1
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 28,
      "default": 7
    },
    "metrics": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "maxItems": 12
    }
  }
}

Связанные возможности

Мониторинг своих товаров и конкурентов

Замечать изменения цен и карточек у себя и конкурентов. Давать агенту историю для сравнения своих решений с тем, что происходило на рынке.

История есть, слежение расширяется. У своих товаров есть история цен и полей карточки, у публичных товаров — доступные наблюдения. Управляемый список конкурентов и полное слежение за текстом и изображениями их карточек ещё дорабатываются. Проверки периодические, изображения сохраняются в виде миниатюр.

Техническая справка для агента и разработчика

Этот раздел предназначен для настройки интеграции. Для обычной работы начните с шагов выше.