Zarządzanie relacjami między kontami

Za pomocą interfejsu Accounts API możesz zarządzać relacjami między kontem Merchant Center a innymi dostawcami usług. 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 czy kampaniami. Na przykład połączenie konta Merchant Center z kontem Google Ads umożliwia temu ostatniemu wykorzystywanie danych o produktach 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

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

Struktura adresu URL umożliwiająca dostęp do konta za pomocą 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 kontu zaawansowanemu pełny, nieograniczony dostęp. Jest ono zwykle używane przez platformy handlowe, sprzedawców wielu marek lub sprzedawców międzynarodowych, którzy potrzebują centralnego zarządzania kontami zagnieżdżonymi. Jeśli jesteś platformą e-commerce lub partnerem kanału, zalecamy użycie accountManagement. Gdy tworzysz konto za pomocą agregacji kont, musisz pominąć externalAccountId.

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

  • Porównywanie cen: oznacza to relację z usługą porównywania cen, która obsługuje konto Merchant Center.

  • Zarządzanie lokalnymi informacjami o firmie: oznacza to relację z menedżerem sklepu w zakresie zarządzania lokalnym asortymentem i informacjami o firmie 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. Gdy jest używana podczas tworzenia konta, ta usługa tworzy konto połączone z dostawcą, co jest zalecanym podejściem w przypadku platform e-commerce i partnerów kanału. Można go też zaproponować w przypadku istniejącego konta.

  • 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. Gdy jest dodawany podczas tworzenia konta, zwykle występuje w połączeniu z accountManagement lub accountAggregation. Tę usługę można też zaproponować w przypadku istniejącego konta.

Uścisk dłoni

Aby nawiązać połączenie z usługą, zarówno konto, które ją udostępnia, jak i konto, które z niej korzysta, muszą autoryzować połączenie. Ten proces autoryzacji nazywa się uzgadnianiem połączenia.

Uścisk dłoni to proces dwuetapowy:

  1. Jedna ze stron proponuje link do usługi.
  2. Druga strona zatwierdza lub odrzuca ofertę.

Po zaakceptowaniu oferty usługa zostaje zatwierdzona i uznana za w pełni utworzoną. Wszelkie prawa dostępu przyznane dostawcy usług 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 do konta, na którym inicjuje proces. Jeśli więc usługodawca proponuje usługę, użytkownik składający propozycję musi być ADMIN na koncie usługodawcy, a użytkownik akceptujący lub odrzucający propozycję musi być ADMIN na koncie odbiorcy.

Poniższe przykłady pokazują, jak zaproponować usługę dotyczącą 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_)

Sposób nawiązywania połączenia w poszczególnych usługach

Poniżej znajdziesz opis wymagań dotyczących konkretnych protokołów uzgadniania w przypadku poszczególnych usług:

  • Agregacja kont: ta usługa może być skonfigurowana tylko w ramach tworzenia konta. Dostawca usług powinien mieć konto zaawansowane, a usługa jest zatwierdzana automatycznie, ponieważ użytkownicy konta zaawansowanego mają pełny dostęp do tworzonego konta ADMIN.

  • Porównywarka cen: ta usługa jest automatycznie zatwierdzana po dodaniu podczas tworzenia konta za pomocą createAndConfigure.

  • Zarządzanie kampaniami: chociaż ten proces jest zgodny ze standardowym procesem uzgadniania, propozycje są składane w jednym systemie (np. Google Ads), a zatwierdzenia są dokonywane w innym systemie (np. w Merchant Center lub za pomocą Merchant API).

  • Zarządzanie lokalnymi informacjami o firmie: w przypadku tej usługi uzgodnienie jest proponowane w ramach specjalnej metody, a zatwierdzenia są dokonywane w innym systemie (np. w Profilu Firmy w Google). Szczegółowe instrukcje znajdziesz w przewodniku po łączeniu Profilu Firmy w Google.

  • Zarządzanie kontem: w przypadku tej usługi podczas korzystania z propose obowiązuje standardowy proces uzgadniania. Jeśli usługa zostanie dodana podczas tworzenia konta za pomocą createAndConfigure, zostanie automatycznie zatwierdzona.

  • Zarządzanie produktami: w przypadku tej usługi obowiązuje standardowy proces uzgadniania (propozycja jednej ze stron, a następnie akceptacja drugiej).

Prawa dostępu

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

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

  • Zarządzanie kampaniami: ta usługa zapewnia ograniczone prawo dostępu, które umożliwia 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 ADMINprawa. Firma może jednak ograniczyć dostęp przyznany w Merchant Center.

  • Zarządzanie wizytówką firmy lokalnej: ta usługa nie zapewnia bezpośredniego prawa dostępu. Zamiast tego umożliwia synchronizację produktów z kontem Merchant Center.

Ważne: prawa dostępu opisane w przypadku tych typów usług dotyczą tylko zatwierdzonych dostawców usług. Jeśli jesteś dostawcą usług i chcesz korzystać z tej funkcji, skontaktuj się z naszym zespołem pomocy. Jeśli wcześniej została zatwierdzona metoda accounts.link 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 prawa ADMIN.

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

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 pojęcia odnoszą się do struktury 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łów, którzy tworzą nowe konta w imieniu sprzedawców. Tworzy ono konto, którego właścicielem jest sprzedawca, połączone z Twoim kontem w celu zarządzania. Jest to zgodne z preferowaną strukturą Merchant Center w tym przypadku użycia.
    • 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.

Szczegółowe informacje o tym, jak skonfigurować konto zaawansowane i połączyć je z nowymi kontami Merchant Center, znajdziesz w artykule Tworzenie kont.