Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird veranschaulicht, wie Experimentkampagnen aus einer Basiskampagne erstellt werden.
Tipp
Verwenden Sie die Sprachauswahl im Dokumentationsheader, um C#, Java, Php oder Python auszuwählen.
Informationen zum Abrufen von Zugriffs- und Aktualisierungstoken für Ihren Microsoft Advertising-Benutzer und Zum ersten Dienstaufruf mithilfe der Bing Ads-API finden Sie im Schnellstarthandbuch . Sie sollten den Leitfaden für die ersten Schritte und exemplarische Vorgehensweisen für Ihre bevorzugte Sprache lesen, z. B. C#, Java, Php und Python.
Unterstützende Dateien für C#-, Java-, Php- und Python-Beispiele sind auf GitHub verfügbar. Sie können jedes Repository klonen oder Codeausschnitte nach Bedarf erneut verwenden.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Threading.Tasks;
using Microsoft.BingAds.V13.CampaignManagement;
using Microsoft.BingAds;
namespace BingAdsExamplesLibrary.V13
{
/// <summary>
/// How to create experiment campaigns from a base campaign.
/// </summary>
public class Experiments : ExampleBase
{
public override string Description
{
get { return "Experiments | Campaign Management V13"; }
}
public async override Task RunAsync(AuthorizationData authorizationData)
{
try
{
ApiEnvironment environment = ((OAuthDesktopMobileAuthCodeGrant)authorizationData.Authentication).Environment;
CampaignManagementExampleHelper CampaignManagementExampleHelper = new CampaignManagementExampleHelper(
OutputStatusMessageDefault: this.OutputStatusMessage);
CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
authorizationData: authorizationData,
environment: environment);
// Choose a base campaign for the experiment.
OutputStatusMessage("-----\nGetCampaignsByAccountId:");
GetCampaignsByAccountIdResponse getCampaignsByAccountIdResponse = await CampaignManagementExampleHelper.GetCampaignsByAccountIdAsync(
accountId: authorizationData.AccountId,
campaignType: CampaignType.Search,
returnAdditionalFields: CampaignAdditionalField.AdScheduleUseSearcherTimeZone);
var campaigns = getCampaignsByAccountIdResponse.Campaigns;
OutputStatusMessage("Campaigns:");
CampaignManagementExampleHelper.OutputArrayOfCampaign(campaigns);
// The base campaign cannot be an experiment of another base campaign
// i.e., the campaign's ExperimentId must be nil.
// Likewise the base campaign cannot use a shared budget
// i.e., the campaign's BudgetId must be nil.
var baseCampaign = campaigns.FirstOrDefault(
campaign => campaign.ExperimentId == null && campaign.BudgetId == null);
if (baseCampaign == null)
{
OutputStatusMessage("You do not have any campaigns that are eligible for experiments.");
return;
}
// Create the experiment
var experiments = new [] {
new Experiment
{
BaseCampaignId = baseCampaign.Id,
EndDate = new Date
{
Month = 12,
Day = 31,
Year = DateTime.UtcNow.Year
},
ExperimentCampaignId = null,
ExperimentStatus = "Active",
ExperimentType = null,
Id = null,
Name = baseCampaign.Name + "-Experiment",
StartDate = new Date
{
Month = DateTime.UtcNow.Month,
Day = DateTime.UtcNow.Day,
Year = DateTime.UtcNow.Year
},
TrafficSplitPercent = 50
}
};
OutputStatusMessage("-----\nAddExperiments:");
AddExperimentsResponse addExperimentsResponse = await CampaignManagementExampleHelper.AddExperimentsAsync(
experiments: experiments);
long?[] experimentIds = addExperimentsResponse.ExperimentIds.ToArray();
BatchError[] experimentErrors = addExperimentsResponse.PartialErrors.ToArray();
OutputStatusMessage("ExperimentIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(experimentIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(experimentErrors);
OutputStatusMessage("-----\nGetExperimentsByIds:");
GetExperimentsByIdsResponse getExperimentsByIdsResponse = await CampaignManagementExampleHelper.GetExperimentsByIdsAsync(
experimentIds: new[] { (long)experimentIds[0] },
pageInfo: null);
OutputStatusMessage("Experiments:");
CampaignManagementExampleHelper.OutputArrayOfExperiment(getExperimentsByIdsResponse.Experiments);
var experiment = getExperimentsByIdsResponse.Experiments?.ToList()[0];
// If the experiment is in a Graduated state, then the former experiment campaign
// is now an independent campaign that must be deleted separately.
// Otherwise if you delete the base campaign (not shown here),
// the experiment campaign and experiment itself are also deleted.
OutputStatusMessage("-----\nDeleteCampaigns:");
await CampaignManagementExampleHelper.DeleteCampaignsAsync(
accountId: authorizationData.AccountId,
campaignIds: new[] { (long)experiment.ExperimentCampaignId });
OutputStatusMessage(string.Format("Deleted Experiment Campaign Id {0} with Status '{1}'",
experiment.ExperimentCampaignId,
experiment.ExperimentStatus));
OutputStatusMessage("-----\nDeleteExperiments:");
await CampaignManagementExampleHelper.DeleteExperimentsAsync(
experimentIds: new[] { (long)experiment.Id });
OutputStatusMessage(string.Format("Deleted Experiment Id {0}", experiment.Id));
}
// Catch authentication exceptions
catch (OAuthTokenRequestException ex)
{
OutputStatusMessage(string.Format("Couldn't get OAuth tokens. Error: {0}. Description: {1}", ex.Details.Error, ex.Details.Description));
}
// Catch Campaign Management service exceptions
catch (FaultException<Microsoft.BingAds.V13.CampaignManagement.AdApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.Errors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (FaultException<Microsoft.BingAds.V13.CampaignManagement.ApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.OperationErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
OutputStatusMessage(string.Join("; ", ex.Detail.BatchErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (FaultException<Microsoft.BingAds.V13.CampaignManagement.EditorialApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.OperationErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
OutputStatusMessage(string.Join("; ", ex.Detail.BatchErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (Exception ex)
{
OutputStatusMessage(ex.Message);
}
}
}
}
package com.microsoft.bingads.examples.v13;
import java.util.ArrayList;
import java.util.Calendar;
import com.microsoft.bingads.*;
import com.microsoft.bingads.v13.campaignmanagement.*;
import java.util.HashSet;
import java.util.List;
import java.util.stream.*;
public class Experiments extends ExampleBase {
public static void main(java.lang.String[] args) {
try
{
authorizationData = getAuthorizationData();
CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
authorizationData,
API_ENVIRONMENT,
ICampaignManagementService.class);
ArrayList<CampaignType> campaignTypes = new ArrayList<CampaignType>();
campaignTypes.add(CampaignType.SEARCH);
// Choose a base campaign for the experiment.
outputStatusMessage("-----\nGetCampaignsByAccountId:");
GetCampaignsByAccountIdResponse getCampaignsByAccountIdResponse = CampaignManagementExampleHelper.getCampaignsByAccountId(
authorizationData.getAccountId(),
campaignTypes,
null);
ArrayOfCampaign campaigns = getCampaignsByAccountIdResponse.getCampaigns();
outputStatusMessage("Campaigns:");
CampaignManagementExampleHelper.outputArrayOfCampaign(campaigns);
// The base campaign cannot be an experiment of another base campaign
// i.e., the campaign's ExperimentId must be nil.
// Likewise the base campaign cannot use a shared budget
// i.e., the campaign's BudgetId must be nil.
Campaign baseCampaign = null;
if (baseCampaign == null) baseCampaign = campaigns.getCampaigns().stream().filter(
campaign -> campaign.getExperimentId() == null && campaign.getBudgetId() == null).findFirst().orElse(null);
if (baseCampaign == null)
{
outputStatusMessage("You do not have any campaigns that are eligible for experiments.");
return;
}
// Create the experiment
ArrayOfExperiment experiments = new ArrayOfExperiment();
Experiment experiment = new Experiment();
experiment.setBaseCampaignId(baseCampaign.getId());
Calendar calendar = Calendar.getInstance();
experiment.setEndDate(new com.microsoft.bingads.v13.campaignmanagement.Date());
experiment.getEndDate().setDay(31);
experiment.getEndDate().setMonth(12);
experiment.getEndDate().setYear(calendar.get(Calendar.YEAR));
experiment.setExperimentCampaignId(null);
experiment.setExperimentStatus("Active");
experiment.setExperimentType(null);
experiment.setId(null);
experiment.setName(baseCampaign.getName() + "-Experiment");
experiment.setStartDate(new com.microsoft.bingads.v13.campaignmanagement.Date());
experiment.getStartDate().setDay(calendar.get(Calendar.DAY_OF_MONTH));
experiment.getStartDate().setMonth(calendar.get(Calendar.MONTH) + 1);
experiment.getStartDate().setYear(calendar.get(Calendar.YEAR));
experiment.setTrafficSplitPercent(50);
experiments.getExperiments().add(experiment);
outputStatusMessage("-----\nAddExperiments:");
AddExperimentsResponse addExperimentsResponse = CampaignManagementExampleHelper.addExperiments(
experiments);
ArrayOfNullableOflong nullableExperimentIds = addExperimentsResponse.getExperimentIds();
ArrayOfBatchError experimentErrors = addExperimentsResponse.getPartialErrors();
outputStatusMessage("ExperimentIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(nullableExperimentIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(experimentErrors);
outputStatusMessage("-----\nGetExperimentsByIds:");
ArrayOflong experimentIds = new ArrayOflong();
experimentIds.getLongs().add(nullableExperimentIds.getLongs().get(0));
GetExperimentsByIdsResponse getExperimentsByIdsResponse = CampaignManagementExampleHelper.getExperimentsByIds(experimentIds,
null);
experiments = getExperimentsByIdsResponse.getExperiments();
outputStatusMessage("Experiments:");
CampaignManagementExampleHelper.outputArrayOfExperiment(experiments);
experiment = experiments.getExperiments().get(0);
// If the experiment is in a Graduated state, then the former experiment campaign
// is now an independent campaign that must be deleted separately.
// Otherwise if you delete the base campaign (not shown here),
// the experiment campaign and experiment itself are also deleted.
outputStatusMessage("-----\nDeleteCampaigns:");
ArrayOflong campaignIds = new ArrayOflong();
campaignIds.getLongs().add(experiment.getExperimentCampaignId());
CampaignManagementExampleHelper.deleteCampaigns(
authorizationData.getAccountId(),
campaignIds);
outputStatusMessage(String.format("Deleted Experiment Campaign Id %s with Status '%s'",
experiment.getExperimentCampaignId(),
experiment.getExperimentStatus()));
outputStatusMessage("-----\nDeleteExperiments:");
CampaignManagementExampleHelper.deleteExperiments(
experimentIds);
outputStatusMessage(String.format("Deleted Experiment Id %s", experiment.getId()));
}
catch (Exception ex) {
String faultXml = ExampleExceptionHelper.getBingAdsExceptionFaultXml(ex, System.out);
outputStatusMessage(faultXml);
String message = ExampleExceptionHelper.handleBingAdsSDKException(ex, System.out);
outputStatusMessage(message);
}
}
}
<?php
use Microsoft\MsAds\Rest\ApiException;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\AddExperimentsRequest;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\CampaignType;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Date;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Experiment;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\GetCampaignsByAccountIdRequest;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\GetExperimentsByIdsRequest;
use Microsoft\MsAds\Rest\Test\RestApiTestBase;
class ExperimentsTest extends RestApiTestBase
{
/**
* Get eligible campaigns for experiments.
* @throws ApiException
*/
public function testGetEligibleCampaigns()
{
print("-----\r\nGetting Eligible Campaigns:\r\n");
$request = new GetCampaignsByAccountIdRequest([
'AccountId' => self::CUSTOMER_ACCOUNT_ID,
'CampaignType' => CampaignType::SEARCH,
]);
$response = self::$campaignManagementServiceApi->getCampaignsByAccountId($request);
$campaigns = $response->getCampaigns();
$eligibleCampaigns = array_filter($campaigns, function ($campaign) {
return (empty($campaign->getExperimentId()) && empty($campaign->getBudgetId()));
});
print("eligibleCampaigns:\r\n");
print_r($eligibleCampaigns);
self::assertNotEmpty($eligibleCampaigns);
return $eligibleCampaigns;
}
/**
* Add an experiment for a base campaign.
* @depends testGetEligibleCampaigns
* @throws ApiException
*/
public function testAddExperiment($eligibleCampaigns)
{
print("-----\r\nAdding Experiment:\r\n");
$baseCampaign = reset($eligibleCampaigns);
$experiment = new Experiment();
$experiment->setBaseCampaignId($baseCampaign->getId());
$experiment->setName($baseCampaign->getName()."-Experiment".self::generateRandomAlphaNumeric());
$experiment->setTrafficSplitPercent(50);
//Required. You must set the status to Active; however, the status will be set automatically by Microsoft Advertising to Creating,
// and the next time you retrieve the experiment its status will be either Active, Creating, CreationFailed, Paused, or Scheduled.
$experiment->setExperimentStatus('Active');
$startDate = new Date();
$startDate->setDay(date("d"));
$startDate->setMonth(date("m"));
$startDate->setYear(date("Y"));
$experiment->setStartDate($startDate);
$endDate = new Date();
$endDate->setDay(31);
$endDate->setMonth(12);
$endDate->setYear(date("Y"));
$experiment->setEndDate($endDate);
$request = new AddExperimentsRequest([
'Experiments' => [$experiment],
]);
$response = self::$campaignManagementServiceApi->addExperiments($request);
$experimentIds = $response->getExperimentIds();
print_r($experimentIds);
self::assertNotEmpty($experimentIds);
print("PartialErrors:\r\n");
print_r($response->getPartialErrors());
self::assertEmpty($response->getPartialErrors());
return $experimentIds;
}
/**
* Get experiments by IDs.
* @depends testAddExperiment
* @throws ApiException
*/
public function testGetExperimentsByIds($experimentIds)
{
print("-----\r\nGetting Experiments by IDs:\r\n");
$request = new GetExperimentsByIdsRequest([
'ExperimentIds' => $experimentIds,
]);
$response = self::$campaignManagementServiceApi->getExperimentsByIds($request);
$experiments = $response->getExperiments();
print_r($experiments);
self::assertNotEmpty($experiments);
print("PartialErrors:\r\n");
print_r($response->getPartialErrors());
self::assertEmpty($response->getPartialErrors());
return $experiments;
}
/**
* Delete the experiment and its campaign.
* @depends testGetExperimentsByIds
* @throws ApiException
*/
public function testDeleteExperiment($experiments)
{
print("-----\r\nDeleting Experiment:\r\n");
$experiment = reset($experiments);
if ($experiment->getExperimentStatus() === "Graduated") {
$experimentCampaignId = $experiment->getExperimentCampaignId();
self::deleteCampaignsRequest([$experimentCampaignId]);
}
$request = new \Microsoft\MsAds\Rest\Model\CampaignManagementService\DeleteExperimentsRequest([
'ExperimentIds' => [$experiment->getId()],
]);
$response = self::$campaignManagementServiceApi->deleteExperiments($request);
print("PartialErrors:\r\n");
print_r($response->getPartialErrors());
self::assertEmpty($response->getPartialErrors());
printf("Deleted Experiment Id: %s\r\n", $experiment->getId());
}
}
import uuid
from auth_helper import *
from openapi_client.models.campaign import *
def main(authorization_data):
try:
# Get eligible campaigns for experiments
# Eligible campaigns must not have an experiment ID and must not use a shared budget
print("Getting eligible campaigns for experiments...")
get_campaigns_request = GetCampaignsByAccountIdRequest(
account_id=authorization_data.account_id,
campaign_type=CampaignType.SEARCH
)
get_campaigns_response = campaign_service.get_campaigns_by_account_id(
get_campaigns_by_account_id_request=get_campaigns_request
)
campaigns = get_campaigns_response.Campaigns
# Filter for eligible campaigns (no experiment ID and no budget ID)
eligible_campaigns = [
campaign for campaign in campaigns
if not hasattr(campaign, 'ExperimentId') or campaign.ExperimentId is None
and not hasattr(campaign, 'BudgetId') or campaign.BudgetId is None
]
print(f"Found {len(eligible_campaigns)} eligible campaigns")
if not eligible_campaigns:
print("No eligible campaigns found. Please create a campaign without a shared budget first.")
return
# Use the first eligible campaign
base_campaign = eligible_campaigns[0]
print(f"Using base campaign: {base_campaign.Name} (ID: {base_campaign.Id})")
# Add an experiment for the base campaign
print("\nAdding experiment...")
current_date = datetime.now()
experiment = Experiment(
base_campaign_id=base_campaign.Id,
name=f"{base_campaign.Name}-Experiment{str(uuid.uuid4())[:8]}",
traffic_split_percent=50,
# Required. You must set the status to Active; however, the status will be set
# automatically by Microsoft Advertising to Creating, and the next time you retrieve
# the experiment its status will be either Active, Creating, CreationFailed, Paused, or Scheduled.
experiment_status='Active',
start_date=Date(
day=current_date.day,
month=current_date.month,
year=current_date.year
),
end_date=Date(
day=31,
month=12,
year=current_date.year
)
)
add_experiments_request = AddExperimentsRequest(
experiments=[experiment]
)
add_experiments_response = campaign_service.add_experiments(
add_experiments_request=add_experiments_request
)
experiment_ids = add_experiments_response.ExperimentIds
print(f"Created Experiment IDs: {experiment_ids}")
if add_experiments_response.PartialErrors:
print(f"Partial Errors: {add_experiments_response.PartialErrors}")
else:
print("Experiment created successfully")
# Get experiments by IDs
print("\nGetting experiments by IDs...")
get_experiments_request = GetExperimentsByIdsRequest(
experiment_ids=experiment_ids
)
get_experiments_response = campaign_service.get_experiments_by_ids(
get_experiments_by_ids_request=get_experiments_request
)
experiments = get_experiments_response.Experiments
print(f"Retrieved {len(experiments)} experiments")
for exp in experiments:
print(f" Experiment ID: {exp.Id}")
print(f" Name: {exp.Name}")
print(f" Status: {exp.ExperimentStatus}")
print(f" Base Campaign ID: {exp.BaseCampaignId}")
if hasattr(exp, 'ExperimentCampaignId') and exp.ExperimentCampaignId:
print(f" Experiment Campaign ID: {exp.ExperimentCampaignId}")
print(f" Traffic Split: {exp.TrafficSplitPercent}%")
if get_experiments_response.PartialErrors:
print(f"Partial Errors: {get_experiments_response.PartialErrors}")
# Clean up - delete the experiment
print("\nDeleting experiment...")
experiment = experiments[0]
# If the experiment has graduated, delete the experiment campaign first
if hasattr(experiment, 'ExperimentStatus') and experiment.ExperimentStatus == "Graduated":
if hasattr(experiment, 'ExperimentCampaignId') and experiment.ExperimentCampaignId:
print(f"Experiment has graduated. Deleting experiment campaign {experiment.ExperimentCampaignId}...")
delete_campaign_request = DeleteCampaignsRequest(
account_id=authorization_data.account_id,
campaign_ids=[experiment.ExperimentCampaignId]
)
campaign_service.delete_campaigns(
delete_campaigns_request=delete_campaign_request
)
# Delete the experiment
delete_experiments_request = DeleteExperimentsRequest(
experiment_ids=[experiment.Id]
)
delete_experiments_response = campaign_service.delete_experiments(
delete_experiments_request=delete_experiments_request
)
if delete_experiments_response.PartialErrors:
print(f"Partial Errors: {delete_experiments_response.PartialErrors}")
else:
print(f"Deleted Experiment ID: {experiment.Id}")
except Exception as ex:
print(f"Error occurred: {str(ex)}")
import traceback
traceback.print_exc()
if __name__ == '__main__':
print("Loading the web service client...")
authorization_data = AuthorizationData(
account_id=None,
customer_id=None,
developer_token=DEVELOPER_TOKEN,
authentication=None,
)
authenticate(authorization_data)
campaign_service = ServiceClient(
service='CampaignManagementService',
version=13,
authorization_data=authorization_data,
environment=ENVIRONMENT,
)
main(authorization_data)