مشاهده مشکلاتی که بر حساب تاجر تأثیر می گذارد

مشکلات حساب کاربری بر دیده شدن محصول شما و توانایی شما در شرکت در برنامه‌های مختلف مرکز فروشندگان تأثیر می‌گذارد. زیر-API حساب‌ها به شما امکان می‌دهد لیستی از مشکلاتی را که بر حساب تجاری شما تأثیر می‌گذارند، بازیابی کنید. این به شما کمک می‌کند تا مشکلات را به صورت پیشگیرانه شناسایی و برطرف کنید.

شما مسئول رعایت سیاست‌های تبلیغات خرید و فهرست‌های رایگان هستید. گوگل شاپینگ حق دارد این سیاست‌ها را اجرا کند و در صورت مشاهده محتوا یا رفتاری که این سیاست‌ها را نقض می‌کند، به طور مناسب واکنش نشان دهد.

هر AccountIssue جزئیاتی مانند موارد زیر را ارائه می‌دهد:

  • title : خلاصه‌ای از موضوع
  • severity : شدت مشکل. مثال‌ها عبارتند از:
    • CRITICAL : مشکلی که باعث می‌شود پیشنهادها ارائه نشوند.
    • ERROR : مشکلی که ممکن است بر پیشنهادات تأثیر بگذارد یا نشان‌دهنده‌ی مشکلی باشد.
    • SUGGESTION : پیشنهادی برای بهبود.
  • impactedDestinations : برنامه‌ها (مانند تبلیغات خرید یا فهرست‌های رایگان) و مناطقی که تحت تأثیر مشکل قرار گرفته‌اند، به همراه شدت آن در این زمینه‌ها.
  • detail : پیامی با توضیحات بیشتر در مورد مشکل.
  • documentationUri : پیوندی به مقاله مرکز راهنما در مورد چگونگی حل مشکل.

ملاحظات ویژه

  • بین‌المللی‌سازی (i18n) : هنگام فهرست کردن مشکلات حساب، می‌توانید یک language_code (مثلاً "en-US"، "fr-FR") و یک time_zone (مثلاً "America/Los_Angeles"، "Europe/Paris") در درخواست خود مشخص کنید. این کار تأیید می‌کند که رشته‌های قابل خواندن توسط انسان در پاسخ، مانند detail مشکل، به طور مناسب بومی‌سازی شده‌اند. اگر این فیلدها ارائه نشوند، API به طور پیش‌فرض به انگلیسی ("en-US") و منطقه زمانی "America/Los_Angeles" (زمان اقیانوس آرام) تنظیم می‌شود.
  • صفحه‌بندی : این API از طریق پارامترهای page_size و page_token در ListAccountIssuesRequest از صفحه‌بندی پشتیبانی می‌کند. این به شما امکان می‌دهد مشکلات را در بخش‌های قابل مدیریت بازیابی کنید. حداکثر page_size برابر با ۱۰۰۰ و مقدار پیش‌فرض آن ۵۰ است.
  • مرتب‌سازی : مشکلاتی که توسط API برگردانده می‌شوند، معمولاً بر اساس شدت و اولویت داخلی مرتب می‌شوند، مشابه روشی که در مرکز فروشندگان نمایش داده می‌شوند. توجه داشته باشید که API از مرتب‌سازی سفارشی پشتیبانی نمی‌کند.
  • منبع داده : زیر-API حساب‌ها، داده‌ها را از همان بک‌اندی که توسط صفحه تشخیص عیب در مرکز فروشندگان استفاده می‌شود، بازیابی می‌کند.

مشکلات حساب کاربری خود را بازیابی کنید

برای فهرست کردن مشکلات حساب، یک درخواست GET به متد accounts.issues.list ارسال کنید:

GET https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/issues?language_code=en-GB&time_zone.id=Europe/London&page_size=10

در اینجا نمونه‌ای از پاسخ برای یک حساب کاربری فرعی که به دلیل تخلف «صفحه فرود کار نمی‌کند» به حالت تعلیق درآمده است، آورده شده است.

