این راهنما فرآیند انتقال از Content API for Shopping به 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 API (بتا) ببینید.
بهبود در Content API برای خرید
Merchant API به شما امکان میدهد گردشهای کاری را در Merchant Center خودکار و ساده کنید و قابلیتهای پیشرفتهتری را در Content API برای خرید ارائه میدهد.
موارد استفاده کلیدی:
- مدیریت خودکار حساب
- مدیریت خودکار محصول
- مدیریت خودکار موجودی
- گزارش سفارشی
زمینه های کلیدی بهبود:
- API های فرعی با ویژگی های جدید، از جمله:
- ردیابی سفارش از تاریخچه ردیابی سفارشات تجاری پشتیبانی می کند تا تخمین های دقیق و دقیق حمل و نقل را به مشتریان ارائه دهد. سیگنال های آن همچنین فهرست های پیشرفته را با ارسال رایگان و سریع فعال می کند.
- حل مشکل دسترسی به محتوای تشخیصی و اقدامات پشتیبانی را به همان روشی که در Merchant Center UI موجود است، فراهم میکند.
- Product Studio (ALPHA) از genAI برای تولید و بهینه سازی عناوین و توضیحات محصول استفاده می کند. برای درخواست دسترسی باید این فرم را امضا کنید.
- منابع جدید در API فرعی حسابها .
-
OmnichannelSettings
پیکربندی حساب را برای سرویس دهی چند کاناله، مانند فهرستهای محلی رایگان (FLL) و تبلیغات موجودی محلی (LIA) مدیریت میکند. -
LfpProviders
برای داده های موجودی به شرکای Local Feeds Partnership (LFP) متصل می شود. -
GbpAccounts
برای دادههای فروشگاه محلی به حساب Google Business Profile متصل میشود. -
OnlineReturnPolicy
امکان ایجاد، حذف و به روز رسانی خط مشی های آنلاین شما را فراهم می کند.
- روشهای جدید برای موجودی، دادههای محصولات و سایر APIها، از جمله:
- روشی جدید در میانای برنامهسازی کاربردی فرعی محصولات .
-
ProductsUpdate
به شما امکان می دهد تا محصولات جداگانه را بدون نیاز به ارائه تمام فیلدهای مورد نیاز برایProductInput
به روز کنید.
- توانایی ایجاد نه تنها منابع داده اولیه، بلکه چندین منبع داده مانند:
- بارگذاری نظرات محصول و نظرات بازرگان را معرفی می کند
- با Merchant API، میتوانید اعلانها را برای تغییرات دادههای حساب فعال کنید
چه چیزی تغییر کرده است:
- حداکثر
pageSize
از 250 به 1000 ردیف در هر تماس API افزایش یافت. - تاخیری که برای درج محصول، تبلیغات، بررسی محصول و بازبینی تاجر پس از ایجاد
DataSources
رفع شد.
چه چیزی در راه است:
- منسوخ شدن و حذف فیلد کانال در آینده برای
DataSources
و محصولات. - راه اندازی یک تعریف به روز شده برای
clickPotentialRank
در جدولproductView
در زیر API گزارش : * رتبه بندی محصولات بر اساسclickPotential
به مقادیر بین 1 تا 1000 عادی می شود.- محصولات با
clickPotentialRank
پایین همچنان بیشترین پتانسیل کلیک را در میان محصولات تاجری که شرایط درخواست جستجو را برآورده میکنند، دارند. این یک تغییر غیرقابل شکست است که ممکن است در 1 ژوئیه 2025 راه اندازی شود.
- محصولات با
-
AccountIdAlias
در منبعAccountRelationship
، مدیریت بهتر ساختارهای پیچیده حساب را ممکن می سازد. به عنوان مثال، بازارها از یک نام مستعار تعریف شده توسط کاربر به جای شناسه داخلی تاجر، مانند شناسه حساب، استفاده می کنند.
پشتیبانی از gRPC
Merchant API از gRPC و REST پشتیبانی می کند. میتوانید همزمان از gRPC برای Merchant API و REST برای Content API برای خرید استفاده کنید.
کتابخانه های مشتری API Merchant به gRPC نیاز دارند.
برای اطلاعات بیشتر، به نمای کلی gRPC مراجعه کنید.
سازگاری
این راهنما تغییرات کلی را که برای کل Merchant API اعمال می شود، توضیح می دهد.
Merchant API طوری طراحی شده است که در کنار Content API موجود برای ویژگیهای خرید کار کند.
برای مثال، میتوانید از Merchant Inventories API در کنار Content API موجود برای اجرای products
خرید استفاده کنید. ممکن است از Content API برای خرید برای آپلود یک محصول محلی جدید (که در یک فروشگاه محلی می فروشید) استفاده کنید، سپس از منبع Merchant Inventories API LocalInventory
برای مدیریت اطلاعات موجود در فروشگاه برای آن محصول استفاده کنید.
درخواست های دسته ای
Merchant API از روش customBatch
که در Content API برای خرید ارائه شده است پشتیبانی نمی کند. درعوض، به ارسال چندین درخواست به صورت همزمان مراجعه کنید یا تماس های خود را به صورت ناهمزمان اجرا کنید.
نمونه زیر نحوه درج ورودی های محصول را به صورت ناهمزمان نشان می دهد.
جاوا
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.v1beta.Attributes;
import com.google.shopping.merchant.products.v1beta.InsertProductInputRequest;
import com.google.shopping.merchant.products.v1beta.ProductInput;
import com.google.shopping.merchant.products.v1beta.ProductInputsServiceClient;
import com.google.shopping.merchant.products.v1beta.ProductInputsServiceSettings;
import com.google.shopping.merchant.products.v1beta.Shipping;
import com.google.shopping.type.Channel.ChannelEnum;
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();
Attributes attributes =
Attributes.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("in stock")
.setCondition("new")
.setGoogleProductCategory("Media > Books")
.addGtin("9780007350896")
.addShipping(shipping)
.addShipping(shipping2)
.build();
return ProductInput.newBuilder()
.setChannel(ChannelEnum.ONLINE)
.setContentLanguage("en")
.setFeedLabel("CH")
.setOfferId(generateRandomString())
.setAttributes(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 نیاز دارید، دلیل آن را در بازخورد خود به ما بگویید.
شناسه ها
برای همسویی با اصول بهبود API Google، برخی از تغییرات را در شناسههای منابع Merchant API ایجاد کردهایم.
استفاده از IDENTIFIER
نشان می دهد که یک فیلد در پیام منبع برای شناسایی منبع استفاده می شود. به فیلد نام وصل شده است، فیلدهایی را که نشان دهنده نام منابع هستند ، ببینید.
مقدار IDENTIFIER
نشان میدهد که فیلد بهعنوان ورودی (یعنی OUTPUT_ONLY
) در زمینه یک متد ایجاد پذیرفته نمیشود، در حالی که IMMUTABLE
در نظر گرفته میشود و بهعنوان ورودی برای روشهای جهش پذیرفته میشود که منبع را به عنوان نمونه ورودی اولیه میپذیرند: بهروزرسانی استاندارد .
نام جایگزین شناسه می شود
همه منابع Merchant API از فیلد name
به عنوان شناسه منحصر به فرد خود استفاده می کنند.
در اینجا مثالی از نحوه استفاده از فیلد name
در تماس های خود آورده شده است:
GET https://merchantapi.googleapis.com/products/v1beta/accounts/4321/products/online~en~US~1234
جایی که name
برابر است accounts/4321/products/online~en~US~1234
.
این فیلد name
جدید به عنوان شناسه منبع برای همه تماسهای خواندن و نوشتن در Merchant API برگردانده میشود.
به عنوان مثال، یک متد getName()
برای بازیابی name
از یک منبع پیاده سازی کنید و خروجی را به عنوان یک متغیر ذخیره کنید به جای اینکه خودتان name
از شناسه های کسب و کار و منبع بسازید.
تعیین کننده ها
Merchant API از tildes به جای دو نقطه به عنوان جداکننده استفاده می کند.
جدول زیر شناسه محصول را برای Content API for Shopping و Merchant API مقایسه می کند:
Content API برای خرید | Merchant API |
---|---|
channel:contentLanguage:feedLabel:offerId . به عنوان مثال، online:en:US:sku123 | channel~contentLanguage~feedLabel~offerId . به عنوان مثال، online~en~US~sku123 |
فیلدهای والد برای منابع فرزند
در Merchant API، همه منابع فرزند دارای فیلد parent
هستند. می توانید از فیلد parent
برای تعیین name
منبع برای درج فرزند به جای ارسال کل منبع والد استفاده کنید. همچنین میتوانید از فیلد parent
با روشهای list
برای فهرست کردن منابع فرزند آن parent
استفاده کنید.
به عنوان مثال، برای فهرست کردن موجودیهای محلی برای یک محصول معین، name
محصول را در فیلد parent
برای روش list
مشخص کنید. در این حالت، product
داده شده، parent
منابع LocalInventory
بازگشتی است.
GET https://merchantapi.googleapis.com/inventories/v1beta/{parent}/localInventories
برای بازیابی تمام موجودی های محلی برای محصول online~en~US~1234
و حساب 4321
، درخواست به این صورت خواهد بود:
GET https://merchantapi.googleapis.com/inventories/v1beta/accounts/4321/products/online~en~US~1234/localInventories
جایی که والد برابر است با حسابها/{account}/products/{product}. توجه داشته باشید که در این مورد، موجودیهای محلی دارای دو والدین هستند که در شناسه نام (حسابها/و محصولات/) گنجانده شدهاند، زیرا حساب، منبع منبع محصول است.
انواع رایج
در اینجا برخی از انواع رایج مشترک در میان APIهای فرعی Merchant API آورده شده است.
Destination.DestinationEnum
از قسمت Destination.DestinationEnum برای کنترل سطوحی که منابع شما باید نمایش داده شوند استفاده کنید. فیلد DestinationEnum
تمام مقادیر موجود را برای هدف گذاری مقصد فهرست می کند. APIها DestinationEnum
در چندین زیرمجموعه API، به عنوان مثال برای ویژگیهای تبلیغاتی ، متحد میکنند.
ReportingContext.ReportingContextEnum
قسمت ReportingContext.ReportingContextEnum زمینه ای را نشان می دهد که مشکلات حساب و محصول شما برای آن اعمال می شود. این فیلد در روش های گزارش دهی (مانند IssueSeverityPerReportingContext ) استفاده می شود.
قیمت
این چیزی است که برای Price
در بسته Merchant Common تغییر کرده است:
Content API برای خرید | Merchant API | |
---|---|---|
فیلد مقدار | value:string | amountMicros:int64 |
فیلد ارز | currency:string | currencyCode:string |
مقدار Price
اکنون بر حسب میکرو ثبت می شود، که در آن 1 میلیون میکرو معادل واحد استاندارد ارز شما است.
در Content API برای خرید، Price
یک عدد اعشاری به شکل یک رشته بود.
نام فیلد مقدار از value
به amountMicros
تغییر کرده است
نام فیلد ارز از currency
به currencyCode
تغییر کرده است. فرمت به عنوان ISO 4217 باقی می ماند.