ربط حسابك على Merchant Center بحسابك على "إعلانات Google"

لتتمكّن من إنشاء حملة Shopping، عليك أولاً ربط حسابك على "إعلانات Google" بحسابك على Google Merchant Center على النحو التالي:

  1. أرسل طلب ربط من حسابك في Merchant Center إلى حسابك على "إعلانات Google".
  2. وافِق على طلب ربط الحساب في حسابك على "إعلانات Google".

هناك طريقتان لإرسال طلب ربط حساب:

  1. استخدِم واجهة الويب في Merchant Center لإرسال طلب الربط.
  2. استخدِم Content API for Shopping لتعديل adsLinks الخاص بـ Account.

تُدار طلبات ربط الحسابات بطريقة مختلفة في Google Ads API استنادًا إلى ما إذا كنت تستخدم الإصدار 15 أو إصدارًا أحدث من واجهة برمجة التطبيقات أو إصدارًا سابقًا.

إذا كنت تستخدم

يمكنك تغيير حالة روابط Merchant Center في حسابك على "إعلانات Google" من خلال استخدام واجهة "إعلانات Google" على الويب للموافقة على دعوة أو رفضها. يمكنك أيضًا تعديل الدعوات أو إزالة الروابط الحالية باستخدام Google Ads API كما هو موضّح أدناه.

إدراج جميع دعوات Merchant Center

يمكنك تشغيل تقرير Google Ads API باستخدام طلب بحث GAQL التالي لاسترداد قائمة بجميع الدعوات التي في انتظار المراجعة لربط الرقم التعريفي لعميل "إعلانات Google" بحساب 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.

  1. أنشِئ عنصر UpdateProductLinkInvitationRequest وضبط الحقل customer_id على أنّه الرقم التعريفي لعميل "إعلانات Google".

  2. اضبط الحقل resource_name كاسم المورد للسمة product_link_invitation.

  3. اضبط product_link_invitation_status على ACCEPTED.

  4. أصدر طلب بيانات من واجهة برمجة التطبيقات UpdateProductLinkInvitation.

إذا تمت محاولة تدفق الدعوة من قِبل مستخدم هو مشرف في كلا الحسابَين، سيتم عرض خطأ NO_INVITATION_REQUIRED. يمكنك التحقق من هذا الخطأ والعودة إلى تدفق الرابط المباشر في مثل هذه الحالات.

رفض دعوة

يشبه رفض الدعوة قبول الدعوة، باستثناء أنّه تم ضبط الحقل product_link_invitation_status على REJECTED. إذا تم رفض الدعوة، ستظلّ في حالة REJECTED ولن يتم قبولها. يجب عليك بعد ذلك إنشاء دعوة جديدة إذا لزم الأمر.

الربط المباشر بدون دعوة

إذا كان المستخدم الذي يحاول ربط حساب "إعلانات Google" بحساب Merchant Center مشرفًا في كلا الحسابَين، يمكنك تجاوز خطوة الدعوة وربط كلا الحسابَين مباشرةً باستخدام Google Ads API.

  1. أنشِئ عنصر CreateProductLinkRequest وضبط الحقل customer_id على أنّه الرقم التعريفي لعميل "إعلانات Google".

  2. أنشِئ عنصر ProductLink جديدًا واضبط حقل merchant_center_id على رقم تعريف حساب Merchant Center.

  3. اضبط ProductLink على الحقل product_link لكائن الطلب.

  4. أصدر طلب بيانات من واجهة برمجة التطبيقات CreateProductLink.

إذا حاول مستخدم ليس لديه أذونات كافية الربط المباشر، سيتم عرض خطأ CREATION_NOT_PERMITTED. يمكنك التحقق من هذا الخطأ والعودة إلى تدفق الدعوة في مثل هذه الحالات.

يمكنك تشغيل تقرير Google Ads API باستخدام طلب بحث GAQL التالي لاسترداد قائمة الروابط للرقم التعريفي لعميل "إعلانات Google".

SELECT
  product_link.merchant_center.merchant_center_id,
  product_link.product_link_id
FROM product_link
WHERE product_link.type = 'MERCHANT_CENTER'

اتّبِع الخطوات التالية لإلغاء ربط الرابط:

  1. أنشِئ عنصر RemoveProductLinkRequest وضبط الحقل customer_id على أنّه الرقم التعريفي لعميل "إعلانات Google".

  2. اضبط resource_name كاسم المورد لـ product_link.

  3. أصدر طلب بيانات من واجهة برمجة التطبيقات RemoveProductLink.

إذا كنت تستخدم

يمكنك تغيير حالة روابط Merchant Center في حسابك على "إعلانات Google" من خلال استخدام واجهة "إعلانات Google" على الويب للموافقة على طلب ربط حساب أو رفضه أو لإزالة رابط حالي. يمكنك إزالة الروابط الحالية وتعديل الدعوات باستخدام Google Ads API على النحو التالي:

  1. لاسترداد كل روابط Merchant Center، يمكنك تقديم طلب لاسترداد العناصر من المورد MerchantCenterLink.

  2. بالنسبة إلى كل عنصر من عناصر MerchantCenterLink، يمكنك التحقّق من حقل MerchantCenterLinkStatus للعثور على حالة الرابط.

  3. للموافقة على ربط PENDING، اضبط الحقل MerchantCenterLinkStatus على ENABLED.

    1. لرفض رابط "PENDING"، عليك إزالة الكائن MerchantCenterLink.
    2. لإلغاء ربط رابط ENABLED، أزِل العنصر MerchantCenterLink.

يمكنك استخدام MerchantCenterLinkService لاسترداد قائمة بالروابط للرقم التعريفي لعميل "إعلانات Google".

يوضّح مثال الرمز البرمجي أدناه كيفية استخدام 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}};
      

بعد العثور على سمة MerchantCenterLinkService المناسبة لحساب Merchant Center الذي تريد الموافقة عليه أو رفضه، عليك الاطّلاع على 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};
      

إذا كانت حالة الربط PENDING، يمكنك الموافقة عليها من خلال ضبط الحالة على ENABLED. يمكنك استخدام كائن MerchantCenterLink الحالي للمساعدة في إنشاء كائن MerchantCenterLink معدَّل مع ضبط status على ENABLED.

يوضح مثال الرمز البرمجي التالي كيفية إنشاء عملية التبديل المطلوبة لتغيير الحالة فقط.

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;
  }
}
      

لرفض طلب ربط حساب يحتوي على رابط في حالة PENDING، عليك إزالة السمة MerchantCenterLink من خلال إنشاء عملية remove للمورّد الذي يستخدم 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;
}
      

لإلغاء ربط رابط في حالة ENABLED، عليك إزالة MerchantCenterLink من خلال إنشاء عملية remove للمورّد الذي يستخدم MutateMerchantCenterLinkRequest. وهذا الإجراء هو نفسه إجراء رفض طلب ربط حساب.

مركز إدارة النشاط التجاري هو تمثيل موحَّد لنشاط تجاري على Google. عندما تدير حسابك على "إعلانات Google" وحساباتك على Merchant Center باستخدام حساب على "مركز إدارة النشاط التجاري"، ينشئ "مركز إدارة النشاط التجاري" تلقائيًا روابط بين حسابك على "إعلانات Google" وحسابك على Merchant Center. يمكنك استرداد هذه الروابط باستخدام Google Ads API، ولكن لا يمكن تبديل هذه الروابط باستخدام Google Ads API.