Remarketing dinâmico

Anúncios de remarketing dinâmico são anúncios gráficos personalizados para cada impressão, exibindo produtos relacionados às visitas anteriores de um usuário ao site do anunciante. Com a Google AdWords API, é possível manter os Feeds, os FeedMappings e os FeedItems que impulsionam seus Anúncios de remarketing dinâmicos na Rede de Display. Este guia mostra em detalhes dois exemplos que usam feeds para atualizar os Anúncios de remarketing dinâmico.

Pré-requisitos

Este guia parte do princípio que você já tenha configurado seus feeds de anúncios dinâmicos da Rede de Display por meio da interface de usuário do Google AdWords e que você tem os IDs de feed correspondentes.

Se preferir, você pode usar a API para criar um Feed, um FeedMapping e FeedItems e aplicá-los aos Anúncios de remarketing dinâmicos. Consulte a página de marcadores de feed para ver uma lista dos atributos necessários e dos IDs dos marcadores de campo para cada tipo de feed de remarketing.

Caso de uso 1: adição e remoção de listas de imóveis

Digamos que você tenha anúncios de remarketing dinâmico para o site da sua imobiliária. Novos anúncios são adicionados ao inventário à medida que as propriedades vendidas são removidas. O objetivo é atualizar seus anúncios de remarketing dinâmico de modo que eles reflitam seu inventário atual.

Etapa 1: receber informações sobre a configuração das suas listas

Para gerenciar suas listas de imóveis, você precisa recuperar o FeedMapping do seu Feed e o tipo de marcador da indústria imobiliária. O FeedMapping informa o FeedAttribute do seu Feed que corresponde a cada campo do marcador. O exemplo de código abaixo define um método que recupera o FeedMapping e cria um mapa das chaves de fieldId dos marcadores para os valores feedAttributeId.

/**
 * Returns a map from placeholder field ID to feed attribute ID for the given
 * combination of feed ID and placeholder type.
 */
public static Map<Integer, Long> getPlaceholderToAttributeMap(Long feedId,
    Integer placeholderType, AdWordsSession session, AdWordsServices adWordsServices)
    throws ApiException, RemoteException {
  Selector selector = new SelectorBuilder()
    .fields("AttributeFieldMappings")
    .equals("FeedId", feedId.toString())
    .equals("Status", FeedMappingStatus.ENABLED.getValue())
    .equals("PlaceholderType", placeholderType.toString())
    .build();

  // Get the FeedMappingService.
  FeedMappingServiceInterface feedMappingService =
    adWordsServices.get(session, FeedMappingServiceInterface.class);

  // Submit the 'get' request.
  FeedMapping feedMapping = feedMappingService.get(selector).getEntries(0);

  // Build a map from placeholder field ID to feed attribute ID from the FeedMapping.
  Map<Integer, Long> fieldMap = Maps.newHashMap();
  for(AttributeFieldMapping attributeFieldMapping :
      feedMapping.getAttributeFieldMappings()) {
    fieldMap.put(attributeFieldMapping.getFieldId(),
        attributeFieldMapping.getFeedAttributeId());
  }
  return fieldMap;
}

Etapa 2: criar operações para adicionar as novas listas

Agora que o método de utilidade acima foi aplicado, a criação das operações para adicionar novas listas é simples. As etapas básicas para adicionar cada nova lista são:

  1. Fazer o mapeamento do ID de campo de marcador com o ID do atributo do feed usando o método de utilidade.
  2. Criar, para cada atributo da lista (código e nome da lista, URL da imagem etc.), um FeedItemAttributeValue com o feedAttributeId definido como o código do campo de marcador correspondente encontrado no mapeamento.
  3. No FeedItemAttributeValue, definir o campo do valor adequado para o campo de marcador do atributo. Por exemplo, defina o campo stringValue para o código da lista porque o campo LISTING_ID tem um tipo de dados de STRING.
  4. Depois que você tiver todos os FeedItemAttributeValues, criar um novo FeedItem e definir o feedId dele como o código do seu Feed, e os attributeValues como o conjunto de FeedItemAttributeValues.
  5. Criar um novo FeedItemOperation em que o operador seja definido como ADD e o operando, como FeedItem.
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<FeedItemOperation> newFeedItemOperations = Lists.newArrayList();

// First, get the mapping from placeholder field ID to feed attribute ID.
// Note that 16 is the placeholder type ID for the Real Estate vertical.
Map<Integer, Long> fieldMap = getPlaceholderToAttributeMap(feedId,
  16, session, adWordsServices);

