Адреса

Расширения "Адреса" позволяют добавить в стандартные текстовые объявления адрес, номер телефона и маркер местоположения. Со времени своего появления "Адреса" претерпели существенные изменения. Until mid–2014, business location information was managed by using the legacy location extensions and CampaignAdExtensionService. Потом появилась возможность управлять адресами через Google Мой бизнес, связывая их с AdWords, либо добавлять их, используя специальные фиды. Теперь эти фиды упразднены, и управление информацией об адресах компании осуществляется через Google Мой бизнес с помощью Менеджера адресов или Google My Business API.

Из этого руководства вы узнаете, как создавать адреса, используя Google My Business API, и связывать их с объявлениями с помощью AdWords API.

Расширения "Адреса" в сервисе "Google Мой бизнес"

В сервисе "Google Мой бизнес" хранится информация о всех ваших адресах из всех продуктов Google. Таким образом, вам не нужно беспокоиться о синхронизации адресов в сервисе "Google Мой бизнес" и AdWords. Достаточно один раз выполнить настройку необходимых объектов фидов, и адреса в расширениях AdWords будут автоматически синхронизироваться с новейшими данными в сервисе "Google Мой бизнес".

В этом руководстве даются подробные инструкции, как настраивать адреса программным путем с помощью Google My Business API и связывать их с AdWords, создавая необходимые объекты фидов. Если для создания адресов вы хотите использовать Менеджер адресов в сервисе "Google Мой бизнес", переходите сразу к шагу 3.

Процедура

Если вы не знакомы с концепцией фидов в AdWords, советуем сначала ознакомиться с руководством по созданию дополнительных ссылок с использованием фидов. Приведенные ниже инструкции основаны на материалах этого руководства.

Процесс создания и связывания адресов включает следующие шаги:

  1. Выполните аутентификацию для вызовов Google My Business API и AdWords API (OAuth 2.0).

  2. Создайте новое расширение, используя Google My Business API.

    1. Используйте accounts.list, чтобы извлечь аккаунты, которые вам принадлежат или которыми вы управляете в сервисе "Google Мой бизнес".
    2. Выберите нужный аккаунт (например, AccountType = BUSINESS).
    3. Создайте расширение и укажите ярлык, адрес, часы работы и другую информацию о своей компании.
  3. Создайте новый фид для расширений "Адреса" и свяжите его со своим аккаунтом в сервисе "Google Мой бизнес".

    1. Для systemFeedGenerationData укажите объект PlacesLocationFeedData, содержащий информацию о вашем аккаунте в сервисе "Google Мой бизнес".
    2. Для переменной origin задайте значение ADWORDS.
    3. Не указывайте никакие атрибуты фида (feedAttribute). Они будут созданы автоматически, поскольку фид генерируется системой.
    4. Выполните операцию FeedService.mutate ADD.
  4. Свяжите фид с клиентом.

    1. feedId – идентификатор фида с шага 3.
    2. Тип заполнителя для LOCATION – 7.
    3. Используйте соответствующую функцию сопоставления (matchingFunction).
    4. Выполните операцию CustomerFeedService.mutate ADD.
  5. Свяжите фид с определенными кампаниями или группами объявлений (необязательный шаг).

    1. feedId – идентификатор фида с шага 3.
    2. Тип заполнителя для LOCATION – 7.
    3. Используйте matchingFunction для фильтрации по ярлыку с шага 2c.
    4. Выполните операцию CampaignFeedService.mutate ADD или AdGroupFeedService.mutate ADD.

Если вы знакомы с фидами для других расширений, то, возможно, заметили, что перечисленные выше действия не включают создание объекта FeedMapping. Поскольку этот фид создается системой, AdWords может сопоставить его атрибуты с полями меток-заполнителей для расширений "Адреса", поэтому нет необходимости предоставлять эту информацию. В следующих разделах рассматривается, как создать объект systemFeedGenerationData при настройке фида (шаг 3a). Ниже также приведен полный пример кода.

Создание объекта PlacesLocationFeedData для фида

Назначение атрибута systemFeedGenerationData для фида сообщает системе AdWords, что необходимо выполнить следующие действия:

Задайте атрибуты объекта PlacesLocationFeedData следующим образом:

Атрибут Обязательно? Описание
emailAddress Да Адрес электронной почты владельца или одного из менеджеров аккаунта в сервисе "Google Мой бизнес". Должен совпадать с адресом, указанным в oAuthInfo.
oAuthInfo Да Данные OAuth2, которые обеспечивают вашему аккаунту AdWords доступ к аккаунту в сервисе "Google Мой бизнес".
businessAccountIdentifier Нет Идентификатор аккаунта компании, адреса которой следует использовать. Если вы применяете Google My Business API, этот идентификатор можно просмотреть в части account_id названия (name) объекта Account. Можно также скопировать часть BUSINESS_ACCOUNT_ID из URL компании, который выглядит примерно так:
https://business.google.com/b/BUSINESS_ACCOUNT_ID/...
businessNameFilter Нет Название компании для синхронизации с AdWords.
categoryFilters Нет Категории компаний для синхронизации с AdWords.
labelFilters Нет Ярлыки страниц для синхронизации с AdWords.

Создание объекта OAuthInfo для PlacesLocationFeedData

Атрибут oAuthInfo в объекте PlacesLocationFeedData предоставляет информацию, обеспечивающую аккаунту AdWords доступ для чтения данных из вашего аккаунта в сервисе "Google Мой бизнес".

Задайте атрибуты объекта OAuthInfo следующим образом:

Атрибут Значение Описание
httpMethod GET или PUT Метод HTTP для получения данных авторизации.
httpRequestUrl https://www.googleapis.com/auth/plus.business.manage Область действия OAuth для сервиса "Google Мой бизнес". Всегда используйте приведенное здесь значение при настройке фида в сервисе "Google Мой бизнес".
httpAuthorizationHeader Bearer OAUTH_ACCESS_TOKEN Заголовок авторизации, содержащий токен доступа OAuth, который предоставляет аккаунту AdWords разрешение на чтение данных из аккаунта в сервисе "Google Мой бизнес". Вместо OAUTH_ACCESS_TOKEN подставьте свой токен доступа, полученный для emailAddress объекта PlacesLocationFeedData, и область действия, соответствующую httpRequestUrl.

Полный пример кода

В следующем примере используются клиентские библиотеки Java для Google My Business API и AdWords API. Инструкции на других языках программирования можно найти здесь.

Шаг 1: выполните аутентификацию для вызовов Google My Business API и AdWords API (OAuth 2.0)

// Creating the default factory and transport (used later)
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

// Load the credentials from the ads.properties file.
// Please note: This example assumes that your AdWords and MyBusiness accounts
// are linked to the same Google account, and that both scopes were used when
// generating the refresh token:
// - https://www.googleapis.com/auth/adwords
// - https://www.googleapis.com/auth/plus.business.manage
// If you are using different Google accounts, you must authenticate
// separately and maintain two credentials (see
// /my-business/content/set-up-java-client).
Credential credential =
    new OfflineCredentials.Builder()
        .forApi(Api.ADWORDS)
        .withHttpTransport(httpTransport)
        .fromFile()
        .build()
        .generateCredential();

Шаг 2: создайте новое расширение "Адреса", используя Google My Business API

// Initialize GMB.
Mybusiness gmb =
    new Mybusiness.Builder(httpTransport, jsonFactory, credential)
        .setApplicationName(APPLICATION_NAME)
        .build();
// Get list of GMB accounts (2a).
Mybusiness.Accounts.List listAccounts = gmb.accounts().list();
ListAccountsResponse response = listAccounts.execute();
List<Account> accounts = response.getAccounts();

// Find the account to work with (2b). The first BUSINESS account is used
// here, but you can use any other account as well (e.g., PERSONAL).
Account mainAccount = null;
for (Account account : accounts) {
  if (account.getType().equalsIgnoreCase("BUSINESS")) {
    mainAccount = account;
    break;
  }
}
if (mainAccount == null) {
  throw new RuntimeException("Main GMB account not found");
}
// Create the location (2c).
Location location = new Location();
location.setLocationName("My Company");
location.setStoreCode("Company-1");
location.setPrimaryPhone("16505550001");
location.setPrimaryCategory(new Category().setCategoryId("gcid:software_company"));
location.setWebsiteUrl("https://www.example.com/");
// Create an address.
Address address = new Address();
List<String> addressLines = new ArrayList<String>();
addressLines.add("1600 Amphitheatre Pkwy");
address.setAddressLines(addressLines);
address.setLocality("Mountain View");
address.setAdministrativeArea("CA");
address.setCountry("US");
address.setPostalCode("94043");
location.setAddress(address);
// Create business hours (optional).
BusinessHours businessHours = new BusinessHours();
List<TimePeriod> periods = new ArrayList<TimePeriod>();
List<String> days =
    Arrays.asList("Monday", "Tuesday", "Wednesday", "Thursday", "Friday");
for (String day : days) {
  TimePeriod period = new TimePeriod();
  period.setOpenDay(day);
  period.setOpenTime("9:00");
  period.setCloseTime("17:00");
  period.setCloseDay(day);
  periods.add(period);
}
businessHours.setPeriods(periods);
location.setRegularHours(businessHours);

