Cách liên kết với tài khoản người quản lý trong Google Ads

Liên kết tài khoản người quản lý trong Google Ads là một bước quan trọng để quản lý các chiến dịch quảng cáo một cách tập trung và hiệu quả. Tài khoản người quản lý, còn gọi là MCC (My Client Center), cho phép bạn kiểm soát nhiều tài khoản khách hàng từ một giao diện duy nhất. Điều này đặc biệt hữu ích cho các doanh nghiệp quảng cáo quy mô lớn hoặc các agency khi cần quản lý nhiều tài khoản Google Ads. Bài viết này sẽ hướng dẫn bạn cách liên kết tài khoản khách hàng với tài khoản người quản lý thông qua API Google Ads, sử dụng hai dịch vụ chính: CustomerClientLinkService và CustomerManagerLinkService.

Tài khoản người quản lý trong Google Ads, còn gọi là MCC (My Client Center), là các tài khoản dùng để quản trị, không trực tiếp phân phát quảng cáo. Tài khoản này đóng vai trò làm điểm truy cập duy nhất, giúp quản lý các tài khoản khách hàng dưới quyền một cách hiệu quả. Chúng được sử dụng để thiết lập thanh toán tổng hợp và nhiều tính năng khác trên nhiều tài khoản Google Ads.

Từ khóa quan trọng: Trong ngữ cảnh này, “tài khoản khách hàng” đề cập đến các tài khoản được quản lý bởi tài khoản người quản lý, bao gồm cả các tài khoản người quản lý khác hoặc tài khoản Google Ads đang phân phát quảng cáo.

Dịch vụ liên kết tài khoản

Trong API Google Ads, có hai dịch vụ chính để tạo liên kết giữa tài khoản người quản lý và tài khoản khách hàng: CustomerClientLinkServiceCustomerManagerLinkService.

  • Nếu bạn đang quản lý tài khoản khách hàng và muốn tạo liên kết, bạn sẽ sử dụng CustomerClientLinkService.
  • Ngược lại, nếu bạn là tài khoản khách hàng và muốn liên kết với tài khoản người quản lý cấp trên, bạn sẽ dùng CustomerManagerLinkService.

Hai dịch vụ này thực chất là hai cách nhìn khác nhau của cùng một liên kết. Ví dụ, khi tài khoản người quản lý M quản lý tài khoản khách hàng C, liên kết này từ góc nhìn của tài khoản M sẽ là CustomerClientLink, trong khi từ phía tài khoản C sẽ là CustomerManagerLink.

Cách thực hiện

Quy trình liên kết tài khoản luôn bắt đầu từ tài khoản người quản lý và phải được chấp nhận bởi tài khoản khách hàng. Trạng thái của liên kết sẽ được lưu trong trường status của CustomerClientLink hoặc CustomerManagerLink. Một liên kết mới sẽ bắt đầu với trạng thái PENDING và chuyển sang ACTIVE khi được chấp nhận.

Bạn có thể thực hiện quy trình liên kết hai tài khoản Google Ads theo 3 bước sau:

  1. Khi đăng nhập bằng tài khoản người quản lý, gửi lời mời đến tài khoản khách hàng bằng cách tạo một CustomerClientLink có trạng thái PENDING.
  2. Vẫn khi đăng nhập bằng tài khoản người quản lý, sử dụng GoogleAdsService để tìm manager_link_id của CustomerClientLink đã tạo.
  3. Khi đăng nhập bằng tài khoản khách hàng, chấp nhận lời mời từ tài khoản người quản lý bằng cách thay đổi CustomerManagerLink thành trạng thái ACTIVE.

Ví dụ về mã sau đây minh hoạ cách thiết lập liên kết giữa tài khoản người quản lý và khách hàng của tài khoản người quản lý đó:

Java

