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:
- Fazer o mapeamento do ID de campo de marcador com o ID do atributo do feed usando o método de utilidade.
- 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.
- 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 campoLISTING_ID
tem um tipo de dados deSTRING
. - Depois que você tiver todos os
FeedItemAttributeValue
s, criar um novo FeedItem e definir o feedId dele como o código do seuFeed
, e os attributeValues como o conjunto deFeedItemAttributeValue
s. - Criar um novo FeedItemOperation em que o operador seja definido como
ADD
e o operando, comoFeedItem
.
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 feedItemId
s das listas antigas, use o FeedItemService.get para recuperar os FeedItem
s que contêm os feedItemId
s.
As etapas básicas para cada lista que você pretende remover são:
- 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. - Criar um novo FeedItemOperation em que o operador seja definido como
REMOVE
e o operando, comoFeedItem
.
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 FeedItem
s, 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:
- Fazer o mapeamento do ID de campo de marcador com o ID do atributo do feed usando o método de utilidade.
- 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.
- No
FeedItemAttributeValue
, definir o campo do valor adequado para o campo de marcador do atributo. - Depois que você tiver todos os
FeedItemAttributeValue
s, criar um novo FeedItem e definir o feedId como o código do seuFeed
, o feedItemId como o código do item do feed do voo e o attributeValues como o conjunto deFeedItemAttributeValue
s. - Criar um novo FeedItemOperation em que o operador seja definido como
SET
e o operando, comoFeedItem
.
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.