A diferencia de otros recursos, la API de Google Ads crea automáticamente los recursos de ubicación después de que creas un conjunto de recursos. Primero, crea un conjunto de recursos de sincronización de ubicación y conéctalo al cliente. Luego, si necesitas seleccionar un subconjunto de los recursos de ubicación en el conjunto de recursos para una campaña o un grupo de anuncios, crea un conjunto de recursos de grupo por ubicación y conéctalo a la campaña o al grupo de anuncios.
Crea un conjunto de recursos de sincronización de ubicación y conéctalo al cliente
- Crea un conjunto de recursos de sincronización de ubicación.
- Conéctalo a un cliente con
CustomerAssetSetService.
Crea un conjunto de recursos de sincronización de ubicación
- Crea un
AssetSetnuevo.- Establece
typeenLOCATION_SYNC. - Establece
location_seten unLocationSetnuevo.
- Establece
En el nuevo
LocationSet, haz lo siguiente:- Establece
location_ownership_typesegún tu caso de uso:- Establécelo en
BUSINESS_OWNERsi eres propietario de la ubicación de la empresa. - Establécelo en
AFFILIATEsi no eres propietario de la ubicación de la empresa, pero vendes tus productos allí.
- Establécelo en
Establece el campo oneof
sourcesegún tu caso de uso:Establece
business_profile_location_setsi deseas sincronizarte con tus ubicaciones en tu cuenta del Perfil de Negocio de Google.Cuando creas un
BusinessProfileLocationSetpara vincular Google Ads con una cuenta del Perfil de Negocio de Google, debes proporcionar un token de acceso de OAuth 2.0 en el campohttp_authorization_token. Este token actúa como prueba de que autorizas a Google Ads a acceder a los datos de ubicación del Perfil de Negocio de Google especificado.El token debe cumplir con los siguientes requisitos:
- Se debe generar para la Cuenta de Google (usuario o cuenta de servicio) cuya dirección de correo electrónico se proporciona en el campo
email_addressdeBusinessProfileLocationSet. - Esta cuenta debe tener permisos suficientes para leer las ubicaciones de la empresa en el Perfil de Negocio de Google.
- El token de OAuth 2.0 se debe obtener con el alcance
https://www.googleapis.com/auth/business.manage.
Para obtener instrucciones detalladas sobre cómo generar un token de acceso de OAuth 2.0, consulta Usa OAuth 2.0 para acceder a las APIs de Google.
- Se debe generar para la Cuenta de Google (usuario o cuenta de servicio) cuya dirección de correo electrónico se proporciona en el campo
Establece
chain_location_setsi deseas sincronizarte con las ubicaciones en los IDs de cadena especificados.Establece
maps_location_setsi deseas agregar ubicaciones manualmente con IDs de lugar.
- Establece
Después de completar estos pasos, la API de Google Ads genera recursos
de ubicación y los agrega al conjunto de recursos de sincronización de ubicación creado, de manera similar
a cuando lo haces manualmente con
AssetSetAssetService. No es necesario que los
manipules, a menos que desees agregarlos manualmente a conjuntos de recursos de grupo por ubicación estáticos.
Solo puede existir un conjunto de recursos de sincronización de ubicación activo
(status de
ENABLED) para un cliente. Si necesitas crear un tipo diferente de conjunto de recursos de sincronización de ubicación, primero quita el existente.
Conecta el conjunto de recursos de sincronización de ubicación a un cliente
Usa
CustomerAssetSetService.MutateCustomerAssetSets
para conectar el conjunto de recursos de sincronización de ubicación de la sección anterior a tu cliente.
(Opcional) Crea un conjunto de recursos de grupo por ubicación y conéctalo a una campaña o a un grupo de anuncios
Un conjunto de recursos de grupo por ubicación solo es necesario si necesitas seleccionar un subconjunto de recursos de ubicación. Esto se debe a que las campañas y los grupos de anuncios heredan los recursos de ubicación del nivel del cliente.
Los conjuntos de recursos de grupo por ubicación contienen un subconjunto de recursos de ubicación del conjunto de recursos de sincronización de ubicación. Puedes crear dinámicamente un conjunto de recursos de grupo por ubicación aprovechando algunas funciones del Perfil de Negocio de Google (como el filtrado por etiquetas) o los IDs y las ubicaciones de cadena. Como alternativa, puedes crear un conjunto de recursos de grupo por ubicación de forma estática.
- Crea un conjunto de recursos de grupo por ubicación. El conjunto de recursos de grupo por ubicación puede ser dinámico o estático.
- Conecta el conjunto de recursos a una campaña con o a un grupo de anuncios, según tus necesidades.
- (Opcional) Agrega los recursos generados anteriormente al conjunto de recursos de grupo por ubicación estático recién creado.
Para un cliente determinado, puedes crear varios conjuntos de recursos de grupo por ubicación dinámicos o estáticos.
Crea un conjunto de recursos de grupo por ubicación
Crea un AssetSet nuevo y establece
location_group_parent_asset_set_id en el ID del conjunto de recursos de sincronización de ubicación creado anteriormente.
Luego, establece algunos campos según si deseas crear un conjunto de recursos de grupo por ubicación dinámico o estático.
Conjuntos de recursos dinámicos
Según el campo que establezcas en LocationSet, establece
los campos según la siguiente regla:
| Si estableces el siguiente campo | Luego, establece el tipo en | Y establece este campo como el campo oneof asset_set_source |
|---|---|---|
business_profile_location_set |
BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP |
business_profile_location_group |
chain_location_set |
CHAIN_DYNAMIC_LOCATION_GROUP |
chain_location_group |
Si estableces maps_location_set cuando creas el conjunto de recursos de sincronización de ubicación
set, no podrás crear un conjunto de recursos de grupo por ubicación dinámico. Esto se debe a que agregaste ubicaciones manualmente por IDs de lugar y no hay funciones de filtrado que puedas usar para este tipo de ubicaciones.
Conjuntos de recursos estáticos
Establece type en
STATIC_LOCATION_GROUP.
Puedes crear conjuntos de recursos de grupo por ubicación estáticos para cualquier tipo de conjunto de recursos de sincronización de ubicación, sin importar qué campos (business_profile_location_set,
chain_location_set, o maps_location_set) establezcas en el
LocationSet.
Para los conjuntos de recursos de grupo por ubicación estáticos, debes agregar manualmente los recursos de ubicación generados a los conjuntos de recursos de grupo por ubicación sets.
Conecta el conjunto de recursos a una campaña o a un grupo de anuncios
Usa
CampaignAssetSetService.MutateCampaignAssetSets
para conectar el conjunto de recursos de grupo por ubicación a tu
campaña.
Como alternativa, usa
AdGroupAssetSetService.MutateAdGroupAssetSets
si deseas conectar el conjunto de recursos de grupo por ubicación a
un grupo de anuncios.
(Opcional) Agrega los recursos de ubicación al conjunto de recursos de grupo por ubicación estático
Este paso solo es obligatorio si creaste un conjunto de recursos de grupo por ubicación estático anteriormente.
- Usa el informe
asset_set_assetpara recuperar los nombres de recursos de los recursos generados automáticamente para el conjunto de recursos de sincronización de ubicación creado anteriormente. Usa el filtrado para recuperar solo los recursos que deseas. - Agrégalos al conjunto de recursos de grupo por ubicación estático con
AssetSetAssetService.MutateAssetSetAssets.
Administra los IDs de ubicación del Perfil de Negocio
Cuando usas un business_profile_location_set y filtras en
listing_id_filters
que se recuperan del sitio web o la API del Perfil de Negocio, puede ser necesario
convertir estos valores numéricos del tipo uint64 a int64. Si tu código genera un error de tiempo de ejecución que indica que el ID de ubicación del Perfil de Negocio está fuera del rango cuando lo agregas al campo repetido listing_id_filters[], es probable que debas convertirlo con cualquiera de los siguientes ejemplos:
Java
/**
* 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);
}
C#
/// <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;
}
Python
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
Ruby
# 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
Perl
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;
}
}