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

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

Отзывы: от входящего сообщения до проверенного решения

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

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

Блок помогает не смешивать написание ответа с решением проблемы. Он отбирает отзывы по согласованным условиям, готовит материал для проверки и выделяет случаи, где нужен человек. Повторяющиеся жалобы могут стать задачами на качество, упаковку или описание товара.

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

«Подготовь черновики для новых отзывов по этим товарам. Жалобы на качество и безопасность вынеси отдельно. Не обещай компенсацию без согласования».

Как начать

  1. Проверьте наличие данных отзывов и права operations.read; для сохранения нужны operations.plan.
  2. Вызовите automations.reviews.catalog и выберите native; проверьте текущую схему подготовки.
  3. Прочитайте правила общения и задачу магазина из памяти, согласуйте товары, оценки, исключения и эскалации.
  4. Подготовьте config через automations.reviews.prepare, сохраните его и выполните ограниченный предварительный запуск.

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

Набор review_cases: текст для проверки, замеченные риски, отдельные состояния ответа, проблемы и жалобы, ссылки на основания и рекомендуемый следующий шаг.

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

Нативный блок работает только с черновиками, публикация и отправка жалоб не включены. Любой ответ требует human review, в том числе положительный. Внешние сервисы, перечисленные в каталоге отзывов, не считаются подключёнными к X-MP.

Устройство блока и жизненный цикл случая

СлойНазначение
Данные отзываID, товар, оценка, текст, достоинства/недостатки и доступные признаки источника.
Правила магазинаТон, ограничения, исключения, основания эскалации и ссылки на задачу памяти.
ПодготовкаПроверка параметров и сборка конфигурации; без сохранения и без вызова модели.
РасчётОтбор и создание review_case в observe/shadow.
Проверка человекомПроверка текста, фактов, рисков и следующего действия.
Память задачиОтветственный, срок, решение и подтверждённый результат сохраняются отдельно от снимка расчёта.

Один случай имеет три независимых направления: reply — работа над ответом, problem — проблема покупателя, complaint — подготовка или разбор жалобы. Готовый текст не означает, что проблема решена. Повторный запуск может снова показать незакрытый случай: агент продолжает прежнюю задачу, а не создаёт дубликат. Автоматический синхронизатор всех случаев с памятью в этом выпуске отсутствует.

Какие поля отзыва используются

ДанныеКак используются
ID отзыва и product IDСвязывают результат с конкретным сообщением и выбранным товаром.
ОценкаФильтр rating_min–rating_max от 1 до 5.
Текст, pros, consСобираются в адаптированный текст; непустые части соединяются переводами строки.
Признаки фото/видеоНеизвестное has_media=null не трактуется как отсутствие вложений.
Хеш текстаПроверяет, что черновик относится к той версии сообщения, по которой был подготовлен.
Источник и ссылки на доказательстваПозволяют проверить происхождение. Ссылка сама по себе не доказывает истинность ответа.

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

Параметры подготовки правил

ПолеСмысл и ограничения
config_idИмя подготовленной конфигурации.
service_idnative — реализованный блок; внешний сервис может вернуть service_not_integrated.
generationtemplate или agent-draft.
memory_bindinginstructions_ref и task_ref, явно прочитанные агентом в памяти. Компилятор проверяет форму ссылки, а не содержимое памяти.
product_ids1–20 артикулов, строки цифр.
rating_min / rating_maxОценки 1–5; нижняя граница не выше верхней.
excluded_termsДо 30 исключаемых выражений; пустой список нужно согласовать, а не принять за правило любого магазина.
escalation_termsДо 30 дополнительных выражений для передачи человеку.
max_items1–20 случаев за расчёт.
response_text2–1000 символов; согласованный текст шаблона.
model_refИмя источника агентского черновика. Не переключает модель и не подключает платный API.
drafts1–20 точных черновиков с ID отзыва, source_text_sha256, response_text и непустыми evidence_refs.

Два способа подготовки ответа

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

agent-draft принимает уже подготовленные агентом тексты. Агент сначала читает точный отзыв и факты, использует доступную ему модель, затем передаёт черновик вместе с model_ref и основаниями. Метод prepare не вызывает эту модель за него.

