Standorterweiterungen

Mithilfe von Standorterweiterungen können Sie Ihre Geschäftsadresse, Telefonnummer und eine Kartenmarkierung zusammen mit Ihrem Anzeigentext präsentieren. Es gibt zwei Arten von Standorterweiterungen:

  • Mit AdWords-Standorterweiterungen helfen Sie Nutzern, Ihre Standorte einfacher zu finden. Hierzu wird in Ihren Anzeigen die Geschäftsadresse, der Unternehmensstandort auf einer Karte oder die Entfernung des Nutzers zum Geschäft eingeblendet. Dieser Erweiterungstyp eignet sich, um die Nutzer zu einem Besuch Ihres Ladengeschäfts zu bewegen.

  • Mit Affiliate-Standorterweiterung können Sie Nutzer auf Geschäfte einer Einzelhandelskette in der Nähe hinweisen, in denen Ihre Produkte verkauft werden. Dieser Erweiterungstyp eignet sich, wenn Sie Ihre Produkte über Handelsketten vertreiben und potenzielle Kunden genau dann erreichen möchten, wenn sie entscheiden, welche Artikel sie wo kaufen.

AdWords-Standorterweiterungen

Mithilfe von AdWords-Standorterweiterungen können Sie gemeinsam mit dem Anzeigentext Ihre Geschäftsadresse, eine Telefonnummer und eine Kartenmarkierung präsentieren. Die Standorte werden entweder mit der Google My Business-Standortverwaltung oder der Google My Business API verwaltet. Im Folgenden wird ein komplettes Beispiel präsentiert, wie Standorte mithilfe der Google My Business API erstellt und mithilfe der AdWords API mit Ihren Anzeigen verknüpft werden können.

Google My Business

Google My Business ist das zentrale Repository für Ihre Standorte für alle Google-Produkte. Sie müssen sich deshalb nicht mehr um die Synchronisierung Ihrer Standorte in Google My Business mit den Standorterweiterungen in AdWords kümmern. Es genügt, einmalig die erforderlichen Feedobjekte einzurichten. Über AdWords werden automatisch die eigenen Standorterweiterungen mit den aktuellen Daten aus Ihrem Google My Business-Konto synchronisiert.

In diesem Abschnitt finden Sie eine Anleitung, wie Sie Standorte programmatisch mithilfe der Google My Business API erstellen und mit AdWords verknüpfen, indem Sie die erforderlichen Feedobjekte erstellen. Wenn Sie Standorte mit der Google My Business-Standortverwaltung erstellen möchten, können Sie die folgenden Abschnitte überspringen und direkt mit Schritt 3 fortfahren.

Ablauf

Wenn Sie nicht mit dem Konzept von Feeds in AdWords vertraut sind, lesen Sie zunächst den Leitfaden zu Feeds für Sitelinks. Die folgende Anleitung baut auf diesem Leitfaden auf.

So erstellen und verknüpfen Sie ein Google My Business-Kontos:

  1. Authentifizieren Sie sich für Google My Business- und AdWords API-Aufrufe (OAuth 2.0).

  2. Erstellen Sie mithilfe der Google My Business API einen neuen Standort.

    1. Rufen Sie mit accounts.list die Google My Business-Konten ab, deren Inhaber Sie sind oder für die Sie Verwaltungsrecht haben.
    2. Wählen Sie das Konto aus, mit dem Sie arbeiten möchten (z. B. AccountType = BUSINESS).
    3. Erstellen Sie den Standort und geben Sie ein Label, eine Adresse, Öffnungszeiten und weitere Informationen an.
  3. Erstellen Sie einen neuen Standorterweiterungsfeed, der mit Ihrem Google My Business-Konto verknüpft ist.

    1. Legen Sie systemFeedGenerationData auf ein PlacesLocationFeedData-Objekt fest, das Informationen zu Ihrem Google My Business-Konto enthält.
    2. Legen Sie origin auf ADWORDS fest.
    3. Geben Sie keine feedAttributes an. AdWords erstellt diese automatisch, da es sich um einen vom System generierten Feed handelt.
    4. Führen Sie einen FeedService.mutate()ADD-Vorgang aus.
  4. Verknüpfen Sie den Feed mit dem Kunden.

    1. Verwenden Sie die feedId aus Schritt 3.
    2. Verwenden Sie für LOCATION den Platzhaltertyp 7.
    3. Verwenden Sie eine geeignete matchingFunction.
    4. Führen Sie einen CustomerFeedService.mutate()ADD-Vorgang aus.
  5. Optional: Verknüpfen Sie den Feed mit bestimmten Kampagnen oder Anzeigengruppen.

    1. Verwenden Sie die feedId aus Schritt 3.
    2. Verwenden Sie für LOCATION den Platzhaltertyp 7.
    3. Verwenden Sie eine matchingFunction, um nach dem Label aus Schritt 2.3 zu filtern.
    4. Führen Sie einen CampaignFeedService.mutate()ADD- oder AdGroupFeedService.mutate()ADD-Vorgang aus.

