Gestire il batching delle regioni

Una regione dell'API Merchant rappresenta una regione geografica che puoi utilizzare come target correlato alla risorsa accounts.products.regionalInventories. Puoi definire le regioni come raccolte di codici postali o, in alcuni paesi, utilizzando geotargeting predefiniti. Per ulteriori informazioni, vedi Configurare le regioni.

L'API Merchant fornisce endpoint batch per la gestione delle regioni, che ti consentono di creare, aggiornare ed eliminare fino a 100 regioni in una singola chiamata API. Questa soluzione è ideale per i commercianti che gestiscono i prezzi e la disponibilità a livello regionale (RAAP) su larga scala, migliorando l'efficienza e semplificando l'integrazione.

Panoramica

L'API Batch ti consente di eseguire le seguenti operazioni con i metodi associati:

  • Creare più regioni in una singola richiesta: regions:batchCreate
  • Eliminare più regioni contemporaneamente: regions:batchDelete
  • Aggiornare più regioni contemporaneamente: regions:batchUpdate

Prerequisiti

Tutte le richieste batch richiedono il ruolo utente ADMIN per l'autenticazione.

Creare più regioni

Questo esempio mostra come creare due nuove regioni, una definita dai codici postali e l'altra dal geotargeting, in una singola chiamata di BatchCreateRegions.

Richiesta

Costruisci l'URL della richiesta nel seguente modo:

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

Il corpo della richiesta contiene un elenco di requests, in cui ogni oggetto specifica un regionId e i dati region da creare.

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

Risposta

Una richiesta corretta restituisce un elenco dei nuovi oggetti 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
    }
  ]
}

Aggiornare più regioni

Questo esempio mostra come utilizzare BatchUpdateRegions per aggiornare displayName e postalCodeArea per due regioni esistenti. Devi fornire un region.name per aggiornare la regione di destinazione.

Richiesta

Costruisci l'URL della richiesta nel seguente modo:

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

Il corpo della richiesta contiene un elenco di requests. Ogni oggetto deve specificare i dati region da aggiornare. Il campo region.name deve contenere l'ID della regione da aggiornare, ad esempio "98005". Specifica la risorsa come name anziché accounts/{ACCOUNT_ID}/regions/name. L'inclusione di updateMask per indicare i campi da modificare è facoltativa.

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

Risposta

Una richiesta corretta restituisce un elenco degli oggetti region aggiornati.

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

Eliminare più regioni

Puoi eliminare più regioni in una singola chiamata.

Richiesta

Questo esempio mostra come utilizzare BatchDeleteRegions per eliminare due regioni in una singola chiamata.

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

Il corpo della richiesta contiene un elenco di requests, in cui ogni oggetto specifica il name (senza "accounts/{ACCOUNT_ID}/regions/") della regione da eliminare.

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

Risposta

Una richiesta corretta restituisce un corpo della risposta vuoto, a indicare che le regioni specificate sono state eliminate (o non esistevano).

{}

Limitazioni

Prima di iniziare, tieni presente queste regole:

  • Operazioni atomiche: le richieste batch sono atomiche. Se una singola operazione all'interno del batch non va a buon fine (ad esempio, la creazione di una regione non riesce), l' intero batch non andrà a buon fine e non verranno apportate modifiche. L'API restituirà un errore che descrive la causa del problema.
  • Limiti batch: ogni richiesta batch può contenere un massimo di 100 operazioni sulle regioni.
  • Quote: questi endpoint utilizzano gli stessi gruppi di quote delle loro controparti a operazione singola (regions.create, regions.delete, regions.update).

Errori e problemi comuni

Ecco alcuni errori comuni e le relative soluzioni.

"The number of requests in a batch is too large"

Questo errore si verifica se il numero di operazioni nell'array delle richieste supera il limite di 100.

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

Per risolvere il problema, dividi le operazioni in più richieste batch di 100 o meno.

Manca un campo obbligatorio

Questo errore si verifica quando manca un campo obbligatorio. Il messaggio di errore specifica il parametro mancante.

I messaggi di errore sono i seguenti:

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

Per risolvere il problema, verifica che tutti i campi obbligatori siano presenti in ogni operazione. Ad esempio, ogni voce in una richiesta batchUpdate deve includere region.name. La pubblicazione della seguente richiesta genera un errore:

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

"Region with specified ID already exists"

Si verifica un errore se tenti di creare una regione con un regionId già esistente.

Il messaggio di errore è [regionId] Region with specified id already exists..

Per risolvere il problema, verifica che tutti i valori regionId siano univoci all'interno del batch e non siano in conflitto con le regioni esistenti.

"Duplicate value found for field region.name or regionId found"

Si verifica un errore se tenti di creare o aggiornare più regioni con lo stesso ID all'interno di una singola richiesta batch.

Il messaggio di errore è Duplicate value found for field {fieldName} in this batch request with value {duplicated_value}..

Per risolvere il problema, verifica che tutti i valori regionId (per batchCreate) o region.name (per batchUpdate) siano univoci all'interno di una singola richiesta batch.

"Item not found"

Quando utilizzi batchUpdate, se una delle regioni specificate nella richiesta non esiste, l'intero batch non andrà a buon fine e verrà restituito un errore 404 NOT_FOUND. Questo comportamento è diverso da batchDelete, che ha esito positivo per le regioni inesistenti.

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

Per risolvere il problema, verifica che tutte le regioni che stai tentando di aggiornare esistano prima di inviare la richiesta.