{
  "accountIssues": [
    {
      "name": "accounts/ACCOUNT_ID/issues/home-page-issue",
      "title": "Online store not confirmed",
      "severity": "CRITICAL",
      "impactedDestinations": [
        {
          "reportingContext": "SHOPPING_ADS",
          "impacts": [
            {
              "regionCode": "001",
              "severity": "CRITICAL"
            }
          ]
        }
      ],
      "detail": "The ownership of the online store must be verified through Merchant Center",
      "documentationUri": "https://support.google.com/merchants/answer/176793?hl=en-US"
    },
    {
      "name": "accounts/ACCOUNT_ID/issues/editorial-and-professional-standards-destination-url-down-policy",
      "title": "Landing page not working",
      "severity": "CRITICAL",
      "impactedDestinations": [
        {
          "reportingContext": "SHOPPING_ADS",
          "impacts": [
            {
              "regionCode": "ES",
              "severity": "CRITICAL"
            }
          ]
        },
        {
          "reportingContext": "DEMAND_GEN_ADS",
          "impacts": [
            {
              "regionCode": "ES",
              "severity": "CRITICAL"
            }
          ]
        },
        {
          "reportingContext": "VIDEO_ADS",
          "impacts": [
            {
              "regionCode": "ES",
              "severity": "CRITICAL"
            }
          ]
        }
      ],
      "detail": "Broken landing pages or broken links in your online store are not allowed",
      "documentationUri": "https://support.google.com/merchants/answer/12079604?hl=en-US"
    },
    {
      "name": "accounts/ACCOUNT_ID/issues/pending-phone-verification",
      "title": "Your phone number needs to be verified",
      "severity": "CRITICAL",
      "detail": "Verify your phone number to confirm your identity",
      "documentationUri": "https://support.google.com/merchants/answer/12471579?hl=en-US"
    },
    {
      "name": "accounts/ACCOUNT_ID/issues/pending-address-and-phone",
      "title": "Missing business address",
      "severity": "CRITICAL",
      "detail": "Provide a valid business address in Merchant Center",
      "documentationUri": "https://support.google.com/merchants/answer/12471579?hl=en-US"
    }
  ]
}

مشکلات حساب را برای یک حساب خاص فهرست کنید

این مورد استفاده نحوه بازیابی تمام مشکلات سطح حساب برای یک حساب مرکز بازرگانان مشخص را نشان می‌دهد. اطلاعات برگردانده شده می‌تواند به شما در شناسایی و حل مشکلاتی که بر عملکرد حساب شما و واجد شرایط بودن برای برنامه‌های مختلف تأثیر می‌گذارند، کمک کند.

برنامه‌هااسکریپت

/**
 * Lists all issues for a given Merchant Center account.
 */
function listAccountIssues() {
  // IMPORTANT:
  // Enable the Merchant API Accounts sub-API Advanced Service and call it
  // "MerchantApiAccounts"

  // Replace this with your Merchant Center ID.
  const accountId = "<MERCHANT_CENTER_ID>";

  // Construct the parent name
  const parent = 'accounts/' + accountId;

  try {
    console.log('Sending list Account Issues request');
    // Set pageSize to the maximum value (default: 50)
    let pageSize = 100;
    let pageToken;
    let count = 0;
    // Call the Account.Issues.list API method. Use the pageToken to iterate
    // through all pages of results.
    do {
      response = MerchantApiAccounts.Accounts.Issues.list(parent, {pageSize, pageToken});
      for (const issue of response.accountIssues) {
        console.log(issue);
        count++;
      }
      pageToken = response.nextPageToken;
    } while (pageToken);  // Exits when there is no next page token.
    console.log('The following count of Account Issues were returned: ', count);
  } catch (e) {
    console.log('ERROR!');
    console.log(e);
  }
}

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AccountIssue;
import com.google.shopping.merchant.accounts.v1.AccountIssueServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountIssueServiceClient.ListAccountIssuesPagedResponse;
import com.google.shopping.merchant.accounts.v1.AccountIssueServiceSettings;
import com.google.shopping.merchant.accounts.v1.AccountName;
import com.google.shopping.merchant.accounts.v1.ListAccountIssuesRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to list all the account issues of an account.
 *
 * <p>If you want to query the account issues of all the sub-accounts of an advanced account, see
 * ListAdvancedAccountIssuesSampleAsync.
 */
public class ListAccountIssuesSample {

  public static void listAccountIssues(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountIssueServiceSettings accountIssueServiceSettings =
        AccountIssueServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (AccountIssueServiceClient accountIssueServiceClient =
        AccountIssueServiceClient.create(accountIssueServiceSettings)) {

      // Gets the account ID from the config file.
      String accountId = config.getAccountId().toString();

      // Creates account name to identify account.
      String name = AccountName.newBuilder().setAccount(accountId).build().toString();
      ListAccountIssuesRequest request =
          ListAccountIssuesRequest.newBuilder().setParent(name).build();

      System.out.println("Sending list account issues request:");
      ListAccountIssuesPagedResponse response =
          accountIssueServiceClient.listAccountIssues(request);

      int count = 0;

      // Iterates over all rows in all pages and prints the issue in each row.
      // Automatically uses the `nextPageToken` if returned to fetch all pages of data.
      for (AccountIssue accountIssue : response.iterateAll()) {
        System.out.println(accountIssue);
        count++;
      }
      System.out.print("The following count of account issues were returned: ");
      System.out.println(count);
    } catch (Exception e) {
      System.out.println("An error has occured: ");
      System.out.println(e);
    }
  }

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

پی اچ پی

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\AccountIssueServiceClient;
use Google\Shopping\Merchant\Accounts\V1\ListAccountIssuesRequest;

/**
 * Lists all the account issues of an account.
 */
class ListAccountIssues
{
    /**
     * A helper function to create the parent string.
     *
     * @param array $accountId
     *      The account.
     *
     * @return string The parent has the format: `accounts/{account_id}`
     */
    private static function getParent($accountId)
    {
        return sprintf("accounts/%s", $accountId);
    }