source_text_sha256 считается по UTF-8 адаптированного текста: непустые text/question, pros, cons в этом порядке через символ новой строки. Если источник изменился или неполон, прежний agent draft не прикладывается. Наличие риска не превращает черновик в готовый ответ: человек всё равно проверяет его.

Проверьте факты о товаре, обещания возврата или компенсации, тон, персональные данные и соответствие правилам площадки. Ни одна оценка и ни одно совпадение словаря не разрешают автоматическую отправку.

Пошаговый пример: подготовка и чтение

automations.reviews.catalog
{}
automations.reviews.prepare
{
  "config_id": "guide-reviews-01",
  "service_id": "native",
  "generation": "template",
  "memory_binding": {
    "instructions_ref": "memory-revision://example/1",
    "task_ref": "task-revision://example/1"
  },
  "product_ids": [
    "123456"
  ],
  "rating_min": 4,
  "rating_max": 5,
  "excluded_terms": [],
  "escalation_terms": [
    "аллергия"
  ],
  "max_items": 10,
  "response_text": "Спасибо за обратную связь."
}

Это учебный запрос: ссылки и артикул вымышлены, текст и исключения не являются правилами вашего магазина. В реальной задаче замените их на согласованные значения. prepare возвращает несохранённый config.

  1. Проверьте config и замечания. Если внешний service_id не интегрирован, ожидайте blocked и config=null; не подменяйте провайдера без решения владельца.
  2. Передайте возвращённый config в automations.config.apply с domain=responder и новым стабильным idempotency_key.
  3. Перечитайте config.get, затем создайте один automations.jobs.create.
  4. Возьмите job_id из ответа и прочитайте automations.jobs.get. Полные result.review_cases находятся в деталях задачи; списки истории могут содержать только количество и указатель на detail tool.
  5. Проверьте каждый случай, сохраните решение и дальнейшую работу в существующей задаче памяти.
automations.jobs.create
{
  "domain": "responder",
  "idempotency_key": "guide-reviews-run-001"
}

Что читать в результате

Поле / признакИнтерпретация
action=review_caseПодготовлен случай для рассмотрения, не команда send_reply.
human_review_required=trueПроверка человеком обязательна.
reply / problem / complaintНезависимые состояния работы с ответом, проблемой и жалобой.
next_actionПредложенный следующий шаг; его выполнение не подразумевается.
evidence_refsОснования и происхождение материала.
marketplace_write=falseРасчёт не публиковал ответ на WB.

Жалоба требует конкретного фрагмента, основания действующих правил и доказательств. Модерация, удаление и исключение из рейтинга — разные результаты. Сервис не обещает удалить отзыв и не выдумывает номера правил.

Ошибки настройки и границы интеграций

СитуацияЧто делать
service_not_integratedИспользовать native либо отдельно проектировать подтверждённую интеграцию; оплата внешнего сервиса её не создаёт.
Изменился текст / неверный hashПеречитать отзыв и подготовить новую версию черновика.
Неполный источникПроверить доступность текста и его частей; не дописывать от имени покупателя.
Неизвестное поле, auto_send=true или execute modeИсправить настройку по prepare_schema; публикация не включается обходом компилятора.
В истории нет полного текстаОткрыть jobs.get по полученному job_id.
Случай появился сноваНайти и продолжить существующую задачу в памяти.

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

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

automations.reviews.catalog

Получить сервисы отзывов, ограничения и prepare_schema.

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

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

automations.reviews.prepare

Проверить параметры и собрать несохранённый draft-only config; модель не вызывается.