Wenn Sie bereits mit Feeds für andere Erweiterungen vertraut sind, ist Ihnen möglicherweise aufgefallen, dass in den obigen Schritten keine FeedMapping erstellt wurde. Da es sich bei diesem Feed um einen vom System generierten Feed handelt, sind in AdWords bereits Informationen darüber vorhanden, wie die Attribute des Feeds den Platzhalterfeldern für Standorterweiterungen zuzuordnen sind. Die Angabe dieser Informationen ist daher nicht erforderlich. In den folgenden Abschnitten wird erläutert, wie Sie das Objekt systemFeedGenerationData beim Erstellen eines neuen Feeds (Schritt 3.1) konfigurieren. Weiter unten finden Sie ein Codebeispiel, in dem alle Teile kombiniert sind.

PlacesLocationFeedData-Objekt für den Feed erstellen

Wenn Sie das Attribut systemFeedGenerationData für Ihren Feed festlegen, wird AdWords angewiesen,

  • Google My Business- und AdWords-Konten miteinander verknüpfen,
  • automatisch Feedattribute für den Feed zu erstellen,
  • eine FeedMapping für den Feed und den criterionType zur geografischen Ausrichtung (77) zu erstellen und
  • (optional) die Standorte zu beschränken, die über AdWords mit Ihrem Google My Business-Konto synchronisiert werden.

Legen Sie die Attribute des Objekts PlacesLocationFeedData wie folgt fest:

Attribut Erforderlich Beschreibung
emailAddress Ja E-Mail-Adresse des Inhabers oder Administrators Ihres Google My Business-Kontos. Muss mit der in oAuthInfo angegebenen E-Mail-Adresse übereinstimmen.
oAuthInfo Ja OAuth2-Informationen, mit denen Ihrem AdWords-Konto Zugriff auf Ihr Google My Business-Konto gewährt werden
businessAccountIdentifier Nein Konto-ID des verwalteten Unternehmens, dessen Standorte verwendet werden sollen. Wenn Sie die Google My Business API verwenden, können Sie die ID dem account_id-Teil von name von Account entnehmen. Alternativ können Sie den BUSINESS_ACCOUNT_ID-Teil aus der Unternehmens-URL dieses Formulars kopieren:

https://business.google.com/b/BUSINESS_ACCOUNT_ID/...
businessNameFilter Nein Name des Unternehmens, das mit AdWords synchronisiert werden soll
categoryFilters Nein Kategorien der Einträge, die mit AdWords synchronisiert werden sollen
labelFilters Nein Labels der Einträge, die mit AdWords synchronisiert werden sollen

OAuthInfo-Objekt für PlacesLocationFeedData erstellen

Das Attribut oAuthInfo für PlacesLocationFeedData enthält die Informationen, die erforderlich sind, damit über Ihr AdWords-Konto Standorte aus Ihrem Google My Business-Konto gelesen werden können.

Legen Sie die Attribute des OAuthInfo-Objekts so fest:

Attribut Wert Beschreibung
httpMethod GET oder PUT HTTP-Methode zum Abrufen der Autorisierungsinformationen
httpRequestUrl https://www.googleapis.com/auth/adwords Der OAuth-Gültigkeitsbereich, mit dem die AdWords API Ihre Anfragen für Google My Business autorisiert
httpAuthorizationHeader Bearer OAUTH_ACCESS_TOKEN Der Autorisierungsheader mit dem OAuth-Zugriffstoken, das Ihrem AdWords-Konto das Recht erteilt, Daten aus Ihrem Google My Business-Konto zu lesen. Geben Sie für OAUTH_ACCESS_TOKEN ein Zugriffstoken an, das für die emailAddress der PlacesLocationFeedData und einen Gültigkeitsbereich, der mit httpRequestUrl übereinstimmt, auf der Grundlage von OAuth-Anmeldedaten generiert wurde.

Vollständiges Codebeispiel

Im folgenden Code werden die Java-Clientbibliotheken sowohl für die Google My Business API als auch für die AdWords API genutzt. Die Einrichtung für die verwendete Programmiersprache wird in der entsprechenden Anleitung beschrieben.

Schritt 1: Authentifizieren Sie sich für Google My Business und AdWords API-Aufrufe (OAuth 2.0).

// Creating the default factory and transport (used later)
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

// Load the credentials from the ads.properties file.
// Please note: This example assumes that your AdWords and MyBusiness accounts
// are linked to the same Google account, and that the Adwords API scope
// (https://www.googleapis.com/auth/adwords) was used when generating the
// refresh token.
// If you are using different Google accounts, you must authenticate
// separately and maintain two credentials (see
// /my-business/content/set-up-java-client).
Credential credential =
    new OfflineCredentials.Builder()
        .forApi(Api.ADWORDS)
        .withHttpTransport(httpTransport)
        .fromFile()
        .build()
        .generateCredential();

Schritt 2: Erstellen Sie einen neuen Standort mithilfe der Google My Business API.

// Initialize GMB.
Mybusiness gmb =
    new Mybusiness.Builder(httpTransport, jsonFactory, credential)
        .setApplicationName(APPLICATION_NAME)
        .build();
// Get list of GMB accounts (2a).
Mybusiness.Accounts.List listAccounts = gmb.accounts().list();
ListAccountsResponse response = listAccounts.execute();
List<Account> accounts = response.getAccounts();

// Find the account to work with (2b). The first BUSINESS account is used
// here, but you can use any other account as well (e.g., PERSONAL).
Account mainAccount = null;
for (Account account : accounts) {
  if (account.getType().equalsIgnoreCase("BUSINESS")) {
    mainAccount = account;
    break;
  }
}
if (mainAccount == null) {
  throw new RuntimeException("Main GMB account not found");
}
// Create the location (2c).
Location location = new Location();
location.setLocationName("My Company");
location.setStoreCode("Company-1");
location.setPrimaryPhone("16505550001");
location.setPrimaryCategory(new Category().setCategoryId("gcid:software_company"));
location.setWebsiteUrl("https://www.example.com/");
// Create an address.
Address address = new Address();
List<String> addressLines = new ArrayList<String>();
addressLines.add("1600 Amphitheatre Pkwy");
address.setAddressLines(addressLines);
address.setLocality("Mountain View");
address.setAdministrativeArea("CA");
address.setCountry("US");
address.setPostalCode("94043");
location.setAddress(address);
// Create business hours (optional).
BusinessHours businessHours = new BusinessHours();
List<TimePeriod> periods = new ArrayList<TimePeriod>();
List<String> days =
    Arrays.asList("Monday", "Tuesday", "Wednesday", "Thursday", "Friday");
for (String day : days) {
  TimePeriod period = new TimePeriod();
  period.setOpenDay(day);
  period.setOpenTime("9:00");
  period.setCloseTime("17:00");
  period.setCloseDay(day);
  periods.add(period);
}
businessHours.setPeriods(periods);
location.setRegularHours(businessHours);

// Assign a label to the location (optional). This example uses the AdWords
// customer ID as a label to associate the location with an ad group in AdWords.
// You can use any label value to identify locations, or no label at all
// (e.g., filter by business name or category).
location.setLabels(Collections.singletonList(INSERT_CUSTOMER_ID_HERE));
CreateLocationRequest createLocationRequest = new CreateLocationRequest();
createLocationRequest.setLocation(location);
createLocationRequest.setLanguageCode("en-US");
// Use a random request ID.
createLocationRequest.setRequestId(UUID.randomUUID().toString());
Mybusiness.Accounts.Locations.Create createLocation =
    gmb.accounts().locations().create(mainAccount.getName(),
    createLocationRequest);