    /**
     * Lists all the account issues for a given Merchant Center account.
     *
     * @param array $config
     *      The configuration data used for authentication and getting the acccount ID.
     * @return void
     */
    public static function listAccountIssuesSample($config): void
    {
        // Gets the OAuth credentials.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $accountIssueServiceClient = new AccountIssueServiceClient($options);

        // Creates parent.
        $parent = self::getParent($config['accountId']);

        // Creates the request.
        $request = new ListAccountIssuesRequest(['parent' => $parent]);

        // Calls the API and catches and prints any network failures/errors.
        try {
            print "Sending list account issues request:\n";
            $response = $accountIssueServiceClient->listAccountIssues($request);

            $count = 0;
            // Iterates over all elements and prints the issue in each row.
            foreach ($response->iterateAllElements() as $accountIssue) {
                print_r($accountIssue);
                $count++;
            }
            print "The following count of account issues were returned: ";
            print $count . "\n";
        } catch (ApiException $e) {
            print "An error has occured: \n";
            print $e->getMessage() . "\n";
        }
    }

    /**
     * Helper to execute the sample.
     *
     * @return void
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();

        // Lists the account issues.
        self::listAccountIssuesSample($config);
    }
}

// Run the script
$sample = new ListAccountIssues();
$sample->callSample();

پایتون

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AccountIssueServiceClient
from google.shopping.merchant_accounts_v1 import ListAccountIssuesRequest

_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"


def list_account_issues():
  """Lists all the account issues of an account."""

  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()

  # Creates a client.
  client = AccountIssueServiceClient(credentials=credentials)

  request = ListAccountIssuesRequest(parent=_PARENT)

  print("Sending list account issues request:")

  # Makes the request and catches and prints any error messages.
  try:
    response = client.list_account_issues(request=request)
    count = 0

    for account_issue in response:
      print(account_issue)
      count += 1
    print("The following count of account issues were returned: ")
    print(count)

  except RuntimeError as e:
    print("An error has occured: ")
    print(e)


if __name__ == "__main__":
  list_account_issues()

حلقه

curl -X GET \
"https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/issues?language_code=en-US&time_zone.id=America/Los_Angeles&page_size=50" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Accept: application/json"

مشکلات حساب را برای همه حساب‌های فرعی یک حساب پیشرفته فهرست کنید

اگر یک حساب کاربری پیشرفته را مدیریت می‌کنید، ممکن است لازم باشد مشکلات مربوط به همه حساب‌های فرعی خود را بررسی کنید. این مثال نحوه فهرست کردن حساب‌های فرعی و سپس، برای هر حساب فرعی، بازیابی ناهمگام مشکلات حساب آن را نشان می‌دهد. این رویکرد برای مدیریت چندین حساب کاربری کارآمد است.

جاوا

import static com.google.api.core.ApiFutures.transform;

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.shopping.merchant.accounts.v1.AccountIssueServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountIssueServiceSettings;
import com.google.shopping.merchant.accounts.v1.AccountName;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient.ListSubAccountsPagedResponse;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.ListAccountIssuesRequest;
import com.google.shopping.merchant.accounts.v1.ListAccountIssuesResponse;
import com.google.shopping.merchant.accounts.v1.ListSubAccountsRequest;
import java.io.IOException;
import java.util.AbstractMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to list the account issues of all the sub-accounts of an advanced
 * account.
 */
public class ListAdvancedAccountIssuesAsyncSample {

  /** Returns the list of issues for the given account. */
  private static ApiFuture<ListAccountIssuesResponse> getAccountIssues(
      AccountIssueServiceClient accountIssueServiceClient, String account) {
    return accountIssueServiceClient
        .listAccountIssuesCallable()
        .futureCall(ListAccountIssuesRequest.newBuilder().setParent(account).build());
  }