private void runExample(GoogleAdsClient googleAdsClient, long clientCustomerId, long managerId) {
// Ví dụ này giả định rằng thông tin đăng nhập của bạn có thể hoạt động cho cả hai tài khoản khách hàng và người quản lý.
// Nếu bạn cần sử dụng thông tin đăng nhập khác nhau cho mỗi tài khoản, hãy cập nhật cấu hình hoặc tạo hai đối tượng GoogleAdsClient riêng biệt.
// Gửi lời mời tới tài khoản khách hàng khi xác thực với tư cách là người quản lý.
googleAdsClient = googleAdsClient.toBuilder().setLoginCustomerId(managerId).build();CustomerClientLinkOperation.Builder clientLinkOp = CustomerClientLinkOperation.newBuilder();
clientLinkOp.getCreateBuilder()
.setStatus(ManagerLinkStatus.PENDING)
.setClientCustomer(ResourceNames.customer(clientCustomerId));

String pendingLinkResourceName;

try (CustomerClientLinkServiceClient customerClientLinkServiceClient =
googleAdsClient.getLatestVersion().createCustomerClientLinkServiceClient()) {
MutateCustomerClientLinkResponse response =
customerClientLinkServiceClient.mutateCustomerClientLink(
String.valueOf(managerId), clientLinkOp.build());

pendingLinkResourceName = response.getResult().getResourceName();

System.out.printf(
“Đã gửi lời mời từ tài khoản %s đến tài khoản khách hàng %s với resource name: %s%n”,
managerId, clientCustomerId, pendingLinkResourceName);
}

// Truy vấn manager_link_id của liên kết vừa tạo để có thể xác định resource name từ phía tài khoản khách hàng.
String query =
“SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE”
+ ” customer_client_link.resource_name = ‘”
+ pendingLinkResourceName
+ “‘”;
long managerLinkId;

try (GoogleAdsServiceClient googleAdsServiceClient =
googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
SearchPagedResponse response =
googleAdsServiceClient.search(String.valueOf(managerId), query);
GoogleAdsRow result = response.iterateAll().iterator().next();
managerLinkId = result.getCustomerClientLink().getManagerLinkId();
}

// Chấp nhận lời mời từ phía tài khoản khách hàng.
CustomerManagerLinkOperation.Builder managerLinkOp = CustomerManagerLinkOperation.newBuilder();
managerLinkOp.getUpdateBuilder()
.setResourceName(
ResourceNames.customerManagerLink(clientCustomerId, managerId, managerLinkId))
.setStatus(ManagerLinkStatus.ACTIVE);

managerLinkOp.setUpdateMask(FieldMasks.allSetFieldsOf(managerLinkOp.getUpdate()));

googleAdsClient = googleAdsClient.toBuilder().setLoginCustomerId(clientCustomerId).build();

try (CustomerManagerLinkServiceClient managerLinkServiceClient =
googleAdsClient.getLatestVersion().createCustomerManagerLinkServiceClient()) {
MutateCustomerManagerLinkResponse response =
managerLinkServiceClient.mutateCustomerManagerLink(
String.valueOf(clientCustomerId), Arrays.asList(managerLinkOp.build()));
System.out.printf(
“Tài khoản khách hàng đã chấp nhận lời mời với resource name: %s%n”,
response.getResults(0).getResourceName());
}
}

C#
public void Run(GoogleAdsClient client, long managerCustomerId, long clientCustomerId)
{
// Lưu ý: Ví dụ này giả định rằng managerCustomerId và clientCustomerId sử dụng chung thông tin đăng nhập.
// Trong thực tế, bạn có thể cần phải tạo hai đối tượng GoogleAdsClient riêng biệt cho mỗi tài khoản.
try
{
// Gửi lời mời từ tài khoản người quản lý đến tài khoản khách hàng.
string customerClientLinkResourceName = CreateInvitation(client, managerCustomerId, clientCustomerId);
// Truy vấn thông tin liên kết từ phía tài khoản người quản lý.
string managerLinkResourceName = GetManagerLinkResourceName(client, managerCustomerId, clientCustomerId, customerClientLinkResourceName);// Chấp nhận lời mời từ phía tài khoản khách hàng.
AcceptInvitation(client, clientCustomerId, managerLinkResourceName);
}
catch (GoogleAdsException e)
{
Console.WriteLine(“Thất bại:”);
Console.WriteLine($”Thông báo lỗi: {e.Message});
Console.WriteLine($”Chi tiết lỗi: {e.Failure});
Console.WriteLine($”Mã yêu cầu: {e.RequestId});
throw;
}
}

