Merchant API ব্যবহার করে প্রোডাক্ট পর্যালোচনা করা

প্রোডাক্ট রিভিউ হল গ্রাহকদের জন্য Shopping অভিজ্ঞতার একটি গুরুত্বপূর্ণ অংশ। এইসব রেটিং ও রিভিউ গ্রাহকদের প্রোডাক্ট রিসার্চ ও কেনাকাটা সংক্রান্ত সিদ্ধান্ত নিতে সাহায্য করে। প্রোডাক্ট সম্পর্কে ইতিবাচক রিভিউ কোনও সেলারের প্রোডাক্ট পৃষ্ঠায় আরও বেশি উপযুক্ত গ্রাহকদের নিয়ে আসতে পারে। সোর্সের মধ্যে রয়েছে বিক্রেতা, রিভিউ অ্যাগ্রিগেটর, রিভিউ সাইট ও Google ব্যবহারকারী।

Merchant API ব্যবহার করে কীভাবে প্রোডাক্ট রিভিউ ম্যানেজ করতে পারবেন তা এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে।

পূর্বশর্ত

Google-কে নির্দিষ্ট তথ্য দিতে হবে। আপনার কাছে নিম্নলিখিতগুলি থাকতে হবে:

  • Google Merchant Center-এ অ্যাক্টিভ প্রোডাক্ট রিভিউ ফিড।
  • আপনার অ্যাকাউন্টকে প্রোডাক্ট রেটিং প্রোগ্রামে নথিভুক্ত করতে হবে। আপনি প্রোগ্রাম সাব-API ব্যবহার করে প্রোগ্রাম্যাটিক উপায়ে উপযুক্ততা চেক করতে পারেন অথবা Merchant Center-এর মাধ্যমে চেক করতে পারেন। আপনি উপযুক্ত না হলে, প্রোডাক্ট রেটিং প্রোগ্রামে এনরোল করা সম্পর্কে আরও জানুন।
  • Merchant API ব্যবহার করে প্রোডাক্ট রিভিউ করতে, "কী সমস্যা/প্রশ্ন?" বিকল্পের অধীনে Shopping API সহায়তা ফর্ম থেকে একটি অনুমোদিত তালিকার অনুরোধ জমা দিন।

ডেটা সোর্স তৈরি করা

প্রোডাক্ট রিভিউ ফিড তৈরি করতে datasource.create পদ্ধতি ব্যবহার করুন। আগে থেকে থাকা মার্চেন্ট বা প্রোডাক্ট রিভিউ ফিড উপলভ্য থাকলে, accounts.dataSources.name ফেচ করতে accounts.dataSources.list ব্যবহার করুন। প্রতিটি পর্যালোচনার জন্য আপনার তৈরি করা বা লোকাল ডেটাবেস থেকে পাওয়া ডেটা সোর্সের নাম সেভ করুন। অনুরোধের ফর্মটি নিম্নলিখিত:

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources

উদাহরণ

উদাহরণে একটি সাধারণ অনুরোধ ও উত্তর দেখানো হয়েছে:

অনুরোধ

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Data Source",
  "primaryProductDataSource": {}
}

উত্তর

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My API Data Source",
  "primaryProductDataSource": {},
  "input": "API"
}

আরও তথ্যের জন্য, প্রোডাক্ট রিভিউ ডেটা সোর্স তৈরি করুন দেখুন।

প্রোডাক্ট রিভিউ লেখা

আপনি accounts.productreviews.insert পদ্ধতি ব্যবহার করে কোনও প্রোডাক্ট রিভিউ তৈরি বা আপডেট করতে পারবেন। accounts.productreviews.insert পদ্ধতিতে productreview রিসোর্স ও ডেটা সোর্সের নাম ইনপুট হিসেবে নেওয়া হয়। সফল হলে, এটি নতুন বা আপডেট করা productreview রিটার্ন করে। প্রোডাক্ট রিভিউ তৈরি করতে, আপনার অবশ্যই একটি datasource.name থাকতে হবে।

অনুরোধের ফর্ম:

POST https://merchantapi.googleapis.com/reviews/v1alpha/{parent=accounts/{ACCOUNT_ID}/}productReviews:insert

নিচে দেওয়া অনুরোধের নমুনা থেকে আপনি কীভাবে প্রোডাক্ট রিভিউ তৈরি করতে পারেন তা বুঝতে পারবেন।

