ログインお客様 ID

login-customer-id は、クライアント センター(MCC)アカウントを使用して営業中の顧客アカウントにアクセスする場合、Search Ads 360 Reporting API で必須のヘッダーです。運用中のお客様のアカウントに直接アクセスする場合、login-customer-id ヘッダーは必要ありません。

「login-customer-id」は、検索広告 360 の管理画面から取得することもできます。現在選択されているクライアント アカウントの「login-customer-id」が画面の右上に表示されます。

認証されたユーザーが MCC アカウントと操作顧客アカウントの両方にアクセスできる場合は、曖昧さを避けるために login-customer-id を指定する必要があります。この場合は、login-customer-id を指定しなくても機能しますが、コンテキストは運用中のお客様アカウントのみに設定されます(これはおそらく意図されたものではありません)。

クライアント センター(MCC)アカウントの OAuth2 認証情報のみを使用してアカウントを管理している場合は、次の手順で正しい login-customer-id 値を取得してください。

  1. アクセス可能なユーザーを一覧表示する

    Java

    // Copyright 2022 Google LLC
    //
    // Licensed under the Apache License, Version 2.0 (the "License");
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //     https://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    
    package sample;
    
    import com.beust.jcommander.Parameter;
    import com.google.ads.searchads360.v0.lib.SearchAds360Client;
    import com.google.ads.searchads360.v0.resources.CustomerClient;
    import com.google.ads.searchads360.v0.services.SearchAds360Row;
    import com.google.ads.searchads360.v0.services.SearchAds360ServiceClient;
    import com.google.ads.searchads360.v0.services.SearchAds360ServiceClient.SearchPagedResponse;
    import com.google.ads.searchads360.v0.services.SearchSearchAds360Request;
    
    /** Get customer client details. */
    public class GetCustomerClient {
      private static class GetCustomerClientParams extends CodeSampleParams {
    
        @Parameter(names = "--customerId", required = true)
        private String customerId;
    
        @Parameter(names = "--loginCustomerId")
        private String loginCustomerId;
      }
    
      public static void main(String[] args) {
        GetCustomerClientParams params = new GetCustomerClientParams();
        if (!params.parseArguments(args)) {
          // Optional: You may pass the loginCustomerId on the command line or specify a loginCustomerId
          // here (10 digits, no dashes). If neither are set, customerId will be used as
          // loginCustomerId.
          // params.loginCustomerId = Long.parseLong("INSERT_LOGIN_CUSTOMER_ID_HERE");
        }
        final String loginCustomerId = params.loginCustomerId;
        final String customerId = params.customerId;
    
        try {
          // Creates a SearchAds360Client with the specified loginCustomerId. If there's
          // no loginCustomerId, customerId will be used instead.
          final SearchAds360Client searchAds360Client =
              SearchAds360Client.newBuilder()
                  .setLoginCustomerId(loginCustomerId == null ? customerId : loginCustomerId)
                  .fromPropertiesFile()
                  .build();
          // Creates the Search Ads 360 Service client.
          SearchAds360ServiceClient client = searchAds360Client.create();
          new GetCustomerClient().runExample(client, customerId);
        } catch (Exception exception) {
          System.err.printf("Failed with exception: %s%n", exception);
          exception.printStackTrace();
          System.exit(1);
        }
      }
    
      private void runExample(SearchAds360ServiceClient searchAds360ServiceClient, String customerId) {
        // Creates a query that retrieves all child accounts of the customerId specified in search
        // calls below.
        String query =
            "SELECT customer_client.descriptive_name, customer_client.client_customer,"
                + " customer_client.status FROM customer_client";
        SearchSearchAds360Request request =
            SearchSearchAds360Request.newBuilder().setCustomerId(customerId).setQuery(query).build();
    
        // Issues a search request.
        final SearchPagedResponse searchPagedResponse = searchAds360ServiceClient.search(request);
        for (SearchAds360Row element : searchPagedResponse.iterateAll()) {
          CustomerClient customerClient = element.getCustomerClient();
          System.out.printf(
              "CustomerClient found with name '%s', customer %s, and status: %s.%n",
              customerClient.getDescriptiveName(),
              customerClient.getClientCustomer(),
              customerClient.getStatus());
        }
      }
    }
    

    GetCustomerClient.java をダウンロード

    Python

    #!/usr/bin/env python
    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     https://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    """Retrieves customer_client for a customer using a pagination search request.
    """
    
    import argparse
    import traceback
    from google.ads.searchads360.v0.services.types.search_ads360_service import SearchSearchAds360Request
    from util_searchads360 import SearchAds360Client
    
    
    def main(client, customer_id) -> None:
      search_ads_360_service = client.get_service()
    
      query = """
          SELECT
            customer_client.descriptive_name,
            customer_client.client_customer,
            customer_client.status
          FROM customer_client"""
    
      request = SearchSearchAds360Request()
      request.customer_id = customer_id
      request.query = query
    
      # Issues a search request.
      results = search_ads_360_service.search(request=request)
    
      for row in results:
        customer_client = row.customer_client
        print(
            f"CustomerClient found with name {customer_client.descriptive_name}, customer {customer_client.client_customer}, and status: {customer_client.status.name}"
        )
    
    
    if __name__ == "__main__":
      # SearchAds360Client will read the search-ads-360.yaml configuration file in
      # the home directory if none is specified.
      search_ads_360_client = SearchAds360Client.load_from_file()
    
      parser = argparse.ArgumentParser(
          description=("Retrieves customer_client for a customer."))
      # Arguments to provide to run the example.
      parser.add_argument(
          "-c",
          "--customer_id",
          type=str,
          required=True,
          help="The Search Ads 360 customer ID (10 digits, no dashes).",
      )
    
      parser.add_argument(
          "-l",
          "--login_customer_id",
          type=str,
          required=False,
          help="The Search Ads 360 login customer ID (10 digits, no dashes).",
      )
    
      args = parser.parse_args()
    
      search_ads_360_client.set_ids(args.customer_id, args.login_customer_id)
    
      try:
        main(search_ads_360_client, args.customer_id)
      except Exception:  # pylint: disable=broad-except
        traceback.print_exc()
    

    get_customer_client.py をダウンロード

  2. MCC アカウントの階層を特定する

    Java

    // Copyright 2022 Google LLC
    //
    // Licensed under the Apache License, Version 2.0 (the "License");
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //     https://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    
    package sample;
    
    import com.beust.jcommander.Parameter;
    import com.google.ads.searchads360.v0.lib.SearchAds360Client;
    import com.google.ads.searchads360.v0.services.SearchAds360Row;
    import com.google.ads.searchads360.v0.services.SearchAds360ServiceClient;
    import com.google.ads.searchads360.v0.services.SearchSearchAds360StreamRequest;
    import com.google.ads.searchads360.v0.services.SearchSearchAds360StreamResponse;
    import com.google.api.gax.rpc.ServerStream;
    
    /** Get manager details. */
    public class GetManagersStream {
      private static class GetManagersParams extends CodeSampleParams {
    
        @Parameter(names = "--customerId", required = true)
        private String customerId;
    
        @Parameter(names = "--loginCustomerId")
        private String loginCustomerId;
      }
    
      public static void main(String[] args) {
        GetManagersParams params = new GetManagersParams();
        if (!params.parseArguments(args)) {
          // Optional: You may pass the loginCustomerId on the command line or specify a loginCustomerId
          // here ((10 digits, no dashes). If neither are set, customerId will be used as
          // loginCustomerId.
          // params.loginCustomerId = Long.parseLong("INSERT_LOGIN_CUSTOMER_ID_HERE");
        }
        final String loginCustomerId = params.loginCustomerId;
        final String customerId = params.customerId;
    
        try {
          // Creates a SearchAds360Client with the specified loginCustomerId. If there's
          // no loginCustomerId, customerId will be used instead.
          final SearchAds360Client searchAds360Client =
              SearchAds360Client.newBuilder()
                  .setLoginCustomerId(loginCustomerId == null ? customerId : loginCustomerId)
                  .fromPropertiesFile()
                  .build();
          // Creates the Search Ads 360 Service client.
          SearchAds360ServiceClient client = searchAds360Client.create();
          new GetManagersStream().runExample(client, customerId);
        } catch (Exception exception) {
          System.err.printf("Failed with exception: %s%n", exception);
          exception.printStackTrace();
          System.exit(1);
        }
      }
    
      private void runExample(SearchAds360ServiceClient searchAds360ServiceClient, String customerId) {
        // Creates a query that retrieves manager for the customer.
        String query =
            "SELECT customer_manager_link.manager_customer, customer_manager_link.status FROM"
                + " customer_manager_link";
        SearchSearchAds360StreamRequest request =
            SearchSearchAds360StreamRequest.newBuilder()
                .setCustomerId(customerId)
                .setQuery(query)
                .build();
    
        // Issues a search stream request.
        ServerStream<SearchSearchAds360StreamResponse> stream =
            searchAds360ServiceClient.searchStreamCallable().call(request);
        for (SearchSearchAds360StreamResponse response : stream) {
          for (SearchAds360Row element : response.getResultsList()) {
            System.out.printf(
                "Manager found with customer '%s' and status: %s.%n",
                element.getCustomerManagerLink().getManagerCustomer(),
                element.getCustomerManagerLink().getStatus());
          }
        }
      }
    }
    

    GetManagersStream.java をダウンロード

    Python

    #!/usr/bin/env python
    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     https://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    """Retrieves managers for a customer using a stream request."""
    
    import argparse
    import traceback
    from google.ads.searchads360.v0.services.types.search_ads360_service import SearchSearchAds360StreamRequest
    from util_searchads360 import SearchAds360Client
    
    
    def main(client, customer_id) -> None:
      search_ads_360_service = client.get_service()
    
      query = """
          SELECT
            customer_manager_link.manager_customer,
            customer_manager_link.status
          FROM customer_manager_link"""
    
      request = SearchSearchAds360StreamRequest()
      request.customer_id = customer_id
      request.query = query
    
      # Issues a search stream request.
      results = search_ads_360_service.search_stream(request=request)
    
      for response in results:
        for result in response.results:
          customer_manager_link = result.customer_manager_link
          print(
              f"Manager found with customer {customer_manager_link.manager_customer} and status: {customer_manager_link.status.name}"
          )
    
    
    if __name__ == "__main__":
      # SearchAds360Client will read the search-ads-360.yaml configuration file in
      # the home directory if none is specified.
      search_ads_360_client = SearchAds360Client.load_from_file()
    
      parser = argparse.ArgumentParser(
          description=("Retrieves managers for a customer."))
      # Arguments to provide to run the example.
      parser.add_argument(
          "-c",
          "--customer_id",
          type=str,
          required=True,
          help="The Search Ads 360 customer ID (10 digits, no dashes).",
      )
    
      parser.add_argument(
          "-l",
          "--login_customer_id",
          type=str,
          required=False,
          help="The Search Ads 360 login customer ID (10 digits, no dashes).",
      )
    
      args = parser.parse_args()
    
      search_ads_360_client.set_ids(args.customer_id, args.login_customer_id)
    
      try:
        main(search_ads_360_client, args.customer_id)
      except Exception:  # pylint: disable=broad-except
        traceback.print_exc()
    

    get_managers_stream.py をダウンロード

  3. 適切なクライアント センター(MCC)アカウントを選択します。

    対象となる顧客アカウントに複数の MCC アカウントがある場合は、階層の最上位にある MCC アカウントを選択します。これにより、アカウントの階層全体で複数の呼び出しに対して同じ login-customer-id を維持できるため、過度の切り替えを回避できます。