В отличие от других ресурсов, ресурсы местоположения автоматически создаются API Google Ads после создания набора ресурсов. Сначала создайте набор ресурсов синхронизации местоположения и прикрепите его к клиенту. Затем, если вам нужно выбрать подмножество ресурсов местоположения в наборе ресурсов для кампании или группы объявлений, создайте набор ресурсов группы местоположений и прикрепите его к кампании или группе объявлений.
Создайте набор ресурсов синхронизации местоположения и прикрепите его к клиенту.
- Создайте набор активов синхронизации местоположения .
-  Прикрепите его к клиенту с помощью CustomerAssetSetService.
Создайте набор ресурсов синхронизации местоположения
-  Создайте новый AssetSet.-  Установите typeнаLOCATION_SYNC.
-  Установите location_setна новыйLocationSet.
 
-  Установите 
-  В новом LocationSet,-  Установите location_ownership_typeв зависимости от вашего варианта использования:-  Если вы являетесь владельцем местоположения компании, установите значение BUSINESS_OWNER.
-  Установите значение AFFILIATEесли вы не являетесь владельцем местоположения компании, но продаете там свою продукцию.
 
-  Если вы являетесь владельцем местоположения компании, установите значение 
-  Установите sourceполе oneof в зависимости от вашего варианта использования:-  Установите business_profile_location_setесли вы хотите синхронизировать данные с вашими местоположениями в аккаунте Google Business Profile .
-  Установите chain_location_set, если вы хотите синхронизироваться с местоположениями в указанных идентификаторах цепочек.
-  Установите maps_location_set, если вы хотите вручную добавлять местоположения с помощью идентификаторов мест .
 
-  Установите 
 
-  Установите 
 После выполнения этих шагов API Google Ads сгенерирует ресурсы местоположения и добавит их в созданный вами набор ресурсов синхронизации местоположения, аналогично тому, как это делается вручную с помощью AssetSetAssetService . Вам не нужно управлять ими, если только вы не хотите вручную добавлять их в наборы ресурсов статической группы местоположений .
 Для клиента может существовать только один активный набор ресурсов синхронизации местоположения со status « ENABLED ». Если вам нужно создать другой тип набора ресурсов синхронизации местоположения, сначала удалите существующий.
Прикрепите набор ресурсов синхронизации местоположения к клиенту
 Используйте CustomerAssetSetService.MutateCustomerAssetSets , чтобы прикрепить набор ресурсов синхронизации местоположения из предыдущего раздела к вашему клиенту. 
(Необязательно) Создайте набор активов группы местоположений и прикрепите его к кампании или группе объявлений.
Набор ресурсов группы местоположений необходим только в том случае, если вам нужно выбрать подмножество ресурсов местоположений. Это связано с тем, что кампании и группы объявлений наследуют ресурсы местоположений с уровня клиента.
Наборы ресурсов группы местоположений содержат подмножество ресурсов синхронизации местоположений . Вы можете динамически создавать набор ресурсов группы местоположений, используя некоторые функции профиля компании Google (например, фильтрацию по меткам) или идентификаторы цепочек и местоположения цепочек. Кроме того, вы можете создать набор ресурсов группы местоположений статически.
- Создайте набор активов группы местоположений . Набор активов группы местоположений может быть динамическим или статическим .
- Прикрепите набор активов к кампании с помощью или к группе объявлений, в зависимости от ваших потребностей .
- (Необязательно) Добавьте ранее созданные активы в недавно созданный набор активов статической группы местоположений .
Для определенного клиента вы можете создать несколько динамических или статических наборов активов группы местоположений.
Создайте набор активов группы местоположений
 Создайте новый AssetSet и задайте для location_group_parent_asset_set_id идентификатор ранее созданного набора активов синхронизации местоположений.
Затем задайте некоторые поля в зависимости от того, хотите ли вы создать динамический или статический набор активов группы местоположений.
Динамические наборы активов
 В зависимости от поля, которое вы задали в LocationSet , задайте поля на основе следующего правила:
