Filter akun yang dapat Anda akses

Metode accounts.list memungkinkan Anda mengambil daftar resource Account yang dapat diakses oleh pengguna terautentikasi. Anda dapat menggunakan parameter kueri filter untuk mempersempit hasil berdasarkan berbagai kriteria, seperti berikut:

  • Properti akun
  • Hubungan dengan akun lain (seperti penyedia dalam struktur akun lanjutan)
  • Layanan yang terkait dengan akun

Hal ini dapat membantu mengelola beberapa akun atau menemukan akun bisnis tertentu yang memenuhi kondisi tertentu.

Anda dapat menggunakan kolom berikut untuk memfilter di tingkat account:

  • access: Memfilter menurut jenis akses yang dimiliki pengguna ke account. Filter ini menerima nilai berikut:
    • DIRECT: Hanya menampilkan akun yang akses langsungnya dimiliki pengguna.
    • INDIRECT: Hanya menampilkan akun yang aksesnya dimiliki pengguna secara tidak langsung.
    • ALL: Menampilkan semua akun yang dapat diakses pengguna (baik langsung maupun tidak langsung). Ini adalah perilaku default jika filter tidak ditentukan.
  • capabilities: Memfilter menurut capabilities resource account (perhatikan bahwa kolom ini tidak tersedia di resource itu sendiri). Hanya kemampuan CAN_UPLOAD_PRODUCTS yang didukung. Kolom ini mendukung negasi dan menggunakan sintaksis koleksi.
  • relationship(...): Memfilter menurut jenis hubungan yang dimiliki akun dengan akun lain. Anda dapat menyertakan beberapa filter relationship(...) dalam satu permintaan.
  • accountName: Memfilter berdasarkan accountName resource account.

Untuk informasi yang lebih mendetail tentang sintaksis filter, lihat panduan Sintaksis filter.

Contoh

Contoh berikut menjelaskan cara membuat kueri yang paling umum. Semua contoh berikut menggunakan metode accounts.list. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi accounts.list.

Menemukan sub-akun penyedia tertentu

Metode accounts.listSubaccounts menyediakan cara langsung untuk mencantumkan sub-akun. Anda juga dapat menggunakan kemampuan pemfilteran seperti yang dijelaskan di bagian berikut. Jika mengelola akun lanjutan, Anda dapat mencantumkan semua sub-akunnya dengan memfilter providerId. Ganti PROVIDER_ID dengan ID akun lanjutan Anda.

Misalnya, gunakan relationship(providerId=123) jika ID penyedia adalah 123.

Hal ini berguna untuk mengelola struktur akun Anda.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(providerId%20%3D%20PROVIDER_ID)

Permintaan yang berhasil akan menampilkan kode status 200 dan isi respons dengan daftar sub-akun yang cocok:

{
  "accounts": [
    {
      "name": "accounts/77777",
      "accountId": "77777",
      "accountName": "SubAccount A of Provider",
      "adultContent": false,
      "languageCode": "fr",
      "timeZone": {
        "id": "Europe/Paris"
      }
    },
    {
      "name": "accounts/88888",
      "accountId": "88888",
      "accountName": "SubAccount B of Provider",
      "adultContent": false,
      "languageCode": "de",
      "timeZone": {
        "id": "Europe/Berlin"
      }
    }
  ],
  "nextPageToken": "XYZ123abcDEF..."
}

Menemukan akun yang tidak dapat mengupload produk

Anda dapat menggabungkan beberapa kondisi filter untuk membuat penelusuran yang lebih spesifik.

Filter accountName=*store* AND -capabilities:CAN_UPLOAD_PRODUCTS menemukan semua akun dengan "toko" dalam namanya yang tidak dikonfigurasi untuk mengupload produk secara langsung. - sebelum capabilities bertindak sebagai operator negasi. Hal ini dapat berguna untuk mengambil hanya akun lanjutan.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22%20AND%20-capabilities%3ACAN_UPLOAD_PRODUCTS

Permintaan yang berhasil akan menampilkan kode status 200 dan isi respons dengan daftar akun yang cocok:

