Hướng dẫn này chứa các ví dụ về cách gọi trực tiếp các điểm cuối REST mà không cần sử dụng thư viện ứng dụng.
Điều kiện tiên quyết
Tất cả các mẫu bên dưới đều được sao chép và dán vào vỏ bash bằng lệnh curl.
Bạn cũng cần có mã của nhà phát triển, quyền truy cập vào tài khoản thử nghiệm và tài khoản người quản lý Google Ads chứa ít nhất một tài khoản khách hàng.
Biến môi trường
Nhập thông tin xác thực và mã nhận dạng tài khoản ở bên dưới, sau đó sao chép và dán vào dòng lệnh để định cấu hình các biến môi trường được sử dụng trong các ví dụ tiếp theo. Hướng dẫn Uỷ quyền cung cấp hướng dẫn tạo mã truy cập OAuth 2.0.
API_VERSION="19"
DEVELOPER_TOKEN="DEVELOPER_TOKEN "
OAUTH2_ACCESS_TOKEN="OAUTH_ACCESS_TOKEN "
MANAGER_CUSTOMER_ID="MANAGER_CUSTOMER_ID "
CUSTOMER_ID="CUSTOMER_ID "
Mã đối tượng bổ sung không bắt buộc
Một số ví dụ sau đây áp dụng cho các chiến dịch hoặc ngân sách hiện có. Nếu bạn có mã nhận dạng của các đối tượng hiện có để sử dụng với các ví dụ này, hãy nhập mã nhận dạng đó ở bên dưới.
BUDGET_ID=BUDGET_ID
CAMPAIGN_ID=CAMPAIGN_ID
Nếu không, hai Mutates – Creates examples (Thay đổi – Tạo ví dụ) sẽ tạo một ngân sách và chiến dịch mới.
Tìm kiếm
Hướng dẫn Bộ công thức truy vấn chứa nhiều mẫu báo cáo tương ứng với một số màn hình mặc định của Google Ads và hoạt động với cùng các biến môi trường được sử dụng trong hướng dẫn này. Công cụ tạo truy vấn tương tác của chúng tôi cũng là một tài nguyên hữu ích để tạo truy vấn tuỳ chỉnh theo cách tương tác.
Phân trang
Phương thức search
sử dụng tính năng phân trang, với kích thước trang cố định là 10.000 mục và một page_token
được chỉ định cùng với query
.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data '{ "query": " SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED' ", "page_token":"${PAGE_TOKEN}" }'
SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED'
Phát trực tiếp
Phương thức searchStream
truyền trực tuyến tất cả kết quả trong một phản hồi duy nhất, do đó, trường pageSize
không được hỗ trợ.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:searchStream" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data '{ "query": " SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED' " }'
SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED'
Thay đổi
Bạn có thể gửi nhiều thao tác thay đổi (create
, update
hoặc remove
) trong một phần nội dung yêu cầu JSON bằng cách điền sẵn mảng operations
.
Tạo
Ví dụ này tạo hai ngân sách chiến dịch dùng chung trong một yêu cầu.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaignBudgets:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'name': 'My Campaign Budget #${RANDOM}', 'amountMicros': 500000, } }, { 'create': { 'name': 'My Campaign Budget #${RANDOM}', 'amountMicros': 500000, } } ] }"
Ví dụ tiếp theo sử dụng BUDGET_ID
của ngân sách chiến dịch hiện có; bạn có thể sao chép và dán từ kết quả của bước trước.
BUDGET_ID=BUDGET_ID
Các tài nguyên tham chiếu đến tài nguyên khác sẽ thực hiện việc này theo tên tài nguyên. Chiến dịch được tạo bên dưới tham chiếu đến campaignBudget
theo tên tài nguyên có giá trị chuỗi.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'status': 'PAUSED', 'advertisingChannelType': 'SEARCH', 'geoTargetTypeSetting': { 'positiveGeoTargetType': 'PRESENCE_OR_INTEREST', 'negativeGeoTargetType': 'PRESENCE_OR_INTEREST' }, 'name': 'My Search campaign #${RANDOM}', 'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/${BUDGET_ID}', 'targetSpend': {} } } ] }"
Nội dung cập nhật
Cập nhật các thuộc tính của đối tượng hiện có bằng các phép toán update
. Ví dụ tiếp theo sử dụng một chiến dịch hiện có; bạn có thể sao chép và dán từ kết quả của bước trước.
CAMPAIGN_ID=CAMPAIGN_ID
Tất cả nội dung cập nhật đều yêu cầu trường updateMask
, một danh sách được phân tách bằng dấu phẩy liệt kê các thuộc tính JSON cần có trong yêu cầu, được áp dụng dưới dạng nội dung cập nhật. Các thuộc tính được liệt kê trong updateMask
nhưng không có trong phần nội dung yêu cầu sẽ bị xoá trên một đối tượng. Các thuộc tính không có trong danh sách của updateMask
nhưng có trong phần nội dung yêu cầu sẽ bị bỏ qua.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'update': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}', 'name': 'A changed campaign name #${RANDOM}', }, 'updateMask': 'name' } ], }"
Xóa
Các đối tượng sẽ bị xoá bằng cách chỉ định tên tài nguyên của chúng làm thao tác remove
.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'remove': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}' } ], }"
Không thực hiện được một phần
Khi có nhiều thao tác trong một yêu cầu, hãy chỉ định partialFailure
(không bắt buộc). Nếu là true
, các thao tác thành công sẽ được thực hiện và các thao tác không hợp lệ sẽ trả về lỗi. Nếu là false
, tất cả các thao tác trong yêu cầu sẽ thành công nếu và chỉ khi tất cả các thao tác đó đều hợp lệ.
Ví dụ tiếp theo sử dụng một chiến dịch hiện có; bạn có thể sao chép và dán từ kết quả của ví dụ Tạo.
CAMPAIGN_ID=CAMPAIGN_ID
Yêu cầu sau đây chứa hai thao tác. Lệnh đầu tiên sẽ cố gắng thay đổi chiến lược giá thầu của chiến dịch được cung cấp và lệnh tiếp theo sẽ cố gắng xoá một chiến dịch có mã không hợp lệ. Vì thao tác thứ hai dẫn đến lỗi (mã chiến dịch không hợp lệ) và vì partialFailure
được đặt thành false
, nên thao tác đầu tiên cũng không thành công và chiến lược giá thầu của chiến dịch hiện tại không được cập nhật.
curl --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'partialFailure': false, 'operations': [ { 'update': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}', 'manualCpc': { 'enhancedCpcEnabled': false } }, 'updateMask': 'manual_cpc.enhanced_cpc_enabled' }, { 'remove': 'customers/${CUSTOMER_ID}/campaigns/INVALID_CAMPAIGN_ID' } ] }"
Thao tác theo nhóm
Phương thức googleAds:mutate
hỗ trợ việc gửi các nhóm thao tác với nhiều loại tài nguyên. Bạn có thể gửi nhiều thao tác thuộc nhiều loại để tạo chuỗi cho một chuỗi thao tác cần được thực hiện dưới dạng một nhóm.
Tập hợp các thao tác sẽ thành công nếu không có thao tác nào không thành công hoặc tất cả đều không thành công nếu có bất kỳ thao tác nào không thành công.
Ví dụ này minh hoạ cách tạo ngân sách chiến dịch, chiến dịch, nhóm quảng cáo và quảng cáo cùng nhau dưới dạng một nhóm hành động. Mỗi toán tử kế tiếp phụ thuộc vào toán tử trước đó. Nếu một thao tác không thành công, toàn bộ nhóm thao tác sẽ không thành công.
Số nguyên âm (-1
, -2
, -3
) được dùng làm phần giữ chỗ trong tên tài nguyên và được điền động trong thời gian chạy bằng kết quả của trình tự thao tác.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'mutateOperations': [ { 'campaignBudgetOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/campaignBudgets/-1', 'name': 'My Campaign Budget #${RANDOM}', 'deliveryMethod': 'STANDARD', 'amountMicros': 500000, 'explicitlyShared': false } } }, { 'campaignOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/-2', 'status': 'PAUSED', 'advertisingChannelType': 'SEARCH', 'geoTargetTypeSetting': { 'positiveGeoTargetType': 'PRESENCE_OR_INTEREST', 'negativeGeoTargetType': 'PRESENCE_OR_INTEREST' }, 'name': 'My Search campaign #${RANDOM}', 'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/-1', 'targetSpend': {} } } }, { 'adGroupOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/adGroups/-3', 'campaign': 'customers/${CUSTOMER_ID}/campaigns/-2', 'name': 'My ad group #${RANDOM}', 'status': 'PAUSED', 'type': 'SEARCH_STANDARD' } } }, { 'adGroupAdOperation': { 'create': { 'adGroup': 'customers/${CUSTOMER_ID}/adGroups/-3', 'status': 'PAUSED', 'ad': { 'responsiveSearchAd': { 'headlines': [ { 'pinned_field': 'HEADLINE_1', 'text': 'An example headline' }, { 'text': 'Another example headline' }, { 'text': 'Yet another headline' } ], 'descriptions': [ { 'text': 'An example description' }, { 'text': 'Another example description' } ], 'path1': 'all-inclusive', 'path2': 'deals' }, 'finalUrls': ['https://www.example.com'] } } } } ] }"
Quản lý tài khoản
Tạo tài khoản
Tạo tài khoản mới bằng phương thức createCustomerClient
. Xin lưu ý rằng URL này yêu cầu mã tài khoản người quản lý thay vì mã tài khoản khách hàng. Một tài khoản khách hàng mới sẽ được tạo trong tài khoản người quản lý.
curl f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${MANAGER_CUSTOMER_ID}:createCustomerClient" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'customerClient': { 'descriptiveName': 'My Client #${RANDOM}', 'currencyCode': 'USD', 'timeZone': 'America/New_York' } }"
Liệt kê các tài khoản có thể xem
Sử dụng một yêu cầu GET
đơn giản cho phương thức listAccessibleCustomers
để nhận danh sách các tài khoản Google Ads có thể truy cập bằng mã truy cập OAuth 2.0 đã cho. Không được sử dụng mã tài khoản người quản lý hoặc tài khoản khách hàng trong yêu cầu này.
curl -f --request GET "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
Tải tài sản nhị phân lên
Phương thức assets:mutate
dùng để tải lên và quản lý Thành phần. Dữ liệu nhị phân, chẳng hạn như hình ảnh, được mã hoá dưới dạng một chuỗi bằng cách sử dụng phương thức mã hoá base64 chuẩn có khoảng đệm. Phương thức mã hoá base64 tiêu chuẩn hoặc an toàn cho URL có hoặc không có khoảng đệm đều được chấp nhận.
Ví dụ này mã hoá một ảnh GIF 1 pixel để giữ cho mẫu ngắn gọn. Trong thực tế, tải trọng data
lớn hơn nhiều.
Sử dụng tiện ích dòng lệnh base64
(một phần của tiện ích cốt lõi GNU) để mã hoá hình ảnh GIF 1 pixel.
base64 1pixel.gif
Giá trị được mã hoá base64 được chỉ định làm thuộc tính data
trong yêu cầu API.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/assets:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'name': 'My image asset #${RANDOM}', 'type': 'IMAGE', 'imageAsset': { 'data': 'R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAIA' } } } ] }"