// Assign a label to the location (optional). This example uses the AdWords
// customer ID as a label to associate the location with an ad group in AdWords.
// You can use any label value to identify locations, or no label at all
// (e.g., filter by business name or category).
location.setLabels(Collections.singletonList(INSERT_CUSTOMER_ID_HERE));
CreateLocationRequest createLocationRequest = new CreateLocationRequest();
createLocationRequest.setLocation(location);
createLocationRequest.setLanguageCode("en-US");
// Use a random request ID.
createLocationRequest.setRequestId(UUID.randomUUID().toString());
Mybusiness.Accounts.Locations.Create createLocation =
    gmb.accounts().locations().create(mainAccount.getName(),
    createLocationRequest);
Location createdLocation = createLocation.execute();

Шаг 3: создайте новый фид, связанный с сервисом "Google Мой бизнес"

// Initialize AdWords.
AdWordsSession session = new AdWordsSession.Builder()
    .fromFile()
    .withOAuth2Credential(credential)
    .build();
session.setClientCustomerId(INSERT_CUSTOMER_ID_HERE);
AdWordsServices services = new AdWordsServices();
FeedServiceInterface feedService =
    services.get(session, FeedServiceInterface.class);
// Create the feed object.
Feed gmbFeed = new Feed();
gmbFeed.setName("GMB feed #" + System.currentTimeMillis());
// Create the PlacesLocationFeedData object (3a).
PlacesLocationFeedData feedData = new PlacesLocationFeedData();
feedData.setEmailAddress(GMB_ACCOUNT_EMAIL);
OAuthInfo oAuthInfo = new OAuthInfo();
oAuthInfo.setHttpMethod("GET");
oAuthInfo.setHttpRequestUrl(
    "https://www.googleapis.com/auth/plus.business.manage");
oAuthInfo.setHttpAuthorizationHeader(
    String.format("Bearer %s", credential.getAccessToken()));
feedData.setOAuthInfo(oAuthInfo);
gmbFeed.setSystemFeedGenerationData(feedData);
// Since this feed's feed items will be managed by AdWords,
// you must set its origin to ADWORDS (3b).
gmbFeed.setOrigin(FeedOrigin.ADWORDS);
// Note: No feed attributes for the feed were specified, as this is a
// system-generated feed (3c).
// Create an operation to add the feed.
FeedOperation feedOperation = new FeedOperation();
feedOperation.setOperand(gmbFeed);
feedOperation.setOperator(Operator.ADD);
// Add the feed (3d).
FeedReturnValue addFeedResult = feedService.mutate(
    new FeedOperation[] {feedOperation});
Feed createdFeed = addFeedResult.getValue(0);

Шаг 4: свяжите фид с клиентом

CustomerFeedServiceInterface customerFeedService =
    services.get(session, CustomerFeedServiceInterface.class);
CustomerFeed customerFeed = new CustomerFeed();
// Set feedId and placeholder type (4a + 4b).
customerFeed.setFeedId(createdFeed.getId());
customerFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_LOCATION});
// Create a matching function that will always evaluate to true (4c).
Function customerMatchingFunction = new Function();
ConstantOperand constOperand = new ConstantOperand();
constOperand.setType(ConstantOperandConstantType.BOOLEAN);
constOperand.setBooleanValue(true);
customerMatchingFunction.setLhsOperand(
    new FunctionArgumentOperand[] {constOperand});
customerMatchingFunction.setOperator(FunctionOperator.IDENTITY);
customerFeed.setMatchingFunction(customerMatchingFunction);
// Create an operation to add the customer feed.
CustomerFeedOperation customerFeedOperation = new CustomerFeedOperation();
customerFeedOperation.setOperand(customerFeed);
customerFeedOperation.setOperator(Operator.ADD);
// Add the feed (4d).
CustomerFeedReturnValue customerFeedResult = customerFeedService.mutate(
    new CustomerFeedOperation[] {customerFeedOperation});
CustomerFeed createdCustomerFeed = customerFeedResult.getValue(0);

Шаг 5: свяжите фид с определенными группами объявлений (аналогично с кампаниями)

AdGroupFeedServiceInterface adgroupFeedService =
    services.get(session, AdGroupFeedServiceInterface.class);
// Create the ad group feed.
AdGroupFeed adgroupFeed = new AdGroupFeed();
adgroupFeed.setAdGroupId(AD_GROUP_ID);
// Set feedId and placeholder type (5a + 5b).
adgroupFeed.setFeedId(createdFeed.getId());
adgroupFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_LOCATION});
// Define matching function based on the label (5c).
Function matchingFunction = new Function();
String matchingFunctionString = String.format(
    "EQUALS(FeedAttribute[%d, 14], \"%s\")",
    createdFeed.getId(),
    createdLocation.getLabels().get(0));
