অঞ্চল ব্যাচিং পরিচালনা করুন

মার্চেন্ট এপিআই রিজিয়ন হলো একটি ভৌগোলিক অঞ্চল, যা আপনি accounts.products.regionalInventories রিসোর্সের সাথে সম্পর্কিত একটি টার্গেট হিসেবে ব্যবহার করতে পারেন। আপনি পোস্টাল কোডের সমষ্টি হিসেবে অথবা, কিছু দেশে, পূর্বনির্ধারিত জিওটার্গেট ব্যবহার করে রিজিয়ন নির্ধারণ করতে পারেন। আরও তথ্যের জন্য, ‘অঞ্চল সেট আপ করুন’ দেখুন।

মার্চেন্ট এপিআই আপনার অঞ্চলগুলি পরিচালনা করার জন্য ব্যাচ এন্ডপয়েন্ট সরবরাহ করে, যা আপনাকে একটিমাত্র এপিআই কলে ১০০টি পর্যন্ত অঞ্চল তৈরি, আপডেট এবং মুছে ফেলার সুযোগ দেয়। এটি সেইসব মার্চেন্টদের জন্য আদর্শ, যারা বৃহৎ পরিসরে আঞ্চলিক প্রাপ্যতা এবং মূল্য নির্ধারণ (RAAP) পরিচালনা করেন, যা কার্যকারিতা বৃদ্ধি করে এবং ইন্টিগ্রেশনকে সহজ করে তোলে।

সংক্ষিপ্ত বিবরণ

ব্যাচ এপিআই আপনাকে এর সাথে যুক্ত মেথডগুলোর মাধ্যমে নিম্নলিখিত কাজগুলো সম্পন্ন করতে দেয়:

  • একটি অনুরোধে একাধিক অঞ্চল তৈরি করুন : regions:batchCreate
  • একসাথে একাধিক অঞ্চল মুছুন : regions:batchDelete
  • একই সাথে একাধিক অঞ্চল আপডেট করুন : regions:batchUpdate

পূর্বশর্ত

সকল ব্যাচ অনুরোধের প্রমাণীকরণের জন্য ADMIN ব্যবহারকারী ভূমিকার প্রয়োজন।

একাধিক অঞ্চল তৈরি করুন

এই উদাহরণটি দেখায় কিভাবে BatchCreateRegions এর একটিমাত্র কলে দুটি নতুন অঞ্চল তৈরি করা যায় — একটি পোস্টাল কোড দ্বারা সংজ্ঞায়িত এবং অন্যটি জিও টার্গেটিং দ্বারা।

অনুরোধ

অনুরোধ URL-টি নিম্নরূপে গঠন করুন:

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

অনুরোধের মূল অংশে requests একটি তালিকা থাকে, যেখানে প্রতিটি অবজেক্ট একটি regionId এবং তৈরি করার জন্য region ডেটা নির্দিষ্ট করে দেয়।

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

নিম্নলিখিত নমুনাটি দেখায় কিভাবে একটি ব্যাচ অনুরোধে একাধিক অঞ্চল তৈরি করতে হয়:

জাভা

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.BatchCreateRegionsRequest;
import com.google.shopping.merchant.accounts.v1.BatchCreateRegionsResponse;
import com.google.shopping.merchant.accounts.v1.CreateRegionRequest;
import com.google.shopping.merchant.accounts.v1.Region;
import com.google.shopping.merchant.accounts.v1.Region.PostalCodeArea;
import com.google.shopping.merchant.accounts.v1.Region.PostalCodeArea.PostalCodeRange;
import com.google.shopping.merchant.accounts.v1.RegionsServiceClient;
import com.google.shopping.merchant.accounts.v1.RegionsServiceSettings;
import java.util.ArrayList;
import java.util.List;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to create multiple regions for a Merchant Center account. */
public class BatchCreateRegionsSample {

