Para criar uma campanha do Shopping, primeiro você precisa vincular sua conta do Google Ads à conta do Google Merchant Center da seguinte maneira:
- Envie um pedido de vinculação da conta do Merchant Center para a conta do Google Ads.
- Aprove o pedido de vinculação na conta do Google Ads.
Como enviar pedidos de vinculação da sua conta do Merchant Center
Há duas maneiras de enviar um pedido de vinculação:
- Use a interface da Web do Merchant Center para enviar uma solicitação de vinculação.
- Use a API Content for Shopping para
atualizar o
adsLinks
doAccount
.
Como gerenciar pedidos de vinculação na sua conta do Google Ads
Os pedidos de vinculação são gerenciados de forma diferente na API Google Ads, dependendo se você está usando a versão v15, mais recente ou anterior.
Se você estiver usando
Para alterar o status das vinculações do Merchant Center na sua conta do Google Ads, use a interface da Web do Google Ads para aprovar ou rejeitar um convite. Você também pode atualizar convites ou remover links existentes usando a API Google Ads, conforme explicado abaixo.
Listar todos os convites do Merchant Center
Você pode gerar um relatório da API Google Ads usando a consulta GAQL a seguir para recuperar uma lista de todos os convites pendentes e vincular um ID de cliente do Google Ads a uma conta do Merchant Center.
SELECT
product_link_invitation.merchant_center.merchant_center_id,
product_link_invitation.type
FROM product_link_invitation
WHERE product_link_invitation.status = 'PENDING_APPROVAL'
AND product_link_invitation.type = 'MERCHANT_CENTER'
Para recuperar todos os convites, remova a condição de filtragem do campo product_link_invitation.status
na consulta acima.
Aceitar um convite
Para aprovar a vinculação, defina o status de product_link_invitation
como ACCEPTED
.
Crie um objeto
UpdateProductLinkInvitationRequest
e defina o campocustomer_id
como o ID de cliente do Google Ads.Defina o campo
resource_name
como o nome de recurso doproduct_link_invitation
.Defina o
product_link_invitation_status
comoACCEPTED
.Emita uma chamada de API
UpdateProductLinkInvitation
.
Se ocorrer uma tentativa de fluxo de convite por um usuário que já é administrador em ambas as contas, um erro NO_INVITATION_REQUIRED
será gerado. Nesses casos, é possível verificar esse erro e voltar ao fluxo de
link direto.
Rejeitar um convite
Rejeitar um convite é semelhante a aceitar um
convite, exceto pelo fato de o campo
product_link_invitation_status
estar definido como REJECTED
. Se um convite for rejeitado, ele permanecerá no estado REJECTED
e não poderá ser aceito. Em seguida, crie um novo convite, se necessário.
Vinculação direta sem convite
Se o usuário que está tentando vincular a conta do Google Ads à do Merchant Center for um administrador nas duas contas, ignore a etapa do convite e vincule as duas diretamente usando a API Google Ads.
Crie um objeto
CreateProductLinkRequest
e defina o campocustomer_id
como o ID de cliente do Google Ads.Crie um novo objeto
ProductLink
e defina o campomerchant_center_id
como o ID da conta do Merchant Center.Defina
ProductLink
como o campoproduct_link
do objeto de solicitação.Emita uma chamada de API
CreateProductLink
.
Se um usuário não tiver permissões suficientes para tentar fazer a vinculação direta, um erro CREATION_NOT_PERMITTED
será gerado. É possível verificar esse erro e voltar ao
fluxo de convite nesses casos.
Listar todos os links do Merchant Center
Você pode gerar um relatório da API Google Ads usando a consulta GAQL a seguir para recuperar uma lista de links de um ID de cliente do Google Ads.
SELECT
product_link.merchant_center.merchant_center_id,
product_link.product_link_id
FROM product_link
WHERE product_link.type = 'MERCHANT_CENTER'
Desvincular um link
Siga estas etapas:
Crie um objeto
RemoveProductLinkRequest
e defina o campocustomer_id
como o ID de cliente do Google Ads.Defina
resource_name
como o nome do recurso deproduct_link
.Emita uma chamada de API
RemoveProductLink
.
Se você estiver usando
Para alterar o status das vinculações do Merchant Center na sua conta do Google Ads, use a interface da Web do Google Ads para aprovar ou rejeitar um pedido de vinculação ou remover uma vinculação existente. Remova vinculações existentes e atualize os convites usando a API Google Ads da seguinte forma:
Se quiser recuperar todas as vinculações do Merchant Center, faça uma solicitação para recuperar objetos do recurso
MerchantCenterLink
.Para cada objeto
MerchantCenterLink
, verifique o campoMerchantCenterLinkStatus
para encontrar o status do link.Para aprovar uma vinculação de
PENDING
, defina o campoMerchantCenterLinkStatus
comoENABLED
.- Para rejeitar uma vinculação
PENDING
, remova o objetoMerchantCenterLink
. - Para desvincular uma vinculação do
ENABLED
, remova o objetoMerchantCenterLink
.
- Para rejeitar uma vinculação
Etapa 1: listar todos os links do Merchant Center
Você pode usar MerchantCenterLinkService
para recuperar uma lista de vinculações de um ID de cliente do Google Ads.
O exemplo de código abaixo mostra como usar ListMerchantCenterLinks
para solicitar
todos os links para customer_id
.
Java
ListMerchantCenterLinksResponse response = merchantCenterLinkService.listMerchantCenterLinks( ListMerchantCenterLinksRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .build()); System.out.printf( "%d Merchant Center link(s) found with the following details:%n", response.getMerchantCenterLinksCount());
C#
ListMerchantCenterLinksResponse response = merchantCenterLinkService.ListMerchantCenterLinks(customerId.ToString()); Console.WriteLine($"{response.MerchantCenterLinks.Count} Merchant Center link(s)" + $" found with the following details:");
PHP
// Lists all merchant links of the specified customer ID. $merchantCenterLinkServiceClient = $googleAdsClient->getMerchantCenterLinkServiceClient(); $response = $merchantCenterLinkServiceClient->listMerchantCenterLinks( ListMerchantCenterLinksRequest::build($customerId) ); printf( "%d Merchant Center link(s) found with the following details:%s", $response->getMerchantCenterLinks()->count(), PHP_EOL );
Python
# Retrieve all the existing Merchant Center links. response = merchant_center_link_service.list_merchant_center_links( customer_id=customer_id ) print( f"{len(response.merchant_center_links)} Merchant Center link(s) " "found with the following details:" )
Ruby
# Retrieve all the existing Merchant Center links. response = client.service.v14.merchant_center_link.list_merchant_center_links( customer_id: customer_id, )
Perl
# List all Merchant Center links of the specified customer ID. my $merchant_center_link_service = $api_client->MerchantCenterLinkService(); my $response = $merchant_center_link_service->list({customerId => $customer_id}); printf "%d Merchant Center link(s) found with the following details:\n", scalar @{$response->{merchantCenterLinks}};
Etapa 2: encontrar o status da vinculação do Merchant Center
Depois de encontrar o
MerchantCenterLinkService
que
corresponde à conta do Merchant Center que você quer aprovar ou rejeitar,
verifique o
status
. O tipo enumerado
MerchantCenterLinkStatus
descreve os status possíveis.
Java
System.out.printf( "Link '%s' has status '%s'.%n", merchantCenterLink.getResourceName(), merchantCenterLink.getStatus());
C#
Console.Write($"Link '{merchantCenterLink.ResourceName}' has status " + $"'{merchantCenterLink.Status}'.");
PHP
printf( "Link '%s' has status '%s'.%s", $merchantCenterLink->getResourceName(), MerchantCenterLinkStatus::name($merchantCenterLink->getStatus()), PHP_EOL );
Python
print( f"Link '{merchant_center_link.resource_name}' has status " f"'{merchant_center_link.status.name}'." )
Ruby
# Iterate the results, and filter for links with pending status. response.merchant_center_links.each do |link| # Enables the pending link. if link.status == :PENDING && link.id.to_s == merchant_center_account_id # Creates the update operation. update_operation = client.operation.v14.update_resource.merchant_center_link( link.resource_name) do |updated_link| updated_link.status = :ENABLED end # Updates the link. mutate_response = client.service.v14.merchant_center_link.mutate_merchant_center_link( customer_id: customer_id, operation: update_operation, ) # Display the result. puts "Enabled a Merchant Center Link with resource name " \ "#{mutate_response.result.resource_name} " \ "to Google Ads account #{customer_id}" end end
Perl
printf "Link '%s' has status '%s'.\n", $merchant_center_link->{resourceName}, $merchant_center_link->{status};
Etapa 3a: aprovar um pedido de vinculação
Se o status da vinculação for PENDING
, você poderá aprová-la definindo o status como ENABLED
. É possível usar o objeto MerchantCenterLink
atual para ajudar a criar um objeto MerchantCenterLink
atualizado com o status
definido como ENABLED
.
O exemplo de código a seguir mostra como construir a operação mutate necessária para alterar apenas o status.
Java
private void updateMerchantCenterLinkStatus( MerchantCenterLinkServiceClient merchantCenterLinkServiceClient, long customerId, MerchantCenterLink merchantCenterLink, MerchantCenterLinkStatus status) { // Creates an updated MerchantCenterLink object derived from the original, but with the new // status. MerchantCenterLink updatedMerchantCenterLink = merchantCenterLink.toBuilder().setStatus(status).build(); // Constructs an operation that will update the merchantCenterLink, using the FieldMasks compare // utility to derive the update mask from the changes. This mask tells the Google Ads API which // attributes of the merchantCenterLink to change. In this case we only want to change the // MerchantCenterLinkStatus. MerchantCenterLinkOperation operation = MerchantCenterLinkOperation.newBuilder() .setUpdate(updatedMerchantCenterLink) .setUpdateMask(FieldMasks.compare(merchantCenterLink, updatedMerchantCenterLink)) .build(); // Sends the operation in a mutate request. MutateMerchantCenterLinkResponse response = merchantCenterLinkServiceClient.mutateMerchantCenterLink( String.valueOf(customerId), operation); // Prints the resource name of the updated object. MutateMerchantCenterLinkResult merchantCenterLinkResult = response.getResult(); System.out.printf( "Updated Merchant Center link with resource name: '%s'.%n", merchantCenterLinkResult.getResourceName()); }
C#
private static void UpdateMerchantCenterLinkStatus(long customerId, MerchantCenterLinkServiceClient merchantCenterLinkService, MerchantCenterLink merchantCenterLink, MerchantCenterLinkStatus status) { // Enables the pending link. MerchantCenterLink linkToUpdate = new MerchantCenterLink() { ResourceName = merchantCenterLink.ResourceName, Status = status }; // Creates an operation. MerchantCenterLinkOperation operation = new MerchantCenterLinkOperation() { Update = linkToUpdate, UpdateMask = FieldMasks.AllSetFieldsOf(linkToUpdate) }; // Updates the link. MutateMerchantCenterLinkResponse mutateResponse = merchantCenterLinkService.MutateMerchantCenterLink( customerId.ToString(), operation); // Displays the result. Console.WriteLine($"The status of Merchant Center Link with resource name " + $"'{mutateResponse.Result.ResourceName}' to Google Ads account : " + $"{customerId} was updated to {status}."); }
PHP
private static function updateMerchantCenterLinkStatus( MerchantCenterLinkServiceClient $merchantCenterLinkServiceClient, int $customerId, MerchantCenterLink $merchantCenterLink, int $newMerchantCenterLinkStatus ) { // Creates an updated MerchantCenterLink object derived from the original, but with the // specified status. $merchantCenterLinkToUpdate = new MerchantCenterLink([ 'resource_name' => $merchantCenterLink->getResourceName(), 'status' => $newMerchantCenterLinkStatus ]); // Constructs an operation that will update the Merchant Center link, // using the FieldMasks utility to derive the update mask. This mask tells the // Google Ads API which attributes of the Merchant Center link you want to change. $merchantCenterLinkOperation = new MerchantCenterLinkOperation(); $merchantCenterLinkOperation->setUpdate($merchantCenterLinkToUpdate); $merchantCenterLinkOperation->setUpdateMask( FieldMasks::allSetFieldsOf($merchantCenterLinkToUpdate) ); // Issues a mutate request to update the Merchant Center link and prints some // information. $response = $merchantCenterLinkServiceClient->mutateMerchantCenterLink( MutateMerchantCenterLinkRequest::build($customerId, $merchantCenterLinkOperation) ); printf( "Approved a Merchant Center Link with resource name '%s' to the Google Ads " . "account '%s'.%s", $response->getResult()->getResourceName(), $customerId, PHP_EOL ); }
Python
def update_merchant_center_link_status( client, customer_id, merchant_center_link_service, merchant_center_link, status, ): """Updates the status of a Merchant Center link request. Args: client: An initialized GoogleAdsClient instance. customer_id: The client customer ID string. merchant_center_link_service: A merchant center link service instance. merchant_center_link: The merchant center link to be modified. status: The updated status to apply to the merchant center link. """ # Creates an operation. operation = client.get_type("MerchantCenterLinkOperation") link_to_update = operation.update link_to_update.resource_name = merchant_center_link.resource_name # Enables the pending link. link_to_update.status = status client.copy_from( operation.update_mask, protobuf_helpers.field_mask(None, link_to_update._pb), ) # Updates the link. mutate_response = merchant_center_link_service.mutate_merchant_center_link( customer_id=customer_id, operation=operation ) # Displays the result. print( "The status of Merchant Center Link with resource name " f"'{mutate_response.result.resource_name}' to Google Ads account : " f"{customer_id} was updated to {status.name}." )
Ruby
# Iterate the results, and filter for links with pending status. response.merchant_center_links.each do |link| # Enables the pending link. if link.status == :PENDING && link.id.to_s == merchant_center_account_id # Creates the update operation. update_operation = client.operation.v14.update_resource.merchant_center_link( link.resource_name) do |updated_link| updated_link.status = :ENABLED end # Updates the link. mutate_response = client.service.v14.merchant_center_link.mutate_merchant_center_link( customer_id: customer_id, operation: update_operation, ) # Display the result. puts "Enabled a Merchant Center Link with resource name " \ "#{mutate_response.result.resource_name} " \ "to Google Ads account #{customer_id}" end end
Perl
foreach my $merchant_center_link (@{$response->{merchantCenterLinks}}) { printf "Link '%s' has status '%s'.\n", $merchant_center_link->{resourceName}, $merchant_center_link->{status}; # Approve a pending link request for a Google Ads account with the specified # customer ID from a Merchant Center account with the specified Merchant # Center account ID. if ( $merchant_center_link->{id} == $merchant_center_account_id && $merchant_center_link->{status} eq PENDING) { # Update the status of Merchant Center link to 'ENABLED' to approve the link. update_merchant_center_link_status( $merchant_center_link_service, $customer_id, $merchant_center_link, ENABLED ); # There is only one MerchantCenterLink object for a given Google Ads account # and Merchant Center account, so we can break early. last; } }
Etapa 3b: rejeitar um pedido de vinculação
Para rejeitar um pedido de vinculação com um link no estado PENDING
, remova o MerchantCenterLink
criando uma operação remove
para o recurso usando MutateMerchantCenterLinkRequest
:
Java
private void removeMerchantCenterLink( MerchantCenterLinkServiceClient merchantCenterLinkServiceClient, long customerId, MerchantCenterLink merchantCenterLink) { // Creates a single remove operation, specifying the Merchant Center link resource name. MerchantCenterLinkOperation operation = MerchantCenterLinkOperation.newBuilder() .setRemove(merchantCenterLink.getResourceName()) .build(); // Sends the operation in a mutate request. MutateMerchantCenterLinkResponse response = merchantCenterLinkServiceClient.mutateMerchantCenterLink( Long.toString(customerId), operation); MutateMerchantCenterLinkResult result = response.getResult(); System.out.printf( "Removed Merchant Center link with resource name: '%s'.%n", result.getResourceName()); }
C#
private void RemoveMerchantCenterLink( MerchantCenterLinkServiceClient merchantCenterLinkServiceClient, long customerId, MerchantCenterLink merchantCenterLink) { // Creates a single remove operation, specifying the Merchant Center link resource name. MerchantCenterLinkOperation operation = new MerchantCenterLinkOperation { Remove = merchantCenterLink.ResourceName }; // Sends the operation in a mutate request. MutateMerchantCenterLinkResponse response = merchantCenterLinkServiceClient.MutateMerchantCenterLink( customerId.ToString(), operation); Console.WriteLine("Removed Merchant Center Link with resource name: " + $"{response.Result.ResourceName}"); }
PHP
private static function removeMerchantCenterLink( MerchantCenterLinkServiceClient $merchantCenterLinkServiceClient, int $customerId, MerchantCenterLink $merchantCenterLink ) { // Creates a single remove operation, specifying the Merchant Center link resource name. $merchantCenterLinkOperation = new MerchantCenterLinkOperation(); $merchantCenterLinkOperation->setRemove($merchantCenterLink->getResourceName()); // Issues a mutate request to remove the link and prints the result info. $response = $merchantCenterLinkServiceClient->mutateMerchantCenterLink( MutateMerchantCenterLinkRequest::build( $customerId, $merchantCenterLinkOperation ) ); $mutateMerchantCenterLinkResult = $response->getResult(); printf( "Removed Merchant Center link with resource name: '%s'.%s", $mutateMerchantCenterLinkResult->getResourceName(), PHP_EOL ); }
Python
def remove_merchant_center_link( client, merchant_center_link_service, customer_id, merchant_center_link ): """Removes a Merchant Center link from a Google Ads client customer account. Args: client: An initialized Google Ads client. merchant_center_link_service: An initialized MerchantCenterLinkService client. customer_id: The Google Ads customer ID of the account that has the link request. merchant_center_link: The MerchantCenterLink object to remove. """ # Create a single remove operation, specifying the Merchant Center link # resource name. operation = client.get_type("MerchantCenterLinkOperation") operation.remove = merchant_center_link.resource_name # Send the operation in a mutate request. response = merchant_center_link_service.mutate_merchant_center_link( customer_id=customer_id, operation=operation ) print( "Removed Merchant Center link with resource name " f"'{response.result.resource_name}'." )
Ruby
def remove_merchant_center_link( client, merchant_center_link_service, customer_id, link) # Creates a single remove operation, specifying the Merchant Center link # resource name. operation = client.operation.v14.remove_resource.merchant_center_link(link.resource_name) # Issues a mutate request to remove the link and prints the result info. response = merchant_center_link_service.mutate_merchant_center_link( customer_id: customer_id, operation: operation, ) puts "Removed Merchant Center link with resource name: " \ "#{response.result.resource_name}" end
Perl
sub reject_merchant_center_link { my ($api_client, $customer_id, $merchant_center_account_id) = @_; my $merchant_center_link_service = $api_client->MerchantCenterLinkService(); # Reject a pending link request or unlink an enabled link for a Google Ads # account with $customer_id from a Merchant Center account with $merchant_center_account_id. my $response = $merchant_center_link_service->list({customerId => $customer_id}); printf "%d Merchant Center link(s) found with the following details:\n", scalar @{$response->{merchantCenterLinks}}; foreach my $merchant_center_link (@{$response->{merchantCenterLinks}}) { printf "Link '%s' has status '%s'.\n", $merchant_center_link->{resourceName}, $merchant_center_link->{status}; # Check if there is a link for the Merchant Center account we are looking for. if ($merchant_center_account_id == $merchant_center_link->{id}) { # If the Merchant Center link is pending, reject it by removing the link. # If the Merchant Center link is enabled, unlink Merchant Center from Google # Ads by removing the link. # In both cases, the remove action is the same. remove_merchant_center_link($merchant_center_link_service, $customer_id, $merchant_center_link); # There is only one MerchantCenterLink object for a given Google Ads account # and Merchant Center account, so we can break early. last; } } return 1; }
Etapa 3c: desvincular uma vinculação
Para desvincular um link no estado ENABLED
, remova o MerchantCenterLink
construindo uma operação remove
para o recurso usando MutateMerchantCenterLinkRequest
.
Essa é a mesma ação que rejeitar um pedido de vinculação.
Gerenciador de empresa
O Gerenciador de empresa é uma representação unificada de uma empresa no Google. Quando você gerencia suas contas do Google Ads e do Merchant Center usando o Gerenciador de empresa, ele cria vinculações automaticamente entre as contas do Google Ads e do Merchant Center. Você pode recuperar essas vinculações usando a API Google Ads, mas elas não podem ser modificadas com ela.