FeedItemAttributeValue listingId = new FeedItemAttributeValue();
listingId.setFeedAttributeId(fieldMap.get(1));
listingId.setStringValue("ABC123DEF");

FeedItemAttributeValue listingName = new FeedItemAttributeValue();
listingName.setFeedAttributeId(fieldMap.get(2));
listingName.setStringValue("Two bedroom with magnificent views");

FeedItemAttributeValue finalUrl = new FeedItemAttributeValue();
finalUrl.setFeedAttributeId(fieldMap.get(12));
finalUrl.setStringValues(new String[] {"http://www.example.com/listings/"});

// Insert additional attributes here, such as address, city, description, etc.

FeedItemAttributeValue imageUrl = new FeedItemAttributeValue();
imageUrl.setFeedAttributeId(fieldMap.get(8));
imageUrl.setStringValue("http://www.example.com/listings/images?listing_id=ABC123DEF");

FeedItemAttributeValue contextualKeywords = new FeedItemAttributeValue();
contextualKeywords.setFeedAttributeId(fieldMap.get(11));
contextualKeywords.setStringValues(
    new String[] {"beach community", "ocean view", "two bedroom"});

// Create the FeedItem, specifying the Feed ID and the attributes created above.
FeedItem feedItem = new FeedItem();
feedItem.setFeedId(feedId);
feedItem.setAttributeValues(new FeedItemAttributeValue[]{
    listingId,
    listingName,
    finalUrl,
    // Include additional attributes...
    imageUrl,
    contextualKeywords});

// Create an operation to add each FeedItem.
FeedItemOperation feedItemOperation = new FeedItemOperation();
feedItemOperation.setOperator(Operator.ADD);
feedItemOperation.setOperand(feedItem);
newFeedItemOperations.add(feedItemOperation);

// Repeat the above for additional new listings.

Etapa 3: criar operações para remover as listas antigas

O processo de remoção de listas antigas é ainda mais simples. Você precisa ter somente o feedId e o feedItemId de cada uma delas.

Dica: se você não tiver os feedItemIds das listas antigas, use o FeedItemService.get para recuperar os FeedItems que contêm os feedItemIds.

As etapas básicas para cada lista que você pretende remover são:

  1. Criar um novo FeedItem e definir o feedId como o código do seu Feed, e o feedItemId como o código do item da lista.
  2. Criar um novo FeedItemOperation em que o operador seja definido como REMOVE e o operando, como FeedItem.
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<Long> feedItemIds = Lists.newArrayList(
    // feed item ID 1,
    // feed item ID 2,
    // ...
    );

List<FeedItemOperation> removeFeedItemOperations = Lists.newArrayList();
for(Long feedItemId : feedItemIds) {
  // When removing you can simply specify the feedId and the feedItemId.
  FeedItem feedItemToRemove = new FeedItem();

  feedItemToRemove.setFeedId(feedId);
  feedItemToRemove.setFeedItemId(feedItemId);

  FeedItemOperation removeOperation = new FeedItemOperation();
  removeOperation.setOperator(Operator.REMOVE);
  removeOperation.setOperand(feedItemToRemove);

  removeFeedItemOperations.add(removeOperation);
}

Etapa 4: enviar as operações de adição e remoção

Esta etapa é igual a qualquer outra operação de modificação na API. Para aplicar as alterações de modo eficaz, basta transmitir a união dos dois conjuntos de FeedItemOperations criados acima para FeedItemService.mutate.

// Get the FeedItemService
FeedItemServiceInterface feedItemService =
    adWordsServices.get(session, FeedItemServiceInterface.class);

// Combine the lists of operations.
List<FeedItemOperation> allOperations = Lists.newArrayList(newFeedItemOperations);
allOperations.addAll(removeFeedItemOperations);

// Pass the collection of FeedItemOperations to the mutate method.
FeedItemReturnValue itemsUpdateReturnValue =
    feedItemService.mutate(allOperations.toArray(new FeedItemOperation[allOperations.size()]));

System.out.printf("Updated %d items%n", itemsUpdateReturnValue.getValue().length);

Caso de uso 2: como atualizar preços de voos

Digamos que você tenha um site de reservas de passagens aéreas com a configuração de anúncios de remarketing dinâmico e queira atualizar o preço de venda atualizar o preço promocional de alguns voos e remover o de outros. Para garantir que seus anúncios exibam os preços de cada voo corretamente, convém atualizar o preço no FeedItem correspondente de cada voo.