Location createdLocation = createLocation.execute();

Schritt 3: Erstellen Sie einen neuen Feed, der mit Ihrem Google My Business verknüpft ist.

// Initialize AdWords.
AdWordsSession session = new AdWordsSession.Builder()
    .fromFile()
    .withOAuth2Credential(credential)
    .build();
session.setClientCustomerId(INSERT_CUSTOMER_ID_HERE);
AdWordsServices services = new AdWordsServices();
FeedServiceInterface feedService =
    services.get(session, FeedServiceInterface.class);
// Create the feed object.
Feed gmbFeed = new Feed();
gmbFeed.setName("GMB feed #" + System.currentTimeMillis());
// Create the PlacesLocationFeedData object (3a).
PlacesLocationFeedData feedData = new PlacesLocationFeedData();
feedData.setEmailAddress(GMB_ACCOUNT_EMAIL);
OAuthInfo oAuthInfo = new OAuthInfo();
oAuthInfo.setHttpMethod("GET");
oAuthInfo.setHttpRequestUrl(
    "https://www.googleapis.com/auth/adwords");
oAuthInfo.setHttpAuthorizationHeader(
    String.format("Bearer %s", credential.getAccessToken()));
feedData.setOAuthInfo(oAuthInfo);
gmbFeed.setSystemFeedGenerationData(feedData);
// Since this feed's feed items will be managed by AdWords,
// you must set its origin to ADWORDS (3b).
gmbFeed.setOrigin(FeedOrigin.ADWORDS);
// Note: No feed attributes for the feed were specified, as this is a
// system-generated feed (3c).
// Create an operation to add the feed.
FeedOperation feedOperation = new FeedOperation();
feedOperation.setOperand(gmbFeed);
feedOperation.setOperator(Operator.ADD);
// Add the feed (3d).
FeedReturnValue addFeedResult = feedService.mutate(
    new FeedOperation[] {feedOperation});
Feed createdFeed = addFeedResult.getValue(0);

Schritt 4: Verknüpfen Sie den Feed mit dem Kunden.

CustomerFeedServiceInterface customerFeedService =
    services.get(session, CustomerFeedServiceInterface.class);
CustomerFeed customerFeed = new CustomerFeed();
// Set feedId and placeholder type (4a + 4b).
customerFeed.setFeedId(createdFeed.getId());
customerFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_LOCATION});
// Create a matching function that will always evaluate to true (4c).
Function customerMatchingFunction = new Function();
ConstantOperand constOperand = new ConstantOperand();
constOperand.setType(ConstantOperandConstantType.BOOLEAN);
constOperand.setBooleanValue(true);
customerMatchingFunction.setLhsOperand(
    new FunctionArgumentOperand[] {constOperand});
customerMatchingFunction.setOperator(FunctionOperator.IDENTITY);
customerFeed.setMatchingFunction(customerMatchingFunction);
// Create an operation to add the customer feed.
CustomerFeedOperation customerFeedOperation = new CustomerFeedOperation();
customerFeedOperation.setOperand(customerFeed);
customerFeedOperation.setOperator(Operator.ADD);
// Add the feed (4d).
CustomerFeedReturnValue customerFeedResult = customerFeedService.mutate(
    new CustomerFeedOperation[] {customerFeedOperation});
CustomerFeed createdCustomerFeed = customerFeedResult.getValue(0);

Schritt 5: Verknüpfen Sie den Feed mit bestimmten Anzeigengruppen (analog für Kampagnen)

AdGroupFeedServiceInterface adgroupFeedService =
    services.get(session, AdGroupFeedServiceInterface.class);
