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

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

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

اگر از Content API ویژه 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 جدید در محصول نشان داده شود.