Etapa 1: criar operações para atualizar os preços promocionais

Este processo é semelhante à criação de novos FeedItems, com duas diferenças: você só pode especificar o FeedItemAttributeValue que gostaria de modificar, e os códigos do campo do marcador estão na lista de campos da indústria aérea.

As etapas básicas para modificar cada entrada de voo são:

  1. Fazer o mapeamento do ID de campo de marcador com o ID do atributo do feed usando o método de utilidade.
  2. Para cada atributo do voo (preço promocional, preço do voo etc.), criar um FeedItemAttributeValue com o feedAttributeId definido como o código do campo de marcador correspondente encontrado no mapeamento.
  3. No FeedItemAttributeValue, definir o campo do valor adequado para o campo de marcador do atributo.
  4. Depois que você tiver todos os FeedItemAttributeValues, criar um novo FeedItem e definir o feedId como o código do seu Feed, o feedItemId como o código do item do feed do voo e o attributeValues como o conjunto de FeedItemAttributeValues.
  5. Criar um novo FeedItemOperation em que o operador seja definido como SET e o operando, como FeedItem.
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<FeedItemOperation> updateFeedItemOperations = Lists.newArrayList();

// First, get the mapping from placeholder field ID to feed attribute ID.
// Note that 13 is the placeholder type ID for the Flights vertical.
Map<Integer, Long> fieldMap = getPlaceholderToAttributeMap(feedId,
  13, session, adWordsServices);

// Update the sale price on the first flight
Long newSalePriceFeedItemId = Long.valueOf("INSERT_FEED_ITEM_ID");
FeedItemAttributeValue salePrice = new FeedItemAttributeValue();
salePrice.setFeedAttributeId(fieldMap.get(12));
salePrice.setStringValue("1,309.89 USD");

FeedItem feedItemForNewSalePrice = new FeedItem();
feedItemForNewSalePrice.setFeedId(feedId);
feedItemForNewSalePrice.setFeedItemId(newSalePriceFeedItemId);
feedItemForNewSalePrice.setAttributeValues(new FeedItemAttributeValue[] {salePrice});

// Clear the sale price on the second flight, and update its regular price
Long removedSalePriceFeedItemId = Long.valueOf("INSERT_FEED_ITEM_ID");
FeedItemAttributeValue removedSalePrice = new FeedItemAttributeValue();
removedSalePrice.setFeedAttributeId(fieldMap.get(12));

FeedItemAttributeValue newFlightPrice = new FeedItemAttributeValue();
newFlightPrice.setFeedAttributeId(fieldMap.get(6));
newFlightPrice.setStringValue("499.99 USD");

FeedItem feedItemForRemovedSalePrice = new FeedItem();
feedItemForRemovedSalePrice.setFeedId(feedId);
feedItemForRemovedSalePrice.setFeedItemId(removedSalePriceFeedItemId);
feedItemForRemovedSalePrice.setAttributeValues(
    new FeedItemAttributeValue[] {removedSalePrice, newFlightPrice});

// Create the FeedItemOperations to update the FeedItems.
for(FeedItem feedItemToUpdate : new FeedItem[]{ feedItemForNewSalePrice,
                                                feedItemForRemovedSalePrice}) {
  FeedItemOperation updateFeedItemOperation = new FeedItemOperation();
  updateFeedItemOperation.setOperator(Operator.SET);
  updateFeedItemOperation.setOperand(feedItemToUpdate);

  updateFeedItemOperations.add(updateFeedItemOperation);
}

Etapa 2: enviar as operações de atualização

Para aplicar essas mudanças, basta transmitir o conjunto de FeedItemOperations criado acima para FeedItemService.mutate, exatamente como você faria com as operações de adição e remoção.

Relatórios

Para coletar estatísticas de desempenho dos seus Anúncios de remarketing dinâmicos, use os mesmos relatórios que você usaria em qualquer outra campanha da Rede de Display.

Mais informações

Este guia inclui exemplos de imóveis e voos. Se seus Anúncios de remarketing dinâmicos segmentam uma indústria diferente, confira a lista completa de tipos de marcadores de remarketing dinâmico para ver os códigos adequados de tipo e de campo de marcadores.

Além disso, conforme descrito no guia sobre serviços de feed, você precisa associar somente feeds de remarketing dinâmico no nível da campanha por meio do CampaignFeedService. Adicionar uma associação no nível do cliente ou do grupo de anúncios funcionará, mas a associação será ignorada.

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.