// Create the ad group feed.
AdGroupFeed adgroupFeed = new AdGroupFeed();
adgroupFeed.setAdGroupId(AD_GROUP_ID);
// Set feedId and placeholder type (5a + 5b).
adgroupFeed.setFeedId(createdFeed.getId());
adgroupFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_LOCATION});
// Define matching function based on the label (5c).
Function matchingFunction = new Function();
String matchingFunctionString = String.format(
    "EQUALS(FeedAttribute[%d, 14], \"%s\")",
    createdFeed.getId(),
    createdLocation.getLabels().get(0));
matchingFunction.setFunctionString(matchingFunctionString);
adgroupFeed.setMatchingFunction(matchingFunction);
// Create an operation to add the ad group feed.
AdGroupFeedOperation operation = new AdGroupFeedOperation();
operation.setOperand(adgroupFeed);
operation.setOperator(Operator.ADD);
// Add the feed (5d).
AdGroupFeedReturnValue result = adgroupFeedService.mutate(
    new AdGroupFeedOperation[]{operation});
AdGroupFeed createdAdGroupFeed = result.getValue(0);

Standorterweiterungen filtern

Standorterweiterungen werden automatisch auf jede Kampagne und Anzeigengruppe im Konto angewendet. Mithilfe von Filtern können Standorterweiterungen aber auch auf ausgewählte Anzeigengruppen oder Kampagnen angewendet werden.

Filterstrategien

Mit Standorterweiterungen können Sie mithilfe verschiedener Mechanismen auf mehreren Ebenen Ihres Kontos Standortfilter festlegen. Verwenden Sie die matchingFunction eines CampaignFeed oder AdGroupFeed, wenn in unterschiedlichen Kampagnen oder Anzeigengruppen andere Standorte zu sehen sein sollen.

Der spezifischste Filter hat Vorrang. Ein Beispiel: Sie haben

  • einen CustomerFeed,
  • einen CampaignFeed für Kampagne A,
  • einen AdGroupFeed für Anzeigengruppe G in Kampagne A und
  • eine Kampagne B, die weder einen CampaignFeed noch einen AdGroupFeed enthält.

Mit dieser Konfiguration ergibt sich das folgende Verhalten (die gepunkteten Linien zeigen, welche Abgleichfunktion für welche Anzeige verwendet wird):

  • Anzeigen, die für Anzeigengruppe G ausgeliefert werden, enthalten Standorterweiterungen ausschließlich bei Objekten, die der Abgleichfunktion des AdGroupFeed entsprechen.
  • Anzeigen, die für die verbleibenden Anzeigengruppen in Kampagne A ausgeliefert werden, enthalten Standorterweiterungen ausschließlich bei Objekten, die der Abgleichfunktion des CampaignFeed entsprechen.
  • Anzeigen, die für Kampagne B ausgeliefert werden, enthalten Standorterweiterungen bei Objekten, die der Abgleichfunktion des CustomerFeed entsprechen.

Attribute zum Filtern verwenden

Durch Filter in Feedobjekten werden die Feedobjekte eingeschränkt, die über die Attribute businessNameFilter, categoryFilters und labelFilters des PlacesLocationFeedData-Objekts synchronisiert werden. Filter in den anderen Objekten bestimmen, welche Feedobjekte in AdWords als Standorterweiterungen für eine bestimmte Kombination aus Kunde, Kampagne und Anzeigengruppe verwendet werden. Sie könnten diese Filter verwenden, wenn

  • Sie dasselbe Google My Business-Konto mit mehreren AdWords-Konten verwenden und jedes AdWords-Konto mit einer Untergruppe von Standorten logisch verknüpft ist.
  • Wenn es in Ihrem Google My Business-Konto Standorte gibt, die niemals in Anzeigen zu sehen sein sollen.

