Trong quá trình làm việc với Google Ads API, việc thay đổi tài nguyên là một phần không thể thiếu để quản lý chiến dịch quảng cáo hiệu quả. Google Ads API cung cấp nhiều phương pháp để thay đổi tài nguyên, giúp người dùng tối ưu hóa quy trình và đảm bảo tính linh hoạt trong việc quản lý các chiến dịch, nhóm quảng cáo, và quảng cáo. Bài viết này sẽ giới thiệu các phương pháp tối ưu khi thực hiện các thay đổi tài nguyên, bao gồm việc sử dụng tên tài nguyên tạm thời và cách nhóm các thao tác cùng loại nhằm cải thiện hiệu suất API.
Tên tài nguyên tạm thời trong Google Ads API
GoogleAdsService.Mutate hỗ trợ việc sử dụng tên tài nguyên tạm thời, cho phép bạn tham chiếu các tài nguyên mới được tạo trong cùng một yêu cầu API. Điều này giúp bạn tạo đồng thời chiến dịch, nhóm quảng cáo, quảng cáo, từ khoá, và nhiều thực thể khác chỉ trong một yêu cầu duy nhất.
Bạn có thể thực hiện điều này bằng cách chỉ định resource_name của tài nguyên mới với một mã nhận dạng phủ định. Ví dụ, nếu bạn tạo một chiến dịch và đặt tên tài nguyên của chiến dịch đó dưới dạng customers/<YOUR_CUSTOMER_ID>/campaigns/-1, thì trong các thao tác tiếp theo, như khi tạo nhóm quảng cáo, bạn có thể tham chiếu nhóm quảng cáo đó theo tên tài nguyên đã đặt. Mã phủ định -1 sẽ được hệ thống tự động thay thế bằng mã thực tế của chiến dịch khi nó được tạo.
Một số lưu ý quan trọng khi sử dụng tên tài nguyên tạm thời:
- Tên tài nguyên tạm thời chỉ có thể được sử dụng sau khi nó được xác định trong yêu cầu. Ví dụ, thao tác tạo nhóm quảng cáo phải xuất hiện sau thao tác tạo chiến dịch trong yêu cầu.
- Tên tài nguyên tạm thời không được ghi nhớ qua các yêu cầu thay đổi hoặc các công việc khác. Nếu bạn cần tham chiếu đến một tài nguyên được tạo trong một yêu cầu trước đó, hãy sử dụng tên tài nguyên thực tế đã được gán.
- Mỗi tên tài nguyên tạm thời trong một yêu cầu phải sử dụng một số âm duy nhất, ngay cả khi chúng thuộc các loại tài nguyên khác nhau. Nếu cùng một mã nhận dạng tạm thời được sử dụng lại, hệ thống sẽ trả về lỗi.
Ví dụ
Giả sử bạn muốn tạo một chiến dịch, một nhóm quảng cáo, và một quảng cáo trong cùng một yêu cầu API. Bạn có thể cấu trúc yêu cầu của mình như sau:
mutate_operations: [
{
campaign_operation: {
create: {
resource_name: "customers/<YOUR_CUSTOMER_ID>/campaigns/-1",
...
}
}
},
{
ad_group_operation: {
create: {
resource_name: "customers/<YOUR_CUSTOMER_ID>/adGroups/-2",
campaign: "customers/<YOUR_CUSTOMER_ID>/campaigns/-1",
...
}
}
},
{
ad_group_ad_operation: {
create: {
ad_group: "customers/<YOUR_CUSTOMER_ID>/adGroups/-2",
...
}
}
},
]
Trong ví dụ này, bạn sẽ sử dụng mã nhận dạng -1 cho chiến dịch và mã nhận dạng -2 cho nhóm quảng cáo. Mã nhận dạng tạm thời này đảm bảo rằng các tài nguyên được tạo liên kết chính xác với nhau.
Nhóm các thao tác cùng loại trong Google Ads API
Khi sử dụng GoogleAdsService.Mutate, điều quan trọng là phải nhóm các thao tác theo cùng loại tài nguyên trong mảng hoạt động (operations) để tối ưu hoá hiệu suất. Phương thức mutate giúp tự động sắp xếp các thao tác thay đổi cho từng loại tài nguyên. Khi mã được thực thi, nó sẽ phân tích các thao tác và nhóm tất cả các thao tác thuộc cùng một loại tài nguyên thành một yêu cầu duy nhất.
Ví dụ thực tiễn: Nếu bạn có 5 thao tác liên quan đến chiến dịch và 10 thao tác liên quan đến nhóm quảng cáo trong mảng operations của yêu cầu Mutate, API sẽ thực hiện hai lệnh gọi phía sau: một lệnh đến CampaignService để xử lý 5 thao tác chiến dịch và một lệnh đến AdGroupService để xử lý 10 thao tác nhóm quảng cáo. Điều này giúp tối ưu hóa hiệu suất.
Tuy nhiên, nếu bạn không nhóm đúng cách, ví dụ như sắp xếp các thao tác theo thứ tự: [chiến dịch, nhóm quảng cáo, chiến dịch, nhóm quảng cáo], hệ thống sẽ phải thực hiện nhiều lệnh gọi hơn. Trong trường hợp này, sẽ có tổng cộng 4 lệnh gọi phía sau, làm tăng thời gian xử lý và có thể dẫn đến thời gian chờ quá lâu trong những tình huống phức tạp.
Lưu ý quan trọng: Hãy luôn nhóm các thao tác thuộc cùng loại tài nguyên trong lệnh gọi GoogleAdsService.Mutate để đảm bảo hiệu suất tốt nhất và tránh các sự cố về thời gian chờ trong quá trình thực hiện.
Truy xuất các thuộc tính có thể thay đổi qua phản hồi
Khi bạn đặt response_content_type của yêu cầu thay đổi thành MUTABLE_RESOURCE, phản hồi sẽ bao gồm toàn bộ các giá trị của tất cả các trường có thể thay đổi cho từng đối tượng được tạo hoặc cập nhật. Tính năng này giúp bạn tránh phải gửi các yêu cầu search hoặc searchStream sau mỗi lần thay đổi.
Lưu ý: Việc yêu cầu loại phản hồi MUTABLE_RESOURCE sẽ làm tăng kích thước tải trọng của phản hồi, vì nó cung cấp thêm thông tin chi tiết. Chỉ nên sử dụng tính năng này khi ứng dụng của bạn cần thông tin bổ sung từ phản hồi.
Nếu bạn không đặt response_content_type, API Google Ads sẽ mặc định sử dụng RESOURCE_NAME_ONLY. Điều này có nghĩa là phản hồi chỉ chứa tên tài nguyên của từng đối tượng được tạo hoặc cập nhật, giúp giảm tải trọng phản hồi.
Sau đây là ví dụ về cách truy xuất một tài nguyên có thể thay đổi qua lệnh gọi API:
Ví dụ trong ngôn ngữ Java:
private String createExperimentArms(
GoogleAdsClient googleAdsClient, long customerId, long campaignId, String experiment) {// Tạo danh sách các thao tác cho chiến dịchList<ExperimentArmOperation> operations = new ArrayList<>();
// Tạo nhánh kiểm soát cho chiến dịch đã có sẵn
operations.add(
ExperimentArmOperation.newBuilder()
.setCreate(
ExperimentArm.newBuilder()
.setControl(true)
.addCampaigns(ResourceNames.campaign(customerId, campaignId))
.setExperiment(experiment)
.setName(“control arm”)
.setTrafficSplit(40)
.build())
.build());
// Tạo nhánh thử nghiệm
operations.add(
ExperimentArmOperation.newBuilder()
.setCreate(
ExperimentArm.newBuilder()
.setControl(false)
.setExperiment(experiment)
.setName(“experiment arm”)
.setTrafficSplit(60)
.build())
.build());
// Khởi tạo dịch vụ thử nghiệm
try (ExperimentArmServiceClient experimentArmServiceClient =
googleAdsClient.getLatestVersion().createExperimentArmServiceClient()) {
// Tạo yêu cầu thay đổi và yêu cầu MUTABLE_RESOURCE để lấy giá trị của nhánh thử nghiệm
MutateExperimentArmsRequest mutateRequest = MutateExperimentArmsRequest.newBuilder()
.setCustomerId(Long.toString(customerId))
.addAllOperations(operations)
.setResponseContentType(ResponseContentType.MUTABLE_RESOURCE)
.build();
// Gửi yêu cầu thay đổi
MutateExperimentArmsResponse response =
experimentArmServiceClient.mutateExperimentArms(mutateRequest);
// Lấy kết quả
MutateExperimentArmResult controlArmResult = response.getResults(0);
MutateExperimentArmResult treatmentArmResult = response.getResults(
response.getResultsCount() – 1);
// In ra tên nhánh kiểm soát và nhánh thử nghiệm
System.out.printf(“Created control arm with resource name ‘%s’%n”,
controlArmResult.getResourceName());
System.out.printf(“Created treatment arm with resource name ‘%s’%n”,
treatmentArmResult.getResourceName());
// Trả về ID chiến dịch trong thiết kế của nhánh thử nghiệm
return treatmentArmResult.getExperimentArm().getInDesignCampaigns(0);
}
}
Trong mỗi ví dụ, dịch vụ Google Ads sẽ trả về danh sách các tài nguyên được tạo hoặc cập nhật, và bạn có thể sử dụng các thuộc tính của các đối tượng này để điều chỉnh hoặc phân tích sau khi lệnh gọi API hoàn tất.
Việc hiểu rõ các phương pháp tối ưu khi thay đổi tài nguyên trong Google Ads API sẽ giúp bạn nâng cao hiệu suất và giảm thiểu các lỗi không mong muốn. Từ việc sử dụng tên tài nguyên tạm thời để tạo ra nhiều thực thể cùng một lúc, đến việc nhóm các thao tác cùng loại, bạn có thể tối ưu hóa cách làm việc với API. Hãy áp dụng các phương pháp này trong công việc hàng ngày của bạn để tiết kiệm thời gian và đảm bảo các chiến dịch quảng cáo của bạn hoạt động một cách hiệu quả nhất.