/// <summary>
/// Gửi lời mời liên kết từ tài khoản người quản lý đến tài khoản khách hàng.
/// </summary>
/// <param name=”client”>Đối tượng Google Ads client.</param>
/// <param name=”managerCustomerId”>Mã tài khoản người quản lý.</param>
/// <param name=”clientCustomerId”>Mã tài khoản khách hàng.</param>
/// <returns>Tên tài nguyên của liên kết khách hàng.</returns>
private string CreateInvitation(GoogleAdsClient client, long managerCustomerId, long clientCustomerId)
{
// Khởi tạo dịch vụ CustomerClientLinkService.
CustomerClientLinkServiceClient customerClientLinkService = client.GetService(Services.V17.CustomerClientLinkService);

// Cấu hình thông tin tài khoản người quản lý.
client.Config.LoginCustomerId = managerCustomerId.ToString();

// Tạo đối tượng liên kết khách hàng.
CustomerClientLink customerClientLink = new CustomerClientLink()
{
ClientCustomer = ResourceNames.Customer(clientCustomerId),
Status = ManagerLinkStatus.Pending // Thiết lập trạng thái lời mời là PENDING.
};

// Tạo thao tác liên kết khách hàng.
CustomerClientLinkOperation customerClientLinkOperation = new CustomerClientLinkOperation()
{
Create = customerClientLink
};

// Thực hiện yêu cầu mutate để tạo liên kết.
MutateCustomerClientLinkResponse response = customerClientLinkService.MutateCustomerClientLink(managerCustomerId.ToString(), customerClientLinkOperation);

// In kết quả và trả về tên tài nguyên của liên kết vừa tạo.
string customerClientLinkResourceName = response.Result.ResourceName;
Console.WriteLine($”Đã gửi lời mời từ tài khoản người quản lý {managerCustomerId} đến tài khoản khách hàng {clientCustomerId} với tên tài nguyên: ‘{customerClientLinkResourceName}‘.”);

return customerClientLinkResourceName;
}

/// <summary>
/// Truy vấn tên tài nguyên của liên kết từ phía tài khoản người quản lý.
/// </summary>
/// <param name=”client”>Đối tượng Google Ads client.</param>
/// <param name=”managerCustomerId”>Mã tài khoản người quản lý.</param>
/// <param name=”clientCustomerId”>Mã tài khoản khách hàng.</param>
/// <param name=”customerClientLinkResourceName”>Tên tài nguyên của liên kết khách hàng.</param>
/// <returns>Tên tài nguyên của liên kết người quản lý.</returns>
private string GetManagerLinkResourceName(GoogleAdsClient client, long managerCustomerId, long clientCustomerId, string customerClientLinkResourceName)
{
// Khởi tạo dịch vụ GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client.GetService(Services.V17.GoogleAdsService);

// Cấu hình thông tin tài khoản người quản lý.
client.Config.LoginCustomerId = managerCustomerId.ToString();

// Tạo truy vấn để tìm mã liên kết.
string query = $”SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE customer_client_link.resource_name = ‘{customerClientLinkResourceName}‘”;

// Thực hiện yêu cầu tìm kiếm.
GoogleAdsRow result = googleAdsService.Search(managerCustomerId.ToString(), query).First();

// Lấy mã liên kết và tên tài nguyên của liên kết người quản lý.
long managerLinkId = result.CustomerClientLink.ManagerLinkId;
string managerLinkResourceName = ResourceNames.CustomerManagerLink(clientCustomerId, managerCustomerId, managerLinkId);

Console.WriteLine($”Đã truy vấn thành công mã liên kết của tài khoản người quản lý: {managerLinkId}, tên tài nguyên: ‘{managerLinkResourceName}‘.”);

return managerLinkResourceName;
}

