افزودن اطلاعات فروشگاه به محصولات محلی

برای ارائه تجربه خریدی یکپارچه، منسجم، و یکدست، وقتی محصولی را با Merchant API اضافه می‌کنید، به‌طور پیش‌فرض برای همه مقصدهای فعال‌شده، ازجمله انواع مقصد آنلاین و محلی، دردسترس قرار می‌گیرد. این بخشی از استراتژی چندکانالی در مرکز خرید است.

برای مشخص کردن اطلاعات بیشتر درباره دردسترس بودن محلی محصولاتتان، از زیرمیانای برنامه‌سازی کاربردی «سیاهه‌ها» استفاده می‌کنید تا نشان دهید محصولاتتان در فروشگاه‌های فیزیکی دردسترس هستند.

اگر از Content API for Shopping منتقل می‌شوید، انتقال مدیریت موجودی را ببینید.

مراحل لازم برای افزودن اطلاعات داخل فروشگاه به محصولات محلی‌تان در اینجا آمده است:

کسب‌وکارتان را به Merchant Center متصل کنید

ثبت‌نام برای فهرستگان‌های رایگان محلی

پس‌از پیوند دادن «نمایه کسب‌وکار» به حساب Merchant Center، می‌توانید در فهرستگان‌های رایگان محلی ثبت‌نام کنید. مطمئن شوید که از خط‌مشی‌های فهرستگان‌های رایگان پیروی می‌کنید.

با شرکت کردن در فهرستگان‌های محلی رایگان ، محصولات داخل فروشگاهتان می‌تواند در فهرستگان‌های رایگان در سراسر دارایی‌های Google نشان داده شود.

درستی‌سنجی کنید که محصولات محلی دارید

پیش‌از درج موجودی‌های محلی در محصولات، باید بررسی کنید که محصولاتی دارید که مقصدهای محلی (یا داخل فروشگاه) را هدف قرار می‌دهند، که به‌عنوان روش‌های بازاریابی نیز شناخته می‌شوند. برای مثال، آگهی‌های فهرست موجودی محلی و فهرستگان‌های محلی رایگان از روش‌های بازاریابی محلی هستند. برای اطلاعات بیشتر درباره مقصدها، روش‌های بازاریابی را ببینید.

مقاصد محلی محصولات را یا در سطح منبع داده ازطریق Destinations یا در سطح product ازطریق ProductAttributes مثل includedDestinations تعریف می‌کنید.

وارد کردن اطلاعات موجود در فروشگاه

پس‌از افزودن محصولات محلی در حساب Merchant Center، باید اطلاعات درون فروشگاه را برای آن‌ها مشخص کنید، مانند storeCode، یا availability، و اطلاعات اختیاری مانند price. برای اطلاعات بیشتر درباره فیلدهایی که می‌توانید ارائه دهید، مشخصات داده‌های موجودی محلی را ببینید.

در مثال زیر، اطلاعات موجود در فروشگاه را برای محصولی بااستفاده از روش localInventories.insert اضافه می‌کنید:

POST https://merchantapi.googleapis.com/inventories/v1/accounts/{ACCOUNT_ID}/products/{en~US~SKU12345}/localInventories:insert
{
  "storeCode": "123456",
  "localInventoryAttributes": {
    "price": {
      "amountMicros": "33450000",
      "currencyCode": "USD"
    },
    "availability": "OUT_OF_STOCK"
  }
}

نمونه‌های کد زیر نحوه افزودن اطلاعات موجود در فروشگاه را برای محصول نشان می‌دهد:

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.inventories.v1.InsertLocalInventoryRequest;
import com.google.shopping.merchant.inventories.v1.LocalInventory;
import com.google.shopping.merchant.inventories.v1.LocalInventoryAttributes;
import com.google.shopping.merchant.inventories.v1.LocalInventoryAttributes.Availability;
import com.google.shopping.merchant.inventories.v1.LocalInventoryServiceClient;
import com.google.shopping.merchant.inventories.v1.LocalInventoryServiceSettings;
import com.google.shopping.type.Price;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to insert a Local inventory for a given product */
public class InsertLocalInventorySample {

  private static String getParent(String accountId, String productId) {
    return String.format("accounts/%s/products/%s", accountId, productId);
  }