  /**
   * Returns a map of account issues where key is the sub-account resource name and the value is the
   * list of issues for each sub-account. Takes the API clients and the name of the advanced account
   * as input.
   */
  private static ApiFuture<Map<String, ListAccountIssuesResponse>> getSubAccountIssues(
      AccountsServiceClient accountsServiceClient,
      AccountIssueServiceClient accountIssueServiceClient,
      String advancedAccount)
      throws IOException {

    // Creates a direct executor to run the transform functions.
    Executor executor = MoreExecutors.directExecutor();

    // The parent has the format: accounts/{account}
    ListSubAccountsRequest request =
        ListSubAccountsRequest.newBuilder().setProvider(advancedAccount).build();
    System.out.println("Sending list subaccounts request:");

    // Lists all sub-accounts of the advanced account.
    ListSubAccountsPagedResponse listSubAccountsResponse =
        accountsServiceClient.listSubAccounts(request);

    // Iterates over all subAccounts and lists account issues for each.
    // Automatically uses the `nextPageToken` if returned to fetch all pages of data.
    List<ApiFuture<AbstractMap.SimpleEntry<String, ListAccountIssuesResponse>>>
        accountIssuesFutures =
            StreamSupport.stream(listSubAccountsResponse.iterateAll().spliterator(), false)
                .map(
                    account ->
                        transform(
                            getAccountIssues(accountIssueServiceClient, account.getName()),
                            (ListAccountIssuesResponse response) ->
                                new AbstractMap.SimpleEntry<>(account.getName(), response),
                            executor))
                .collect(Collectors.toList());

    // Collects all the responses into a single future.
    ApiFuture<List<AbstractMap.SimpleEntry<String, ListAccountIssuesResponse>>> accountIssuesList =
        ApiFutures.allAsList(accountIssuesFutures);

    // Transforms the list of responses into a map.
    return transform(
        accountIssuesList,
        (List<AbstractMap.SimpleEntry<String, ListAccountIssuesResponse>> list) ->
            list.stream()
                .collect(
                    Collectors.toMap(
                        AbstractMap.SimpleEntry::getKey,
                        AbstractMap.SimpleEntry::getValue,
                        (a, b) -> a)),
        executor);
  }

  public static void listAccountIssues(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Gets the account ID from the config file.
    // Make sure to use the advanced account ID here, otherwise the API will return an error.
    String accountId = config.getAccountId().toString();

    // Creates account name to identify account.
    String parent = AccountName.newBuilder().setAccount(accountId).build().toString();

    // Creates service settings using the credentials retrieved above.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates service settings using the credentials retrieved above.
    AccountIssueServiceSettings accountIssueServiceSettings =
        AccountIssueServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (AccountsServiceClient accountsServiceClient =
            AccountsServiceClient.create(accountsServiceSettings);
        AccountIssueServiceClient accountIssueServiceClient =
            AccountIssueServiceClient.create(accountIssueServiceSettings)) {

      ApiFuture<Map<String, ListAccountIssuesResponse>> subAccountIssues =
          getSubAccountIssues(accountsServiceClient, accountIssueServiceClient, parent);

      ApiFutures.addCallback(
          subAccountIssues,
          new ApiFutureCallback<Map<String, ListAccountIssuesResponse>>() {
            @Override
            public void onSuccess(Map<String, ListAccountIssuesResponse> results) {
              System.out.println("Account Issues");
              for (Entry<String, ListAccountIssuesResponse> entry : results.entrySet()) {
                System.out.println("Issues for account " + entry.getKey());
                System.out.println(entry.getValue());
              }
            }

            @Override
            public void onFailure(Throwable throwable) {
              System.out.println(throwable);
            }
          },
          MoreExecutors.directExecutor());
    } catch (Exception e) {
      System.out.println("An error has occured: ");
      System.out.println(e);
    }
  }

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

حلقه

برای فهرست کردن مشکلات مربوط به حساب‌های فرعی یک حساب پیشرفته، ابتدا باید حساب‌های فرعی را فهرست کنید (مثلاً با استفاده از accounts.listSubaccounts ) و سپس روی هر شناسه حساب فرعی پیمایش کنید تا متد accounts.issues.list را فراخوانی کنید. مثال curl زیر نحوه فهرست کردن مشکلات مربوط به یک حساب فرعی واحد را نشان می‌دهد. این درخواست را برای هر شناسه حساب فرعی تکرار کنید.

 curl -X GET \
 "https://merchantapi.googleapis.com/accounts/v1/accounts/{SUB_ACCOUNT_ID}/issues?language_code=en-US&time_zone.id=America/Los_Angeles&page_size=50" \
 --header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
 --header "Accept: application/json"
 ```