/// <summary>
/// Chấp nhận lời mời từ phía tài khoản khách hàng.
/// </summary>
/// <param name=”client”>Đối tượng Google Ads client.</param>
/// <param name=”clientCustomerId”>Mã tài khoản khách hàng.</param>
/// <param name=”managerLinkResourceName”>Tên tài nguyên của liên kết người quản lý.</param>
private void AcceptInvitation(GoogleAdsClient client, long clientCustomerId, string managerLinkResourceName)
{
// Khởi tạo dịch vụ CustomerManagerLinkService.
CustomerManagerLinkServiceClient customerManagerLinkService = client.GetService(Services.V17.CustomerManagerLinkService);

// Cấu hình thông tin tài khoản khách hàng.
client.Config.LoginCustomerId = clientCustomerId.ToString();

// Tạo đối tượng liên kết người quản lý với trạng thái ACTIVE.
CustomerManagerLink customerManagerLink = new CustomerManagerLink()
{
ResourceName = managerLinkResourceName,
Status = ManagerLinkStatus.Active
};

// Tạo thao tác cập nhật trạng thái liên kết.
CustomerManagerLinkOperation customerManagerLinkOperation = new CustomerManagerLinkOperation()
{
Update = customerManagerLink,
UpdateMask = FieldMasks.AllSetFieldsOf(customerManagerLink)
};

// Thực hiện yêu cầu mutate để cập nhật liên kết.
MutateCustomerManagerLinkResponse response = customerManagerLinkService.MutateCustomerManagerLink(clientCustomerId.ToString(), new[] { customerManagerLinkOperation });

// In kết quả sau khi chấp nhận lời mời.
Console.WriteLine($”Tài khoản khách hàng {clientCustomerId} đã chấp nhận lời mời với tên tài nguyên: ‘{response.Results[0].ResourceName}‘.”);
}

PHP
public static function runExample(int $managerCustomerId, int $clientCustomerId)
{
// Gửi lời mời kết nối đến tài khoản khách hàng trong khi xác thực với tư cách tài khoản người quản lý.
$customerClientLinkResourceName = self::createInvitation(
$managerCustomerId,
$clientCustomerId
);
// Truy vấn thông tin liên kết quản lý.
$managerLinkResourceName = self::getManagerLinkResourceName(
$managerCustomerId,
$clientCustomerId,
$customerClientLinkResourceName
);// Chấp nhận lời mời từ tài khoản người quản lý trong khi xác thực với tư cách tài khoản khách hàng.
self::acceptInvitation($clientCustomerId, $managerLinkResourceName);
}

/**
* Gửi lời mời kết nối từ tài khoản người quản lý đến tài khoản khách hàng.
*
* @param int $managerCustomerId Mã tài khoản người quản lý.
* @param int $clientCustomerId Mã tài khoản khách hàng.
* @return string Tên tài nguyên của liên kết khách hàng được tạo ra cho lời mời.
*/

private static function createInvitation(
int $managerCustomerId,
int $clientCustomerId
)
{
// Tạo một đối tượng khách hàng với mã khách hàng quản lý làm login customer ID.
$googleAdsClient = self::createGoogleAdsClient($managerCustomerId);

// Tạo một liên kết khách hàng mới.
$customerClientLink = new CustomerClientLink([
‘client_customer’ => ResourceNames::forCustomer($clientCustomerId),
‘status’ => ManagerLinkStatus::PENDING // Thiết lập trạng thái lời mời là PENDING.
]);

// Tạo thao tác liên kết khách hàng.
$customerClientLinkOperation = new CustomerClientLinkOperation();
$customerClientLinkOperation->setCreate($customerClientLink);

// Gửi yêu cầu mutate để tạo liên kết khách hàng.
$customerClientLinkServiceClient = $googleAdsClient->getCustomerClientLinkServiceClient();
$response = $customerClientLinkServiceClient->mutateCustomerClientLink(
MutateCustomerClientLinkRequest::build(
$managerCustomerId,
$customerClientLinkOperation
)
);

// In kết quả và trả về tên tài nguyên của liên kết khách hàng đã tạo.
$customerClientLinkResourceName = $response->getResult()->getResourceName();
printf(
“Đã gửi lời mời từ tài khoản người quản lý %d đến tài khoản khách hàng %d với tên tài nguyên liên kết ‘%s’.%s”,
$managerCustomerId,
$clientCustomerId,
$customerClientLinkResourceName,
PHP_EOL
);

return $customerClientLinkResourceName;
}