{
  "accounts": [
    {
      "name": "accounts/54321",
      "accountId": "54321",
      "accountName": "Partner Store - US",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "America/New_York"
      }
    },
    {
      "name": "accounts/98765",
      "accountId": "98765",
      "accountName": "Auxiliary Brand Store",
      "adultContent": false,
      "languageCode": "fr",
      "timeZone": {
        "id": "Europe/Paris"
      }
    }
  ],
  "nextPageToken": "CDEfghIJKlmnOPQ..."
}

Menemukan akun berdasarkan nama

Anda dapat menelusuri akun yang nama tampilannya cocok dengan pola tertentu.

Misalnya, accountName=*store* akan menemukan semua akun dengan "store" di namanya.

Hal ini membantu menemukan akun bisnis tertentu dengan cepat.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22

Permintaan yang berhasil akan menampilkan kode status 200 dan isi respons dengan daftar akun yang cocok:

{
  "accounts": [
    {
      "name": "accounts/12345",
      "accountId": "12345",
      "accountName": "My Awesome Store",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "America/Los_Angeles"
      }
    },
    {
      "name": "accounts/67890",
      "accountId": "67890",
      "accountName": "Another Store Online",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "Europe/London"
      }
    }
  ],
  "nextPageToken": "ABSdefGHIjklMNO..."
}

Menemukan akun yang ditautkan ke penyedia untuk layanan tertentu

Anda dapat menemukan akun yang memiliki hubungan layanan tertentu dengan penyedia. Misalnya, untuk menemukan semua akun yang digabungkan di bawah penyedia PROVIDER_ID untuk penggabungan akun, gunakan filter relationship(providerId=PROVIDER_ID) AND service(type="ACCOUNT_AGGREGATION").

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(providerId%20%3D%20PROVIDER_ID%20AND%20service(type%20%3D%20%22ACCOUNT_AGGREGATION%22))

Permintaan yang berhasil akan menampilkan kode status 200 dan isi respons dengan daftar akun yang cocok:

{
  "accounts": [
    {
      "name": "accounts/54321",
      "accountId": "54321",
      "accountName": "Aggregated Account X",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "America/New_York"
      }
    }
  ]
}

Menemukan akun berdasarkan status persetujuan hubungan layanan

Anda dapat memfilter akun berdasarkan status hubungan layanan mereka dengan penyedia. Misalnya, untuk menemukan semua akun yang belum menerima permintaan penautan akun (handshakeState = "PENDING") dari penyedia tertentu PROVIDER_ID.

Misalnya, untuk menemukan akun dengan ID penyedia 123, jenis layanan ACCOUNT_MANAGEMENT, dan status PENDING, gunakan relationship(service(handshakeState = "PENDING" AND type = "ACCOUNT_MANAGEMENT") AND providerId = 123).

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(service(handshakeState%20%3D%20%22PENDING%22%20AND%20type%20%3D%20%22ACCOUNT_MANAGEMENT%22)%20AND%20providerId%20%3D%20PROVIDER_ID)

Permintaan yang berhasil akan menampilkan kode status 200 dan isi respons dengan daftar akun yang cocok:

{
  "accounts": [
    {
      "name": "accounts/98765",
      "accountId": "98765",
      "accountName": "Managed Account Y",
      "adultContent": false,
      "languageCode": "es",
      "timeZone": {
        "id": "Europe/Madrid"
      }
    }
  ]
}

Memfilter akun menggunakan library klien

Contoh berikut menunjukkan cara menggunakan library klien untuk memfilter akun berdasarkan kriteria gabungan, seperti nama akun dan hubungan dengan penyedia. Contoh ini menggunakan metode accounts.list. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi accounts.list.

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.Account;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient.ListAccountsPagedResponse;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.ListAccountsRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to filter the accounts the user making the request has access to. */
public class FilterAccountsSample {

