С помощью Accounts API можно управлять связями между аккаунтом Merchant Center и другими поставщиками услуг. Связь – это формальное соглашение, позволяющее поставщику предлагать определенные услуги вашей компании. Сервис определяет разрешения и возможности, предоставленные поставщику, например управление продуктами или кампаниями. Например, если связать аккаунт Merchant Center с аккаунтом Google Рекламы, последний сможет использовать данные о товарах для проведения рекламных кампаний.
Связь состоит из следующих атрибутов:
- Аккаунт Merchant Center, в котором используется сервис
- Поставщик услуг
- Сервис или набор сервисов, предоставляемых аккаунту Merchant Center.
Псевдоним
Поставщики услуг могут связывать псевдоним с аккаунтами, которые они обслуживают. Это эквивалент поля seller_id, которое было в ресурсе account в Content API for Shopping. Псевдоним можно назначить с помощью необязательного поля account_id_alias в ресурсе AccountRelationship. Он будет использоваться в качестве специального идентификатора. Псевдоним должен состоять из 1–50 символов, выбранных из букв ASCII, десятичных цифр, дефисов, подчеркиваний, точек или тильд ([A-Za-z0-9_~.-]{1,50}).
Структура URL для доступа к аккаунту с помощью псевдонима выглядит так:
GET /accounts/v1/accounts/{provider}~{account_id_alias}.
Сервисы
В Accounts API аккаунты могут получать следующие сервисы: Многие из этих сервисов можно добавить при создании аккаунта.
Объединение аккаунтов. Этот сервис связывает расширенный аккаунт с другим аккаунтом, предоставляя расширенному аккаунту полный неограниченный доступ. Обычно он используется торговыми площадками, продавцами нескольких брендов или международными продавцами, которым требуется централизованное управление вложенными аккаунтами. Если вы работаете с платформой электронной торговли или являетесь партнером по каналам, рекомендуем использовать
accountManagement. При создании аккаунта с помощью агрегирования аккаунтов символexternalAccountIdуказывать не нужно.Управление кампаниями. Этот сервис моделирует связь между аккаунтом Merchant Center и аккаунтом Google Рекламы, предоставляя последнему доступ к данным о товарах и аккаунте, необходимым для проведения рекламных кампаний. В этом случае поставщиком услуг является
GOOGLE_ADS, аexternalAccountId– идентификатор аккаунта Google Рекламы. Этот сервис также можно предложить существующему аккаунту.
Сравнение цен. Отношения с сервисом сравнения цен (ССЦ), который управляет аккаунтом Merchant Center.
Управление местными предложениями. Это отношения с управляющим магазином, который управляет местным ассортиментом и предложениями с помощью профиля компании в Google.
Управление аккаунтом. Этот сервис позволяет поставщику выполнять административные действия в аккаунте Merchant Center, например настраивать параметры аккаунта, управлять пользователями или обновлять информацию о компании. Компания также может ограничить предоставленный доступ. При создании аккаунта этот сервис создает аккаунт, связанный с поставщиком. Это рекомендуемый подход для платформ электронной торговли и партнеров по каналам. Его также можно предложить существующему аккаунту.
Управление товарами. Этот сервис позволяет поставщикам управлять товарами и связанными функциями, такими как источники данных и правила. При добавлении во время создания аккаунта обычно используется в сочетании с
accountManagementилиaccountAggregation. Этот сервис также можно предложить существующему аккаунту.
Рукопожатие
Чтобы установить связь, аккаунт, предоставляющий сервис, и аккаунт, получающий сервис, должны авторизовать подключение. Этот процесс авторизации называется "подтверждением связи".
Процесс рукопожатия состоит из двух этапов:
- Одна из сторон предлагает связать сервисы.
- Другая сторона принимает или отклоняет предложение.
После того как предложение принято, сервис считается одобренным и полностью установленным. Все права доступа, предоставленные поставщику услуг, теперь предоставляются квалифицированным пользователям (см. раздел права доступа ниже).
Обратите внимание, что у пользователя, который создает, отклоняет или утверждает предложение, должны быть ADMIN права доступа к аккаунту, инициирующему процесс. Поэтому, если поставщик услуг предлагает сервис, пользователь, который делает предложение, должен быть ADMIN в аккаунте поставщика услуг, а пользователь, который принимает или отклоняет предложение, должен быть ADMIN в аккаунте получателя.
Ниже приведены примеры того, как предложить сервис для аккаунта.
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_)
Особенности обмена данными в разных сервисах
Ниже описаны требования к подтверждению для каждого сервиса.
Объединение аккаунтов. Эту функцию можно настроить только при создании аккаунта. Поставщик услуг должен быть расширенным аккаунтом, а услуга одобряется автоматически, поскольку у пользователей расширенного аккаунта есть полный доступ
ADMINк создаваемому аккаунту.Сравнение цен. Этот сервис автоматически одобряется при добавлении во время создания аккаунта с помощью
createAndConfigure.Управление кампаниями. В этом случае используется стандартный процесс обмена данными, но предложения создаются в одной системе (например, в Google Рекламе), а утверждаются в другой (например, в Merchant Center или через Merchant API).
Управление данными о компании для местного поиска. Для этого сервиса подтверждение связи предлагается в специальном методе, а одобрение выполняется в другой системе (например, в профиле компании в Google). Подробные инструкции приведены в руководстве по связыванию профиля компании в Google.
Управление аккаунтом. Для этого сервиса при использовании
proposeприменяется обычный процесс подтверждения. Если сервис добавляется при создании аккаунта с помощьюcreateAndConfigure, он утверждается автоматически.Управление продуктами. Для этого сервиса применяется стандартный процесс согласования (одна сторона предлагает, другая принимает).
Права доступа
Каждый тип сервиса предоставляет определенный уровень доступа для пользователей поставщика услуг к обслуживаемому аккаунту:
Агрегирование аккаунтов. Этот сервис предоставляет полные права на
ADMIN.Управление кампаниями. Этот сервис предоставляет ограниченный доступ, позволяя связанному аккаунту Рекламы получать доступ к продуктам и основной информации об аккаунте.
Сравнение цен. По умолчанию этот сервис предоставляет полные права на
ADMIN. Однако компания может ограничить доступ, предоставленный в Merchant Center.Управление данными о компании для местного поиска. Этот сервис не предоставляет права прямого доступа. Вместо этого он позволяет синхронизировать информацию о товаре с аккаунтом Merchant Center.
Важно! Описанные ниже права доступа для разных типов сервисов предоставляются только одобренным поставщикам услуг. Если вы поставщик услуг и хотите использовать эту функцию, обратитесь в службу поддержки. Если вы уже получили разрешение на использование метода accounts.link для управления товарами в Content API for Shopping, то можете использовать этот сервис в Merchant API без дополнительных разрешений.
Управление аккаунтом. По умолчанию этот сервис предоставляет полные права
ADMIN.Управление продуктами. Этот сервис предоставляет полные права
ADMIN. Примечание. В будущем это будет ограничено только правами доступа, связанными с продуктом.
Как работают связи со сторонними платформами
Если вы используете стороннюю платформу для управления аккаунтами других компаний, то описанные ниже понятия будут соотноситься со структурой вашего аккаунта следующим образом:
- Поставщик услуг: ваш расширенный аккаунт.
- Аккаунт, получающий услугу. Аккаунт Merchant Center, представляющий компанию, которой вы управляете.
- Сервис:
accountManagement– рекомендуемый сервис для платформ электронной торговли и партнеров каналов, создающих новые аккаунты от имени продавцов. Создается аккаунт, принадлежащий продавцу, но связанный с вашим аккаунтом для управления. Это соответствует рекомендуемой структуре Merchant Center для такого варианта использования.accountAggregation: этот сервис связывает расширенный аккаунт с другим аккаунтом. Хотя этот метод поддерживается, мы не рекомендуем использовать его на платформах электронной торговли и партнерских каналах.
Подробнее о том, как настроить расширенный аккаунт и связать его с новыми аккаунтами Merchant Center, рассказывается в статье Как создать аккаунты.