Hesap ilişkilerini yönetme

Merchant Center hesabınız ile diğer hizmet sağlayıcılar arasındaki ilişkileri yönetmek için Accounts API'yi kullanabilirsiniz. İlişki, sağlayıcının işletmenize belirli hizmetler sunmasını sağlayan resmi bir bağlantıdır. Hizmet, sağlayıcıya verilen izinleri ve özellikleri (ör. ürün yönetimi veya kampanya yönetimi) tanımlar. Örneğin, Merchant Center hesabınızı bir Google Ads hesabına bağladığınızda Ads hesabının, reklam kampanyaları yayınlamak için ürün verilerinizi kullanmasına izin vermiş olursunuz.

Bir ilişki aşağıdaki özelliklerden oluşur:

  • Hizmeti alan Merchant Center hesabı
  • Servis sağlayıcı
  • Merchant Center hesabına sağlanan hizmet veya hizmetler grubu

Takma ad

Servis sağlayıcılar, hizmet verdikleri hesaplarla bir takma ad ilişkilendirebilir (bu, Alışveriş için Content API'deki hesap kaynağında bulunan seller_id alanının eşdeğeridir). Alias, AccountRelationship kaynağındaki isteğe bağlı account_id_alias alanı kullanılarak atanabilir ve özel tanımlayıcı olarak işlev görür. Alias, ASCII harfleri, ondalık basamaklar, tireler, alt çizgiler, noktalar veya yaklaşık işaretlerinden ([A-Za-z0-9_~.-]{1,50}) seçilen 1 ila 50 karakterden oluşmalıdır.

Bir hesaba takma adını kullanarak erişmek için kullanılan URL yapısı GET /accounts/v1/accounts/{provider}~{account_id_alias} şeklindedir.

Hizmetler

Accounts API'de hesaplar aşağıdaki hizmetleri alabilir. Bu hizmetlerin birçoğunu hesap oluşturma sırasında ekleyebilirsiniz.

  • Hesap toplama: Bu hizmet, bir gelişmiş hesabı başka bir hesaba bağlayarak gelişmiş hesaba tam ve sınırsız erişim izni verir. Genellikle, iç içe yerleştirilmiş hesaplar üzerinde merkezi kontrol sağlaması gereken pazar yerleri, çok markalı perakendeciler veya uluslararası perakendeciler tarafından kullanılır. Bir e-ticaret platformu veya kanal iş ortağıysanız bunun yerine accountManagement kullanmanızı öneririz. Hesap toplama özelliğini kullanarak hesap oluşturduğunuzda externalAccountId karakteri atlanmalıdır.

  • Kampanya yönetimi: Bu hizmet, bir Merchant Center hesabı ile bir Google Ads hesabı arasındaki bağlantıyı modeller. Böylece Ads hesabı, reklam kampanyaları yayınlamak için gereken ürün ve hesap verilerine erişebilir. Bu durumda hizmet sağlayıcı GOOGLE_ADS, externalAccountId ise Google Ads hesabının kimliğidir. Bu hizmet, mevcut bir hesaba da önerilebilir.

  • Karşılaştırmalı alışveriş: Bu, Merchant Center hesabını işleten bir Karşılaştırmalı Alışveriş Hizmeti (CSS) ile ilişkiyi ifade eder.

  • Yerel giriş yönetimi: Bu, Google İşletme Profili kullanılarak yerel envanterin ve girişlerin yönetilmesi için mağaza yöneticisiyle olan ilişkiyi ifade eder.

  • Hesap yönetimi: Bu hizmet, sağlayıcının Merchant Center hesabında idari işlemler (ör. hesap ayarlarını yapılandırma, kullanıcıları yönetme veya işletme bilgilerini güncelleme) yapmasına olanak tanır. İşletme, verilen erişimi de kısıtlayabilir. Bu hizmet, hesap oluşturma sırasında kullanıldığında sağlayıcıya bağlı bir hesap oluşturur. Bu, e-ticaret platformları ve kanal iş ortakları için önerilen yaklaşımdır. Mevcut bir hesaba da önerilebilir.

  • Ürün yönetimi: Bu hizmet, sağlayıcıların ürünleri ve veri kaynakları ile kurallar gibi ilgili özellikleri yönetmesine olanak tanır. Hesap oluşturma sırasında eklendiğinde genellikle accountManagement veya accountAggregation ile birlikte kullanılır. Bu hizmet, mevcut bir hesaba da önerilebilir.

El sıkışma

Bir hizmet oluşturmak için hem hizmeti sağlayan hem de hizmeti alan hesabın bağlantıyı yetkilendirmesi gerekir. Bu yetkilendirme sürecine el sıkışma denir.

El sıkışma iki adımlı bir süreçtir:

  1. Bir taraf, hizmet bağlantısı önerir.
  2. Diğer taraf, teklifi onaylar veya reddeder.

Bir teklif kabul edildikten sonra hizmet onaylanır ve tamamen kurulmuş kabul edilir. Hizmet sağlayıcıya verilen tüm erişim hakları artık uygun kullanıcılara verilir (Aşağıdaki erişim hakları bölümüne bakın).

Teklif oluşturan, reddeden veya onaylayan kullanıcının, süreci başlatan hesapta ADMIN erişim haklarına sahip olması gerektiğini unutmayın. Bu nedenle, servis sağlayıcı bir hizmet önerisinde bulunursa öneriyi yapan kullanıcının servis sağlayıcının hesabında ADMIN olması, öneriyi kabul eden veya reddeden kullanıcının ise alıcı hesapta ADMIN olması gerekir.

Aşağıdaki örneklerde, hesap hizmetinin nasıl önerileceği gösterilmektedir:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AccountName;
import com.google.shopping.merchant.accounts.v1.AccountService;
import com.google.shopping.merchant.accounts.v1.AccountServicesServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountServicesServiceSettings;
import com.google.shopping.merchant.accounts.v1.ProductsManagement;
import com.google.shopping.merchant.accounts.v1.ProposeAccountServiceRequest;
import shopping.merchant.samples.utils.Authenticator;

/** This class demonstrates how to propose a service to an existing Merchant Center account. */
public class ProposeServiceSample {

  public static void proposeService(long accountId, long providerId, String externalAccountId)
      throws Exception {

    // Obtains OAuth token based on the user's configuration.
    // The user that authenticates should have access to the account.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountServicesServiceSettings accountServicesServiceSettings =
        AccountServicesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (AccountServicesServiceClient accountServicesServiceClient =
        AccountServicesServiceClient.create(accountServicesServiceSettings)) {

      // The service to be proposed.
      // This sample shows how to propose product management.
      // For more information about the different services, see:
      // https://developers.google.com/merchant/api/guides/accounts/services
      AccountService accountService =
          AccountService.newBuilder()
              .setProductsManagement(ProductsManagement.newBuilder().build())
              .setExternalAccountId(externalAccountId)
              .build();

      String accountName =
          AccountName.newBuilder().setAccount(String.valueOf(accountId)).build().toString();

      ProposeAccountServiceRequest request =
          ProposeAccountServiceRequest.newBuilder()
              .setParent(accountName)
              .setProvider("accounts/" + providerId)
              .setAccountService(accountService)
              .build();

      System.out.println("Sending Propose Service request:");
      AccountService response = accountServicesServiceClient.proposeAccountService(request);

      System.out.println("Proposed Service below");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    // The ID of the account to propose the service to.
    long accountId = 123L;
    // This is the provider ID of the e-commerce platform.
    long providerId = 456L;
    // An external ID that uniquely identifies the account service.
    String externalAccountId = "ext-acc-id-123";
    proposeService(accountId, providerId, externalAccountId);
  }
}

PHP

require_once __DIR__ . '/../../../../vendor/autoload.php';
require_once __DIR__ . '/../../../Authentication/Authentication.php';
require_once __DIR__ . '/../../../Authentication/Config.php';

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\AccountAggregation;
use Google\Shopping\Merchant\Accounts\V1\AccountService;
use Google\Shopping\Merchant\Accounts\V1\Client\AccountServicesServiceClient;
use Google\Shopping\Merchant\Accounts\V1\ProposeAccountServiceRequest;

/**
 * This class demonstrates how to propose an account service.
 */
class ProposeAccountServiceSample
{
    /**
     * A helper function to create the account name string.
     *
     * @param string $accountId The ID of the account.
     *
     * @return string The account name has the format: `accounts/{account_id}`
     */
    private static function toAccountName(string $accountId): string
    {
        return sprintf('accounts/%s', $accountId);
    }

    /**
     * Proposes a new account service.
     *
     * @param array $config The configuration data used for authentication and
     *     getting the account ID.
     * @param string $providerId The ID of the provider account.
     */
    public static function proposeAccountService(
        array $config,
        string $providerId
    ): void {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

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

        // Creates a client.
        $accountServicesServiceClient = new AccountServicesServiceClient($options);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $accountAggregation = new AccountAggregation();
            $accountService = (new AccountService())
                ->setAccountAggregation($accountAggregation);

            $request = (new ProposeAccountServiceRequest())
                ->setParent(self::toAccountName($config['accountId']))
                ->setProvider(self::toAccountName($providerId))
                ->setAccountService($accountService);

            print "Sending Propose AccountService request\n";
            $response = $accountServicesServiceClient->proposeAccountService($request);
            print "Proposed AccountService below\n";
            print $response->serializeToJsonString(true) . PHP_EOL;
        } catch (ApiException $e) {
            printf("An error has occurred: %s%s", $e->getMessage(), PHP_EOL);
        }
    }

    /**
     * Helper to execute the sample.
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();

        // Update this with the Merchant Center provider ID you want to get the
        // relationship for.
        $providerId = 111;
        self::proposeAccountService($config, $providerId);
    }
}

// Run the script
$sample = new ProposeAccountServiceSample();
$sample->callSample();

Python

"""This class demonstrates how to propose an account service."""

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AccountAggregation
from google.shopping.merchant_accounts_v1 import AccountService
from google.shopping.merchant_accounts_v1 import AccountServicesServiceClient
from google.shopping.merchant_accounts_v1 import ProposeAccountServiceRequest

_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"


def propose_account_service(provider_id: int) -> None:
  """Proposes an account service.

  Args:
    provider_id: The Merchant Center ID of the provider.
  """
  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()

  # Creates a client.
  client = AccountServicesServiceClient(credentials=credentials)

  # Creates the provider resource name from the provider ID.
  provider = f"accounts/{provider_id}"

  # Creates an AccountService object.
  # For this request, only `account_aggregation` is needed.
  account_service = AccountService()
  account_service.account_aggregation = AccountAggregation()

  # Creates the request.
  request = ProposeAccountServiceRequest(
      parent=_PARENT,
      provider=provider,
      account_service=account_service,
  )

  # Makes the request and catches and prints any error messages.
  try:
    print("Sending Propose AccountService request")
    response = client.propose_account_service(request=request)
    print("Proposed AccountService below")
    print(response)
  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  # Update this with the Merchant Center provider ID you want to get the
  # relationship for.
  provider_id_ = 111
  propose_account_service(provider_id_)

Hizmete özgü el sıkışma davranışı

Aşağıda, her bir hizmet için geçerli olan belirli el sıkışma koşulları açıklanmaktadır:

  • Hesap toplama: Bu hizmet yalnızca hesap oluşturma sürecinde etkinleştirilebilir. Servis sağlayıcının gelişmiş bir hesap olması beklenir ve gelişmiş hesap kullanıcıları oluşturulan hesaba tam ADMIN erişime sahip olduğundan hizmet otomatik olarak onaylanır.

  • Karşılaştırmalı alışveriş: Bu hizmet, createAndConfigure kullanılarak hesap oluşturma sırasında eklendiğinde otomatik olarak onaylanır.

  • Kampanya yönetimi: Bu işlem normal el sıkışma sürecini takip etse de teklifler bir sistemde (ör. Google Ads) yapılır ve onaylar diğer sistemde (ör. Merchant Center'da veya Merchant API aracılığıyla) verilir.

  • Yerel listeleme yönetimi: Bu hizmet için özel bir yöntemde anlaşma önerilir ve onaylar diğer sistemde (ör. Google İşletme Profili) yapılır. Ayrıntılı adımlar için Google İşletme Profili bağlama kılavuzu başlıklı makaleye göz atın.

  • Hesap yönetimi: Bu hizmet için propose kullanılırken normal el sıkışma süreci geçerlidir. createAndConfigure kullanılarak hesap oluşturma sırasında eklenen hizmetler otomatik olarak onaylanır.

  • Ürün yönetimi: Bu hizmet için normal el sıkışma süreci geçerlidir (bir tarafın teklifi ve diğer tarafın kabulü).

Erişim hakları

Her hizmet türü, hizmet sağlayıcının hizmet verdiği hesap üzerinde belirli bir erişim düzeyi sağlar:

  • Hesap toplama: Bu hizmet, tam ADMIN hakları sağlar.

  • Kampanya yönetimi: Bu hizmet, ilişkili reklam hesabının ürünlere ve temel hesap bilgilerine erişmesine olanak tanıyan kısıtlanmış bir erişim hakkı sağlar.

  • Karşılaştırmalı alışveriş: Bu hizmet, varsayılan olarak tam ADMIN hakları sağlar. Ancak işletme, Merchant Center'da verilen erişimi kısıtlayabilir.

  • Yerel listeleme yönetimi: Bu hizmet doğrudan erişim hakkı sağlamaz. Bunun yerine, listelemenin ürünlerini Merchant Center hesabıyla senkronize etmesini sağlar.

Önemli: Aşağıdaki hizmet türleri için açıklanan erişim hakları yalnızca onaylanmış servis sağlayıcılar için geçerlidir. Hizmet sağlayıcıysanız ve bu özellikten yararlanmak istiyorsanız destek ekibimizle iletişime geçin. Content API for Shopping'de ürün yönetimi için accounts.link yöntemini daha önce onayladıysanız bu hizmeti Merchant API'de başka onaylara gerek kalmadan kullanabilirsiniz.

  • Hesap yönetimi: Bu hizmet, varsayılan olarak tam ADMIN hakları sağlar.

  • Ürün yönetimi: Bu hizmet, tam ADMIN hakları sağlar. Gelecekte bu özelliğin yalnızca ürünle ilgili erişim haklarıyla sınırlı olacağını unutmayın.

İlişkilerin üçüncü taraf platformlarında uygulanma şekli

Başka işletmeler adına hesap yöneten bir üçüncü taraf platformuysanız aşağıdaki tabloda, farklı kavramların hesap yapınızla nasıl eşlendiği gösterilmektedir:

  1. Servis sağlayıcı: Gelişmiş hesabınız.
  2. Hizmetin alındığı hesap: Yönettiğiniz işletmeyi temsil eden bir Merchant Center hesabı.
  3. Hizmet:
    • accountManagement: Bu hizmet, e-ticaret platformları ve satıcılar adına yeni hesap oluşturan kanal iş ortakları için önerilir. Satıcının sahip olduğu ve yönetim için size bağlı bir hesap oluşturur. Bu, söz konusu kullanım alanı için tercih edilen Merchant Center yapısıyla uyumludur.
    • accountAggregation: Bu hizmet, gelişmiş hesabınızı başka bir hesaba bağlar. Desteklenmesine rağmen e-ticaret platformları ve kanal iş ortakları için önerilmez.

Gelişmiş hesap oluşturma ve yeni Merchant Center hesaplarına bağlama hakkında ayrıntılı bilgi için Hesap oluşturma başlıklı makaleyi inceleyin.