  public static LocalInventory insertLocalInventory(Config config, String productId, String storeCode)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    LocalInventoryServiceSettings localInventoryServiceSettings =
        LocalInventoryServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getAccountId().toString(), productId);

    try (LocalInventoryServiceClient localInventoryServiceClient =
        LocalInventoryServiceClient.create(localInventoryServiceSettings)) {

      Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();

      InsertLocalInventoryRequest request =
          InsertLocalInventoryRequest.newBuilder()
              .setParent(parent)
              .setLocalInventory(
                  LocalInventory.newBuilder()
                      .setStoreCode(storeCode)
                      .setLocalInventoryAttributes(
                          LocalInventoryAttributes.newBuilder()
                              .setAvailability(Availability.OUT_OF_STOCK)
                              .setPrice(price)
                              .build())
                      .build())
              .build();

      System.out.println("Sending insert LocalInventory request");
      LocalInventory response = localInventoryServiceClient.insertLocalInventory(request);
      System.out.println("Inserted LocalInventory Name below");
      System.out.println(response.getName());
      return response;
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // An ID assigned to a product by Google. In the format
    // contentLanguage~feedLabel~offerId
    String productId = "en~label~1111111111";
    // The code uniquely identifying each store.
    String storeCode = "Example1";
    insertLocalInventory(config, productId, storeCode);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Inventories\V1\LocalInventory;
use Google\Shopping\Merchant\Inventories\V1\Client\LocalInventoryServiceClient;
use Google\Shopping\Merchant\Inventories\V1\InsertLocalInventoryRequest;
use Google\Shopping\Merchant\Inventories\V1\LocalInventoryAttributes;
use Google\Shopping\Merchant\Inventories\V1\LocalInventoryAttributes\Availability;
use Google\Shopping\Type\Price;

/**
 * Class to insert a `LocalInventory` to a given product in your
 * merchant account.
 *
 * Replaces the full `LocalInventory` resource if an entry with the same
 * [`storeCode`]
 * [google.shopping.merchant.inventories.v1.LocalInventory.storeCode]
 * already exists for the product.
 *
 * It might take up to 30 minutes for the new or updated `LocalInventory`
 * resource to appear in products.
 */

class InsertLocalInventory
{
    // ENSURE you fill in the merchant account and product ID for the sample to
    // work.
    private const PARENT = 'accounts/[INSERT_ACCOUNT_HERE]/products/[INSERT_PRODUCT_HERE]';
    // ENSURE you fill in store code for the sample to work.
    private const LOCAL_INVENTORY_STORE_CODE = 'INSERT_STORE_CODE_HERE';

    /**
     * Inserts a local inventory underneath the parent product.
     *
     * @param string $parent The account and product where this inventory will be inserted.
     *     Format: `accounts/{account}/products/{product}`
     * @param string $localInventoryRegion
     *     ID of the region for this
     *     `LocalInventory` resource. See the [Local availability and
     *     pricing](https://support.google.com/merchants/answer/9698880) for more details.
     */
    public function insertLocalInventorySample(
        string $parent,
        string $localInventoryStoreCode
    ): void {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $localInventoryServiceClient = new LocalInventoryServiceClient($options);

        // Creates a price object.
        $price = new Price(
            [
                'currency_code' => "USD",
                'amount_micros' => 33450000,
            ]
        );

        // Creates a new local inventory object.
        $localInventory = (new LocalInventory())
            ->setStoreCode($localInventoryStoreCode)
            ->setLocalInventoryAttributes((new LocalInventoryAttributes())
                ->setAvailability(Availability::IN_STOCK)
                ->setPrice($price));

        $request = (new InsertLocalInventoryRequest())
            ->setParent($parent)
            ->setLocalInventory($localInventory);

        // Calls the API and catches and prints any network failures/errors.
        try {
            /** @var LocalInventory $response */
            $response = $localInventoryServiceClient->insertLocalInventory($request);
            printf('Response data: %s%s', $response->serializeToJsonString(), PHP_EOL);
        } catch (ApiException $ex) {
            printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);
        }
    }

    /**
     * Helper to execute the sample.
     */
    public function callSample(): void
    {
        // Makes the call to insert the local inventory to the parent product
        // for the given region.
        $this->insertLocalInventorySample($this::PARENT, $this::LOCAL_INVENTORY_STORE_CODE);
    }

}


$sample = new InsertLocalInventory();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping import merchant_inventories_v1
from google.shopping.merchant_inventories_v1.types import LocalInventoryAttributes


# ENSURE you fill in product ID and store code for the sample to
# work.
_ACCOUNT = configuration.Configuration().read_merchant_info()
# ENSURE you fill in product ID for the sample to work.
_PRODUCT = "INSERT_PRODUCT_HERE"
_PARENT = f"accounts/{_ACCOUNT}/products/{_PRODUCT}"
# ENSURE you fill in store code for the sample to work.
_STORE_CODE = "INSERT_STORE_CODE_HERE"


def insert_local_inventory():
  """Inserts a `LocalInventory` to a given product.

  Replaces the full `LocalInventory` resource if an entry with the same
  `region` already exists for the product.

  It might take up to 30 minutes for the new or updated `LocalInventory`
  resource to appear in products.
  """

  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()

  # Creates a client.
  client = merchant_inventories_v1.LocalInventoryServiceClient(
      credentials=credentials
  )

  # Creates a Local inventory and populate its attributes.
  local_inventory = merchant_inventories_v1.LocalInventory()
  local_inventory.store_code = _STORE_CODE
  local_inventory.local_inventory_attributes.availability = (
      LocalInventoryAttributes.Availability.IN_STOCK
  )
  local_inventory.local_inventory_attributes.price = {
      "currency_code": "USD",
      "amount_micros": 33450000,
  }

  # Creates the request.
  request = merchant_inventories_v1.InsertLocalInventoryRequest(
      parent=_PARENT,
      local_inventory=local_inventory,
  )

  # Makes the request and catch and print any error messages.
  try:
    response = client.insert_local_inventory(request=request)

    print("Insert successful")
    print(response)
  except RuntimeError as e:
    print("Insert failed")
    print(e)


if __name__ == "__main__":
  insert_local_inventory()

cURL

  curl --location
  'https://merchantapi.googleapis.com/inventories/v1/accounts/{ACCOUNT_ID}/products/{en~US~SKU12345}/localInventories:insert' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer {API_TOKEN}' \
  --data '{
     "storeCode": "123456",
     "localInventoryAttributes": {
       "price": {
         "amountMicros": "33450000",
         "currencyCode": "USD"
       },
       "availability": "OUT_OF_STOCK"
     }
  }'

فراخوانی موفق، منبع جدیداً ایجادشده LocalInventory را با مقادیری که ارائه کرده‌اید برمی‌گرداند، اما ممکن است به‌طور کامل نشان‌دهنده داده‌های موجودی نهایی نباشد. ممکن است تا ۳۰ دقیقه طول بکشد تا LocalInventory جدید در محصول نشان داده شود.