Una región de la API de Merchant representa una región geográfica que puedes usar como objetivo relacionado con el recurso accounts.products.regionalInventories
. Puedes definir regiones como colecciones de códigos postales o, en algunos países, con la segmentación geográfica predefinida. Para obtener más información, consulta Cómo configurar regiones.
La API de Merchant proporciona extremos por lotes para administrar tus regiones, lo que te permite crear, actualizar y borrar hasta 100 regiones en una sola llamada a la API. Esto es ideal para los comercios que administran la disponibilidad y los precios regionales (RAAP) a gran escala, ya que mejora la eficiencia y simplifica la integración.
Descripción general
La API de Batch te permite lograr lo siguiente con los métodos asociados:
- Crea varias regiones en una sola solicitud:
regions:batchCreate
- Borra varias regiones a la vez:
regions:batchDelete
- Actualiza varias regiones de forma simultánea:
regions:batchUpdate
Requisitos previos
Todas las solicitudes por lotes requieren el rol de usuario ADMIN para la autenticación.
Crea varias regiones
En este ejemplo, se muestra cómo crear dos regiones nuevas (una definida por códigos postales y otra por segmentación geográfica) en una sola llamada de BatchCreateRegions
.
Solicitud
Construye la URL de la solicitud de la siguiente manera:
POST
https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchCreate
El cuerpo de la solicitud contiene una lista de requests
, en la que cada objeto especifica un regionId
y los datos de region
que se crearán.
{
"requests": [
{
"regionId": "seattle-area-98340",
"region": {
"displayName": "Seattle Region",
"postalCodeArea": {
"regionCode": "US",
"postalCodes": [
{
"begin": "98340"
}
]
}
}
},
{
"regionId": "co-de-states",
"region": {
"displayName": "Colorado and Delaware",
"geoTargetArea": {
"geotargetCriteriaIds": [
"21138",
"21141"
]
}
}
}
]
}
Respuesta
Una solicitud correcta devuelve una lista de los nuevos objetos region
.
{
"regions": [
{
"name": "accounts/{ACCOUNT_ID}/regions/seattle-area-98340",
"displayName": "Seattle Region",
"postalCodeArea": {
"regionCode": "US",
"postalCodes": [
{
"begin": "98340"
}
]
},
"regionalInventoryEligible": true,
"shippingEligible": true
},
{
"name": "accounts/{ACCOUNT_ID}/regions/co-de-states",
"displayName": "Colorado and Delaware",
"geotargetArea": {
"geotargetCriteriaIds": [
"21138",
"21141"
]
},
"regionalInventoryEligible": false,
"shippingEligible": false
}
]
}
Actualiza varias regiones
En este ejemplo, se muestra cómo usar BatchUpdateRegions
para actualizar displayName
y postalCodeArea
para dos regiones existentes. Debes proporcionar un region.name
para actualizar la región objetivo.
Solicitud
Construye la URL de la solicitud de la siguiente manera:
POST https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchUpdate
El cuerpo de la solicitud contiene una lista de requests
. Cada objeto debe especificar los datos de region
que se actualizarán. El campo region.name
debe contener el ID de la región que se actualizará, por ejemplo,"98005". Especifica el recurso como name
en lugar de accounts/{ACCOUNT_ID}/regions/name
. Incluir updateMask
para indicar los campos que se cambiarán es opcional.
{
"requests": [
{
"region": {
"name": "98005",
"displayName": "Seattle Updated Region",
"postalCodeArea": {
"regionCode": "US",
"postalCodes": [
{
"begin": "98330"
}
]
}
},
"updateMask": "displayName,postalCodeArea"
},
{
"region": {
"name": "07086",
"displayName": "NewYork Updated Region",
"postalCodeArea": {
"regionCode": "US",
"postalCodes": [
{
"begin": "11*"
}
]
}
},
"updateMask": "displayName,postalCodeArea"
}
]
}
Respuesta
Una solicitud correcta devuelve una lista de los objetos region
actualizados.
{
"regions": [
{
"name": "accounts/{ACCOUNT_ID}/regions/98005",
"displayName": "Seattle Updated Region",
"postalCodeArea": {
"regionCode": "US",
"postalCodes": [
{
"begin": "98330"
}
]
},
"regionalInventoryEligible": true,
"shippingEligible": true
},
{
"name": "accounts/{ACCOUNT_ID}/regions/07086",
"displayName": "NewYork Updated Region",
"postalCodeArea": {
"regionCode": "US",
"postalCodes": [
{
"begin": "11*"
}
]
},
"regionalInventoryEligible": true,
"shippingEligible": true
}
]
}
Cómo borrar varias regiones
Puedes borrar varias regiones en una sola llamada.
Solicitud
En este ejemplo, se muestra cómo usar BatchDeleteRegions
para borrar dos regiones en una sola llamada.
POST
https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchDelete
El cuerpo de la solicitud contiene una lista de requests
, en la que cada objeto especifica el name
(sin "accounts/{ACCOUNT_ID}/regions/"
) de la región que se borrará.
{
"requests":
[
{
"name": "98005"
},
{
"name": "07086"
}
]
}
Respuesta
Una solicitud correcta devuelve un cuerpo de respuesta vacío, lo que indica que se borraron las regiones especificadas (o que no existían).
{}
Limitaciones
Antes de comenzar, ten en cuenta estas reglas:
- Operaciones atómicas: Las solicitudes por lotes son atómicas. Si falla alguna operación individual dentro del lote (por ejemplo, si no se puede crear una región), fallará todo el lote y no se realizará ningún cambio. La API devolverá un error que detalla la causa de la falla.
- Límites de lotes: Cada solicitud por lotes puede contener un máximo de 100 operaciones regionales.
- Cuotas: Estos extremos usan los mismos grupos de cuotas que sus contrapartes de una sola operación (
regions.create
,regions.delete
,regions.update
).
Errores y problemas habituales
A continuación, se indican algunos errores comunes y sus soluciones.
"La cantidad de solicitudes en un lote es demasiado grande"
Este error se produce si la cantidad de operaciones en el array de solicitudes supera el límite de 100.
"error":
{
"code": 400,
"message": "The number of requests in a batch is too large.",
"status": "INVALID_ARGUMENT"
}
Para solucionar este problema, divide tus operaciones en varias solicitudes por lotes de 100 o menos.
Falta un campo obligatorio
Este error se produce cuando falta un campo obligatorio. El mensaje de error especifica el parámetro faltante.
Estos son los mensajes de error:
- Para
batchCreate
:[regionId] Required parameter: regionId
- Para
batchUpdate
:[region.name] Required field not provided.
- Para
batchDelete
:[name] Required parameter: name
Para corregir este problema, verifica que todos los campos obligatorios estén presentes en cada operación. Por ejemplo, cada entrada en una solicitud de batchUpdate
debe incluir el region.name
.
Publicar la siguiente solicitud genera un error:
{
"requests":
[
{
"region":
{
"displayName": "An update without a region name"
},
"updateMask": "displayName"
}
]
}
"Ya existe una región con el ID especificado"
Se produce un error si intentas crear una región con un regionId
que ya existe.
El mensaje de error es [regionId] Region with specified id already exists.
.
Para corregir este problema, verifica que todos los valores de regionId
sean únicos dentro del lote y no entren en conflicto con las regiones existentes.
"Se encontró un valor duplicado para el campo region.name o regionId"
Se produce un error si intentas crear o actualizar varias regiones con el mismo ID en una sola solicitud por lotes.
El mensaje de error es Duplicate value found for field {fieldName} in this batch
request with value {duplicated_value}.
.
Para solucionar este problema, verifica que todos los valores de regionId
(para batchCreate
) o region.name
(para batchUpdate
) sean únicos en una sola solicitud por lotes.
“No se encontró el elemento”
Cuando se usa batchUpdate
, si no existe alguna de las regiones especificadas en la solicitud, todo el lote fallará con un error 404 NOT_FOUND
. Esto es diferente de batchDelete
, que se ejecuta correctamente para las regiones inexistentes.
"error": {
"code": 404,
"message": "item not found",
"status": "NOT_FOUND"
}
Para solucionar este problema, verifica que todas las regiones que intentas actualizar existan antes de enviar la solicitud.