ショッピング キャンペーンを作成するには、まず次の手順で Google 広告アカウントを Google Merchant Center アカウントにリンクする必要があります。
- Merchant Center アカウントから Google 広告アカウントにリンク リクエストを送信します。
- Google 広告アカウントでリンク リクエストを承認します。
Merchant Center アカウントからリンク リクエストを送信する
リンク リクエストを送信するには、次の 2 つの方法があります。
- Merchant Center の管理画面でリンク リクエストを送信します。
- Content API for Shopping を使用して
Account
のadsLinks
を更新します。
Google 広告アカウントでリンク リクエストを管理する
Google Ads API でのリンク リクエストの管理方法は、API のバージョン v15 以降かそれ以前のバージョンかによって異なります。
以下を使用している場合:
Google 広告アカウントの Merchant Center リンクのステータスを変更するには、Google 広告の管理画面で招待を承認または拒否します。以下で説明するように、Google Ads API を使って招待の更新や既存のリンクの削除を行うこともできます。
Merchant Center のすべての招待を一覧表示する
次の GAQL クエリを使用して Google Ads API レポートを実行すると、Google 広告のお客様 ID を 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'
すべての招待を取得するには、上記のクエリの product_link_invitation.status
フィールドのフィルタリング条件を削除します。
招待の承諾
リンクを承認するには、product_link_invitation
ステータスを ACCEPTED
に設定します。
UpdateProductLinkInvitationRequest
オブジェクトを作成し、customer_id
フィールドを Google 広告のお客様 ID に設定します。resource_name
フィールドをproduct_link_invitation
のリソース名として設定します。product_link_invitation_status
をACCEPTED
に設定します。UpdateProductLinkInvitation
API 呼び出しを発行します。
すでに両方のアカウントの管理者になっているユーザーが招待フローを試行すると、NO_INVITATION_REQUIRED
エラーがスローされます。その場合は、このエラーを確認して、直接リンクフローにフォールバックできます。
招待を拒否する
招待の拒否は、招待の承諾と似ていますが、product_link_invitation_status
フィールドが REJECTED
に設定されている点が異なります。拒否された招待は REJECTED
状態のままとなり、受諾できなくなります。その後、必要に応じて新しい招待状を作成する必要があります。
招待なしの直接リンク
Google 広告アカウントを Merchant Center アカウントにリンクしようとしているユーザーが両方のアカウントの管理者である場合は、招待のステップを省略して、Google Ads API を使用して両方のアカウントを直接リンクできます。
CreateProductLinkRequest
オブジェクトを作成し、customer_id
フィールドを Google 広告のお客様 ID に設定します。新しい
ProductLink
オブジェクトを作成し、そのmerchant_center_id
フィールドを Merchant Center アカウントの ID に設定します。ProductLink
をリクエスト オブジェクトのproduct_link
フィールドに設定します。CreateProductLink
API 呼び出しを発行します。
十分な権限を持たないユーザーが直接リンクしようとすると、CREATION_NOT_PERMITTED
エラーがスローされます。このエラーを確認して、そのような場合は招待フローにフォールバックできます。
すべての Merchant Center リンクを一覧表示する
次の GAQL クエリを使って Google Ads API レポートを実行すると、Google 広告のお客様 ID のリンクのリストを取得できます。
SELECT
product_link.merchant_center.merchant_center_id,
product_link.product_link_id
FROM product_link
WHERE product_link.type = 'MERCHANT_CENTER'
リンクのリンクを解除する
リンクのリンクを解除する手順は次のとおりです。
RemoveProductLinkRequest
オブジェクトを作成し、customer_id
フィールドを Google 広告のお客様 ID に設定します。resource_name
をproduct_link
のリソース名として設定します。RemoveProductLink
API 呼び出しを発行します。
以下を使用している場合:
Google 広告アカウントの Merchant Center リンクのステータスを変更するには、Google 広告の管理画面でリンク リクエストを承認または拒否するか、既存のリンクを削除します。既存のリンクを削除し、Google Ads API を使用して招待を更新する手順は次のとおりです。
すべての Merchant Center リンクを取得するには、
MerchantCenterLink
リソースからオブジェクトを取得するリクエストを送信します。MerchantCenterLink
オブジェクトごとに、MerchantCenterLinkStatus
フィールドを確認してリンクのステータスを確認できます。PENDING
リンクを承認するには、MerchantCenterLinkStatus
フィールドをENABLED
に設定します。PENDING
リンクを拒否するには、MerchantCenterLink
オブジェクトを削除します。ENABLED
のリンクを解除するには、MerchantCenterLink
オブジェクトを削除します。
ステップ 1: Merchant Center のすべてのリンクを一覧表示する
MerchantCenterLinkService
を使用すると、Google 広告のお客様 ID のリンクのリストを取得できます。
次のコード例は、ListMerchantCenterLinks
を使用して 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}};
ステップ 2: Merchant Center のリンクのステータスを確認する
承認または拒否する Merchant Center アカウントに対応する MerchantCenterLinkService
が見つかったら、status
を確認する必要があります。MerchantCenterLinkStatus
列挙型は、考えられるステータスを記述します。
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};
ステップ 3a: リンク リクエストを承認する
リンク ステータスが PENDING
の場合は、ステータスを ENABLED
に設定することでリンクを承認できます。既存の MerchantCenterLink
オブジェクトを使用すると、status
を ENABLED
に設定して更新された MerchantCenterLink
オブジェクトを作成できます。
次のコード例は、ステータスのみを変更するために必要な ミューテーション オペレーションの作成方法を示しています。
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; } }
ステップ 3b: リンク リクエストを拒否する
PENDING
状態のリンクを含むリンク リクエストを拒否するには、MutateMerchantCenterLinkRequest
を使用してリソースに対して remove
オペレーションを作成して、MerchantCenterLink
を削除します。
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; }
ステップ 3c: リンクのリンクを解除する
ENABLED
状態のリンクのリンクを解除するには、MutateMerchantCenterLinkRequest
を使用してリソースに対して remove
オペレーションを作成して、MerchantCenterLink
を削除します。これは、リンク リクエストを拒否するのと同じ動作です。
ビジネス マネージャー
ビジネス マネージャーは、Google 上のビジネスを 1 か所にまとめたものです。ビジネス マネージャー アカウントを使用して Google 広告アカウントと Merchant Center アカウントの両方を管理する場合、ビジネス マネージャーによって Google 広告アカウントと Merchant Center アカウントの間にリンクが自動的に作成されます。これらのリンクは Google Ads API を使って取得できますが、Google Ads API を使って変更することはできません。