Zarządzanie relacjami między kontami

Za pomocą interfejsu Accounts API możesz zarządzać relacjami między swoim kontem Merchant Center a innymi usługodawcami. Relacja to formalne połączenie, które umożliwia dostawcy oferowanie określonych usług Twojej firmie. Usługa określa uprawnienia i możliwości przyznane dostawcy, takie jak zarządzanie produktami lub zarządzanie kampaniami. Na przykład połączenie konta Merchant Center z kontem Google Ads umożliwia korzystanie z danych o produktach na koncie Google Ads do prowadzenia kampanii reklamowych.

Relacja składa się z tych atrybutów:

  • konto Merchant Center, które otrzymuje usługę;
  • usługodawca;
  • usługa lub zestaw usług świadczonych na rzecz konta Merchant Center.

Alias

Usługodawcy mogą powiązać alias z kontami, które obsługują (jest to odpowiednik pola seller_id, które było obecne w zasobie konta w Content API for Shopping). Alias można przypisać za pomocą opcjonalnego pola account_id_alias w zasobie AccountRelationship i służy on jako identyfikator niestandardowy. Alias musi składać się z 1–50 znaków wybranych spośród liter ASCII, cyfr dziesiętnych, łączników, znaków podkreślenia, kropek lub tyld ([A-Za-z0-9_~.-]{1,50}).

Struktura adresu URL umożliwiająca dostęp do konta za pomocą jego aliasu to GET /accounts/v1/accounts/{provider}~{account_id_alias}.

Usługi

W interfejsie Accounts API konta mogą otrzymywać te usługi. Wiele z tych usług możesz dodać podczas tworzenia konta.

  • Agregacja kont: ta usługa łączy konto zaawansowane z innym kontem, przyznając mu pełny, nieograniczony dostęp. Jest ona zwykle używana przez platformy handlowe, sprzedawców detalicznych wielu marek lub sprzedawców detalicznych działających na rynkach międzynarodowych, którzy potrzebują scentralizowanej kontroli nad kontami zagnieżdżonymi. Jeśli jesteś platformą e-commerce lub partnerem kanału, zalecamy użycie usługi accountManagement. Podczas tworzenia konta za pomocą agregacji kont należy pominąć parametr externalAccountId.

  • Zarządzanie kampaniami: ta usługa modeluje połączenie między kontem Merchant Center a kontem Google Ads, zapewniając dostęp do danych na koncie o produktach i kontach potrzebnych do prowadzenia kampanii reklamowych. Usługodawcą w tym przypadku jest GOOGLE_ADS, a externalAccountId to identyfikator konta Google Ads. Tę usługę można też zaproponować na istniejącym koncie.

  • Porównywanie cen: ta usługa reprezentuje relację z usługą porównywania cen (CSS), która obsługuje konto Merchant Center.

  • Zarządzanie informacjami o firmie lokalnej: ta usługa reprezentuje relację z menedżerem sklepu, który zarządza lokalnym asortymentem i informacjami o firmie lokalnej za pomocą Profilu Firmy w Google.

  • Zarządzanie kontem: ta usługa umożliwia dostawcy wykonywanie działań administracyjnych na koncie Merchant Center, takich jak konfigurowanie ustawień konta, zarządzanie użytkownikami czy aktualizowanie informacji o firmie. Firma może też ograniczyć przyznany dostęp. Jeśli ta usługa jest używana podczas tworzenia konta, tworzy konto połączone z dostawcą, co jest zalecanym rozwiązaniem w przypadku platform e-commerce i partnerów kanału. Tę usługę można też zaproponować na istniejącym koncie.

  • Zarządzanie produktami: ta usługa umożliwia dostawcom zarządzanie produktami i powiązanymi funkcjami, takimi jak źródła danych i reguły. Jeśli usługa jest dodawana podczas tworzenia konta, zwykle jest to w połączeniu z usługą accountManagement lub accountAggregation. Tę usługę można też zaproponować na istniejącym koncie.

Uścisk dłoni

Aby ustanowić usługę, zarówno konto, które ją świadczy, jak i konto, które ją otrzymuje, muszą autoryzować połączenie. Ten proces autoryzacji nazywa się uściskiem dłoni.

Uścisk dłoni to proces dwuetapowy:

  1. Jedna ze stron proponuje połączenie usługi.
  2. Druga strona zatwierdza lub odrzuca propozycję.

Po zaakceptowaniu propozycji usługa zostaje zatwierdzona i uznana za w pełni ustanowioną. Wszystkie prawa dostępu przyznane usługodawcy są teraz przyznawane kwalifikującym się użytkownikom (patrz prawa dostępu poniżej).