Für ein Konto, eine Kampagne oder eine Anzeigengruppe können Sie Abgleichfunktionen zum Filtern angeben, die auf beliebigen der im Standorterweiterungsfeed verfügbaren Attribute basieren. Wir empfehlen, die folgenden Attribute zum Filtern zu verwenden:

  • Labels (Platzhalter 14): Durch die Angabe von Labels für jeden Standort in Google My Business und Verwendung dieser Labels zum Filtern in AdWords können Sie Ihre Filter vollständig anpassen. Zum Beispiel können Sie die Kundennummer oder eine eindeutige ID, die von Ihrer Anwendung generiert wird, verwenden.

    Ist labelFilters angegeben, sind nur Einträge, die eines der angegebenen Labels aufweisen, Kandidaten für eine Synchronisierung mit Feedelementen. Wenn labelFilters keine Elemente enthält, sind alle Einträge Kandidaten für die Synchronisierung. Außerdem werden alle Labels eines Google My Business-Eintrags, die ein Feedattribut mit feedAttributeId = 14 und type = STRING_LIST aufweisen, synchronisiert. Sie können nach Feedelementen filtern, die mindestens ein Label haben, indem Sie in Ihrer Abgleichfunktion wie folgt eine Bedingung angeben:

    CONTAINS_ANY(FeedAttribute[FeedId,14],{"label1","label2","label3"})
    
  • Name des Unternehmens (Platzhalter 1): Für eine noch feinere Filterung können Sie den standortspezifischen Namen des Unternehmens verwenden.

  • Unternehmenskategorie (Platzhalter 9): Wenn Sie nach Kategorien filtern, können Sie weniger eingeschränkte Übereinstimmungen definieren oder Zweideutigkeiten vermeiden, indem Sie die Unternehmenskategorie mit AND mit dem Namen des Unternehmens kombinieren.

Automatische Entfernung ungültiger Filter

Das AdWords-System überprüft die für Ihre Standorterweiterungen definierten Filter täglich. Falls keine Google My Business-Standorte mit einem bestimmten Filter übereinstimmen, wird dieser so entfernt:

Position des Filters Schritte zum Entfernen des Filters
PlacesLocationFeedData Die folgenden Attribute der PlacesLocationFeedData werden auf null festgelegt:
  • businessNameFilter
  • categoryFilters
  • labelFilters
CampaignFeed Der CampaignFeed wird entfernt.
AdGroupFeed Der AdGroupFeed wird entfernt.

Weitere Informationen

Weitere Informationen zum Filtern nach Feedattribut-ID finden Sie im Leitfaden für Abgleichfunktionen. Im Leitfaden zu Feeds für Sitelinks finden Sie Beispiele zum Erstellen von Anzeigengruppen- und Kampagnenfeeds.

Affiliate-Standorterweiterungen

Wenn Sie Ihre Produkte über Handelsketten vertreiben, können Sie mit Affiliate-Standorterweiterungen potenzielle Kunden noch zielgenauer ansprechen. Diese Erweiterungen funktionieren ähnlich wie Standorterweiterungen mit Google My Business (GMB), es gibt jedoch folgende Unterschiede:

GMB-Standorterweiterung Affiliate-Standorterweiterung
Der Werbetreibende sollte zuerst eine Verknüpfung mit einem GMB-Konto erstellen. Verknüpfungen mit GMB-Konten werden nicht unterstützt.
Feedstandorte werden auf der Grundlage von Standorten im GMB-Konto erstellt. Feedstandorte werden anhand einer Ketten-ID von AdWords gefüllt.
Jedes Konto kann nur einen Feed enthalten. Pro Konto sind mehrere Feeds zulässig.

Ablauf

Das Einrichten von Affiliate-Standorterweiterungen ähnelt dem Erstellen von Standorterweiterungen mit Google My Business.

  1. Sie erstellen einen neuen Feed für Affiliate-Standorterweiterungen.
  2. Sie verknüpfen den Feed mit einem Kunden, einer Kampagne oder einer Anzeigengruppe.

Schritt 1: Erstellen Sie einen neuen Feed für Affiliate-Standorterweiterungen.

Damit Sie Affiliate-Standorterweiterungen verwenden können, müssen Sie in Ihrem Konto einen neuen Feed dafür erstellen. Wenn Sie mit dem Konzept von Feeds in AdWords nicht vertraut sind, lesen Sie zuerst den Leitfaden zu Feeds für Sitelinks. Die folgende Anleitung baut auf diesem Leitfaden auf.

Starten Sie zuerst die AdWords-Sitzung und die zugehörigen Dienste.