/**
* Truy vấn tên tài nguyên liên kết quản lý của liên kết khách hàng.
*
* @param int $managerCustomerId Mã tài khoản người quản lý.
* @param int $clientCustomerId Mã tài khoản khách hàng.
* @param string $customerClientLinkResourceName Tên tài nguyên của liên kết khách hàng.
* @return string Tên tài nguyên của liên kết quản lý.
*/

private static function getManagerLinkResourceName(
int $managerCustomerId,
int $clientCustomerId,
string $customerClientLinkResourceName
)
{
// Tạo một đối tượng khách hàng với mã tài khoản người quản lý làm login customer ID.
$googleAdsClient = self::createGoogleAdsClient($managerCustomerId);

// Tạo truy vấn tìm mã liên kết quản lý.
$query = “SELECT customer_client_link.manager_link_id FROM customer_client_link” .
” WHERE customer_client_link.resource_name = ‘$customerClientLinkResourceName‘”;

// Gửi yêu cầu tìm kiếm.
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
$response = $googleAdsServiceClient->search(
SearchGoogleAdsRequest::build($managerCustomerId, $query)
);

// Lấy mã liên kết quản lý và tên tài nguyên tương ứng.
$managerLinkId = $response->getIterator()->current()
->getCustomerClientLink()
->getManagerLinkId();
$managerLinkResourceName = ResourceNames::forCustomerManagerLink(
$clientCustomerId,
$managerCustomerId,
$managerLinkId
);

// In kết quả.
printf(
“Đã truy vấn mã liên kết quản lý của liên kết khách hàng: mã ID là %d và tên tài nguyên là ‘%s’.%s”,
$managerLinkId,
$managerLinkResourceName,
PHP_EOL
);

return $managerLinkResourceName;
}

/**
* Chấp nhận lời mời.
*
* @param int $clientCustomerId Mã tài khoản khách hàng.
* @param string $managerLinkResourceName Tên tài nguyên của liên kết quản lý cần chấp nhận.
*/

private static function acceptInvitation(
int $clientCustomerId,
string $managerLinkResourceName
)
{
// Tạo một đối tượng khách hàng với mã khách hàng làm login customer ID.
$googleAdsClient = self::createGoogleAdsClient($clientCustomerId);

// Tạo liên kết người quản lý với trạng thái đã cập nhật.
$customerManagerLink = new CustomerManagerLink();
$customerManagerLink->setResourceName($managerLinkResourceName);
$customerManagerLink->setStatus(ManagerLinkStatus::ACTIVE); // Cập nhật trạng thái thành ACTIVE.

// Tạo thao tác cập nhật liên kết quản lý.
$customerManagerLinkOperation = new CustomerManagerLinkOperation();
$customerManagerLinkOperation->setUpdate($customerManagerLink);
$customerManagerLinkOperation->setUpdateMask(
FieldMasks::allSetFieldsOf($customerManagerLink)
);

// Gửi yêu cầu mutate để cập nhật liên kết quản lý.
$customerManagerLinkServiceClient =
$googleAdsClient->getCustomerManagerLinkServiceClient();
$response = $customerManagerLinkServiceClient->mutateCustomerManagerLink(
MutateCustomerManagerLinkRequest::build(
$clientCustomerId,
[$customerManagerLinkOperation]
)
);

// In kết quả sau khi chấp nhận lời mời.
printf(
“Tài khoản khách hàng %d đã chấp nhận lời mời với tên tài nguyên ‘%s’.%s”,
$clientCustomerId,
$response->getResults()[0]->getResourceName(),
PHP_EOL
);
}