  private static String getParent(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static void batchCreateRegions(Config config, List<String> regionIds) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    RegionsServiceSettings regionsServiceSettings =
        RegionsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent to identify where to insert the regions.
    String parent = getParent(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (RegionsServiceClient regionsServiceClient =
        RegionsServiceClient.create(regionsServiceSettings)) {

      List<CreateRegionRequest> requests = new ArrayList<>();
      for (String regionId : regionIds) {
        requests.add(
            CreateRegionRequest.newBuilder()
                .setParent(parent)
                .setRegionId(regionId)
                .setRegion(
                    Region.newBuilder()
                        .setDisplayName("Region " + regionId)
                        .setPostalCodeArea(
                            PostalCodeArea.newBuilder()
                                .setRegionCode("US")
                                .addPostalCodes(
                                    PostalCodeRange.newBuilder()
                                        .setBegin("10001")
                                        .setEnd("10282")
                                        .build())
                                .build())
                        .build())
                .build());
      }

      BatchCreateRegionsRequest request =
          BatchCreateRegionsRequest.newBuilder().setParent(parent).addAllRequests(requests).build();

      System.out.println("Sending Batch Create Regions request");
      BatchCreateRegionsResponse response = regionsServiceClient.batchCreateRegions(request);
      System.out.println("Inserted Regions Names below");
      // The last part of the region name will be the ID of the region.
      // Format: `accounts/{account}/region/{region}`
      response.getRegionsList().forEach(region -> System.out.println(region.getName()));

    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The unique IDs of the regions to create.
    List<String> regionIds = new ArrayList<>();
    regionIds.add("REGION_1");
    regionIds.add("REGION_2");
    regionIds.add("REGION_3");
    regionIds.add("REGION_4");
    regionIds.add("REGION_5");

    batchCreateRegions(config, regionIds);
  }
}

একাধিক অঞ্চল আপডেট করুন

এই উদাহরণে দেখানো হয়েছে কিভাবে BatchUpdateRegions ব্যবহার করে দুটি বিদ্যমান অঞ্চলের displayName এবং postalCodeArea আপডেট করতে হয়। নির্দিষ্ট অঞ্চলটি আপডেট করার জন্য আপনাকে অবশ্যই একটি region.name সরবরাহ করতে হবে।

অনুরোধ

অনুরোধ URL-টি নিম্নরূপে গঠন করুন:

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

অনুরোধের মূল অংশে requests একটি তালিকা থাকে। প্রতিটি অবজেক্টে অবশ্যই আপডেট করার জন্য region ডেটা উল্লেখ করতে হবে। region.name ফিল্ডে অবশ্যই আপডেট করার অঞ্চলের আইডি থাকতে হবে, উদাহরণস্বরূপ, "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
    }
  ]
}

নিম্নলিখিত নমুনাটি দেখায় কিভাবে একটি ব্যাচ অনুরোধে একাধিক অঞ্চল আপডেট করতে হয়:

জাভা

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.accounts.v1.BatchUpdateRegionsRequest;
import com.google.shopping.merchant.accounts.v1.BatchUpdateRegionsResponse;
import com.google.shopping.merchant.accounts.v1.Region;
import com.google.shopping.merchant.accounts.v1.RegionsServiceClient;
import com.google.shopping.merchant.accounts.v1.RegionsServiceSettings;
import com.google.shopping.merchant.accounts.v1.UpdateRegionRequest;
import java.util.ArrayList;
import java.util.List;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to update multiple regions for a Merchant Center account. */
public class BatchUpdateRegionsSample {

