Gerenciar o agrupamento de regiões

Uma região da API Merchant representa uma região geográfica que pode ser usada como um destino relacionado ao recurso accounts.products.regionalInventories. É possível definir regiões como coleções de CEPs ou, em alguns países, usando segmentações geográficas predefinidas. Para mais informações, consulte Configurar regiões.

A API Merchant fornece endpoints em lote para gerenciar suas regiões, permitindo que você crie, atualize e exclua até 100 regiões em uma única chamada de API. Isso é ideal para comerciantes que gerenciam disponibilidade e preços regionais (RAAP) em grande escala, melhorando a eficiência e simplificando a integração.

Visão geral

A API Batch permite realizar o seguinte com os métodos associados:

  • Criar várias regiões em uma única solicitação: regions:batchCreate
  • Excluir várias regiões de uma só vez: regions:batchDelete
  • Atualizar várias regiões simultaneamente: regions:batchUpdate

Pré-requisitos

Todas as solicitações em lote exigem a função de usuário ADMIN para autenticação.

Criar várias regiões

Este exemplo mostra como criar duas novas regiões (uma definida por códigos postais e outra por segmentação geográfica) em uma única chamada de BatchCreateRegions.

Solicitação

Crie o URL da solicitação da seguinte maneira:

POST
https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchCreate

O corpo da solicitação contém uma lista de requests, em que cada objeto especifica um regionId e os dados region a serem criados.

{
  "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"
          ]
        }
      }
    }
  ]
}

Resposta

Uma solicitação bem-sucedida retorna uma lista dos novos 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
    }
  ]
}

Atualizar várias regiões

Este exemplo mostra como usar BatchUpdateRegions para atualizar displayName e postalCodeArea de duas regiões. Você precisa fornecer um region.name para atualizar a região segmentada.

Solicitação

Crie o URL da solicitação da seguinte maneira:

POST https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchUpdate

O corpo da solicitação contém uma lista de requests. Cada objeto precisa especificar os dados region a serem atualizados. O campo region.name precisa conter o ID da região a ser atualizada, por exemplo,"98005". Especifique o recurso como name em vez de accounts/{ACCOUNT_ID}/regions/name. Incluir updateMask para indicar os campos a serem mudados é 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"
    }
  ]
}

Resposta

Uma solicitação bem-sucedida retorna uma lista dos objetos region atualizados.

{
  "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
    }
  ]
}

Excluir várias regiões

É possível excluir várias regiões em uma única chamada.

Solicitação

Este exemplo mostra como usar BatchDeleteRegions para excluir duas regiões em uma única chamada.

POST
https://merchantapi.googleapis.com/v1beta/accounts/{ACCOUNT_ID}/regions:batchDelete

O corpo da solicitação contém uma lista de requests, em que cada objeto especifica o name (sem "accounts/{ACCOUNT_ID}/regions/") da região a ser excluída.

{
  "requests":
   [
    {
      "name": "98005"
    },
    {
      "name": "07086"
    }
   ]
}

Resposta

Uma solicitação bem-sucedida retorna um corpo de resposta vazio, indicando que as regiões especificadas foram excluídas (ou não existiam).

{}

Limitações

Antes de começar, considere estas regras:

  • Operações atômicas: as solicitações em lote são atômicas. Se uma única operação no lote falhar (por exemplo, uma região não for criada), todo o lote vai falhar, e nenhuma mudança será feita. A API vai retornar um erro detalhando a causa da falha.
  • Limites de lote: cada solicitação em lote pode conter um máximo de 100 operações de região.
  • Cotas: esses endpoints usam os mesmos grupos de cotas que os equivalentes de operação única (regions.create, regions.delete, regions.update).

Erros e problemas comuns

Confira alguns problemas comuns e as soluções deles.

"O número de solicitações em um lote é muito grande"

Esse erro ocorre se o número de operações na matriz de solicitações exceder o limite de 100.

"error":
  {
    "code": 400,
    "message": "The number of requests in a batch is too large.",
    "status": "INVALID_ARGUMENT"
  }

Para corrigir isso, divida as operações em várias solicitações em lote de 100 ou menos.

Campo obrigatório ausente.

Esse erro ocorre quando um campo obrigatório está ausente. A mensagem de erro especifica o parâmetro ausente.

As mensagens de erro são as seguintes:

  • Para batchCreate: [regionId] Required parameter: regionId
  • Para batchUpdate: [region.name] Required field not provided.
  • Para batchDelete: [name] Required parameter: name

Para corrigir isso, verifique se todos os campos obrigatórios estão presentes em cada operação. Por exemplo, cada entrada em uma solicitação batchUpdate precisa incluir o region.name. Postar a solicitação a seguir resulta em um erro:

{
  "requests":
  [
    {
      "region":
        {
          "displayName": "An update without a region name"
        },
        "updateMask": "displayName"
    }
  ]
}

"A região com o ID especificado já existe"

Um erro vai ocorrer se você tentar criar uma região com um regionId que já existe.

A mensagem de erro é [regionId] Region with specified id already exists..

Para corrigir isso, verifique se todos os valores regionId são exclusivos no lote e não entram em conflito com as regiões atuais.

"Valor duplicado encontrado para o campo region.name ou regionId"

Um erro vai ocorrer se você tentar criar ou atualizar várias regiões com o mesmo ID em uma única solicitação em lote.

A mensagem de erro é Duplicate value found for field {fieldName} in this batch request with value {duplicated_value}..

Para corrigir isso, verifique se todos os valores de regionId (para batchCreate) ou region.name (para batchUpdate) são exclusivos em uma única solicitação em lote.

"Item não encontrado"

Ao usar batchUpdate, se alguma região especificada na solicitação não existir, todo o lote vai falhar com um erro 404 NOT_FOUND. Isso é diferente de batchDelete, que é bem-sucedido para regiões inexistentes.

"error": {
    "code": 404,
    "message": "item not found",
    "status": "NOT_FOUND"
}

Para corrigir isso, verifique se todas as regiões que você está tentando atualizar existem antes de enviar a solicitação.