// Generate a refreshable OAuth2 credential.
Credential oAuth2Credential =
    new OfflineCredentials.Builder()
        .forApi(Api.ADWORDS)
        .fromFile()
        .build()
        .generateCredential();

// Construct an AdWordsSession.
AdWordsSession session =
    new AdWordsSession.Builder().fromFile().withOAuth2Credential(oAuth2Credential).build();

AdWordsServicesInterface adWordsServices = AdWordsServices.getInstance();

Erstellen Sie nun einen Feed und legen Sie dessen systemFeedGenerationData auf ein AffiliateLocationFeedData-Objekt fest, das Informationen zu den Einzelhandelsketten enthält, in denen Ihre Produkte erhältlich sind. Kennzeichnen Sie diesen Feed als vom System generiert, indem Sie origin auf ADWORDS festlegen.

// Create a feed that will be populated with all the addresses that correspond to the chain ID
// you requested. Do not add FeedAttributes to this object, as AdWords will add them
// automatically because this will be a system generated feed.
Feed affiliateFeed = new Feed();
affiliateFeed.setName("Affiliate location extension feed " + System.currentTimeMillis());

Chain chain = new Chain();
chain.setChainId(chainId);

// Since this feed's feed items will be managed by AdWords, you must set its origin to ADWORDS.
affiliateFeed.setOrigin(FeedOrigin.ADWORDS);

// Set the system feed generation data for AdWords.
AffiliateLocationFeedData feedData = new AffiliateLocationFeedData();
feedData.setChains(new Chain[] {chain});
feedData.setRelationshipType(RelationshipType.GENERAL_RETAILERS);

affiliateFeed.setSystemFeedGenerationData(feedData);

// Create an operation to add the feed.
FeedOperation feedOperation = new FeedOperation();
feedOperation.setOperand(affiliateFeed);
feedOperation.setOperator(Operator.ADD);

FeedReturnValue addFeedResult = feedService.mutate(new FeedOperation[] {feedOperation});
return addFeedResult.getValue(0);
AffiliateLocationFeedData-Objekt

Genau wie bei Feeds für Standorterweiterungen müssen Sie für Feeds für Affiliate-Standorterweiterungen keine FeedMapping oder feedAttributes erstellen. Da dieser Feed vom System generiert wurde, nutzt AdWords das systemFeedGenerationData-Attribut für den Feed, um

  • automatisch Feedattribute für den Feed zu erstellen,
  • automatisch ein FeedMapping für Ihren Feed zu erstellen und
  • den Feed mit einer Liste von Standorten zu füllen, die den Einzelhandelsketten entsprechen, die Sie in den systemFeedGenerationData angegeben haben.

Legen Sie die Attribute des AffiliateLocationFeedData-Objekts so fest:

Attribut Erforderlich Beschreibung
chains Ja Die Liste der Einzelhandelsketten, für die Sie werben möchten. Liste der gültigen Ketten-IDs aufrufen
relationshipType Ja Die Art der Beziehung zwischen dem Werbetreibenden und den Einzelhandelsketten
Warten, bis die Feedeinrichtung abgeschlossen ist

Genau wie bei Feeds für Standorterweiterungen müssen Sie warten, bis der Feed für Affiliate-Standorte bereit ist, bevor er dem Kunden zugeordnet werden kann. Dies ist ähnlich wie beim Feed für Standorterweiterungen, mit dem Unterschied, dass Sie beim Aufrufen von FeedMappingService.query() nach PLACEHOLDER ID = 30 filtern müssen.

FeedMappingServiceInterface feedMappingService =
    adWordsServices.get(session, FeedMappingServiceInterface.class);

String query =
    String.format(
        "SELECT FeedId, FeedMappingId, AttributeFieldMappings WHERE "
            + "FeedId = %d AND PlaceholderType = %d AND Status = ENABLED",
        feed.getId(), PLACEHOLDER_AFFILIATE_LOCATION);

FeedMapping retval = null;
FeedMappingPage page = null;