matchingFunction.setFunctionString(matchingFunctionString);
adgroupFeed.setMatchingFunction(matchingFunction);
// Create an operation to add the ad group feed.
AdGroupFeedOperation operation = new AdGroupFeedOperation();
operation.setOperand(adgroupFeed);
operation.setOperator(Operator.ADD);
// Add the feed (5d).
AdGroupFeedReturnValue result = adgroupFeedService.mutate(
    new AdGroupFeedOperation[]{operation});
AdGroupFeed createdAdGroupFeed = result.getValue(0);

Фильтрация расширений "Адреса"

Расширения "Адреса" автоматически включаются для всех кампаний и групп объявлений в аккаунте. Чтобы применить их лишь к определенной группе объявлений или кампании, настройте фильтры.

Стратегии фильтрации

Расширения "Адреса" поддерживают фильтры на нескольких уровнях аккаунта. Эти фильтры можно определить с помощью различных механизмов. Используйте matchingFunction объекта CampaignFeed или AdGroupFeed, если вы хотите показывать разные адреса в объявлениях из разных кампаний или групп объявлений.

Приоритет имеет наиболее узкий фильтр. Допустим, у вас есть:

  • CustomerFeed;
  • CampaignFeed для кампании A;
  • AdGroupFeed для группы объявлений G в кампании A;
  • другая кампания B, не имеющая ни CampaignFeed, ни AdGroupFeed.

Вот что вы получите в результате такой настройки (пунктирной линией обозначено, какая функция сопоставления используется для объявлений):

  • В объявлениях из группы G адреса будут показываться только для элементов, которые соответствуют функции сопоставления (matchingFunction) в AdGroupFeed.
  • В объявлениях из всех остальных групп в кампании А адреса будут показываться только для элементов, которые соответствуют функции сопоставления в CampaignFeed.
  • В объявлениях из кампании B адреса будут показываться для элементов, которые соответствуют функции сопоставления в CustomerFeed.

Использование атрибутов для фильтрации

Фильтры в объектах Feed ограничивают количество синхронизируемых элементов фида с помощью атрибутов businessNameFilter, categoryFilters или labelFilters объекта PlacesLocationFeedData. Фильтры в других объектах определяют, какие элементы фидов в AdWords будут использоваться в качестве адресов для заданного сочетания клиента, кампании и группы объявлений. Эти фильтры можно применять в следующих случаях:

  • Если один и тот же аккаунт в сервисе "Google Мой бизнес" используется с несколькими аккаунтами AdWords, при этом каждый аккаунт AdWords логически связан с подмножеством адресов.
  • Если в сервисе "Google Мой бизнес" у вас есть адреса, которые никогда не должны показываться в объявлениях.

Вы можете указать для аккаунта, кампании или группы объявлений функции сопоставления для фильтрации по любым доступным атрибутам в фиде адресов. Мы рекомендуем фильтрацию по следующим атрибутам:

  • Ярлыки (метка-заполнитель 14). Указав ярлыки для каждого адреса в сервисе "Google Мой бизнес", вы сможете выполнять фильтрацию в AdWords по любым нужным вам критериям (например, по идентификатору клиента или уникальному идентификатору, созданному вашим приложением).

    Если задано поле labelFilters, для синхронизации в элементы фида будут отбираться только страницы, у которых есть какие-либо из указанных ярлыков. Если в labelFilters нет значения, для синхронизации будут допущены все страницы. Кроме того, все ярлыки страницы в сервисе "Google Мой бизнес" синхронизируются в атрибут фида с feedAttributeId = 14 и type = STRING_LIST. Вы можете отфильтровать только те элементы фида, у которых есть один или несколько ярлыков, указав соответствующее условие в функции сопоставления:

    CONTAINS_ANY(FeedAttribute[FeedId,14],{"label1","label2","label3"})
    
  • Название компании (метка-заполнитель 1). Для более тщательной фильтрации можно использовать название компании.

  • Категория компании (метка-заполнитель 9). Фильтрация по категориям позволяет определить более широкие соответствия или устранить неоднозначность при использовании в сочетании с названием компании (они объединяются через AND).

Подробнее о фильтрации по идентификатору атрибута фида читайте в руководстве по функциям сопоставления. Примеры объектов CampaignFeed и AdGroupFeed можно найти в руководстве по созданию дополнительных ссылок с использованием фидов.

Оставить отзыв о...

Текущей странице
Нужна помощь? Обратитесь в службу поддержки.