POST https://merchantapi.googleapis.com/reviews/v1alpha/accounts/{ACCOUNT_ID}/productReviews:insert?dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}

  productReviewId = 'my_product_review'
  productReviewAttributes {
    aggregatorName = 'aggregator_name'
    subclientName = 'subclient_name'
    publisherName = 'publisher_name'
    publisherFavicon = 'https://www.google.com/favicon.ico'
    reviewerId = 'reviewer_id'
    reviewerIsAnonymous = false
    reviewerUsername = 'reviewer_username'
    reviewLanguage = 'en'
    reviewCountry = 'US'
    reviewTime = '2024-04-01T00:00:00Z'
    title = 'Incredible product'
    content = 'This is an incredible product.'
    pros = ['pro1', 'pro2']
    cons = ['con1', 'con2']
    reviewLink = {
      type = 'SINGLETON'
      link = 'https://www.google.com'
    }
    reviewerImageLinks = ['https://www.google.com/reviewer.png']
    minRating = 1
    maxRating = 10
    rating = 8.5
    productNames = ['product_name']
    productLinks = ['https://www.google.com/product']
    asins = ['asin1', 'asin2']
    gtins = ['gtin1', 'gtin2']
    mpns = ['mpn1', 'mpn2']
    skus = ['sku1', 'sku2']
    brands = ['brand1', 'brand2']
    isSpam = false
    collectionMethod = 'POST_FULFILLMENT'
    transactionId = 'transaction_id'
  }

প্রোডাক্ট রিভিউ তৈরি করার পরে, রিভিউটি প্রোপাগেট হতে কয়েক মিনিট সময় লাগতে পারে।

একাধিক প্রোডাক্ট রিভিউ অ্যাসিঙ্ক্রোনাসভাবে যোগ করার জন্য আপনি এই নমুনা ব্যবহার করতে পারেন:

Java

import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.protobuf.Timestamp;
import com.google.shopping.merchant.reviews.v1alpha.InsertProductReviewRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReview;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewAttributes;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewAttributes.ReviewLink;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewAttributes.ReviewLink.Type;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to insert multiple product reviews asynchronously. */
public class InsertProductReviewsAsyncSample {

  private static String generateRandomString() {
    String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    Random random = new Random();
    StringBuilder sb = new StringBuilder(8);
    for (int i = 0; i < 8; i++) {
      sb.append(characters.charAt(random.nextInt(characters.length())));
    }
    return sb.toString();
  }

  // Returns a product review with a random ID.
  private static ProductReview createProductReview(String accountId) {
    // MAKE SURE YOU PASS AN ACTUAL PRODUCT REVIEW ID HERE.
    String productReviewId = generateRandomString();

    ProductReviewAttributes attributes =
        ProductReviewAttributes.newBuilder()
            .setTitle("Would not recommend!")
            .setContent("Not fantastic.")
            .setMinRating(1)
            .setMaxRating(5)
            .setRating(2)
            .setReviewTime(Timestamp.newBuilder().setSeconds(123456789).build())
            .addProductLinks("exampleproducturl.com")
            .setReviewLink(
                ReviewLink.newBuilder()
                    .setLink("examplereviewurl.com")
                    // The review page contains only this single review.
                    .setType(Type.SINGLETON)
                    .build())
            .addGtins("9780007350896")
            .addGtins("9780007350897")
            .build();

    return ProductReview.newBuilder()
        .setProductReviewId(productReviewId)
        .setProductReviewAttributes(attributes)
        .build();
  }

  public static void asyncInsertProductReviews(String accountId, String dataSourceId)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      // Arbitrarily creates five product reviews with random IDs.
      List<InsertProductReviewRequest> requests = new ArrayList<>();
      for (int i = 0; i < 5; i++) {
        InsertProductReviewRequest request =
            InsertProductReviewRequest.newBuilder()
                .setParent(String.format("accounts/%s", accountId))
                .setProductReview(createProductReview(accountId))
                // Must be a product reviews data source. In other words, a data source whose "type"
                // is ProductReviewDataSource.
                .setDataSource(String.format("accounts/%s/dataSources/%s", accountId, dataSourceId))
                .build();
        requests.add(request);
      }

      // Inserts the product reviews.
      List<ApiFuture<ProductReview>> futures =
          requests.stream()
              .map(
                  request ->
                      productReviewsServiceClient.insertProductReviewCallable().futureCall(request))
              .collect(Collectors.toList());

      // Creates callback to handle the responses when all are ready.
      ApiFuture<List<ProductReview>> responses = ApiFutures.allAsList(futures);
      ApiFutures.addCallback(
          responses,
          new ApiFutureCallback<List<ProductReview>>() {
            @Override
            public void onSuccess(List<ProductReview> results) {
              System.out.println("Inserted product reviews below:");
              System.out.println(results);
            }

            @Override
            public void onFailure(Throwable throwable) {
              System.out.println(throwable);
            }
          },
          MoreExecutors.directExecutor());
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    asyncInsertProductReviews(config.getAccountId().toString(), "YOUR_DATA_SOURCE_ID");
  }
}