ПараметрТипОбязателенНазначение и ограничения
config_idстрокадаИдентификатор версии конфигурации. шаблон: "^[A-Za-z0-9][A-Za-z0-9_.-]{1,127}$"
service_idстрокадаПровайдер блока отзывов; native реализован, внешние требуют интеграции. не менее символов: 1; не более символов: 64
generationстрокадаШаблон либо подготовленный агентом черновик. варианты: ["template", "agent-draft"]
model_refстроканетПроисхождение агентского черновика, не выбор/вызов модели. шаблон: "^[A-Za-z0-9][A-Za-z0-9_.:-]{1,127}$"
memory_bindingобъектдаСсылки на явно прочитанные правила и задачу магазина.
memory_binding.instructions_refстрокадаСсылка на версию правил памяти. шаблон: "^(?:memory|task|artifact|task-revision|memory-revision)://[A-Za-z0-9][A-Za-z0-9_./:@-]{1,255}$"
memory_binding.task_refстрокадаСсылка на версию бизнес-задачи. шаблон: "^(?:memory|task|artifact|task-revision|memory-revision)://[A-Za-z0-9][A-Za-z0-9_./:@-]{1,255}$"
product_idsмассивдаСписок артикулов WB в пределах выбранного магазина. не менее элементов: 1; не более элементов: 20
rating_minцелоедаНижняя граница оценки отзыва. минимум: 1; максимум: 5
rating_maxцелоедаВерхняя граница оценки отзыва. минимум: 1; максимум: 5
excluded_termsмассивдаСогласованные исключаемые выражения. не менее элементов: 0; не более элементов: 30
escalation_termsмассивдаДополнительные темы передачи человеку. не менее элементов: 0; не более элементов: 30
response_textстроканетТекст шаблона или конкретного черновика. не менее символов: 2; не более символов: 1000
draftsмассивнетМассив точных черновиков по ID и хешу источника. не менее элементов: 1; не более элементов: 20
drafts[].review_idстрокадаID конкретного отзыва из прочитанных данных. шаблон: "^[A-Za-z0-9][A-Za-z0-9_.:-]{1,127}$"
drafts[].source_text_sha256строкадаSHA-256 UTF-8 адаптированного текста отзыва. шаблон: "^[a-f0-9]{64}$"
drafts[].response_textстрокадаТекст шаблона или конкретного черновика. не менее символов: 2; не более символов: 1000
drafts[].evidence_refsмассивдаНепустые ссылки на основания и происхождение. не менее элементов: 1; не более элементов: 10
max_itemsцелоедаМаксимальное число случаев за расчёт. минимум: 1; максимум: 20
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "config_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_.-]{1,127}$"
    },
    "service_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "generation": {
      "type": "string",
      "enum": [
        "template",
        "agent-draft"
      ]
    },
    "model_ref": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{1,127}$"
    },
    "memory_binding": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "instructions_ref": {
          "type": "string",
          "pattern": "^(?:memory|task|artifact|task-revision|memory-revision)://[A-Za-z0-9][A-Za-z0-9_./:@-]{1,255}$"
        },
        "task_ref": {
          "type": "string",
          "pattern": "^(?:memory|task|artifact|task-revision|memory-revision)://[A-Za-z0-9][A-Za-z0-9_./:@-]{1,255}$"
        }
      },
      "required": [
        "instructions_ref",
        "task_ref"
      ]
    },
    "product_ids": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 256,
        "pattern": "^[0-9]{1,20}$"
      },
      "minItems": 1,
      "maxItems": 20,
      "uniqueItems": true
    },
    "rating_min": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "rating_max": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "excluded_terms": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 256
      },
      "minItems": 0,
      "maxItems": 30,
      "uniqueItems": true
    },
    "escalation_terms": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 256
      },
      "minItems": 0,
      "maxItems": 30,
      "uniqueItems": true
    },
    "response_text": {
      "type": "string",
      "minLength": 2,
      "maxLength": 1000
    },
    "drafts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "review_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{1,127}$"
          },
          "source_text_sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "response_text": {
            "type": "string",
            "minLength": 2,
            "maxLength": 1000
          },
          "evidence_refs": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "pattern": "^(?:memory|task|artifact|task-revision|memory-revision)://[A-Za-z0-9][A-Za-z0-9_./:@-]{1,255}$"
            },
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true
          }
        },
        "required": [
          "review_id",
          "source_text_sha256",
          "response_text",
          "evidence_refs"
        ]
      },
      "maxItems": 20,
      "minItems": 1
    },
    "max_items": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "config_id",
    "service_id",
    "generation",
    "memory_binding",
    "product_ids",
    "rating_min",
    "rating_max",
    "excluded_terms",
    "escalation_terms",
    "max_items"
  ]
}

automations.credentials.requirements

Узнать права X-MP и категории WB-ключей для домена без значений секретов.

ПараметрТипОбязателенНазначение и ограничения
domainзначениедаРабочий домен: цены, реклама, контент или ответы. варианты: ["advertising", "advertising-budget", "card-experiment", "catalog", "custom", "inventory-fbs", "pricing", "reputation", "supplies"]
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "enum": [
        "advertising",
        "advertising-budget",
        "card-experiment",
        "catalog",
        "custom",
        "inventory-fbs",
        "pricing",
        "reputation",
        "supplies"
      ]
    }
  }
}