  private static String getParent(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  private static String getRegionName(String accountId, String regionId) {
    return String.format("accounts/%s/regions/%s", accountId, regionId);
  }

  public static void batchUpdateRegions(Config config, List<String> regionIds) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    RegionsServiceSettings regionsServiceSettings =
        RegionsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent to identify where to update the regions.
    String parent = getParent(config.getAccountId().toString());
    String accountId = config.getAccountId().toString();

    // Calls the API and catches and prints any network failures/errors.
    try (RegionsServiceClient regionsServiceClient =
        RegionsServiceClient.create(regionsServiceSettings)) {

      List<UpdateRegionRequest> requests = new ArrayList<>();
      for (String regionId : regionIds) {
        requests.add(
            UpdateRegionRequest.newBuilder()
                .setRegion(
                    Region.newBuilder()
                        .setName(getRegionName(accountId, regionId))
                        .setDisplayName("Updated Region " + regionId)
                        .build())
                .setUpdateMask(FieldMask.newBuilder().addPaths("display_name").build())
                .build());
      }

      BatchUpdateRegionsRequest request =
          BatchUpdateRegionsRequest.newBuilder().setParent(parent).addAllRequests(requests).build();

      System.out.println("Sending Batch Update Regions request");
      BatchUpdateRegionsResponse response = regionsServiceClient.batchUpdateRegions(request);
      System.out.println("Updated Regions Names below");
      // The last part of the region name will be the ID of the region.
      // Format: `accounts/{account}/region/{region}`
      response.getRegionsList().forEach(region -> System.out.println(region.getName()));

    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The unique IDs of the regions to update.
    List<String> regionIds = new ArrayList<>();
    regionIds.add("REGION_1");
    regionIds.add("REGION_2");
    regionIds.add("REGION_3");
    regionIds.add("REGION_4");
    regionIds.add("REGION_5");

    batchUpdateRegions(config, regionIds);
  }
}

একাধিক অঞ্চল মুছুন

আপনি একটি কলেই একাধিক অঞ্চল মুছে ফেলতে পারেন।

অনুরোধ

এই উদাহরণটি দেখায় কিভাবে BatchDeleteRegions ব্যবহার করে একটিমাত্র কলে দুটি রিজিয়ন ডিলিট করা যায়।

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

অনুরোধের মূল অংশে requests একটি তালিকা থাকে, যেখানে প্রতিটি অবজেক্টে মুছে ফেলার জন্য অঞ্চলের name ( "accounts/{ACCOUNT_ID}/regions/" ছাড়া) উল্লেখ করা থাকে।

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

প্রতিক্রিয়া

একটি সফল অনুরোধ একটি খালি প্রতিক্রিয়া বডি ফেরত দেয়, যা নির্দেশ করে যে নির্দিষ্ট অঞ্চলগুলি মুছে ফেলা হয়েছে (বা বিদ্যমান ছিল না)।

{}

নিম্নলিখিত নমুনাটি দেখায় কিভাবে একটি ব্যাচ অনুরোধের মাধ্যমে একাধিক অঞ্চল মুছে ফেলা যায়:

জাভা

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.BatchDeleteRegionsRequest;
import com.google.shopping.merchant.accounts.v1.DeleteRegionRequest;
import com.google.shopping.merchant.accounts.v1.RegionsServiceClient;
import com.google.shopping.merchant.accounts.v1.RegionsServiceSettings;
import java.util.ArrayList;
import java.util.List;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to delete multiple regions for a Merchant Center account. */
public class BatchDeleteRegionsSample {

  private static String getParent(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  private static String getRegionName(String accountId, String regionId) {
    return String.format("accounts/%s/regions/%s", accountId, regionId);
  }

  public static void batchDeleteRegions(Config config, List<String> regionIds) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    RegionsServiceSettings regionsServiceSettings =
        RegionsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent to identify where to delete the regions.
    String parent = getParent(config.getAccountId().toString());
    String accountId = config.getAccountId().toString();

    // Calls the API and catches and prints any network failures/errors.
    try (RegionsServiceClient regionsServiceClient =
        RegionsServiceClient.create(regionsServiceSettings)) {

      List<DeleteRegionRequest> requests = new ArrayList<>();
      for (String regionId : regionIds) {
        requests.add(
            DeleteRegionRequest.newBuilder().setName(getRegionName(accountId, regionId)).build());
      }

      BatchDeleteRegionsRequest request =
          BatchDeleteRegionsRequest.newBuilder().setParent(parent).addAllRequests(requests).build();

      System.out.println("Sending Batch Delete Regions request");
      regionsServiceClient.batchDeleteRegions(request);
      System.out.println("Regions deleted successfully");

    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The unique IDs of the regions to delete.
    List<String> regionIds = new ArrayList<>();
    regionIds.add("REGION_1");
    regionIds.add("REGION_2");
    regionIds.add("REGION_3");
    regionIds.add("REGION_4");
    regionIds.add("REGION_5");

    batchDeleteRegions(config, regionIds);
  }
}

সীমাবদ্ধতা

শুরু করার আগে, এই নিয়মগুলো মনে রাখবেন:

