Индекс документации: https://vesremont.com/llms.txt
Связь этого раздела с задачей
Задача: Сузить выбор, не смешивая HTML-фасеты и параметры API.
Что нужно на входе: Текущий раздел/бренд и его опубликованные фильтры; ID и допустимые границы берутся с сайта.
Результат: Проверенная подборка с выбранными характеристиками; после изменения фильтра перечитывается список.
Другая цель? Карта всех задач и режимов. Права личного доступа — auth.md; это не обязательный шаг для публичного чтения.
Следующий раздел по теме: Данные карточки товара — сравнить характеристики кандидатов · URL и параметры — собрать допустимое состояние HTML-каталога · Навигация по брендам — ограничить подборку производителем.
Фильтры REST и удалённых протоколов
Сначала запросите GET /api/v1/catalog/filters с section_id либо brand_id. Используйте возвращённые ID, типы, значения и границы; не переносите URL HTML-фасетов в REST. Для GET /api/v1/products параметр filters — один URL-encoded JSON object. Список сортировок и структура запроса определены в OpenAPI. MCP/A2A используют схемы реестра операций, UCP — собственную catalog schema. Полный контракт.
Соответствие сортировок
| Порядок | HTML URL | REST search_products | Browser WebMCP set_catalog_sort |
|---|---|---|---|
| Штатный | без sorts | sort=id_sort | sort=default |
| Цена по возрастанию | sorts=price_min | sort=price_min | sort=price_asc |
| Цена по убыванию | sorts=price_max | sort=price_max | sort=price_desc |
Это разные имена одного выбранного порядка в разных интерфейсах. Browser-инструмент сам преобразует свой enum в HTML URL; параметры sorts и sort не взаимозаменяемы. UCP использует собственную схему, не эту REST-таблицу. После перехода перечитайте результаты.
Категориальные фильтры
Каждая группа имеет контейнер:
<div data-filter-type="categorical"
data-filter-id="..."
data-filter-name="...">
Значения представлены ссылками со следующими атрибутами:
href— готовое следующее состояние; это основной интерфейс;data-filter-idиdata-filter-name— группа;data-filter-value-id— внутренний ID значения;data-filter-value-code— символьный код URL;data-checked="true|false"— текущее состояние;- видимые имя и количество подходящих товаров.
Используйте href, потому что сервер может переместить значение между path и повторяемым filter=..., а также нормализовать порядок path-сегментов.
Диапазонные фильтры
Контейнер диапазона публикует:
<div data-filter-type="range"
data-filter-id="4283"
data-filter-name="Длина"
data-range-min="1"
data-range-max="2000"
data-range-step="1"
data-range-selected-min="398"
data-range-selected-max="1437">
Number inputs дополнительно содержат data-filter-id и data-range-bound="min|max". Значения формируются из тех же серверных данных, что и UI, и обновляются после AJAX-навигации.
Алгоритм для запроса «длина 500–1000»:
- Найдите range-контейнер с
data-filter-name="Длина". - Прочитайте его ID, допустимые min/max и step.
- Ограничьте запрос пользователя опубликованными границами и соблюдайте step.
- Удалите существующий
rangeс тем же ID. - Добавьте
range={id}_s_o_500-e_d_1000. - Удалите
page, потому что набор результатов изменился. - Откройте URL и проверьте новые
data-range-selected-*.
Если выбран полный опубликованный диапазон, штатный UI удаляет соответствующий range из URL.
Несколько фильтров
- Разные категориальные группы комбинируются.
- Разные range ID комбинируются повторяемыми
range. - Категориальные и range фильтры комбинируются между собой.
- UI предполагает переключение, а не множественный выбор нескольких значений одной категориальной группы.
Сброс
Активные категориальные значения и группы имеют ссылки сброса. Активный range имеет ссылку, которая удаляет только параметр соответствующего ID. Предпочитайте эти ссылки ручному редактированию сложного path.
Динамичность
Допустимые значения, количества и границы зависят от выбранной категории и остальных фильтров. Не кэшируйте их как глобальный справочник и не переносите ID между несвязанными страницами без повторной проверки HTML.
В WebMCP сначала вызывайте get_catalog_filters без filterId: он возвращает до трёх групп, nextOffset и выбранные значения. Для раскрытия конкретной группы повторите вызов с её filterId; значения также идут страницами до трёх элементов через nextValueOffset. Для перехода используйте возвращённый resultUrl или типизированные set_catalog_range/set_catalog_sort.
Правила AI-блока на страницах магазина
Эти правила и блок на сайте формируются из одного источника. Числа в фигурных скобках — обозначения, не реальные ID.
Каталог и фильтры
Вы на странице раздела или отфильтрованной подборки. Используйте опубликованные ссылки подкатегорий, товаров и пагинации; не угадывайте URL и ID. Для известного артикула быстрее поиск, для подбора — каталог.
Как уточнить подборку
Берите значения, диапазоны и ссылки фильтров из текущей страницы. После изменения перечитайте список и выбранные фильтры. Для REST сначала GET /api/v1/catalog/filters?section_id={section_id} либо ?brand_id={brand_id}, затем GET /api/v1/products с тем же контекстом и filters — одним URL-кодированным JSON-объектом по схеме. HTML-сегменты URL не являются REST-параметрами. Фильтры и диапазоны · HTML URL · OpenAPI.
Из листинга в карточку
Откройте ссылку нужного товара. В нижнем блоке карточки «Для AI-систем» указаны внутренний product_id, данные для текстового клиента и готовая ссылка на корзину, если доступно оформление. Не подставляйте артикул, ID бренда/раздела или строки корзины вместо product_id. Сверьте модель, текущую цену и возможность заказа в карточке; совпадение фотографии недостаточно. Правила карточки · Цена и наличие.
Если товар не найден
Публичный поиск без регистрации: GET /api/v1/products?q={артикул}&per_page=5. Числовой items[].id — ID товара. Если клиент не читает JSON, используйте /api/v1/products.md?q={артикул} или /search/?search={артикул}. Сверьте точное совпадение; несколько подходящих вариантов требуют уточнения. Пример Markdown-каталога · Поиск · API.
Передать корзину
Передайте опубликованную в карточке ссылку /buy/{product_id}:{quantity} либо получите share_url через GET /api/v1/cart-drafts/?product_id={product_id}&quantity=1. Вход, cookies, API-ключ и OAuth для подготовки ссылки не нужны. GET корзину не меняет. Когда покупатель откроет ссылку, сайт защищённым POST-запросом перенесёт товар в его корзину и заново проверит текущую цену и наличие. Заказ при этом не оформляется, а доступа к чужой корзине ссылка не даёт. Перенос подборки и оформление.
Личные операции отдельно
Для чтения или изменения личной корзины через REST, MCP, A2A или UCP нужно отдельное разрешение покупателя. Общее разрешение агенту не подтверждает конкретный заказ: его состав и сумму покупатель подтверждает отдельно. Выбрать сценарий · Разработчикам.