| Если вы установите следующее поле | Затем установите тип | И установите это поле как поле asset_set_source oneof | 
|---|---|---|
| business_profile_location_set | BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP | business_profile_location_group | 
| chain_location_set | CHAIN_DYNAMIC_LOCATION_GROUP | chain_location_group | 
 Если вы зададите maps_location_set при создании набора ресурсов синхронизации местоположений , вы не сможете создать набор ресурсов динамической группы местоположений. Это связано с тем, что вы вручную добавили местоположения по идентификаторам мест, а для такого типа местоположений отсутствуют функции фильтрации.
Статические наборы активов
 Установите type на STATIC_LOCATION_GROUP . Вы можете создавать статические наборы активов группы местоположений для любых типов наборов активов синхронизации местоположений, независимо от того, какие поля ( business_profile_location_set , chain_location_set или maps_location_set ) вы задали в LocationSet .
Для статических наборов активов группы местоположений необходимо вручную добавить сгенерированные активы местоположений в наборы активов группы местоположений .
Прикрепите набор активов к кампании или группе объявлений.
 Используйте CampaignAssetSetService.MutateCampaignAssetSets , чтобы прикрепить набор активов группы местоположений к вашей кампании.
 В качестве альтернативы используйте AdGroupAssetSetService.MutateAdGroupAssetSets , если вы хотите прикрепить набор активов группы местоположений к группе объявлений.
(Необязательно) Добавьте ресурсы местоположения в набор ресурсов статической группы местоположений.
Этот шаг необходим только в том случае, если вы ранее создали набор статических активов группы местоположений .
-  Используйте отчёт asset_set_assetдля получения имён ресурсов, автоматически сгенерированных для ранее созданного набора ресурсов синхронизации местоположения . Используйте фильтрацию , чтобы получить только нужные вам ресурсы.
-  Добавьте их в набор активов статической группы местоположений с помощью AssetSetAssetService.MutateAssetSetAssets.
Управление идентификаторами местоположений бизнес-профиля
 При использовании business_profile_location_set и фильтра listing_id_filters , полученных с веб-сайта или API профиля компании, может потребоваться преобразовать эти числовые значения из типа uint64 в int64 . Если ваш код генерирует ошибку выполнения, сообщающую о том, что идентификатор местоположения вашего профиля компании выходит за пределы допустимого диапазона при добавлении его в повторяющееся поле listing_id_filters[], вам, вероятно, необходимо преобразовать его, используя любой из следующих примеров: 
Ява
/**
* Converts the business profile location ID to the format expected by the
* DynamicBusinessProfileLocationGroupFilter.listing_id_filters[] repeated field.
* The business profile location ID is an unsigned 64-bit integer, while the
* listing_id_filters[] field expects signed 64-bit integers. This means that
* for business profile location IDs that are out of range, we must perform the
* two's complement to convert it into a signed int.
 *
 * @param businessProfileLocationId The ID of a Business Profile location ID.
 * @return a Business Profile location ID as a signed 64-bit integer (long).
 */