  • অ্যাটমিক অপারেশন : ব্যাচ রিকোয়েস্টগুলো অ্যাটমিক। যদি ব্যাচের মধ্যে কোনো একটি অপারেশন ব্যর্থ হয় (উদাহরণস্বরূপ, একটি রিজিয়ন তৈরি হতে ব্যর্থ হলে), তাহলে পুরো ব্যাচটিই ব্যর্থ হবে এবং কোনো পরিবর্তন করা হবে না। এপিআইটি ব্যর্থতার কারণ বিস্তারিতভাবে উল্লেখ করে একটি এরর রিটার্ন করবে।
  • ব্যাচ সীমা : প্রতিটি ব্যাচ অনুরোধে সর্বাধিক ১০০টি অঞ্চল অপারেশন থাকতে পারে।
  • কোটা : এই এন্ডপয়েন্টগুলো তাদের একক-অপারেশন প্রতিরূপগুলোর ( regions.create , regions.delete , regions.update ) মতোই একই কোটা গ্রুপ ব্যবহার করে।

সাধারণ ত্রুটি এবং সমস্যা

এখানে কয়েকটি সাধারণ ভুল এবং সেগুলোর সমাধান দেওয়া হলো।

একটি ব্যাচে অনুরোধের সংখ্যা অনেক বেশি।

আপনার রিকোয়েস্ট অ্যারেতে অপারেশনের সংখ্যা ১০০-এর সীমা অতিক্রম করলে এই ত্রুটিটি ঘটে।

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

এটি সমাধান করতে, আপনার অপারেশনগুলোকে ১০০ বা তার কম সংখ্যক অনুরোধের একাধিক ব্যাচে ভাগ করুন।

প্রয়োজনীয় ক্ষেত্রটি অনুপস্থিত

প্রয়োজনীয় কোনো ফিল্ড অনুপস্থিত থাকলে এই ত্রুটিটি ঘটে। ত্রুটির বার্তায় অনুপস্থিত প্যারামিটারটি উল্লেখ করা থাকে।

ত্রুটির বার্তাগুলো নিম্নরূপ:

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

নির্দিষ্ট আইডি সহ অঞ্চলটি ইতিমধ্যেই বিদ্যমান।

আগে থেকে বিদ্যমান কোনো regionId দিয়ে অঞ্চল তৈরি করার চেষ্টা করলে একটি ত্রুটি দেখা দেয়।

ত্রুটির বার্তাটি হলো: [regionId] Region with specified id already exists.

এটি সমাধান করতে, যাচাই করুন যে ব্যাচের মধ্যে সমস্ত regionId মান অনন্য এবং বিদ্যমান অঞ্চলগুলির সাথে সাংঘর্ষিক নয়।

region.name অথবা regionId ফিল্ডের জন্য ডুপ্লিকেট মান পাওয়া গেছে।

একটি একক ব্যাচ অনুরোধের মধ্যে একই আইডি ব্যবহার করে একাধিক অঞ্চল তৈরি বা আপডেট করার চেষ্টা করলে একটি ত্রুটি দেখা দেয়।

ত্রুটির বার্তাটি হলো: Duplicate value found for field {fieldName} in this batch request with value {duplicated_value}.

এটি সমাধান করতে, যাচাই করুন যে একটি একক ব্যাচ অনুরোধের মধ্যে সমস্ত regionId ( batchCreate জন্য) বা region.name ( batchUpdate এর জন্য) মান অনন্য।

আইটেমটি খুঁজে পাওয়া যায়নি।

batchUpdate ব্যবহার করার সময়, অনুরোধে উল্লেখিত কোনো অঞ্চলের অস্তিত্ব না থাকলে, সম্পূর্ণ ব্যাচটি 404 NOT_FOUND ত্রুটির সাথে ব্যর্থ হবে। এটি batchDelete থেকে ভিন্ন, যা অস্তিত্বহীন অঞ্চলের ক্ষেত্রেও সফল হয়।

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

এটি সমাধান করতে, অনুরোধ পাঠানোর আগে যাচাই করে নিন যে আপনি যে সমস্ত অঞ্চল আপডেট করার চেষ্টা করছেন সেগুলোর অস্তিত্ব আছে কি না।