Python
def main(client, customer_id, manager_customer_id):
# Mã ví dụ này giả định rằng cùng một thông tin xác thực sẽ được sử dụng cho cả hai tài khoản khách hàng,
# nhưng trường hợp này có thể không xảy ra. Nếu bạn cần sử dụng thông tin xác thực khác nhau cho mỗi tài khoản,
# bạn có thể cập nhật cấu hình client hoặc khởi tạo hai client khác nhau, mỗi client trỏ đến một tệp cấu hình cụ thể
# để tránh việc cả hai client cùng đọc một tệp cấu hình duy nhất từ thư mục $HOME.
customer_client_link_service = client.get_service(“CustomerClientLinkService”)# Gửi lời mời kết nối đến tài khoản khách hàng trong khi xác thực với tư cách tài khoản người quản lý.
client_link_operation = client.get_type(“CustomerClientLinkOperation”)
client_link = client_link_operation.create
client_link.client_customer = customer_client_link_service.customer_path(customer_id)
client_link.status = client.enums.ManagerLinkStatusEnum.PENDING

response = customer_client_link_service.mutate_customer_client_link(
customer_id=manager_customer_id, operation=client_link_operation
)
resource_name = response.results[0].resource_name

print(
f’Đã gửi lời mời từ tài khoản người quản lý “{manager_customer_id}” đến ‘
f’tài khoản khách hàng “{customer_id}” với tên tài nguyên liên kết ‘
f'”{resource_name}“‘
)

# Tìm manager_link_id của liên kết vừa tạo để có thể xây dựng tên tài nguyên từ phía tài khoản khách hàng.
# Lưu ý rằng vì lọc theo resource_name, chỉ có một tài nguyên customer_client_link duy nhất sẽ được trả về.
query = f”’
SELECT
customer_client_link.manager_link_id
FROM
customer_client_link
WHERE
customer_client_link.resource_name = “{resource_name}“”’

ga_service = client.get_service(“GoogleAdsService”)

try:
response = ga_service.search(customer_id=manager_customer_id, query=query)
# Vì phương thức search trả về một iterator, chúng ta cần khởi tạo vòng lặp để lấy kết quả,
# mặc dù chúng ta biết rằng truy vấn này sẽ chỉ trả về một hàng dữ liệu duy nhất.
for row in response.result:
manager_link_id = row.customer_client_link.manager_link_id
except GoogleAdsException as ex:
handle_googleads_exception(ex)

customer_manager_link_service = client.get_service(“CustomerManagerLinkService”)
manager_link_operation = client.get_type(“CustomerManagerLinkOperation”)
manager_link = manager_link_operation.update
manager_link.resource_name = (
customer_manager_link_service.customer_manager_link_path(
customer_id,
manager_customer_id,
manager_link_id,
)
)

manager_link.status = client.enums.ManagerLinkStatusEnum.ACTIVE
client.copy_from(
manager_link_operation.update_mask,
protobuf_helpers.field_mask(None, manager_link._pb),
)

response = customer_manager_link_service.mutate_customer_manager_link(
customer_id=customer_id, operations=[manager_link_operation]
)
print(
“Tài khoản khách hàng đã chấp nhận lời mời với tên tài nguyên liên kết: “
f'”{response.results[0].resource_name}“‘
)

Ruby
def link_manager_to_client(manager_customer_id, client_customer_id)
# GoogleAdsClient sẽ đọc tệp cấu hình từ ENV['HOME']/google_ads_config.rb khi được gọi mà không có tham số
client = Google::Ads::GoogleAds::GoogleAdsClient.new
# Ví dụ này giả định rằng thông tin xác thực giống nhau sẽ hoạt động cho cả hai tài khoản khách hàng,
# nhưng điều này có thể không đúng trong thực tế. Nếu bạn cần sử dụng thông tin xác thực khác nhau
# cho mỗi tài khoản, bạn có thể cập nhật cấu hình client hoặc khởi tạo hai client khác nhau,
# mỗi client sử dụng một bộ thông tin xác thực riêng. Luôn đảm bảo cập nhật cấu hình trước khi
# truy xuất bất kỳ dịch vụ nào bạn cần sử dụng.# Gửi lời mời kết nối đến tài khoản khách hàng trong khi xác thực với tư cách là tài khoản người quản lý.
client.configure do |config|
config.login_customer_id = manager_customer_id.to_i
end