public static long convertBusinessProfileLocationId(String businessProfileLocationId) {
    return Long.parseUnsignedLong(businessProfileLocationId);
}
С#
/// <summary>
/// Converts the business profile location ID to the format expected by the
/// DynamicBusinessProfileLocationGroupFilter.listing_id_filters[] repeated field.
/// The business profile location ID is an unsigned 64-bit integer, while the
/// listing_id_filters[] field expects signed 64-bit integers. This means that
/// for business profile location IDs that are out of range, we must perform the
/// two's complement to convert it into a signed int.
/// </summary>
/// <param name="businessProfileLocationId">The ID of a Business Profile location.</param>
/// <returns>The converted business location ID in signed 64 bit.</returns>
public long ConvertBusinessProfileLocationId(ulong businessProfileLocationId)
{
  return unchecked((long)businessProfileLocationId);
}
PHP
/**
* Converts a business profile location ID to a signed 64 bit integer.
*
* Converts the business profile location ID to the format expected by the
* DynamicBusinessProfileLocationGroupFilter.listing_id_filters[] repeated field.
* The business profile location ID is an unsigned 64-bit integer, while the
* listing_id_filters[] field expects signed 64-bit integers. This means that
* for business profile location IDs that are out of range, we must perform the
* two's complement to convert it into a signed int.
*
* @param string $businessProfileLocationId the ID of a Business Profile location
* @return int the converted business location ID in signed 64 bit
*/
public static function convertBusinessProfileLocationId(string $businessProfileLocationId): int
{
    $unsignedMax = '18446744073709551615'; // 2^64 - 1
    $signedMax = '9223372036854775807'; // 2^63 - 1
    // Check if the business profile location ID is within 64 bit range.
    // If not, throw an error.
    if (bccomp($businessProfileLocationId, '0') < 0 || bccomp($businessProfileLocationId, $unsignedMax) > 0) {
        throw new InvalidArgumentException(
            'The given business profile location id is outside of the range for a 64 bit integer.'
        );
    }
    // Check if the business profile location ID is in signed 64 bit range.
    // If it's not, convert it to its two's complement.
    if (bccomp($businessProfileLocationId, $signedMax) > 0) {
        // Two's complement: ID - 2^64
        return (int) bcsub($businessProfileLocationId, '18446744073709551616');
    }
    return (int) $businessProfileLocationId;
}
Питон
import ctypes
def convert_business_profile_location_id(business_profile_location_id):
    """Converts a business profile location ID to a signed 64 bit integer.
    Converts the business profile location ID to the format expected by the
    DynamicBusinessProfileLocationGroupFilter.listing_id_filters[] repeated field.
    The business profile location ID is an unsigned 64-bit integer, while the
    listing_id_filters[] field expects signed 64-bit integers. This means that
    for business profile location IDs that are out of range, we must perform the
    two's complement to convert it into a signed int.
    Args:
        business_profile_location_id: the ID of a Business Profile location ID.
    Returns:
        a Business Profile location ID as a signed 64 bit integer.
    """
    # Check if the business profile location ID is within 64 bit range.
    # If not, throw an error.
    if business_profile_location_id >= 2 ** 64:
        raise ValueError(
            "The given business profile location id is outside of the range for a 64 bit integer."
        )
    # Check if the business profile location ID is in signed 64 bit range.
    # If it's not, convert it to its two's complement.
    elif business_profile_location_id >= 2 ** 63:
        return ctypes.c_int64(business_profile_location_id).value
    else:
        return business_profile_location_id
Руби
# Converts the business profile location ID to the format expected by the
# DynamicBusinessProfileLocationGroupFilter.listing_id_filters[] repeated field.
# The business profile location ID is an unsigned 64-bit integer, while the
# listing_id_filters[] field expects signed 64-bit integers. This means that
# for business profile location IDs that are out of range, we must perform the
# two's complement to convert it into a signed int.
# Since Ruby supports arbitrary precision numbers, we have to calculate it
# manually.
LONG_MAX = 2 ** 63
ULONG_MAX = LONG_MAX * 2
def convert_business_profile_location_id(business_profile_location_id)
  # Check if the business profile location ID is within 64 bit range.
  # If not, throw an error.
  if business_profile_location_id >= 2 ** 64
    raise "The given business profile location id is outside of the range for a 64 bit integer."
  # Check if the business profile location ID is in signed 64 bit range.
  # If it's not, convert it to its two's complement.
  elseif business_profile_location_id >= 2**63
    -1 * (ULONG_MAX - business_profile_location_id)
  else
    business_profile_location_id
  end
end
Перл
use bigint;
# Converts the business profile location ID to the format expected by the
# DynamicBusinessProfileLocationGroupFilter.listing_id_filters[] repeated field.
# The business profile location ID is an unsigned 64-bit integer, while the
# listing_id_filters[] field expects signed 64-bit integers. This means that
# for business profile location IDs that are out of range, we must perform the
# two's complement to convert it into a signed int.
sub convert_business_profile_location_id {
  my ($business_profile_location_id) = @_;
  # Check if the business profile location ID is within 64 bit range.
  # If not, throw an error.
  if ($business_profile_location_id >= 2**64) {
    die "The given business profile location id is outside of the range for a 64 bit integer";
  # Check if the business profile location ID is in signed 64 bit range.
  # If it's not, convert it to its two's complement.
  } elseif ($business_profile_location_id >= 2**63) {
    return -1 * (2**64 - $business_profile_location_id);
  } else {
    return $business_profile_location_id;
  }
}