Trong Google Ads, hệ thống phân cấp tài khoản đóng vai trò quan trọng trong việc quản lý các chiến dịch quảng cáo và tài khoản con. Với khả năng quản lý nhiều tài khoản cùng lúc, bạn có thể theo dõi và kiểm soát chiến dịch của các tài khoản con một cách hiệu quả. Bài viết này sẽ hướng dẫn bạn cách sử dụng API Google Ads để lấy hệ thống phân cấp tài khoản từ tài khoản người quản lý, bao gồm cả những tài khoản được liên kết gián tiếp thông qua các tài khoản người quản lý phụ.
Mỗi tài khoản người quản lý cấp cao có thể mở rộng quyền quản lý của mình để kiểm soát các tài khoản khách hàng hoặc các tài khoản người quản lý khác. Tài khoản người quản lý có thể tiếp tục mở rộng để quản lý thêm nhiều tài khoản khách hàng hoặc các tài khoản người quản lý khác, tạo ra một hệ thống phân cấp tài khoản phức tạp.
Bạn có thể truy xuất hệ thống phân cấp tài khoản của tài khoản người quản lý bằng cách sử dụng câu lệnh truy vấn Google Ads Query Language (GAQL). Truy vấn này sẽ liệt kê tất cả các tài khoản con được chỉ định bởi thuộc tính client_customer từ bảng CustomerClient, đồng thời áp dụng đệ quy để lấy thông tin từ các tài khoản người quản lý phụ. Điều này cho phép bạn xác định chính xác những tài khoản nào được liên kết trực tiếp với tài khoản người quản lý của mình và những tài khoản nào được liên kết gián tiếp thông qua các tài khoản người quản lý khác.
Dưới đây là một ví dụ về cách lấy hệ thống phân cấp tài khoản thông qua mã code:
Lưu ý: Bạn không cần phải chỉ định login-customer-id để chạy ví dụ này. Nếu không chỉ định, hệ thống sẽ tự động truy xuất hệ thống phân cấp cho tất cả các tài khoản mà bạn có quyền truy cập.
// Bản quyền 2020 Google LLC
//
// Được cấp phép theo Giấy phép Apache, phiên bản 2.0 (gọi là "Giấy phép");
// bạn không được phép sử dụng tệp này ngoại trừ tuân theo Giấy phép.
// Bạn có thể lấy bản sao của Giấy phép tại
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Trừ khi được yêu cầu bởi pháp luật hiện hành hoặc đồng ý bằng văn bản,
// phần mềm được phân phối theo Giấy phép được cung cấp theo nguyên tắc "NGUYÊN TRẠNG",
// KHÔNG có bảo hành hay điều kiện dưới bất kỳ hình thức nào, dù rõ ràng hay ngụ ý.
// Xem Giấy phép để biết thêm các điều khoản về quyền hạn và hạn chế.package com.google.ads.googleads.examples.accountmanagement;import com.beust.jcommander.Parameter;import com.google.ads.googleads.examples.utils.ArgumentNames;
import com.google.ads.googleads.examples.utils.CodeSampleParams;
import com.google.ads.googleads.lib.GoogleAdsClient;
import com.google.ads.googleads.v17.errors.GoogleAdsError;
import com.google.ads.googleads.v17.errors.GoogleAdsException;
import com.google.ads.googleads.v17.resources.CustomerClient;
import com.google.ads.googleads.v17.resources.CustomerName;
import com.google.ads.googleads.v17.services.CustomerServiceClient;
import com.google.ads.googleads.v17.services.GoogleAdsRow;
import com.google.ads.googleads.v17.services.GoogleAdsServiceClient;
import com.google.ads.googleads.v17.services.GoogleAdsServiceClient.SearchPagedResponse;
import com.google.ads.googleads.v17.services.ListAccessibleCustomersRequest;
import com.google.ads.googleads.v17.services.ListAccessibleCustomersResponse;
import com.google.ads.googleads.v17.services.SearchGoogleAdsRequest;
import com.google.common.base.Strings;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
/**
* Lấy hệ thống phân cấp tài khoản cho tài khoản người quản lý được chỉ định và ID khách hàng đăng nhập.
* Nếu bạn không chỉ định ID quản lý và ID khách hàng đăng nhập, ví dụ sẽ hiển thị hệ thống phân cấp
* cho tất cả các tài khoản có thể truy cập từ tài khoản Google được xác thực.
* Lưu ý rằng nếu danh sách tài khoản có thể truy cập từ tài khoản Google được xác thực bao gồm các tài khoản
* trong cùng một hệ thống phân cấp, ví dụ này sẽ truy xuất và in các phần trùng lặp của hệ thống phân cấp
* cho mỗi tài khoản có thể truy cập.
*/
public class GetAccountHierarchy {
private static class GetAccountHierarchyParams extends CodeSampleParams {
@Parameter(names = ArgumentNames.MANAGER_CUSTOMER_ID)
private Long managerId;
@Parameter(names = ArgumentNames.LOGIN_CUSTOMER_ID)
private Long loginCustomerId;
}
public static void main(String[] args) {
GetAccountHierarchyParams params = new GetAccountHierarchyParams();
if (!params.parseArguments(args)) {
// Tuỳ chọn: bạn có thể truyền managerId trên dòng lệnh hoặc chỉ định một managerId ở đây.
// Nếu không có giá trị nào được thiết lập, một giá trị null sẽ được truyền vào phương thức
// chạy ví dụ, và hệ thống sẽ in hệ thống phân cấp của tất cả các ID khách hàng có thể truy cập.
// params.managerId = Long.parseLong(“INSERT_MANAGER_ID_HERE”);
// Tuỳ chọn: bạn có thể truyền loginCustomerId trên dòng lệnh hoặc chỉ định loginCustomerId
// ở đây, nếu và chỉ nếu managerId đã được thiết lập. Nếu loginCustomerId không được thiết lập
// trên dòng lệnh hoặc ở bên dưới, một giá trị null sẽ được truyền vào phương thức chạy ví dụ,
// và hệ thống sẽ sử dụng từng ID khách hàng có thể truy cập làm loginCustomerId.
// params.loginCustomerId = Long.parseLong(“INSERT_LOGIN_CUSTOMER_ID_HERE”);
}
if (params.managerId != null && params.loginCustomerId == null) {
System.err.println(“loginCustomerId cần được cung cấp nếu managerId được cung cấp.”);
return;
} else if (params.managerId == null && params.loginCustomerId != null) {
System.err.println(“loginCustomerId không được cung cấp nếu managerId không được cung cấp.”);
return;
}
GoogleAdsClient googleAdsClient = null;
try {
googleAdsClient = GoogleAdsClient.newBuilder().fromPropertiesFile().build();
} catch (FileNotFoundException fnfe) {
System.err.printf(
“Không thể tải cấu hình GoogleAdsClient từ tệp. Lỗi: %s%n”, fnfe);
System.exit(1);
} catch (IOException ioe) {
System.err.printf(“Không thể tạo GoogleAdsClient. Lỗi: %s%n”, ioe);
System.exit(1);
}
try {
new GetAccountHierarchy()
.runExample(googleAdsClient, params.managerId, params.loginCustomerId);
} catch (GoogleAdsException gae) {
System.err.printf(
“Yêu cầu với ID %s đã thất bại do GoogleAdsException. Lỗi gốc:%n”,
gae.getRequestId());
int i = 0;
for (GoogleAdsError googleAdsError : gae.getGoogleAdsFailure().getErrorsList()) {
System.err.printf(” Lỗi %d: %s%n”, i++, googleAdsError);
}
System.exit(1);
} catch (IOException ioe) {
System.err.printf(“Yêu cầu thất bại. Lỗi: %s%n”, ioe);
System.exit(1);
}
}
/**
* Chạy ví dụ.
*
* @param googleAdsClient khách hàng API Google Ads.
* @param managerId ID của khách hàng gốc từ đó bắt đầu tìm kiếm.
* @param loginCustomerId ID khách hàng đăng nhập được sử dụng để tạo GoogleAdsClient.
* @throws IOException nếu không thể tạo thành công Google Ads Client.
*/
private void runExample(GoogleAdsClient googleAdsClient, Long managerId, Long loginCustomerId)
throws IOException {
List<Long> seedCustomerIds = new ArrayList<>();
if (managerId == null) {
// Lấy hệ thống phân cấp tài khoản cho tất cả các khách hàng có thể truy cập.
seedCustomerIds = getAccessibleCustomers(googleAdsClient);
} else {
// Chỉ lấy hệ thống phân cấp cho ID quản lý được cung cấp.
seedCustomerIds.add(managerId);
}
Map<CustomerClient, Multimap<Long, CustomerClient>> allHierarchies = new HashMap<>();
List<Long> accountsWithNoInfo = new ArrayList<>();
// Xây dựng bản đồ của hệ thống phân cấp tài khoản.
for (Long seedCustomerId : seedCustomerIds) {
Map<CustomerClient, Multimap<Long, CustomerClient>> customerClientToHierarchy =
createCustomerClientToHierarchy(loginCustomerId, seedCustomerId);
if (customerClientToHierarchy == null) {
accountsWithNoInfo.add(seedCustomerId);
} else {
allHierarchies.putAll(customerClientToHierarchy);
}
}
// In ra ID của các tài khoản không cung cấp được thông tin về hệ thống phân cấp.
if (!accountsWithNoInfo.isEmpty()) {
System.out.println(
“Không thể truy xuất thông tin cho các tài khoản sau. Chúng có thể là các tài khoản thử nghiệm”
+ ” hoặc tài khoản gặp vấn đề về cấu hình. Vui lòng kiểm tra nhật ký để biết chi tiết.”);
for (long accountId : accountsWithNoInfo) {
System.out.println(accountId);
}
System.out.println();
}
int depth = 0;
// In thông tin hệ thống phân cấp cho tất cả các tài khoản có thông tin hệ thống phân cấp.
for (CustomerClient rootCustomerClient : allHierarchies.keySet()) {
System.out.printf(“Hệ thống phân cấp của tài khoản khách hàng ID %d:%n”, rootCustomerClient.getId());
printAccountHierarchy(rootCustomerClient, allHierarchies.get(rootCustomerClient), depth);
System.out.println();
}
}
// Phần còn lại của mã giữ nguyên cấu trúc tương tự như bản gốc, với các chú thích tương ứng.
}
Hệ thống phân cấp tài khoản trong Google Ads là công cụ mạnh mẽ giúp bạn quản lý các tài khoản con và tài khoản người quản lý phụ một cách hiệu quả. Bằng cách sử dụng Google Ads API, bạn có thể dễ dàng theo dõi và kiểm soát các tài khoản trong hệ thống phân cấp của mình, giúp tối ưu hóa các chiến dịch quảng cáo và quản lý ngân sách một cách hiệu quả hơn. Nếu bạn đang sử dụng Google Ads để quản lý nhiều tài khoản, việc hiểu rõ hệ thống phân cấp tài khoản sẽ mang lại lợi thế lớn trong việc điều hành chiến dịch của bạn.
