Hiển thị và Video 360 API cho phép bạn quản lý toàn bộ tính năng đặt giá thầu tuỳ chỉnh thực tế. Bạn có thể tạo thuật toán đặt giá thầu tuỳ chỉnh, tải lên và xác minh các tập lệnh riêng lẻ và chỉ định một thuật toán cụ thể cho một tài nguyên làm tài nguyên đặt giá thầu chiến lược.
Trang này mô tả cách tạo, cập nhật và chỉ định các thuật toán đặt giá thầu tuỳ chỉnh với giải pháp Display & API Video 360. Mỗi phần sẽ cung cấp một mã mẫu.
Tạo thuật toán đặt giá thầu tuỳ chỉnh
Đối tượng CustomBiddingAlgorithm
đại diện cho một cá nhân
mà bạn có thể chỉ định cho một mục hàng để sử dụng trong chiến lược giá thầu của mục hàng đó. Chiến dịch này
có thông tin chi tiết về thuật toán, chẳng hạn như
customBiddingAlgorithmType
và
entityStatus
, cũng như
readinessState
và suspensionState
cho
từng mô hình do nhà quảng cáo tương ứng tạo ra. Bạn có thể tạo
CustomBiddingScript
và
CustomBiddingAlgorithmRules
đối tượng dưới dạng tài nguyên con cho phần tử
để sử dụng.
Dưới đây là ví dụ về cách tạo thuật toán đặt giá thầu tuỳ chỉnh dựa trên tập lệnh:
Java
// Create the custom bidding algorithm structure.
CustomBiddingAlgorithm customBiddingAlgorithm =
new CustomBiddingAlgorithm()
.setAdvertiserId(advertiser-id)
.setDisplayName(display-name)
.setEntityStatus("ENTITY_STATUS_ACTIVE")
.setCustomBiddingAlgorithmType("SCRIPT_BASED");
// Configure the create request.
CustomBiddingAlgorithms.Create request =
service.customBiddingAlgorithms().create(customBiddingAlgorithm);
// Create the custom bidding algorithm.
CustomBiddingAlgorithm response = request.execute();
// Display the new custom bidding algorithm name.
System.out.printf(
"Custom bidding algorithm %s was created.%n",
response.getName()
);
Python
# Create a custom bidding algorithm object.
custom_bidding_algorithm_obj = {
'advertiserId': advertiser-id,
'displayName': display-name,
'entityStatus': 'ENTITY_STATUS_ACTIVE',
'customBiddingAlgorithmType': 'SCRIPT_BASED'
}
# Create the custom bidding algorithm.
response = service.customBiddingAlgorithms().create(
body=custom_bidding_algorithm_obj
).execute()
# Display the new custom bidding algorithm.
print(f'The following Custom Bidding Algorithm was created: {response}')
PHP
// Create a custom bidding algorithm object.
$customBiddingAlgorithm =
new Google_Service_DisplayVideo_CustomBiddingAlgorithm();
$customBiddingAlgorithm->setAdvertiserId(advertiser-id);
$customBiddingAlgorithm->setDisplayName(display-name);
$customBiddingAlgorithm->setEntityStatus('ENTITY_STATUS_ACTIVE');
$customBiddingAlgorithm->setCustomBiddingAlgorithmType('SCRIPT_BASED');
// Create the custom bidding algorithm.
$result =
$this->service->customBiddingAlgorithms->create($customBiddingAlgorithm);
// Display the new custom bidding algorithm name.
printf('Custom Bidding Algorithm %s was created.\n', $result['name']);
Quản lý quyền truy cập vào thuật toán
Các thuật toán đặt giá thầu tuỳ chỉnh có thể do đối tác hoặc nhà quảng cáo sở hữu. Các thuật toán
thuộc sở hữu của đối tác đều có thể truy cập và sửa đổi mà đối tác đó cũng như bất kỳ trẻ em nào
nhà quảng cáo có tên trong trường sharedAdvertiserIds
.
Nhà quảng cáo có thể truy cập và sửa đổi các thuật toán do nhà quảng cáo sở hữu
nhà quảng cáo và đối tác mẹ của nhà quảng cáo đó, nhưng không thể chia sẻ với các nhà quảng cáo khác.
Nếu bạn chỉ sử dụng thuật toán cho một nhà quảng cáo, hãy chỉ định
nhà quảng cáo làm chủ sở hữu với trường advertiserId
.
Nếu không, hãy chỉ định đối tác mẹ của nhà quảng cáo làm chủ sở hữu với
partnerId
rồi cấp cho nhà quảng cáo quyền truy cập vào
sharedAdvertiserIds
.
Tải logic thuật toán lên
Tuỳ thuộc vào loại thuật toán đặt giá thầu tuỳ chỉnh, tiếp theo bạn cần tạo đối tượng tập lệnh hoặc quy tắc mà bạn có thể cung cấp logic để thuật toán sử dụng.
Tải tập lệnh lên
Các thuật toán đặt giá thầu tuỳ chỉnh dựa trên tập lệnh sử dụng nội dung do người dùng cung cấp tập lệnh để đánh giá giá trị của một lượt hiển thị. Mẫu của các tập lệnh đơn giản và danh sách trường nâng cao có sẵn thông qua Hiển thị và Trung tâm trợ giúp Video 360.
Các phần sau đây hướng dẫn bạn cách thêm tập lệnh mới hoặc đã cập nhật vào một tập lệnh tuỳ chỉnh thuật toán đặt giá thầu.
Truy xuất vị trí tài nguyên tập lệnh
Trước tiên, hãy truy xuất vị trí tài nguyên có sẵn trong chiến lược đặt giá thầu tuỳ chỉnh
thông qua thuật toán
Phương thức customBiddingAlgorithms.uploadScript
. Chiến dịch này
yêu cầu trả về một đối tượng CustomBiddingScriptRef
có
tên tài nguyên. Bạn có thể
tải tệp tập lệnh của bạn lên vị trí do lệnh
tên tài nguyên. Sau đó, hãy sử dụng đối tượng tham chiếu tập lệnh đặt giá thầu tuỳ chỉnh để
tạo tài nguyên tập lệnh.
Dưới đây là ví dụ về cách truy xuất một vị trí tài nguyên có sẵn:
Java
// Retrieve a usable custom bidding script
// reference.
CustomBiddingScriptRef scriptRef =
service
.customBiddingAlgorithms()
.uploadScript(custom-bidding-algorithm-id)
.setAdvertiserId(advertiser-id)
.execute();
// Display the custom bidding script reference resource path.
System.out.printf(
"The script can be uploaded to the following resource path: %s%n",
scriptRef.getResourceName()
);
Python
# Retrieve a usable custom bidding script reference
# object.
custom_bidding_script_ref = service.customBiddingAlgorithms().uploadScript(
customBiddingAlgorithmId=custom-bidding-algorithm-id,
advertiserId=advertiser-id
).execute()
# Display the new custom bidding script reference object.
print('The following custom bidding script reference object was retrieved:'
f'{custom_bidding_script_ref}')
PHP
// Set parent advertiser ID of custom bidding
// algorithm in optional parameters array for request.
$optParams = array('advertiserId' => advertiser-id);
// Retrieve a usable custom bidding script reference.
$scriptRefResponse = $this->service->customBiddingAlgorithms->uploadScript(
custom-bidding-algorithm-id,
$optParams
);
// Display the new custom bidding script reference object.
printf(
'The script can be uploaded to the following resource path: %s\n',
$scriptRefResponse->getResourceName()
);
Tải một tệp tập lệnh lên
Sau khi truy xuất vị trí tài nguyên có sẵn, hãy tải tệp tập lệnh của bạn lên vị trí đó
vị trí trong quảng cáo Hiển thị Hệ thống Video 360 với
Phương thức media.upload
. Phương thức này hỗ trợ một
tải lên đơn giản yêu cầu tham số truy vấn
uploadType=media
.
Dưới đây là ví dụ về cách tải lên một tệp tập lệnh được cung cấp một tuỳ chỉnh đã truy xuất đối tượng tham chiếu tập lệnh đặt giá thầu:
Java
// Create media object.
GoogleBytestreamMedia media = new GoogleBytestreamMedia();
media.setResourceName(resource-name);
// Create input stream for the script file.
InputStreamContent scriptFileStream =
new InputStreamContent(
null, new FileInputStream(script-path));
// Create media.upload request.
Media.Upload uploadRequest =
service
.media()
.upload(
resource-name,
media,
scriptFileStream);
// Retrieve uploader from the request and set it to us a simple
// upload request.
MediaHttpUploader uploader = uploadRequest.getMediaHttpUploader();
uploader.setDirectUploadEnabled(true);
// Execute the upload using an Upload URL with the destination resource
// name.
uploader
.upload(
new GenericUrl(
"https://displayvideo.googleapis.com/upload/media/"
+ resource-name));
Python
# Create a media upload object.
media = MediaFileUpload(script-path)
# Create upload request.
upload_request = service.media().upload(
resourceName=resource-name, media_body=media)
# Override response handler to expect null response.
upload_request.postproc = HttpRequest.null_postproc
# Upload script to resource location given in retrieved custom bidding
# script reference object.
upload_request.execute()
PHP
// Create a media object.
$mediaBody = new Google_Service_DisplayVideo_GoogleBytestreamMedia();
$mediaBody->setResourceName(resource-name);
// Set parameters for upload request.
$optParams = array(
'data' => file_get_contents(script-path),
'uploadType' => 'media',
'resourceName' => resource-name
);
// Upload script file to given resource location.
$this->service->media->upload(
resource-name,
$mediaBody,
$optParams
);
cURL
curl --request POST 'https://displayvideo.googleapis.com/upload/media/resource-name?uploadType=media'
-H 'authorization: Bearer access-token'
-H 'Content-Type: text/plain'
--data-binary @script-path
Tạo đối tượng tập lệnh
Sau khi tải tệp tập lệnh lên, hãy tạo một tài nguyên tập lệnh đặt giá thầu tuỳ chỉnh bằng
phương thức customBiddingAlgorithms.scripts.create
. Chiến lược phát hành đĩa đơn
Đối tượng CustomBiddingScript
được truyền trong yêu cầu chỉ nên
bao gồm đối tượng CustomBiddingScriptRef
dưới dạng thuộc tính được chỉ định
giá trị của trường script
. Thao tác này liên kết tệp đã tải lên
tập lệnh cùng với tài nguyên tập lệnh mới.
Dưới đây là ví dụ về cách tạo tài nguyên tập lệnh:
Java
// Create the custom bidding script structure.
CustomBiddingScript customBiddingScript =
new CustomBiddingScript()
.setScript(custom-bidding-script-ref);
// Create the custom bidding script.
CustomBiddingScript response =
service
.customBiddingAlgorithms()
.scripts()
.create(custom-bidding-algorithm-id, customBiddingScript)
.setAdvertiserId(advertiser-id)
.execute();
// Display the new script resource name
System.out.printf(
"The following script was created: %s%n",
response.getName());
Python
# Create a custom bidding script object.
script_obj = {
'script': custom-bidding-script-ref
}
# Create the custom bidding script.
response = service.customBiddingAlgorithms().scripts().create(
customBiddingAlgorithmId=custom-bidding-algorithm-id,
advertiserId=advertiser-id,
body=script_obj).execute()
# Display the new custom bidding script object.
print(f'The following custom bidding script was created: {response}')
PHP
// Create the custom bidding script object.
$customBiddingScript =
new Google_Service_DisplayVideo_CustomBiddingScript();
$customBiddingScript->setScript(custom-bidding-script-ref);
// Set parameters for create script request.
$optParams = array(
'advertiserId' => advertiser-id
);
// Create the custom bidding script.
$result = $this->service->customBiddingAlgorithms_scripts->create(
custom-bidding-algorithm-id,
$customBiddingScript,
$optParams
);
// Display the new script resource name.
printf('The following script was created: %s.\n', $result->getName());
Sau khi tạo tài nguyên tập lệnh đặt giá thầu tuỳ chỉnh, chiến dịch Hiển thị và Video 360 sẽ xử lý
để đảm bảo rằng tập lệnh đó có thể được sử dụng thành công để tính số lượt hiển thị.
Truy xuất trạng thái của quá trình xử lý này thông qua đối tượng tập lệnh
Trường state
. Sau khi tập lệnh mới được chấp nhận, lệnh gọi tuỳ chỉnh
thuật toán đặt giá thầu bắt đầu sử dụng tập lệnh để tính điểm giá trị lượt hiển thị. Chiến dịch này
xảy ra ngay lập tức, do đó hãy đảm bảo rằng bạn muốn cập nhật thuật toán trước
tạo tài nguyên tập lệnh mới.
Quy tắc tải lên
Các thuật toán đặt giá thầu tuỳ chỉnh dựa trên quy tắc sử dụng logic được cung cấp trong
Đối tượng AlgorithmRules
để đánh giá giá trị của một lượt hiển thị.
Các đối tượng AlgorithmRules
được tải lên tệp JSON, sau đó
được liên kết với thuật toán đặt giá thầu tuỳ chỉnh thông qua
CustomBiddingAlgorithmRules
.
Truy xuất vị trí tài nguyên của quy tắc
Trước tiên, hãy truy xuất vị trí tài nguyên có sẵn trong chiến lược đặt giá thầu tuỳ chỉnh
thông qua thuật toán
Phương thức customBiddingAlgorithms.uploadRules
. Chiến dịch này
yêu cầu trả về một đối tượng CustomBiddingAlgorithmsRulesRef
kèm theo tên tài nguyên. Bạn có thể tải các quy tắc của mình lên
tệp vào vị trí được chỉ định theo tên tài nguyên. Sau đó
sử dụng đối tượng tham chiếu quy tắc thuật toán đặt giá thầu tuỳ chỉnh để tạo quy tắc
.
Dưới đây là ví dụ về cách truy xuất một vị trí tài nguyên có sẵn:
Java
// Create the custom bidding algorithm structure.
CustomBiddingAlgorithmRulesRef rulesRef =
service
.customBiddingAlgorithms()
.uploadRules(custom-bidding-algorithm-id)
.setAdvertiserId(advertiser-id)
.execute();
System.out.printf(
"The rules can be uploaded to the following resource path: %s%n",
rulesRef.getResourceName()
);
Python
# Retrieve a usable custom bidding algorithm rules reference
# object.
custom_bidding_algorithm_rules_ref = service.customBiddingAlgorithms().uploadRules(
customBiddingAlgorithmId=custom-bidding-algorithm-id,
advertiserId=advertiser-id
).execute()
# Display the new custom bidding algorithm rules reference object.
print('The following custom bidding algorithm rules reference object was retrieved:'
f' {custom_bidding_algorithm_rules_ref}')
PHP
// Set parent advertiser ID of custom bidding algorithm
// in optional parameters array for request.
$optParams = array('advertiserId' => advertiser-id);
// Retrieve a usable custom bidding algorithm rules reference.
$rulesRefResponse = $this->service->customBiddingAlgorithms->uploadRules(
custom-bidding-algorithm-id,
$optParams
);
// Display the new custom bidding algorithm rules reference object resource path.
printf(
'The rules can be uploaded to the following resource path: %s\n',
$rulesRefResponse->getResourceName()
);
Tải một tệp AlgorithmRules
lên
Sau khi truy xuất vị trí tài nguyên có sẵn, hãy tải tệp quy tắc của bạn lên vị trí đó
vị trí trong quảng cáo Hiển thị Hệ thống Video 360 với
Phương thức media.upload
. Phương thức này hỗ trợ một
tải lên đơn giản yêu cầu tham số truy vấn
uploadType=media
.
Dưới đây là ví dụ về cách tải một tệp AlgorithmRules
lên dựa trên một tệp đã truy xuất
đối tượng tham chiếu quy tắc thuật toán đặt giá thầu tuỳ chỉnh:
Java
// Create media object.
GoogleBytestreamMedia media = new GoogleBytestreamMedia();
media.setResourceName(resource-name);
// Create input stream for the rules file.
InputStreamContent rulesFileStream =
new InputStreamContent(
null, new FileInputStream(rules-file-path));
// Create media.upload request.
Media.Upload uploadRequest =
service
.media()
.upload(
resource-name,
media,
rulesFileStream);
// Retrieve uploader from the request and set it to us a simple
// upload request.
MediaHttpUploader uploader = uploadRequest.getMediaHttpUploader();
uploader.setDirectUploadEnabled(true);
// Execute the upload using an Upload URL with the destination resource
// name.
uploader
.upload(
new GenericUrl(
"https://displayvideo.googleapis.com/upload/media/"
+ resource-name));
Python
# Create a media upload object.
media = MediaFileUpload(rules-file-path)
# Create upload request.
upload_request = service.media().upload(
resourceName=resource-name, media_body=media)
# Override response handler to expect null response.
upload_request.postproc = HttpRequest.null_postproc
# Upload rules file to resource location given in retrieved custom bidding
# algorithm rules reference object.
upload_request.execute()
PHP
// Create a media object.
$mediaBody = new Google_Service_DisplayVideo_GoogleBytestreamMedia();
$mediaBody->setResourceName(resource-name);
// Set parameters for upload request.
$optParams = array(
'data' => file_get_contents(rules-file-path),
'uploadType' => 'media',
'resourceName' => resource-name
);
// Upload rules file to given resource location.
$this->service->media->upload(
resource-name,
$mediaBody,
$optParams
);
cURL
curl --request POST 'https://displayvideo.googleapis.com/upload/media/resource-name?uploadType=media'
-H 'authorization: Bearer access-token'
-H 'Content-Type: text/plain'
--data-binary @rules-file-path
Tạo đối tượng quy tắc
Sau khi tải tệp JSON AlgorithmRules
lên, hãy tạo một chiến lược đặt giá thầu tuỳ chỉnh
tài nguyên quy tắc thuật toán với
customBiddingAlgorithms.rules.create
. Chiến lược phát hành đĩa đơn
Đối tượng CustomBiddingAlgorithmRules
được truyền trong yêu cầu phải
chỉ bao gồm đối tượng CustomBiddingAlgorithmRulesRef
dưới dạng
giá trị được chỉ định của trường rules
. Điều này liên kết
đã tải tệp JSON AlgorithmRules
lên bằng tài nguyên quy tắc mới.
Dưới đây là ví dụ về cách tạo tài nguyên quy tắc:
Java
// Create the custom bidding algorithm rules structure.
CustomBiddingAlgorithmRules customBiddingAlgorithmRules =
new CustomBiddingAlgorithmRules()
.setRules(custom-bidding-algorithm-rules-ref);
// Create the rules resource.
CustomBiddingAlgorithmRules response =
service
.customBiddingAlgorithms()
.rules()
.create(custom-bidding-algorithm-id, customBiddingAlgorithmRules)
.setAdvertiserId(advertiser-id)
.execute();
// Display the new rules resource name.
System.out.printf(
"The following custom bidding algorithm rules object was created: %s%n",
response.getName());
Python
# Create the custom bidding algorithm rules object.
rules_obj = {
'rules': custom-bidding-algorithm-rules-ref
}
# Create the rules resource.
response = service.customBiddingAlgorithms().rules().create(
customBiddingAlgorithmId=custom-bidding-algorithm-id,
advertiserId=advertiser-id,
body=rules_obj).execute()
# Display the new custom bidding algorithm rules object.
print(f'The following custom bidding algorithm rules resource was created: {response}')
PHP
// Create the custom bidding algorithm rules object.
$customBiddingAlgorithmRules =
new Google_Service_DisplayVideo_CustomBiddingAlgorithmRules();
$customBiddingAlgorithmRules->setRules(custom-bidding-algorithm-rules-ref);
// Set parameters for create rules request.
$optParams = array(
'advertiserId' => advertiser-id
);
// Create the custom bidding algorithm rules resource.
$result = $this->service->customBiddingAlgorithms_rules->create(
custom-bidding-algorithm-id,
$customBiddingAlgorithmRules,
$optParams
);
// Display the new custom bidding algorithm rules resource name.
printf('The following rules resource was created: %s.\n', $result->getName());
Khi bạn tạo tài nguyên quy tắc, Hiển thị & Video 360 sẽ xử lý bộ quy tắc để thực hiện
đảm bảo có thể dùng thành công để tính điểm hiển thị. Truy xuất trạng thái
của quá trình xử lý này thông qua trường state
của đối tượng quy tắc.
Sau khi các quy tắc mới được chấp nhận, thuật toán đặt giá thầu tuỳ chỉnh sẽ bắt đầu sử dụng
để tính điểm giá trị hiển thị ngay lập tức.
Nếu quy tắc bị từ chối, hãy truy xuất lý do từ chối trong danh sách quy tắc
error
của đối tượng. Trong trường hợp bị từ chối, hãy cập nhật
Đối tượng AlgorithmRules
để sửa lỗi và lặp lại quy trình tải lên bắt đầu
khi truy xuất đối tượng tham chiếu quy tắc.
Chỉ định thuật toán đặt giá thầu tuỳ chỉnh
Sau khi bạn tạo thuật toán đặt giá thầu tuỳ chỉnh, hãy tải logic được chấp nhận lên và đáp ứng các yêu cầu cần thiết, bạn có thể gán thuật toán đặt giá thầu cho chiến lược đặt giá thầu của mục hàng hoặc đơn đặt hàng quảng cáo.
Bạn có thể sử dụng thuật toán đặt giá thầu tuỳ chỉnh trong
tối đa hoá chi tiêu và
chiến lược giá thầu mục tiêu hiệu suất bằng cách chỉ định BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO
và mã thuật toán đặt giá thầu tuỳ chỉnh cho
performanceGoalType
và
customBiddingAlgorithmId
trường tương ứng.
Tuỳ thuộc vào chiến lược giá thầu, bạn có thể sử dụng các thông số giá thầu khác hoặc
là bắt buộc.
Dưới đây là ví dụ về cách cập nhật một mục hàng để sử dụng giá thầu tối đa hoá mức chi tiêu bằng một thuật toán đặt giá thầu tuỳ chỉnh nhất định:
Java
// Create the line item structure.
LineItem lineItem = new LineItem();
// Create and set the bidding strategy structure.
BiddingStrategy biddingStrategy = new BiddingStrategy();
MaximizeSpendBidStrategy maxSpendBidStrategy =
new MaximizeSpendBidStrategy()
.setPerformanceGoalType(
"BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO")
.setCustomBiddingAlgorithmId(custom-bidding-algorithm-id);
biddingStrategy.setMaximizeSpendAutoBid(maxSpendBidStrategy);
lineItem.setBidStrategy(biddingStrategy);
// Configure the patch request and set update mask to only update
// the bid strategy.
LineItems.Patch request =
service
.advertisers()
.lineItems()
.patch(advertiser-id, line-item-id, lineItem)
.setUpdateMask("bidStrategy");
// Update the line item.
LineItem response = request.execute();
// Display the custom bidding algorithm ID used in the new
// bid strategy.
System.out.printf(
"LineItem %s now has a bid strategy utilizing custom "
+ "bidding algorithm %s%n",
response.getName(),
response
.getBidStrategy()
.getMaximizeSpendAutoBid()
.getCustomBiddingAlgorithmId());
Python
# Create the new bid strategy object.
bidding_strategy = {
'maximizeSpendAutoBid': {
'performanceGoalType':
'BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO',
'customBiddingAlgorithmId': custom-bidding-algorithm-id
}
}
# Create a line item object assigning the new bid strategy.
line_item_obj = {'bidStrategy': bidding_strategy}
# Update the line item with a new bid strategy.
response = service.advertisers().lineItems().patch(
advertiserId=advertiser-id,
lineItemId=line-item-id,
updateMask='bidStrategy',
body=line_item_obj).execute()
# Display the line item's new bid strategy
print(f'Line Item {response["name"]} is now using the following bid'
f' strategy: {response["bidStrategy"]}.')
PHP
// Create the line item structure.
$lineItem = new Google_Service_DisplayVideo_LineItem();
// Create and set the bidding strategy structure.
$biddingStrategy = new Google_Service_DisplayVideo_BiddingStrategy();
$maximizeSpendBidStrategy =
new Google_Service_DisplayVideo_MaximizeSpendBidStrategy();
$maximizeSpendBidStrategy->setPerformanceGoalType(
'BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO'
);
$maximizeSpendBidStrategy->setCustomBiddingAlgorithmId(
custom-bidding-algorithm-id
);
$biddingStrategy->setMaximizeSpendAutoBid($maximizeSpendBidStrategy);
$lineItem->setBidStrategy($biddingStrategy);
// Set update mask.
$optParams = array('updateMask' => 'bidStrategy');
// Update the line item.
$result = $this->service->advertisers_lineItems->patch(
advertiser-id,
line-item-id,
$lineItem,
$optParams
);
// Display the custom bidding algorithm ID used in the new bid strategy.
printf(
'Line Item %s now has a bid strategy utilizing custom bidding algorithm %s.\n',
$result['name'],
$result['bidStrategy']['maximizeSpendBidStrategy']['customBiddingAlgorithmId']
);