  public static void filterAccounts(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.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

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

      // Filter for accounts with display names containing "store" and a provider with the ID "123":
      String filter = "accountName = \"*store*\" AND relationship(providerId = 123)";

      // Filter for all subaccounts of account "123":
      // String filter2 = "relationship(providerId = 123 AND service(type =
      // \"ACCOUNT_AGGREGATION\"))";

      // String filter3 = "relationship(service(handshakeState = \"APPROVED\" AND type =
      // \"ACCOUNT_MANAGEMENT\") AND providerId = 123)";

      ListAccountsRequest request = ListAccountsRequest.newBuilder().setFilter(filter).build();

      System.out.println("Sending list accounts request with filter:");
      ListAccountsPagedResponse response = accountsServiceClient.listAccounts(request);

      int count = 0;

      // Iterates over all rows in all pages and prints the sub-account
      // in each row.
      // `response.iterateAll()` automatically uses the `nextPageToken` and recalls the
      // request to fetch all pages of data.
      for (Account account : response.iterateAll()) {
        System.out.println(account);
        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();

    filterAccounts(config);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\AccountsServiceClient;
use Google\Shopping\Merchant\Accounts\V1\ListAccountsRequest;

/**
 * This class demonstrates how to filter the accounts the user making the request has access to.
 */
class FilterAccounts
{
    public static function filterAccounts(array $config): void
    {

        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $accountsServiceClient = new AccountsServiceClient($options);

        // Calls the API and catches and prints any network failures/errors.
        try {

            // Filter for accounts with display names containing "store" and a provider with the ID "123":
            $filter = "accountName = \"*store*\" AND relationship(providerId = 123)";

            // Filter for all subaccounts of account "123":
            // $filter = "relationship(providerId = 123 AND service(type = \"ACCOUNT_AGGREGATION\"))";

            // $filter = "relationship(service(handshakeState = \"APPROVED\" AND type =
            // \"ACCOUNT_MANAGEMENT\") AND providerId = 123)";

            $request = new ListAccountsRequest(['filter' => $filter]);

            print "Sending list accounts request with filter:\n";
            $response = $accountsServiceClient->listAccounts($request);

            $count = 0;

            // Iterates over all rows in all pages and prints the sub-account
            // in each row.
            // `response.iterateAll()` automatically uses the `nextPageToken` and recalls the
            // request to fetch all pages of data.
            foreach ($response->iterateAllElements() as $account) {
                print_r($account); 
                $count++;
            }
            print "The following count of elements were returned: ";
            print $count . PHP_EOL;
        } catch (ApiException $e) {
            print $e->getMessage();
        }
    }

    public function callSample(): void
    {
        $config = Config::generateConfig();
        self::filterAccounts($config);
    }
}

$sample = new FilterAccounts();
$sample->callSample();

Python

from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AccountsServiceClient
from google.shopping.merchant_accounts_v1 import ListAccountsRequest


def filter_accounts():
  """Filters the accounts the user making the request has access to."""

  # Get OAuth credentials.
  credentials = generate_user_credentials.main()

  # Create a client.
  client = AccountsServiceClient(credentials=credentials)

  # Create the filter string.
  filter_string = 'accountName = "*store*" AND relationship(providerId = 123)'

  # Create the request.
  request = ListAccountsRequest(filter=filter_string)

  # Make the request and print the response.
  try:
    print("Sending list accounts request with filter:")
    response = client.list_accounts(request=request)

    count = 0
    for account in response:
      print(account)
      count += 1

    print(f"The following count of elements were returned: {count}")

  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  filter_accounts()

AppsScript


/**
 * Filters and lists accounts for which the logged-in user has access to
 */
function filterAccounts() {
  // IMPORTANT:
  // Enable the Merchant API Accounts sub-API Advanced Service and call it
  // "MerchantApiAccounts"

  // Create the filter string.
  // Documentation can be found at
  // https://developers.google.com/merchant/api/guides/accounts/filter-syntax
  const filter = 'accountName = "*store*" AND relationship(providerId = 123)';
  try {
    console.log('Sending filter Accounts request');
    let pageToken;
    let pageSize = 500;
    // Call the Accounts.list API method with a filter. Use the pageToken to iterate through
    // all pages of results.
    do {
      response =
          MerchantApiAccounts.Accounts.list({pageSize, pageToken, filter});
      for (const account of response.accounts) {
        console.log(account);
      }
      pageToken = response.nextPageToken;
    } while (pageToken);  // Exits when there is no next page token.

  } catch (e) {
    console.log('ERROR!');
    console.log(e);
  }
}

cURL

curl --location 'https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22%20AND%20relationship(providerId%20%3D%20PROVIDER_ID)' \
--header 'Authorization: Bearer <API_TOKEN>'