automations.status

Прочитать состояние связанных рабочих доменов магазина.

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

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

automations.config.get

Прочитать конфигурацию и её контрольную сумму перед обновлением.

ПараметрТипОбязателенНазначение и ограничения
domainзначениедаРабочий домен: цены, реклама, контент или ответы. варианты: ["advertising", "pricing", "catalog", "responder"]
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "enum": [
        "advertising",
        "pricing",
        "catalog",
        "responder"
      ]
    }
  }
}

automations.config.apply

Проверить и сохранить полный observe/shadow config; включение биддера запускает расчёты, а не WB execution.

ПараметрТипОбязателенНазначение и ограничения
domainзначениедаРабочий домен: цены, реклама, контент или ответы. варианты: ["advertising", "pricing", "catalog", "responder"]
configобъектдаПолная конфигурация по руководству соответствующего домена, без секретов и caller scope.
idempotency_keyстрокадаСтабильный ключ одной логической операции; при повторе сохраняйте его. шаблон: "^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$"
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "domain",
    "config",
    "idempotency_key"
  ],
  "properties": {
    "domain": {
      "enum": [
        "advertising",
        "pricing",
        "catalog",
        "responder"
      ]
    },
    "config": {
      "type": "object",
      "minProperties": 1
    },
    "idempotency_key": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$"
    }
  }
}

automations.shadow.run

Выполнить один предварительный расчёт и сохранить отчёт без изменений WB.

ПараметрТипОбязателенНазначение и ограничения
domainзначениедаРабочий домен: цены, реклама, контент или ответы. варианты: ["advertising", "pricing", "catalog", "responder"]
idempotency_keyстрокадаСтабильный ключ одной логической операции; при повторе сохраняйте его. шаблон: "^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$"
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "domain",
    "idempotency_key"
  ],
  "properties": {
    "domain": {
      "enum": [
        "advertising",
        "pricing",
        "catalog",
        "responder"
      ]
    },
    "idempotency_key": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$"
    }
  }
}

automations.jobs.create

Поставить один расчёт в очередь и получить job_id.

ПараметрТипОбязателенНазначение и ограничения
domainзначениедаРабочий домен: цены, реклама, контент или ответы. варианты: ["advertising", "pricing", "catalog", "responder"]
idempotency_keyстрокадаСтабильный ключ одной логической операции; при повторе сохраняйте его. шаблон: "^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$"
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "domain",
    "idempotency_key"
  ],
  "properties": {
    "domain": {
      "enum": [
        "advertising",
        "pricing",
        "catalog",
        "responder"
      ]
    },
    "idempotency_key": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$"
    }
  }
}

automations.jobs.get

Прочитать состояние и полный результат задачи очереди, включая review_cases.

ПараметрТипОбязателенНазначение и ограничения
job_idстрокадаИдентификатор задачи очереди из jobs.create/list. формат: "uuid"
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "job_id"
  ],
  "properties": {
    "job_id": {
      "type": "string",
      "format": "uuid"
    }
  }
}

automations.jobs.list

Прочитать ограниченный список задач очереди магазина.

ПараметрТипОбязателенНазначение и ограничения
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 100; по умолчанию: 20
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    }
  }
}

automations.runs.list

Прочитать ограниченную историю запусков домена.

ПараметрТипОбязателенНазначение и ограничения
domainзначениедаРабочий домен: цены, реклама, контент или ответы. варианты: ["advertising", "pricing", "catalog", "responder"]
limitцелоенетЧисло строк/событий за страницу, а не полнота всего источника. минимум: 1; максимум: 100
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "enum": [
        "advertising",
        "pricing",
        "catalog",
        "responder"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  }
}

automations.emergency-stop

Установить аварийную остановку контроллеров X-MP; не обещает остановить кампании непосредственно в WB.

ПараметрТипОбязателенНазначение и ограничения
reasonстрокадаПричина остановки или изменения состояния. не менее символов: 1; не более символов: 500
Точная JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "reason"
  ],
  "properties": {
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  }
}

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

Ответы на отзывы и вопросы

Сокращать ручную работу с отзывами и вопросами

Черновики. Публикация ответов и полный автоответчик пока не заявляются как готовая функция.

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

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