int numberOfAttempts = 0;
do {
  numberOfAttempts++;
  page = feedMappingService.query(query);

  if (page.getTotalNumEntries() == 0) {
    long sleepSeconds = (long) Math.scalb(5, numberOfAttempts);
    System.out.printf(
        "Attempt #%d to get FeedMapping was not successful. "
            + "Waiting %d seconds before trying again.%n",
        numberOfAttempts, sleepSeconds);
    Thread.sleep(sleepSeconds * 1000);
  } else {
    retval = page.getEntries(0);
    break;
  }

} while (numberOfAttempts < MAX_FEED_MAPPING_POLL_ATTEMPTS);

if (retval == null) {
  throw new IllegalStateException("Affiliate location feedmapping isn't setup correctly.");
}
return retval;

Schritt 2: Verknüpfen Sie den Feed mit einem Kunden, einer Kampagne oder einer Anzeigengruppe.

Sobald der Feed einsatzbereit ist, können Sie ein CampaignFeed-Objekt erstellen, um ihn mit einer Kampagne zu verknüpfen. Das Verknüpfen des Feeds mit einer Anzeigengruppe oder dem Kunden ist ähnlich, Sie müssen jedoch stattdessen ein AdGroupFeed- oder CustomerFeed-Objekt erstellen und eine geeignete Abgleichfunktion verwenden.

Mit dem folgenden Code-Snippet werden die Affiliate-Standorterweiterungen einer Kampagne so gefiltert, dass sie nur an Standorten einer einzelnen Einzelhandelsketten-ID erscheinen.

/**
 * The placeholder ID for affiliate locations. See
 * https://developers.google.com/adwords/api/docs/appendix/placeholders for a complete list of
 * valid values.
 */
private static final int PLACEHOLDER_AFFILIATE_LOCATION = 30;

/** Placeholder feed ID for chain ID attribute. */
private static final int PLACEHOLDER_FIELD_CHAIN_ID = 10;

...

CampaignFeedServiceInterface campaignFeedService =
    adWordsServices.get(session, CampaignFeedServiceInterface.class);

CampaignFeed campaignFeed = new CampaignFeed();
campaignFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_AFFILIATE_LOCATION});

campaignFeed.setCampaignId(campaignId);
campaignFeed.setFeedId(feed.getId());

Function matchingFunction = new Function();
matchingFunction.setFunctionString(
    String.format(
        "IN(FeedAttribute[%d, %d], {%d})", feed.getId(), attributeIdForChainId, chainId));

campaignFeed.setMatchingFunction(matchingFunction);

CampaignFeedOperation operation = new CampaignFeedOperation();
operation.setOperator(Operator.ADD);
operation.setOperand(campaignFeed);

CampaignFeedReturnValue addedCampaignFeedResult =
    campaignFeedService.mutate(new CampaignFeedOperation[] {operation});
return addedCampaignFeedResult.getValue(0);

Die Feedattribut-ID kann wie folgt von der FeedMapping des Feeds abgerufen werden:

/**
 * The placeholder ID for affiliate locations. See
 * https://developers.google.com/adwords/api/docs/appendix/placeholders for a complete list of
 * valid values.
 */
private static final int PLACEHOLDER_AFFILIATE_LOCATION = 30;

/** Placeholder feed ID for chain ID attribute. */
private static final int PLACEHOLDER_FIELD_CHAIN_ID = 10;

...

for (AttributeFieldMapping fieldMapping : feedMapping.getAttributeFieldMappings()) {
  if (fieldMapping.getFieldId() == PLACEHOLDER_FIELD_CHAIN_ID) {
    return fieldMapping.getFeedAttributeId();
  }
}
throw new IllegalStateException("Affiliate location feed mapping isn't setup correctly.");

Gültige Abgleichfunktionen

In der folgenden Tabelle sind die unterstützten Abgleichfunktionen und häufige Einsatzzwecke aufgeführt.

Verwendung Abgleichfunktion Bemerkungen
Nach Ketten-ID filtern IN(FeedAttribute[FeedId, ChainAttributeId], {"CH1234", "CH2345"}) Sie können nach bis zu 20 Ketten-IDs filtern.
Eine Entität für alle Standorte im Feed als Ziel festlegen IDENTITY(true)
Affiliate-Standorte für eine Entität deaktivieren IDENTITY(false)

Feedback geben zu...