client_link = client.resource.customer_client_link do |link|
link.client_customer = client.path.customer(client_customer_id)
link.status = :PENDING
end

client_link_operation = client.operation.create_resource.customer_client_link(client_link)

response = client.service.customer_client_link.mutate_customer_client_link(
customer_id: manager_customer_id,
operation: client_link_operation,
)

client_link_resource_name = response.result.resource_name
puts “Đã gửi lời mời từ tài khoản người quản lý #{manager_customer_id} đến “ \
“tài khoản khách hàng #{client_customer_id} với tên tài nguyên liên kết “ \
#{client_link_resource_name}.”

# Tìm manager_link_id của liên kết vừa được tạo, để có thể xây dựng tên tài nguyên từ phía tài khoản khách hàng.
query = <<~QUERY
SELECT
customer_client_link.manager_link_id
FROM
customer_client_link
WHERE
customer_client_link.resource_name = ‘#{client_link_resource_name}
QUERY

response = client.service.google_ads.search(customer_id: manager_customer_id, query: query)
manager_link_id = response.first.customer_client_link.manager_link_id

# Chấp nhận liên kết bằng cách sử dụng tài khoản khách hàng.
client.configure do |config|
config.login_customer_id = client_customer_id.to_i
end

manager_link_resource_name = client.path.customer_manager_link(
client_customer_id,
manager_customer_id,
manager_link_id,
)

manager_link_operation =
client.operation.update_resource.customer_manager_link(manager_link_resource_name) do |link|
link.status = :ACTIVE
end

response = client.service.customer_manager_link.mutate_customer_manager_link(
customer_id: client_customer_id,
operations: [manager_link_operation],
)

puts “Tài khoản khách hàng đã chấp nhận lời mời với tên tài nguyên liên kết “ \
#{response.results.first.resource_name}.”
end

Perl

sub link_manager_to_client {
my ($api_client, $manager_customer_id, $client_customer_id) = @_;
# Bước 1: Gửi lời mời kết nối tới tài khoản khách hàng khi xác thực với tư cách là tài khoản người quản lý.
$api_client->set_login_customer_id($manager_customer_id);# Tạo liên kết tài khoản khách hàng.
my $client_link =
Google::Ads::GoogleAds::V17::Resources::CustomerClientLink->new({
clientCustomer =>
Google::Ads::GoogleAds::V17::Utils::ResourceNames::customer($client_customer_id),
status => PENDING
});

# Tạo thao tác liên kết tài khoản khách hàng.
my $client_link_operation =
Google::Ads::GoogleAds::V17::Services::CustomerClientLinkService::CustomerClientLinkOperation->new({
create => $client_link
});

# Gửi liên kết để mở lời mời tới tài khoản khách hàng.
my $client_link_response =
$api_client->CustomerClientLinkService()->mutate({
customerId => $manager_customer_id,
operation => $client_link_operation
});

my $client_link_resource_name = $client_link_response->{result}{resourceName};

printf “Đã gửi lời mời từ tài khoản người quản lý %d tới tài khoản khách hàng %d với tên tài nguyên liên kết tài khoản khách hàng: ‘%s’.\n”,
$manager_customer_id, $client_customer_id, $client_link_resource_name;

# Bước 2: Truy xuất ‘manager_link_id’ từ liên kết vừa tạo để xây dựng tên tài nguyên liên kết từ phía tài khoản khách hàng.
my $search_query = “SELECT customer_client_link.manager_link_id FROM customer_client_link “ .
“WHERE customer_client_link.resource_name = ‘$client_link_resource_name'”;

my $search_response = $api_client->GoogleAdsService()->search({
customerId => $manager_customer_id,
query => $search_query
});

my $manager_link_id = $search_response->{results}[0]{customerClientLink}{managerLinkId};

my $manager_link_resource_name =
Google::Ads::GoogleAds::V17::Utils::ResourceNames::customer_manager_link(
$client_customer_id, $manager_customer_id, $manager_link_id);

# Bước 3: Chấp nhận lời mời kết nối từ tài khoản người quản lý khi xác thực với tư cách là tài khoản khách hàng.
$api_client->set_login_customer_id($client_customer_id);

# Tạo liên kết tài khoản người quản lý.
my $manager_link =
Google::Ads::GoogleAds::V17::Resources::CustomerManagerLink->new({
resourceName => $manager_link_resource_name,
status => ACTIVE
});

# Tạo thao tác liên kết tài khoản người quản lý.
my $manager_link_operation =
Google::Ads::GoogleAds::V17::Services::CustomerManagerLinkService::CustomerManagerLinkOperation->new({
update => $manager_link,
updateMask => all_set_fields_of($manager_link)
});

# Cập nhật liên kết tài khoản người quản lý để chấp nhận lời mời.
my $manager_link_response =
$api_client->CustomerManagerLinkService()->mutate({
customerId => $client_customer_id,
operations => [$manager_link_operation]
});

printf “Tài khoản khách hàng %d đã chấp nhận lời mời với tên tài nguyên liên kết tài khoản người quản lý: ‘%s’.\n”,
$client_customer_id, $manager_link_response->{results}[0]{resourceName};

return 1;
}

