В этом руководстве описывается процесс миграции с Content API для интернет-магазина на Merchant API для управления бизнес-данными.
Вы можете использовать это руководство для миграции существующей реализации Content API для покупок на Merchant API . Для получения дополнительной информации о Merchant API и его под-API см. раздел «Проектирование Merchant API» .
Начать
Для начала использования Merchant API измените URL-адреса запросов на следующий формат:
https://merchantapi.googleapis.com/{SUB_API}/{VERSION}/{RESOURCE_NAME}:{METHOD}…
Для использования Merchant API необходимо связать свою учетную запись Merchant Center и свой проект Google Cloud, используя метод регистрации разработчика, следующим образом:
POST https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/developerRegistration:registerGcp
{
developer_email:"example-email@example.com"
}
Для получения более подробной информации см. краткое руководство и справочник по API для продавцов.
Улучшения в Content API для покупок.
API для продавцов позволяет автоматизировать и оптимизировать рабочие процессы в Merchant Center и предлагает расширенные возможности по сравнению с Content API для покупок.
Основные варианты использования:
- Автоматизированное управление учетными записями
- Автоматизированное управление продуктами
- Автоматизированное управление запасами
- Пользовательские отчеты
Основные области для улучшения:
- Дополнительные API с новыми функциями, в том числе:
- Система отслеживания заказов помогает компаниям отслеживать историю заказов, предоставляя клиентам точные и достоверные оценки стоимости доставки. Кроме того, она позволяет улучшить позиции в каталоге товаров, предлагая бесплатную и быструю доставку .
- Функция разрешения проблем предоставляет доступ к диагностической информации и действиям службы поддержки аналогично тому, как это доступно в пользовательском интерфейсе Merchant Center.
- Product Studio (ALPHA) использует genAI для генерации и оптимизации заголовков и описаний продуктов. Для запроса доступа необходимо подписать эту форму.
- Новые ресурсы в подразделе API «Учетные записи» .
-
OmnichannelSettingsуправляет конфигурацией учетной записи для многоканального показа рекламы, например, бесплатных местных объявлений (FLL) и объявлений о наличии товаров в местных магазинах (LIA). -
LfpProvidersподключается к партнерам Local Feeds Partnership (LFP) для получения данных об инвентаризации. -
GbpAccountsподключается к учетной записи Google Business Profile для получения данных о локальных магазинах. -
OnlineReturnPolicyпредоставляет возможность создавать, удалять и обновлять ваши онлайн-политики возврата.
- Новые методы для работы с данными об инвентаре, товарах и другими API, в том числе:
- Новый метод в подAPI Products .
-
ProductsUpdateпозволяет обновлять отдельные товары без необходимости заполнять все поля, требуемые дляProductInput.
- Возможность создавать не только основные источники данных, но и несколько источников данных одновременно, например:
- Вводит возможность загрузки отзывов о товарах и отзывов о продавцах.
- С помощью Merchant API вы можете включить уведомления об изменениях в данных учетной записи.
Что изменилось:
- Максимальный
pageSizeувеличен с 250 до 1000 строк на один вызов API. - Исправлена задержка, существовавшая при добавлении товаров, проведении рекламных акций, написании отзывов о товарах и отзывах продавцов после создания
DataSources.
Что нас ждёт:
- Введено обновленное определение для
clickPotentialRankв таблицеproductViewв рамках под-API «Отчетность» : * Ранжирование товаров на основеclickPotentialнормализовано до значений от 1 до 1000.- Товары с низким
clickPotentialRankпо-прежнему обладают наибольшим потенциалом кликов среди товаров продавца, соответствующих условиям поискового запроса. Это изменение не является критическим и может быть введено в действие 1 июля 2025 года.
- Товары с низким
- Параметр
AccountIdAliasв ресурсеAccountRelationshipпозволяет лучше управлять сложными структурами учетных записей. Например, торговые площадки используют определяемый пользователем псевдоним вместо внутреннего идентификатора продавца, такого как идентификатор учетной записи.
поддержка gRPC
API для продавцов поддерживает gRPC и REST. Вы можете одновременно использовать gRPC для API продавцов и REST для API контента в разделе «Покупки».
Для работы клиентских библиотек Merchant API требуется gRPC.
Для получения более подробной информации см. обзор gRPC .
Совместимость
В этом руководстве описаны общие изменения, которые применяются ко всему API для продавцов.
API для продавцов разработан для работы совместно с существующим API контента для функций покупок.
Например, вы можете использовать API для управления товарными запасами продавцов совместно с существующей реализацией API для products для покупок версии 2.1. Вы можете использовать API для контента для покупок, чтобы загрузить новый локальный товар (который вы продаете в местном магазине), а затем использовать ресурс LocalInventory API для управления информацией о товаре в магазине.
Улучшения в отношении Content API
API для продавцов превосходит Content API в следующих областях:
- Дополнительные API с новыми функциями для вашей уникальной интеграции.
- Новые методы для работы с данными об инвентаре, товарах и другими API.
- Возможность создавать не только основные источники данных, но и несколько источников данных одновременно, например:
- Вводит возможность загрузки отзывов о товарах и отзывов о продавцах.
- С помощью Merchant API вы можете включить уведомления об изменениях в данных учетной записи.
- Вводит возможность фильтрации для ресурса «Учетные записи».
Рассмотрим эти изменения более подробно.
Версионирование и под-API
Merchant API вводит концепции версионирования и под-API . Его модульная структура повышает удобство использования, позволяя сосредоточиться на необходимых под-API и упрощая будущую миграцию на более новые версии. Версионирование будет применяться к вашим URL-адресам запросов. Стратегия аналогична работе Google Ads API .
Более надёжные запросы
Для запросов к API продавца по URL-адресу требуется больше параметров. К ним относятся ресурс, версия, имя (идентификаторы) и метод (нестандартные методы). Подробнее об этом см. в разделе «Идентификаторы учетных записей и продуктов и примеры» .
Принципы AIP для идентификаторов
В то время как Content API для покупок использует идентификаторы для идентификации ресурсов (например, merchantId , productId ), Merchant API использует name идентификатор для соответствия AIP (см. принципы улучшения API ).
Идентификатор {name} включает идентификатор ресурса и его родительский элемент (или, возможно, несколько родительских элементов), так что {name} равен accounts/{account}/products/{product}
Все вызовы чтения и записи возвращают поле name в качестве идентификатора ресурса.
{name} также включает идентификаторы коллекций accounts/ и products/ .
В Merchant API используется {account} для обозначения идентификатора Merchant Center и {product} для обозначения идентификаторов товаров.
Например, реализуйте метод getName() для получения name из ресурса и сохраняйте результат в переменной, вместо того чтобы самостоятельно формировать name из идентификаторов продавца и ресурса.
Вот пример того, как использовать поле name в ваших звонках:
POST https://merchantapi.googleapis.com/inventories/v1/{PARENT}/regionalInventories:insert
В таблице показано, как изменяется запрос Content API for Shopping products.get :
| API контента для покупок | API для продавцов |
|---|---|
GET https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/products/{productId} | GET https://merchantapi.googleapis.com/products/v1/{name} |
Для получения более подробной информации ознакомьтесь с разделом «Изменения идентификатора» .
В качестве еще одного примера, получение товара с идентификатором en~US~1234 из Merchant Center с ID 4321 с помощью Merchant API будет выглядеть следующим образом:
GET
https://merchantapi.googleapis.com/products/v1/accounts/4321/products/online~en~US~1234
где {name} равно accounts/4321/products/en~US~1234 . Это новое поле name возвращается в качестве идентификатора ресурса для всех вызовов чтения и записи в Merchant API.
В Content API для покупок двоеточие (:) обозначает разделитель в названии товара, тогда как в Merchant API эту функцию выполняет тильда (~). Идентификатор Merchant API не содержит части, channel .
Например, идентификатор товара в Content API для покупок:
channel:contentLanguage:feedLabel:offerId .
В API для продавцов это выглядит следующим образом:
contentLanguage~feedLabel~offerId .
Родительские поля для дочерних ресурсов
В Merchant API все дочерние ресурсы имеют поле parent . Вы можете использовать поле parent для указания {name} ресурса, в который нужно вставить дочерний ресурс, вместо передачи всего родительского ресурса. Вы также можете использовать поле parent со list
Например, чтобы вывести список локальных запасов для заданного товара, укажите name товара в поле parent " метода list . В этом случае заданный product является parent для возвращаемых ресурсов LocalInventory .
GET
https://merchantapi.googleapis.com/inventories/v1/{parent}/localInventories
Для получения всех локальных данных о наличии товара en~US~1234' и учетной записи 4321 запрос будет выглядеть следующим образом:
GET
https://merchantapi.googleapis.com/inventories/v1/accounts/4321/products/online~en~US~1234/localInventories</code>
Родительским ресурсом является accounts/{account}/products/{product} . Обратите внимание, что в данном случае ресурс localInventories имеет двух родителей, включенных в идентификатор имени ( accounts/ и products/ ), поскольку account является родительским ресурсом продукта.
Общие перечисления
Использование общих перечислений обеспечивает большую согласованность.
Поле Destination.DestinationEnum определяет поверхности, на которых будут отображаться ваши ресурсы. DestinationEnum перечисляет все доступные значения для таргетинга по целевым адресам и используется во всех под-API, например, для атрибутов рекламных акций .
Поле ReportingContext.ReportingContextEnum представляет контекст, к которому относятся ваши проблемы с учетной записью и продуктом. Это поле используется во всех методах формирования отчетов (например, для IssueSeverityPerReportingContext ).
Обратная совместимость
При начале использования Merchant API существующая интеграция Content API for Shopping продолжит работать без перебоев. Для получения дополнительной информации см. раздел «Совместимость» .
После переноса ваших дочерних API в Merchant API мы рекомендуем использовать для них только Merchant API.
Доступность удаленного вызова процедур (gRPC)
gRPC — это новый рекомендуемый способ интеграции с API продавцов.
К его преимуществам относятся следующие:
- Языко-независимый
- Основан на протоколе буферизации.
Использует HTTP/2 для предоставления высокопроизводительных масштабируемых решений ( справочник по RPC ).
Если вы используете наши клиентские библиотеки или примеры кода , gRPC является механизмом передачи данных по умолчанию.
Для получения дополнительной информации о gRPC см. следующие материалы:
Пользовательская пакетная обработка становится встроенной пакетной обработкой.
Пакетная обработка работает эффективнее при использовании асинхронных вызовов. Узнайте больше об использовании параллельных вызовов для пакетной обработки в Merchant API и о том, как рефакторизовать код для параллельных запросов .
Для ускорения миграции мы рекомендуем использовать клиентские библиотеки .
API для продавцов не поддерживает метод customBatch представленный в Content API для покупок. Вместо этого см. раздел «Отправка нескольких запросов одновременно или выполнение вызовов асинхронно».
Следующий пример на Java демонстрирует, как вставить поле ввода для товара.
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.shopping.merchant.products.v1.Availability;
import com.google.shopping.merchant.products.v1.Condition;
import com.google.shopping.merchant.products.v1.InsertProductInputRequest;
import com.google.shopping.merchant.products.v1.ProductAttributes;
import com.google.shopping.merchant.products.v1.ProductInput;
import com.google.shopping.merchant.products.v1.ProductInputsServiceClient;
import com.google.shopping.merchant.products.v1.ProductInputsServiceSettings;
import com.google.shopping.merchant.products.v1.Shipping;
import com.google.shopping.type.Price;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to insert a product input */
public class InsertProductInputAsyncSample {
private static String getParent(String accountId) {
return String.format("accounts/%s", accountId);
}
private static String generateRandomString() {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder sb = new StringBuilder(8);
for (int i = 0; i < 8; i++) {
sb.append(characters.charAt(random.nextInt(characters.length())));
}
return sb.toString();
}
private static ProductInput createRandomProduct() {
Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();
Shipping shipping =
Shipping.newBuilder().setPrice(price).setCountry("GB").setService("1st class post").build();
Shipping shipping2 =
Shipping.newBuilder().setPrice(price).setCountry("FR").setService("1st class post").build();
ProductAttributes attributes =
ProductAttributes.newBuilder()
.setTitle("A Tale of Two Cities")
.setDescription("A classic novel about the French Revolution")
.setLink("https://exampleWebsite.com/tale-of-two-cities.html")
.setImageLink("https://exampleWebsite.com/tale-of-two-cities.jpg")
.setAvailability(Availability.IN_STOCK)
.setCondition(Condition.NEW)
.setGoogleProductCategory("Media > Books")
.addGtins("9780007350896")
.addShipping(shipping)
.addShipping(shipping2)
.build();
return ProductInput.newBuilder()
.setContentLanguage("en")
.setFeedLabel("CH")
.setOfferId(generateRandomString())
.setProductAttributes(attributes)
.build();
}
public static void asyncInsertProductInput(Config config, String dataSource) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductInputsServiceSettings productInputsServiceSettings =
ProductInputsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates parent to identify where to insert the product.
String parent = getParent(config.getAccountId().toString());
// Calls the API and catches and prints any network failures/errors.
try (ProductInputsServiceClient productInputsServiceClient =
ProductInputsServiceClient.create(productInputsServiceSettings)) {
// Creates five insert product input requests with random product IDs.
List<InsertProductInputRequest> requests = new ArrayList<>(5);
for (int i = 0; i < 5; i++) {
InsertProductInputRequest request =
InsertProductInputRequest.newBuilder()
.setParent(parent)
// You can only insert products into datasource types of Input "API", and of Type
// "Primary" or "Supplemental."
// This field takes the `name` field of the datasource.
.setDataSource(dataSource)
// If this product is already owned by another datasource, when re-inserting, the
// new datasource will take ownership of the product.
.setProductInput(createRandomProduct())
.build();
requests.add(request);
}
System.out.println("Sending insert product input requests");
List<ApiFuture<ProductInput>> futures =
requests.stream()
.map(
request ->
productInputsServiceClient.insertProductInputCallable().futureCall(request))
.collect(Collectors.toList());
// Creates callback to handle the responses when all are ready.
ApiFuture<List<ProductInput>> responses = ApiFutures.allAsList(futures);
ApiFutures.addCallback(
responses,
new ApiFutureCallback<List<ProductInput>>() {
@Override
public void onSuccess(List<ProductInput> results) {
System.out.println("Inserted products below");
System.out.println(results);
}
@Override
public void onFailure(Throwable throwable) {
System.out.println(throwable);
}
},
MoreExecutors.directExecutor());
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
// Identifies the data source that will own the product input.
String dataSource = "accounts/" + config.getAccountId() + "/dataSources/{datasourceId}";
asyncInsertProductInput(config, dataSource);
}
}
Если вы используете customBatch в Content API и вам необходима эта функция для Merchant API, сообщите нам, почему, в своем отзыве .
Эксклюзивные функции
В будущем новые функции будут доступны только в Merchant API. (Будут и некоторые исключения, например, спецификация годового фида на 2025 год .)
В число функций, доступных исключительно через Merchant API, входят:
- API для отзывов. Используйте отзывы для внедрения и управления рейтингами ваших товаров и магазина. Для получения дополнительной информации см. разделы «Отзывы продавцов» и «Отзывы о товарах» .
- Уведомления : Подпишитесь на получение push-уведомлений об изменениях в данных о товарах в вашей учетной записи.
Цена
Вот что изменилось для Price в пакете Merchant Common:
| API контента для покупок | API для продавцов | |
|---|---|---|
| Поле «Сумма» | value:string | amountMicros:int64 |
| Поле «Валюта» | currency:string | currencyCode:string |
Сумма Price теперь указывается в микросах, где 1 миллион микрос эквивалентен стандартной единице вашей валюты.
В Content API для покупок Price представляла собой десятичное число в виде строки.
Название поля amount изменилось с value на amountMicros
Название поля «Валюта» изменилось с currency на currencyCode . Формат по-прежнему соответствует стандарту ISO 4217 .
Последние обновления и объявления
Для получения более подробной информации об обновлениях см. примечания к выпуску для каждого под-API. Для получения более регулярных сводных обновлений API для продавцов ознакомьтесь с нашими последними обновлениями .
Для получения более подробной информации и более детального ознакомления с Merchant API, посетите наш обзор для разработчиков и общее руководство по миграции.
Подробную информацию о Merchant API и его под-API см. в разделе «Дизайн Merchant API» .