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 website do anunciante. Com a AdWords API, é possível manter os Feeds, FeedMappings e FeedItems que impulsionam seus anúncios de remarketing dinâmico 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.

Alternatively, you could use the API to create a Feed, FeedMapping, and FeedItems for use with your Dynamic Remarketing ads. 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 website 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 do setor imobiliário. O FeedMapping informa o FeedAttribute do seu Feed que corresponde a cada marcador de campo. O exemplo de código abaixo define um método que recupera o FeedMapping e cria um mapa de chaves 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. Para cada atributo da lista (ID da lista, nome da lista, URL da imagem etc.), criar um FeedItemAttributeValue com o feedAttributeId definido como o ID 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, no ID da lista, defina o campo stringValue 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 como o ID 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 operand seja definido 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 das listas antigas é ainda mais simples. Você precisa ter somente o feedId e o feedItemId de cada lista antiga.

Dica: se você não tiver o feedItemId 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ê deseja remover são:

  1. Criar um novo FeedItem e definir o feedId como o ID do seu Feed, e o feedItemId como o ID do item da lista.
  2. Criar um novo FeedItemOperation em que o operador seja definido como REMOVE e o operand seja definido 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 passar 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 você deseja modificar, e os IDs 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 ID 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 ID do seu Feed, o feedItemId como o ID 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 operand seja definido 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

Exatamente como você faria com as operações de adição e remoção, para realmente aplicar essas mudanças, basta passar o conjunto de FeedItemOperations criadas acima para FeedItemService.mutate.

Relatórios

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

Mais informações

Este guia mostrou exemplos nos setores imobiliário e aéreo. Se seus anúncios de remarketing dinâmico segmentam uma indústria diferente, confira a lista completa de tipo de marcadores de remarketing dinâmico para consultar o ID do tipo de marcador e dos IDs de campo dos marcadores adequados.

Enviar comentários sobre…

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