Pamiętaj, że użytkownik, który tworzy propozycję, odrzuca ją lub zatwierdza, musi mieć ADMIN uprawnienia dostępu na koncie inicjującym proces. Jeśli więc usługodawca proponuje usługę, użytkownik składający propozycję musi być administratorem ADMIN na koncie usługodawcy, a użytkownik akceptujący lub odrzucający propozycję musi być administratorem ADMIN na koncie odbiorcy.

Te przykłady pokazują, jak zaproponować usługę konta:

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_)

Działanie uścisku dłoni w przypadku poszczególnych usług

Poniżej znajdziesz opis wymagań dotyczących uścisku dłoni w przypadku poszczególnych usług:

  • Agregacja kont: tę usługę można ustanowić tylko w ramach tworzenia konta. Usługodawca powinien być kontem zaawansowanym, a usługa jest automatycznie zatwierdzana, ponieważ użytkownicy konta zaawansowanego mają pełny dostęp ADMIN do tworzonego konta.

  • Porównywanie cen: ta usługa jest automatycznie zatwierdzana, gdy jest dodawana podczas tworzenia konta za pomocą metody createAndConfigure.

  • Zarządzanie kampaniami: ta usługa korzysta ze standardowego procesu uścisku dłoni, ale propozycje są składane w jednym systemie (np. Google Ads), a zatwierdzenia są dokonywane w drugim systemie (np. w Merchant Center lub za pomocą Merchant API).

  • Zarządzanie informacjami o firmie lokalnej: w przypadku tej usługi uzgadnianie połączenia jest proponowane za pomocą specjalnej metody, a zatwierdzenia są dokonywane w drugim systemie (np. w Profilu Firmy w Google). Szczegółowe instrukcje znajdziesz w przewodniku łączenia Profilu Firmy w Google.

  • Zarządzanie kontem: w przypadku tej usługi obowiązuje standardowy proces uścisku dłoni podczas korzystania z metody propose. Jeśli usługa jest dodawana podczas tworzenia konta za pomocą metody createAndConfigure, jest automatycznie zatwierdzana.

  • Zarządzanie produktami: w przypadku tej usługi obowiązuje standardowy proces uścisku dłoni (propozycja jednej strony, a następnie akceptacja drugiej strony).

Prawa dostępu

Każdy typ usługi zapewnia określony poziom dostępu użytkownikom usługodawcy do obsługiwanego konta:

  • Agregacja kont: ta usługa zapewnia pełne uprawnienia ADMIN.

  • Zarządzanie kampaniami: ta usługa zapewnia ograniczone prawa dostępu, umożliwiając powiązanemu kontu Google Ads dostęp do produktów i podstawowych informacji o koncie.

  • Porównywanie cen: ta usługa domyślnie zapewnia pełne ADMIN uprawnienia. Firma może jednak ograniczyć przyznany dostęp w Merchant Center.

  • Zarządzanie informacjami o firmie lokalnej: ta usługa nie zapewnia bezpośrednich praw dostępu. Umożliwia natomiast synchronizację produktów z kontem Merchant Center.

Ważne: prawa dostępu opisane w przypadku tych typów usług dotyczą tylko zatwierdzonych usługodawców. Jeśli jesteś usługodawcą i chcesz korzystać z tej funkcji, skontaktuj się z naszym zespołem pomocy. Jeśli masz już zatwierdzony dostęp do metody accounts.link w przypadku zarządzania produktami w Content API for Shopping, możesz korzystać z tej usługi w Merchant API bez dodatkowych zatwierdzeń.

  • Zarządzanie kontem: ta usługa domyślnie zapewnia pełne ADMIN uprawnienia.

  • Zarządzanie produktami: ta usługa zapewnia pełne ADMIN uprawnienia. Pamiętaj, że w przyszłości będzie to ograniczone tylko do praw dostępu związanych z produktami.

Jak relacje działają w przypadku platform zewnętrznych

Jeśli jesteś platformą zewnętrzną, która zarządza kontami w imieniu innych firm, poniżej znajdziesz informacje o tym, jak różne koncepcje są powiązane ze strukturą Twojego konta:

  1. Usługodawca: Twoje konto zaawansowane.
  2. Konto otrzymujące usługę: konto Merchant Center, które reprezentuje firmę, którą zarządzasz.
  3. Usługa:
    • accountManagement: jest to zalecana usługa dla platform e-commerce i partnerów kanału, którzy tworzą nowe konta w imieniu sprzedawców. Tworzy ona konto, którego właścicielem jest sprzedawca, ale które jest połączone z Twoim kontem w celu zarządzania. Jest to zgodne z preferowaną strukturą Merchant Center w tym przypadku.
    • accountAggregation: ta usługa łączy Twoje konto zaawansowane z innym kontem. Chociaż jest obsługiwana, nie jest zalecana w przypadku platform e-commerce i partnerów kanału.

Więcej informacji o konfigurowaniu konta zaawansowanego i łączeniu go z nowymi kontami Merchant Center znajdziesz w artykule Tworzenie kont.