リージョン バッチ処理を管理する

Merchant API リージョンは、accounts.products.regionalInventories リソースに関連するターゲットとして使用できる地理的リージョンを表します。地域は、郵便番号のコレクションとして定義することも、一部の国では事前定義された地域ターゲティングを使用して定義することもできます。詳細については、リージョンを設定するをご覧ください。

Merchant API は、地域を管理するためのバッチ エンドポイントを提供します。これにより、1 回の API 呼び出しで最大 100 個の地域を作成、更新、削除できます。これは、地域別の在庫状況と価格(RAAP)を大規模に管理し、効率を向上させ、統合を簡素化する販売者に最適です。

概要

Batch API を使用すると、関連するメソッドで次の操作を行うことができます。

  • 1 回のリクエストで複数のリージョンを作成する: regions:batchCreate
  • 複数のリージョンを一度に削除する: regions:batchDelete
  • 複数のリージョンを同時に更新する: regions:batchUpdate

前提条件

バッチリクエストでは、すべて認証に ADMIN ユーザーロールが必要です。

複数のリージョンを作成する

この例では、BatchCreateRegions の 1 回の呼び出しで、郵便番号で定義されたリージョンと地域ターゲティングで定義されたリージョンの 2 つの新しいリージョンを作成する方法を示します。

リクエスト

次のようにリクエスト URL を作成します。

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

リクエストの本文には requests のリストが含まれます。各オブジェクトは、作成する regionIdregion データを指定します。

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

レスポンス

リクエストが成功すると、新しい 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
    }
  ]
}

複数のリージョンを更新する

この例では、BatchUpdateRegions を使用して、既存の 2 つのリージョンの displayNamepostalCodeArea を更新する方法を示します。ターゲット地域を更新するには、region.name を指定する必要があります。

リクエスト

次のようにリクエスト URL を作成します。

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

リクエストの本文には requests のリストが含まれます。各オブジェクトで、更新する region データを指定する必要があります。region.name フィールドには、更新する地域の ID(「98005」など)を含める必要があります。リソースは accounts/{ACCOUNT_ID}/regions/name ではなく name として指定します。変更するフィールドを示す updateMask を含めるかどうかは任意です。

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

レスポンス

リクエストが成功すると、更新された region オブジェクトのリストが返されます。

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

複数のリージョンを削除する

1 回の呼び出しで複数のリージョンを削除できます。

リクエスト

この例では、BatchDeleteRegions を使用して 1 回の呼び出しで 2 つのリージョンを削除する方法を示します。

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

リクエストの本文には requests のリストが含まれます。各オブジェクトは、削除するリージョンの name"accounts/{ACCOUNT_ID}/regions/" なし)を指定します。

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

レスポンス

リクエストが成功すると、空のレスポンス本文が返されます。これは、指定されたリージョンが削除された(または存在しなかった)ことを示します。

{}

制限事項

始める前に、次のルールに注意してください。

  • アトミック オペレーション: バッチ リクエストはアトミックです。バッチ内の単一のオペレーションが失敗した場合(たとえば、リージョンの作成に失敗した場合)、バッチ全体が失敗し、変更は行われません。API は、失敗の原因を詳しく説明するエラーを返します。
  • バッチの上限: 各バッチ リクエストには、最大 100 個のリージョン オペレーションを含めることができます。
  • 割り当て: これらのエンドポイントは、単一オペレーションの対応するエンドポイント(regions.createregions.deleteregions.update)と同じ割り当てグループを使用します。

一般的なエラーと問題

ここでは、よくある落とし穴とその解決策をいくつかご紹介します。

「The number of requests in a batch is too large」

このエラーは、リクエスト配列内のオペレーション数が 100 の上限を超えた場合に発生します。

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

この問題を解決するには、オペレーションを 100 個以下の複数のバッチ リクエストに分割します。

必須項目の値が指定されていません

このエラーは、必須フィールドが欠落している場合に発生します。エラー メッセージには、不足しているパラメータが指定されています。

エラー メッセージは次のとおりです。

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

この問題を解決するには、各オペレーションにすべての必須フィールドが存在することを確認します。たとえば、batchUpdate リクエストの各エントリには region.name が含まれている必要があります。次のリクエストを投稿すると、エラーが発生します。

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

「指定された ID のリージョンはすでに存在します」

すでに存在する regionId を使用してリージョンを作成しようとすると、エラーが発生します。

エラー メッセージは [regionId] Region with specified id already exists. です。

この問題を解決するには、すべての regionId 値がバッチ内で一意であり、既存のリージョンと競合しないことを確認します。

「Duplicate value found for field region.name or regionId found」

1 つのバッチ リクエスト内で同じ ID を持つ複数のリージョンを作成または更新しようとすると、エラーが発生します。

エラー メッセージは Duplicate value found for field {fieldName} in this batch request with value {duplicated_value}. です。

この問題を解決するには、1 つのバッチ リクエスト内で、すべての regionIdbatchCreate の場合)または region.namebatchUpdate の場合)の値が一意であることを確認します。

「アイテムが見つかりません」

batchUpdate を使用する場合、リクエストで指定されたリージョンが存在しないと、バッチ全体が 404 NOT_FOUND エラーで失敗します。これは、存在しないリージョンで成功する batchDelete とは異なります。

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

この問題を解決するには、リクエストを送信する前に、更新しようとしているすべてのリージョンが存在することを確認します。