As avaliações do produto são uma parte importante da experiência de compra para os clientes. Essas classificações e avaliações ajudam os clientes em pesquisas de produtos e decisões de compra. As avaliações positivas do produto podem atrair clientes mais qualificados para as páginas de produtos de um vendedor. As fontes incluem vendedores, agregadores de avaliações, sites de avaliações e usuários do Google.
Nesta página, explicamos como gerenciar avaliações do produto usando a API Merchant.
Pré-requisitos
O Google precisa que você forneça informações específicas. Você precisa ter o seguinte:
- Um feed de avaliações do produto ativo no Google Merchant Center.
- Sua conta precisa estar inscrita no programa de classificações do produto. É possível verificar a qualificação de forma programática usando a sub-API Programs ou pelo Merchant Center. Se você não se qualificar, saiba mais sobre como se inscrever no programa de classificações do produto.
- Para analisar produtos usando a API Merchant, envie uma solicitação de lista de permissões no formulário de suporte da API Shopping em "Qual é o problema/pergunta?"
Criar uma fonte de dados
Use o método datasource.create para criar um feed de avaliações do produto. Se um
feed de avaliações de comerciante ou avaliações do produto estiver disponível, use
accounts.dataSources.list
para buscar o accounts.dataSources.name. Armazene o nome da fonte de dados que você criar
ou recuperar no banco de dados local para cada avaliação. O formato da solicitação é
o seguinte:
POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
Exemplo
O exemplo mostra uma solicitação e uma resposta típicas:
Solicitação
POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
"displayName": "My API Data Source",
"primaryProductDataSource": {}
}
Resposta
{
"name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
"dataSourceId": "{DATASOURCE_ID}",
"displayName": "My API Data Source",
"primaryProductDataSource": {},
"input": "API"
}
Para mais informações, consulte Criar uma fonte de dados de avaliações do produto.
Criar uma avaliação do produto
Use o método accounts.productreviews.insert para criar ou atualizar uma
avaliação do produto. O método accounts.productreviews.insert usa um recurso productreview e um nome de fonte de dados como entrada. Ele retorna o productreview novo ou
atualizado, se for bem-sucedido. Para criar uma avaliação do produto, você precisa
ter um
datasource.name.
O formato da solicitação:
POST https://merchantapi.googleapis.com/reviews/v1/{parent=accounts/{ACCOUNT_ID}/}productReviews:insert
O exemplo de solicitação a seguir ilustra como criar uma avaliação do produto.
POST https://merchantapi.googleapis.com/reviews/v1/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'
}
Depois que a avaliação do produto é criada, pode levar alguns minutos para que ela seja propagada.
Veja um exemplo que você pode usar para inserir várias avaliações do produto de forma assíncrona:
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.v1.InsertProductReviewRequest;
import com.google.shopping.merchant.reviews.v1.ProductReview;
import com.google.shopping.merchant.reviews.v1.ProductReviewAttributes;
import com.google.shopping.merchant.reviews.v1.ProductReviewAttributes.ReviewLink;
import com.google.shopping.merchant.reviews.v1.ProductReviewAttributes.ReviewLink.Type;
import com.google.shopping.merchant.reviews.v1.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1.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");
}
}
Recuperar uma avaliação do produto
Para ver uma avaliação do produto, use accounts.productreviews.get. Este campo é somente leitura.
Ele requer seu accountId e o ID da avaliação do produto como parte do
campo de nome. O método GET retorna o recurso de avaliação do produto correspondente.
GET https://merchantapi.googleapis.com/reviews/v1/{name=accounts/{ACCOUNT_ID}/productReviews/*}
Veja um exemplo que pode ser usado para recuperar uma avaliação do produto:
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1.GetProductReviewRequest;
import com.google.shopping.merchant.reviews.v1.ProductReview;
import com.google.shopping.merchant.reviews.v1.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1.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);
}
}
Listar avaliações do produto
Use o método productreviews.list para ver todas as avaliações de produtos
criadas.
GET https://merchantapi.googleapis.com/reviews/v1/{parent=accounts/{ACCOUNT_ID}}/productReviews
Veja um exemplo que pode ser usado para listar todas as avaliações de um produto:
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1.ListProductReviewsRequest;
import com.google.shopping.merchant.reviews.v1.ProductReview;
import com.google.shopping.merchant.reviews.v1.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1.ProductReviewsServiceClient.ListProductReviewsPagedResponse;
import com.google.shopping.merchant.reviews.v1.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());
}
}
Excluir avaliações do produto
Para excluir uma avaliação do produto, use accounts.productreviews.delete. Assim como o método GET, esse método requer o campo de nome da avaliação do produto retornado durante a criação.
DELETE https://merchantapi.googleapis.com/reviews/v1/{name=accounts/{ACCOUNT_ID}/productReviews/*}
Veja um exemplo que você pode usar para excluir uma avaliação do produto:
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1.DeleteProductReviewRequest;
import com.google.shopping.merchant.reviews.v1.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1.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);
}
}
Status da avaliação do produto
O recurso de avaliação do produto contém o status semelhante ao de outras APIs, que é parte integrante do recurso e segue a mesma estrutura de problema e destino.