As opções de integração neste artigo foram criadas e validades em colaboração com a DMPG, um parceiro especializado em Adobe Analytics e Adobe Target.
Nossa integração de análise personalizada permite que você analise as campanhas da Dynamic Yield em sua plataforma de análise. Este artigo detalha como configurar o Adobe Analytics.
O caso de uso mais comum para integrar com uma plataforma de análise terceirizada é registrar informações sobre quais experiências da Dynamic Yield os visitantes receberam (incluindo campanhas, variações e recomendações de produtos).
Há três partes móveis na integração:
- Uma campanha da Dynamic Yield ativa, com o seletor Execute Custom Integrations (executar integrações personalizadas) ativado. Isso permite que a campanha exponha seus metadados (por exemplo, nomes das campanhas, experiências e variações) sempre que for veiculada ao usuário.
- Uma Custom Integration Function (função de integração personalizada), que age como uma camada de tradução entre a Dynamic Yield e sua pilha de análise, e define como os dados expostos são transformados e armazenados. Usaremos essas funções para criar um objeto de camada de dados.
- Uma chamada para o Adobe Analytics. Dependendo da sua implementação, isso pode ser feito diretamente da Dynamic Yield ou de seu gerenciador de tags.
Configurando a integração
Para configurar a integração, há 3 passos:
- Configurar o Adobe Analytics para receber os dados da integração, usando uma variável de lista.
- Configurar um objeto global de camada de dados usando as funções do Dynamic Yield Custom Analytics Integration.
- Preencher a variável de lista da Adobe com o conteúdo da camada de dados e enviar uma chamada para a Adobe. Isso pode ser feito através da Dynamic Yield ou da sua solução de gerenciador de tags.
Passo 1: configurar uma variável de lista no Adobe Analytics
As variáveis de lista do Adobe Analytics permitem que você use uma única string separada por delimitador para armazenar múltiplos valores, que podem então ser divididos e analisados de forma independente. Cada valor representa uma combinação diferente de campanhas, experiências e variações.
Para configurar uma variável de lista, navegue até sua página de configurações seguindo esta documentação da Adobe, e configure uma de suas variáveis da seguinte forma:
- Name (nome): Dynamic Yield
-
Expiration (validade): equivalente à janela de atribuição da Dynamic Yield. Se o Attribution IQ faz parte do seu pacote Adobe, você pode editar a validade sob demanda ao analisar os resultados. Se não faz parte, você terá que fazer uma escolha antecipadamente. Nesse caso, recomendamos selecionar a janela de atribuição mais comum que você usa na Dynamic Yield. Se as experiências da Dynamic Yield estiverem configuradas com:
- 7-day attribution (atribuição de 7 dias): defina a validade como Custom attribution = 7 days
- Session attribution (atribuição da sessão): defina a expiração como Visit
Observe que as sessões/visitas são definidas de modo diferente na Dynamic Yield e na Adobe. Ao escolher essa validade, você pode perceber discrepâncias maiores entre as plataformas do que ao usar a validade baseada no tempo. Saiba mais sobre definição da sessão na Dynamic Yield. - Post-Event ou Post-Click Attribution (atribuição pós-evento ou pós-clique): Para replicar isso no Adobe Analytics, você precisará criar Sequential Segments (segmentos sequenciais), que incluem Visits (visitas) ou Visitors (visitantes) que também acionaram no Adobe Analytics o análogo do evento condicional utilizado para atribuição pós-evento na Dynamic Yield.
- Value Delimiter (delimitador de valor): Definido como | (pipe). Mudar para um delimitador diferente exige ajustes no script no 2º passo da integração.
- Allocation (alocação): defina como Full (total) para imitar a lógica de atribuição da Dynamic Yield, de modo que cada teste individual receba o crédito total de conversão.
- Max Values (valor máximo): 250
Passo 2: configurar um objeto global de camada de dados
Quando o Adobe Analytics estiver pronto para receber dados da Dynamic Yield, criaremos um objeto global de camada de dados usando a integração do Dynamic Yield Custom Analytics.
O objeto de camada de dados é chamado de dyGlobalObject e contém três elementos:
- events (eventos): um array de objetos contendo tipos diferentes de eventos, disparados por tipos diferentes de interações. Esses eventos podem ser usados para disparar chamadas individuais para o Adobe Analytics. Nessa configuração, no entanto, agruparemos o conteúdo de diversos eventos usando a variável de lista, reduzindo o número de chamadas para o Adobe Analytics para uma vez por página, a fim de atingir um bom compromisso entre precisão e custos de rastreamento.
- listVar: uma única string contendo uma lista distinta concatenada por pipes de variações-experimentos-campanhas carregados na página. Com cada novo evento de impressão, as informações relevantes são anexadas ao valor existente. A variável de lista da Adobe pode ser preenchida diretamente com esse valor.
- uniqueImp: um array usado para criar o campo listVar.
O array events do dyGlobalObject pode ser preenchido com diferentes eventos, cada um carregando informações específicas que você talvez queira registrar na Adobe:
- Variation impression (impressões da variação): esse evento executará a função toda vez que um teste ou variação de campanha for veiculada a um visitante em seu website.
- Recommendation impression (impressão da recomendação): esse evento executará a função toda vez que um conjunto de itens for renderizado na página. Ele carrega informações sobre o algoritmo e os itens recomendados.
Para enviar informações sobre as impressões de variações para a camada de dados:
Se você já tiver a extensão Analytics Platform Integration (integração de plataforma de análise) instalada, acesse Web Personalization › Extensions e inicie no passo 3.
- Acesse Experience OS App Store › Analytics Platform Integration e clique em Install (instalar).
- Clique em Configure extension (configurar extensão).
- Ative a extensão e clique em Edit (editar).
- Selecione Variation Impressions (impressões de variação), substitua o código de exemplo pelo seguinte e salve.
function afterVariationSelected(tagId, tagName, experienceName, experience, variations, isNoAction) { window.dyGlobalObject = window.dyGlobalObject || {}; window.dyGlobalObject.events = window.dyGlobalObject.events || []; window.dyGlobalObject.listVar = window.dyGlobalObject.listVar || []; window.dyGlobalObject.uniqueImp = window.dyGlobalObject.uniqueImp || []; const timestamp = Math.round((new Date()).getTime() / 1000); let expName = decodeURI(experience.name); const experienceId = experience.id; if (isNoAction) { addExperienceToGlobalObject(tagId, tagName, experienceId, expName, isNoAction, variations[0].id, 'Control', timestamp); } else { variations.forEach(function(variation) { addExperienceToGlobalObject(tagId, tagName, experienceId, expName, isNoAction, variation.id, decodeURI(variation.name), timestamp); }); } if (DYO.userAgent.isSafari(navigator.userAgent)) { DY.CS = DY.CS || {}; DY.CS.reportToAdobeReady = DY.CS.reportToAdobeReady || DYO.CoreUtils.waitForVariable('DY.CS.reportToAdobe'); DY.CS.reportToAdobeReady.then(function() { DY.CS.reportToAdobe.report(); }); } function addExperienceToGlobalObject(tagId, tagName, experienceId, expName, isNoAction, variationId, variationName, timestamp) { window.dyGlobalObject.events.push({ 'event': 'impression', 'cmpId': parseInt(tagId), 'cmpName': tagName, 'expId': experienceId, 'expName': expName, 'varId': variationId, 'varName': variationName, 'isCG': isNoAction, 'eventTs': timestamp }); const listItem = [tagName, expName, variationName].join('.'); if (window.dyGlobalObject.uniqueImp.indexOf(listItem) === -1) { window.dyGlobalObject.uniqueImp.push(listItem); } window.dyGlobalObject.listVar = window.dyGlobalObject.uniqueImp.join('|'); } }
- Após alguns minutos, abra o console do navegador em seu website, onde pelo menos uma campanha da Dynamic Yield esteja em execução, e digite dyGlobalObject. Você deve ver o array events sendo preenchido com um evento do tipo impression para cada campanha em execução, e o elemento listVar é preenchido com a lista concatenada por pipes [campaign_name].[experience_name].[variation_name], como o exemplo a seguir:
{
"events": [{
"cmpId":524122,
"cmpName":"Custom Action: Set Cookie 1",
"event":"impression",
"eventTs":1605468964,
"expId":994350,
"expName":"Experience 1",
"isCG":false,
"varId":"13487153",
"varName":"Variation 1"
}, {
"cmpId":525193,
"cmpName":"Recommendation",
"event":"impression",
"eventTs":1605468964,
"expId":997366,
"expName":"Experience 1",
"isCG":false,
"varId":"13629597",
"varName":"Variation 1"
}],
"listVar": "Custom Action: Set Cookie 1.Experience 1.Variation 1|Recommendation.Experience 1.Variation 1",
"uniqueImp": [
"Custom Action: Set Cookie 1.Experience 1.Variation 1",
"Recommendation.Experience 1.Variation 1"
]
}
Observe esta linha no código anterior da função de integração:
const listItem = [tagName, expName, variationName].join('.');
É explícito que cada valor da variável de lista deve ser construído como: [campaign_name].[experience_name].[variation_name]
Você pode mudar essa definição, por exemplo:
- Escolhendo um separador diferente (digamos, se os nomes de algumas de suas entidades contêm pontos);
- Escolhendo valores diferentes para as entidades (por exemplo, se você quer usar IDs no lugar dos nomes para economizar espaço em sua variável de lista [lembre-se de que cada valor da lista tem um tamanho máximo de 250 caracteres]).
Por exemplo, se você quiser registrar IDs de entidades separados por ponto e vírgula, edite a função para:
const listItem = [tagName, expName, variationName].join(';');
Se decidir usar IDs no lugar dos nomes das entidades, recomendamos usar a classificação Adobe SAINT para mapeá-los para seus respectivos nomes de entidades. Observe que, no momento, a Dynamic Yield não consegue oferecer um acesso conveniente e sistemático os metadados relacionados a esses IDs de entidades para uso com o importador de classificação da Adobe. No entanto, os IDs e respectivos metadados podem ser encontrados, para cada variação, no array events do objeto global, e podem ser classificados manualmente na Adobe. Saiba mais sobre a classificação nesta seção do artigo analisando campanhas da Dynamic Yield no Adobe Analytics.
Para enviar informações para a camada de dados sobre os produtos recomendados (opcional):
Para campanhas do Recommendations, você também pode revelar informações sobre o algoritmo utilizado e os produtos recomendados.
- Acesse a integração Custom Analytics Platform e verifique Recommendation Impressions (impressões de recomendações).
- Substitua o código de exemplo pelo seguinte e salve.
function afterRcomResponse(strategy, fallback, widgetId, slots) { window.dyGlobalObject = window.dyGlobalObject || {}; window.dyGlobalObject.events = window.dyGlobalObject.events || []; window.dyGlobalObject.events.push({ 'event': 'recommendation_impression', 'strId': strategy.widgetId, 'strType': strategy.strategy, 'slots': strategy.slots, 'isFallback': strategy.fallback, 'eventTs': Math.round((new Date()).getTime() / 1000), }); }
-
Após alguns minutos, abra o console do navegador em seu website, onde pelo menos uma campanha do Recommendations esteja em execução, e digite dyGlobalObject. Você deve ver que o array events contém um novo tipo de evento, recommendation_impression:
{ "events": [ { "event": "recommendation_impression", "eventTs": 1605468966, "isFallback": true, "slots": [ { "fallback": true, "item": { "categories": [ "Cats", "Toys" ], "description": "A Scratch-tastic product.", "dy_display_price": "0", "group_id": "119", "image_url": "http://cdn.dynamicyield.com/petshop/images/Group 119.png", "in_stock": true, "keywords": [ ], "name": "Cat Scratch Tower (Midi)", "price": 0, "publish_time": "2020-11-15T16:15:50", "sku": "119", "url": "/product/119" } } ], "strId": 89828, "strType": "TOP_N_RANDOM" } ] }
Observação: o próximo passo deste guia foca somente na integração das impressões de variações.
Passo 3: enviar uma chamada para o Adobe Analytics
Após expor as infomações, envie uma chamada para o Adobe Analytics de uma das seguintes formas:
- Através da Dynamic Yield, uma vez por página
- Personalizada, através da sua solução de gerenciamento de tags
Opção | Chamada uma vez por impressão | Chamada uma vez por página | Na chamada existente |
---|---|---|---|
Chamada através da Dynamic Yield | - | Ao descarregar a página, ou equivalente, através do Dynamic Yield Custom Code (código personalizado) como uma chamada adicional s.tl() | - |
Chamada personalizada, através do gerenciador de tags | Com o tipo de evento = impressão | Através do gerenciador de tags como uma chamada s.tl() adicional | Através do gerenciador de tags junto com a existente |
Opção 1: enviar uma chamada através da Dynamic Yield, uma vez por página
Use uma campanha Custom Code da Dynamic Yield para preencher a variável de lista a partir da camada de dados e então acione uma chamada s.tl() no Adobe Analytics.
- Acesse Web Personalization › New Campaign e clique em Custom Code.
- Selecione disparar a campanha com page load (carregar página). Isso apenas define um listener do evento "on page load"; a função contida é executada antes do descarregamento para websites estáticos, e com spa_start para aplicativos de página única.
-
Importante: por ser uma campanha auxiliar, e você não querer rastreá-la na Adobe, desative as opções Track campaign performance in your analytics platform (rastrear o desempenho da campanha na sua plataforma de análise) e Serve On every SPA (veicular em cada SPA), depois clique em avançar.
- Clique na guia Variations (variações, deixando a guia Targeting [direcionamento] vazia, direcionando para todos os usuários)
- Clique em New Variation (nova variação) e selecione o modelo Custom Code.
- Acesse Design e cole o seguinte código na guia JS. Observe que, neste trecho de código, você está explicitamente preenchendo a variável número 3 da lista. Substitua o 3 com o identificador da sua variável de lista, conforme definido no Adobe Analytics, depois clique em Save Variation (salvar variação).
const variableName = 'list3'; const INTERVAL = 5000; const dyAdobeTimeCookie = DYO.StorageUtils.get('dy-adobe', ['sessionStorage']); let newPosition = 0; let dyAdobeInterval; // Para desativar a lógica do intervalo, coloque um zero (0) DY.CS = DY.CS || {}; const adobeSender = () => { const currentTime = new Date().getTime(); const newTime = new Date(currentTime + INTERVAL).getTime(); window.addEventListener('beforeunload', sendDataToAdobeAnalytics); document.addEventListener('mouseout', (evt) => { if (evt.toElement === null && evt.relatedTarget === null) { sendDataToAdobeAnalytics(); } }); document.addEventListener("scroll", scrollSpeed); if (dyAdobeInterval !== 0) { dyAdobeInterval = setInterval(() => { if (dyAdobeTimeCookie === null) { DYO.StorageUtils.set('dy-adobe', newTime, ['sessionStorage']); sendDataToAdobeAnalytics(); } else { if (currentTime > dyAdobeTimeCookie) { sendDataToAdobeAnalytics(); DYO.StorageUtils.set('dy-adobe', newTime, ['sessionStorage']); } } }, INTERVAL); } } function scrollSpeed() { let lastPosition = window.scrollY; setTimeout(() => { newPosition = window.scrollY; }, 100); currentSpeed = newPosition - lastPosition; if (currentSpeed > 220) { sendDataToAdobeAnalytics(); } } function sendDataToAdobeAnalytics() { const data = window.dyGlobalObject && window.dyGlobalObject.listVar; if (!data) { return; } const reportingSettings = { linkTrackVars: variableName }; reportingSettings[variableName] = data; s.useBeacon = true; s.tl(true, "o", "Dynamic Yield", reportingSettings); delete window.dyGlobalObject; } DY.CS.reportToAdobe = (function() { const TIMEOUT = 400; let timeoutId = null; function sendData() { sendDataToAdobeAnalytics(); timeoutId = null; } function report() { if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; } timeoutId = setTimeout(sendData, TIMEOUT); } return { report: report }; })(); adobeSender();
- Selecione qualquer meta como sua métrica primária, tendo em mente que você não está configurando um teste de fato, mas apenas uma campanha auxiliar para fazer a chamada da API, então qualquer meta serve.
- Certifique-se de que a alocação esteja definida para enviar 100% do tráfego para sua variação.
- Clique em Save Experience e salve e publique a campanha.
Opção 2: enviar uma chamada através da sua solução de gerenciamento de tags
Essa opção oferece o maior nível de flexibilidade para utilizar o objeto de camada de dados da forma mais conveniente para sua implementação.
Você pode utilizar o conteúdo do elemento listVar do dyGlobalObject como se encontra, ou construir algo análogo trabalhando com o conteúdo de cada objeto no array events.
Você também pode decidir com que frequência e de que maneira a chamada deve ser feita: seja como um s.tl() separado, ou juntamente com a visualização de página do s.t() existente.
Alguns exemplos de configuração:
Opção | Configuração | Prós | Contras |
---|---|---|---|
Para disparar uma chamada em cada impressão da campanha | Preencha sua variável de lista e vincule a chamada em dyGlobalObject.event.event_type = impression. | A melhor precisão | Custo das chamadas |
Para agrupar chamadas como uma chamada s.tl() adicional | Use o conteúdo de dyGlobalObject.event.listVar ou construa sua própria solução análoga, e dispare uma chamada s.tl() quando a página descarregar. | Bom compromisso | Custo de uma chamada s.t() adicional |
Para agrupar chamadas junto com uma chamada existente | Use o conteúdo de dyGlobalObject.event.listVar ou construa sua própria solução análoga. | Nenhuma chamada ou custo adicional | Imprecisão devido às condições da corrida, se as campanhas forem veiculadas após a realização da chamada. |
Validando a integração
Se tiver optado por integrar através da Dynamic Yield ou do gerenciador de tags usando a variável de lista, você pode validar se a integração está funcionando como esperado usando o Adobe Experience Cloud Debugger, certificando-se de que a variável de lista está preenchida corretamente. Por exemplo:
Analisando campanhas da Dynamic Yield no Adobe Analytics
Ao concluir a configuração, você deve ver que a sua variável de lista está preenchida no Adobe Analytics. Você pode abordar a análise usando a variável de lista como se encontra ou usando a classificação para dividir ainda mais cada valor da lista.
Usando a variável de lista como se encontra
Digamos que você tenha uma campanha do Recommendations com duas experiências e duas variações por experiência.
No Adobe Analytics, você pode criar uma nova tabela de formato livre e arrastar a dimensão do DY Integration para a visualização, juntamente com visits (visitas), unique visitors (visitantes únicos) ou qualquer outra métrica de conversão.
Nesse exemplo, visto que as duas experiências incluem duas variações cada, você deve ver quatro linhas. Se o número de combinações for alto, talvez você queira dividir cada combinação em sua respectiva hierarquia de campanha › experiência › variação para uma análise mais conveniente.
Usando a classificação para criar dimensões separadas para campanhas, experiências e variações
Além de usar a variável de lista como se encontra, você pode usar a classificação para dividir ainda mais cada valor da lista, separados pelo seu caractere separador escolhido.
Por exemplo, se cada valor da variável de lista estiver configurado como:
[campaign_name].[experience_name].[variation_name]
Você pode criar três dimensões, dividindo no ponto (.), desta forma:
- DY Campaign
- DY Experience
- DY Variation
Para isso:
- Acesse Admin › Classification Rule Builder (administrador › construtor de regras de classificação)
- Adicione uma nova regra do tipo Regular Expression (expressão regular)
- Selecione sua variável de lista como entrada
- Selecione uma condição de correspondência baseada no separador. Por exemplo, se estiver usando um ponto (.), os critérios de correspondência podem ser definidos como: ^(.*)\.(.*)\.(.*)
- Visto que você está dividindo em três dimensões, certifique-se de classificar os resultados pela sua posição ordinal: DY Campaign = $1, DY Experience = $2, DY Variation = $3
Quando as novas dimensões estiverem prontas, volte a um espaço de trabalho e use-as:
Desativando a integração para uma campanha específica
Por padrão, a integração da plataforma de análise personalizada fica ativada para todas as campanhas. No entanto, a integração pode ser desativada por campanha. Isso é feito nas configurações avançadas (advanced settings) de cada campanha.
- Ao editar ou criar uma campanha, acesse Advanced Settings.
- Desative (ou ative) Execute custom integrations (executar integrações personalizadas).
A DMPG é uma agência independente de viabilização de experiências digitais, com certificação das plataformas Google e Adobe Martech, que presta serviços de estratégia e entrega cobrindo plataformas de dados do consumidor, automação de marketing, personalização intercanais, otimização da taxa de conversão, análises digitais e gerenciamento de tags.