প্রোডাক্ট রিভিউ ফিরিয়ে আনা

প্রোডাক্ট রিভিউ দেখতে, accounts.productreviews.get ব্যবহার করুন। এটি শুধু পড়া যাবে। এর জন্য accountId এবং প্রোডাক্ট রিভিউয়ের আইডি প্রয়োজন। এগুলি নাম ফিল্ডের অংশ হিসেবে দিতে হবে। GET পদ্ধতি সংশ্লিষ্ট প্রোডাক্ট রিভিউ রিসোর্স রিটার্ন করে।

GET https://merchantapi.googleapis.com/reviews/v1alpha/{name=accounts/{ACCOUNT_ID}/productReviews/*}

প্রোডাক্ট রিভিউ পাওয়ার জন্য আপনি এই নমুনা ব্যবহার করতে পারেন:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1alpha.GetProductReviewRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReview;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to get a product review. */
public class GetProductReviewSample {

  public static void getProductReview(String accountId, String productReviewId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      GetProductReviewRequest request =
          GetProductReviewRequest.newBuilder()
              .setName(String.format("accounts/%s/productReviews/%s", accountId, productReviewId))
              .build();

      System.out.println("Sending get product review request:");
      ProductReview response = productReviewsServiceClient.getProductReview(request);
      System.out.println("Product review retrieved successfully:");
      System.out.println(response.getName());
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    String productReviewId = "YOUR_PRODUCT_REVIEW_ID";
    getProductReview(config.getAccountId().toString(), productReviewId);
  }
}

প্রোডাক্ট রিভিউয়ের তালিকা তৈরি করা

তৈরি করা সব প্রোডাক্ট পর্যালোচনা দেখতে আপনি productreviews.list পদ্ধতি ব্যবহার করতে পারবেন।

GET https://merchantapi.googleapis.com/reviews/v1alpha/{parent=accounts/{ACCOUNT_ID}}/productReviews

কোনও প্রোডাক্টের সব রিভিউ তালিকাভুক্ত করতে আপনি এই নমুনা ব্যবহার করতে পারেন:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1alpha.ListProductReviewsRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReview;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient.ListProductReviewsPagedResponse;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to list all the product reviews in a given account. */
public class ListProductReviewsSample {

  public static void listProductReviews(String accountId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      ListProductReviewsRequest request =
          ListProductReviewsRequest.newBuilder()
              .setParent(String.format("accounts/%s", accountId))
              .build();

      System.out.println("Sending list product reviews request:");
      ListProductReviewsPagedResponse response =
          productReviewsServiceClient.listProductReviews(request);

      int count = 0;

      // Iterates over all rows in all pages and prints all product reviews.
      for (ProductReview element : response.iterateAll()) {
        System.out.println(element);
        count++;
      }
      System.out.print("The following count of elements were returned: ");
      System.out.println(count);
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    listProductReviews(config.getAccountId().toString());
  }
}

প্রোডাক্টের রিভিউ মুছে দেওয়া

প্রোডাক্ট রিভিউ মুছে দিতে, accounts.productreviews.delete ব্যবহার করুন। GET পদ্ধতির মতো, এই পদ্ধতিতে প্রোডাক্ট রিভিউ তৈরি করার সময় প্রোডাক্টের নাম ফিল্ডে যে ভ্যালু দেওয়া হয় সেটি প্রয়োজন।

DELETE https://merchantapi.googleapis.com/reviews/v1alpha/{name=accounts/{ACCOUNT_ID}/productReviews/*}

প্রোডাক্ট রিভিউ মুছে দেওয়ার জন্য এখানে একটি নমুনা দেওয়া হল:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1alpha.DeleteProductReviewRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to delete a product review. */
public class DeleteProductReviewSample {

  public static void deleteProductReview(String accountId, String productReviewId)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      DeleteProductReviewRequest request =
          DeleteProductReviewRequest.newBuilder()
              .setName(String.format("accounts/%s/productReviews/%s", accountId, productReviewId))
              .build();

      System.out.println("Sending delete product review request:");
      productReviewsServiceClient.deleteProductReview(request);
      System.out.println("Product review deleted successfully");
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    String productReviewId = "YOUR_PRODUCT_REVIEW_ID";
    deleteProductReview(config.getAccountId().toString(), productReviewId);
  }
}

প্রোডাক্ট রিভিউয়ের স্ট্যাটাস

প্রোডাক্ট রিভিউ রিসোর্সে অন্যান্য API-এর মতো স্ট্যাটাস থাকে, যা রিসোর্সের একটি অবিচ্ছেদ্য অংশ এবং একই সমস্যা ও ডেস্টিনেশন স্ট্রাকচার মেনে চলে।