Liên kết tài khoản người quản lý với tài khoản khách hàng trong Google Ads mang lại nhiều lợi ích, giúp bạn tối ưu hoá quy trình quản lý chiến dịch và tiết kiệm thời gian khi theo dõi hiệu suất quảng cáo. Bằng cách sử dụng đúng các dịch vụ API như CustomerClientLinkService và CustomerManagerLinkService, bạn có thể dễ dàng tạo các liên kết cần thiết, đồng thời đảm bảo quản lý nhiều tài khoản quảng cáo một cách hiệu quả. Hãy đảm bảo tuân thủ đúng quy trình và các bước được hướng dẫn trong bài viết để liên kết tài khoản Google Ads một cách nhanh chóng và thành công.

Facebook
X
LinkedIn
Tumblr
Threads
logo_v4seowebsite

V4SEO là đội ngũ SEO & Web xuất phát từ Nha Trang, triển khai dự án cho doanh nghiệp trên toàn quốc. Chúng tôi cung cấp Dịch vụ SEO Nha Trang theo chuẩn Google, kết hợp kỹ thuật, nội dung và entity để tăng trưởng bền vững. Song song, Dịch vụ thiết kế website Nha Trang tối ưu UX, tốc độ và Core Web Vitals nhằm tối đa chuyển đổi; báo cáo minh bạch, hỗ trợ dài hạn.

Nội dung được sự cố vấn của chuyên gia SEO - Võ Quang Vinh
author-founder-v4seowebsite

Võ Quang Vinh – Chuyên gia SEO với hơn 10 năm kinh nghiệm triển khai hàng trăm dự án SEO tổng thể, từ thương mại điện tử đến dịch vụ địa phương. Từng đảm nhiệm vai trò SEO và là Keymember tại Gobranding và dân dắt đội SEO BachhoaXanh.com, anh là người đứng sau nhiều chiến dịch tăng trưởng traffic vượt bậc. Hiện tại, Vinh là người sáng lập và điều hành V4SEO, cung cấp giải pháp SEO & thiết kế website chuẩn UX/UI giúp doanh nghiệp bứt phá thứ hạng Google và tối ưu chuyển đổi. 

Bài viết liên quan
ĐĂNG KÝ V4SEO NGAY HÔM NAY KHUYẾN MÃI 15% TẤT CẢ DỊCH VỤ ÁP DỤNG TỚI HẾT THÁNG 12/2025

Nhận tư vấn từ V4SEO Đăng ký ngay hôm nay Bứt phá trong mai sau