tag:blogger.com,1999:blog-56364975785561150992024-03-18T02:48:08.291-07:00Product Management InsightProduct management, data management, tag management, Adobe solution integrations and data analysis will be some of the themes of this blog but I may write about other relevant topics occasionally.Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.comBlogger87125tag:blogger.com,1999:blog-5636497578556115099.post-54622907617504903802023-06-11T16:37:00.003-07:002023-06-11T16:38:02.441-07:00Platform 2023 Talk: Adobe's journey into building an Internal Developer Platform<p style="text-align: left;"><span style="font-family: georgia;">Adobe began its Cloud-Native journey back in 2015 and has since then expanded to over 200 multi-tenant clusters deployed across multiple regions and geographies. We have an average of >3 million containers with over 200 production deployments each day. All this has been made possible with Adobe's Cloud Platform called Ethos which provides high resiliency, reliability, and robust CI/CD capabilities to Adobe product teams. We are now expanding this platform into an Adobe-wide Internal Developer Platform (IDP) that aims to provide a seamless experience incorporating service creation, deployment, and management to over 5000 developers. The IDP will integrate and provide key capabilities across security, infrastructure provisioning, monitoring, diagnostics and GitOps-based CI/CD tooling using Argo. Adobe is also going through a massive project of modernizing its K8s cluster fleet which will lead to greater resiliency and considerable cost savings each year. </span></p><div style="text-align: left;"><span style="font-family: georgia;">Watch the video below!</span></div><div style="text-align: left;"><span style="font-family: georgia;"><br /></span></div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="320" src="https://www.youtube.com/embed/PdOwo4w9HQA" width="420" youtube-src-id="PdOwo4w9HQA"></iframe></div><br /><span style="font-family: georgia;"><br /></span></div>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-27166828064555905842023-01-15T18:47:00.012-08:002023-01-22T12:09:44.943-08:00Key Learnings from a GitOps Based Deployment Product Launch<p><span style="font-family: georgia;"><span color="var(--color-text)" style="font-weight: var(--artdeco-reset-typography-font-weight-normal);">I recently oversaw the launch of a new <a href="https://www.clickittech.com/devops/what-is-gitops/" target="_blank">GitOps</a> based deployment tool at my company. As a Product Manager working on internal developer tooling, a lot of the products I work on are not commercially available, so some of the learnings may or may not apply to commercial products. Having said that, one theme is constant which is that any Product Manager needs to build products that add value for users (developers in my case) and solve a set of key problems that they face. </span></span></p><p><span style="font-family: georgia;">I recently <a href="https://www.rohankapooronline.com/2022/10/adobedevblog-argocon-community.html" target="_blank">shared</a> about a workshop we conducted around the Adobe IDP, so this product launch provides a solution for two key IDP components which are namely Delivery/Deployment Management and Workflow Orchestration.</span></p><p><span color="var(--color-text)" style="font-weight: var(--artdeco-reset-typography-font-weight-normal);"><span style="font-family: georgia;">Below are some learnings I want to share from this product launch, and I hope some of these points will be applicable to any product launch. </span></span></p><h4 style="text-align: left;"><span style="font-family: georgia;">Focus on Users</span></h4><p style="--artdeco-reset-typography_getfontsize: 1.6rem; --artdeco-reset-typography_getlineheight: 1.5; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; color: var(--color-text); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; cursor: text; font-weight: var(--artdeco-reset-typography-font-weight-normal); line-height: var(--artdeco-reset-typography_getLineHeight); margin: 0px; padding: 0px; vertical-align: var(--artdeco-reset-base-vertical-align-baseline);"></p><ul style="text-align: left;"><li><span style="font-family: georgia;">Users typically have a <a href="https://en.wikipedia.org/wiki/Status_quo_bias" target="_blank">status quo bias</a> in the set of habits and technologies they use, and our product is no different. It's important to evaluate areas where user behavior may need to change in your current suite of products based on pain points users have shared with you. In our example, we are changing user behavior to move them towards a modern way of doing CI/CD using GitOps as opposed to leveraging a more traditional deployment philosophy. </span></li><li><span style="font-family: georgia;">Lighthouse period is golden, use it really well to understand client pain points, their success criteria and to improve your product.</span></li></ul><h4 style="text-align: left;"><span style="font-family: georgia;">Pre-Mortem Helps</span></h4><ul style="text-align: left;"><li><span style="font-family: georgia;">Pre-mortems could really help you identify things that could go wrong a few months after launch. I first heard about pre-mortems from <a href="https://www.linkedin.com/in/shreyasdoshi?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAAn-6ABLPZKVVSTK1us_i79g0dA82wBo0Y&lipi=urn%3Ali%3Apage%3Ad_flagship3_search_srp_all%3Bs0R%2BdT7aRUeOu5k87afCZQ%3D%3D" target="_blank">Shreyas Doshi</a> where he shared it <a href="https://coda.io/@shreyas/pre-mortems-how-a-stripe-product-manager-predicts-prevents-probl" target="_blank">here</a>. We conducted this session a few months product before launch. I repurposed the original template and created it in Miro, which is a tool we use at Adobe. See this <a href="https://miro.com/app/board/uXjVPz1113w=/" target="_blank">template</a> we used with examples.</span></li></ul><div><h4 style="text-align: left;"><span style="font-family: georgia;">Prepare GA </span>Checklist</h4></div><ul style="text-align: left;"><li><span style="font-family: georgia;">Support/on-call engineers need to be trained on the product well before going GA.</span></li><li><span style="font-family: georgia;">Have a GA production launch preparedness/checklist. This checklist should include things which are blockers to GA, which include various aspects around security, scalability and support readiness etc. </span></li><li><span style="font-family: georgia;">Prepare a press release/blog post clearly outlining all product capabilities and communicating benefits it will provide to users and publish it during GA.</span></li></ul><div><h4 style="text-align: left;"><span style="font-family: georgia;">Establish Baseline for Success Early</span></h4></div><ul style="text-align: left;"><li><span style="font-family: georgia;">Define and emphasize the criticality of KPIs to measure success of the product. If not already done, work with engineering to add tracking on all aspects of the product.</span></li><li><span style="font-family: georgia;">Prioritize product bootcamps and trainings. Build a community of power users who will be your advocates and will be willing to contribute features back into the product.</span></li><li><span style="font-family: georgia;">Build necessary conversion/migration tooling for users of existing tooling to move them over without causing friction. Remember to proactively communicate any maintenance mode decisions to incumbent users so that they are not left surprised.</span></li><li><span style="font-family: georgia;">Scalability and performance of the product are absolutely critical to the success.</span></li></ul><h4 style="text-align: left;"><span style="font-family: georgia;">Continue to Focus on Simplification</span></h4><ul style="text-align: left;"><li><span style="font-family: georgia;">Continue to simplify user onboarding and make it a priority whether it's automating repetitive tasks, adding the right level of abstraction or removing friction for users via great documentation. First impression is everything!</span></li></ul><div><h4 style="text-align: left;"><span style="font-family: georgia;">Be Prepared to Make Tradeoffs</span></h4></div><ul style="text-align: left;"><li><span style="font-family: georgia;">Be willing to pause new feature work temporarily in favor of addressing critical aspects such as scalability, security, support, training etc.</span></li><li><span style="font-family: georgia;">Keep a close eye on new feature requests that will enable new client adoption. Prioritize these features and set expectations with those clients accordingly. </span></li><li><span style="font-family: georgia;">Avoid building features that add tech debt and be prepared to retire unused features. Always aim to identify alternatives which provide users with the solution to their problem instead of asking engineering to build those features.</span></li></ul><h4 style="text-align: left;"><span style="font-family: georgia;">Listen to Users and Evaluate Other Offerings</span></h4><ul style="text-align: left;"><li><span style="font-family: georgia;">Engage with clients continuously to understand their pain points and drive adoption. Listen more and speak less during these conversations.</span></li><li><span style="font-family: georgia;">Be willing to evaluate/learn from external offerings (free or paid). There may be a better solutions out there which you could either incorporate or learn from.</span></li></ul><p></p><p style="--artdeco-reset-typography_getfontsize: 1.6rem; --artdeco-reset-typography_getlineheight: 1.5; border: var(--artdeco-reset-base-border-zero); box-sizing: inherit; color: var(--color-text); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; cursor: text; font-weight: var(--artdeco-reset-typography-font-weight-normal); line-height: var(--artdeco-reset-typography_getLineHeight); margin: 0px; padding: 0px; vertical-align: var(--artdeco-reset-base-vertical-align-baseline);"><span style="font-family: georgia;">Hope these points will be helpful to you. Please share any other points I may have missed.</span></p>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-68191625704138234522022-10-10T20:50:00.002-07:002023-01-15T18:56:46.868-08:00AdobeDevBlog: ArgoCon Community Learnings from the Adobe IDP Workshop<p><span style="font-family: georgia;">Adobe was a diamond sponsor of ArgoCon and we hosted a <a href="https://argocon2022.sched.com/event/16xFE?iframe=no" target="_blank">workshop</a> on September 21, 2022, to brainstorm and formalize the definition and capabilities of an <a href="https://internaldeveloperplatform.org/" target="_blank">Internal Developer Platform</a> (IDP) with the community’s feedback. In this workshop, which was in the spirit of community open discussion, we shared our IDP journey, and brainstormed with other community thought-leaders on making IDP a reality, based on Argo and other open-source projects. In preparation for the workshop, we had shared the following <a href="https://github.com/adobe-platform/Adobe-Workshop-ArgoCon2022/blob/main/IDP-Capabilities.md" target="_blank">GitHub document</a> where we outlined the key capabilities of an IDP and gathered the community’s thoughts and feedback.</span></p><p><span style="font-family: georgia;">Here is a visual we came up with to formalize key capabilities of an IDP and here's a <a href="https://blog.developer.adobe.com/argocon-community-learnings-from-the-adobe-idp-workshop-2adb1e09303f" target="_blank">link</a> to the full blog post.</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX6UJtSc2gHg7GVQwyRfAF77WgPFHhBe8O3vQUnWm_U43UrO_cvtKxBq7yS2iyIUXL8q3ZbA6rZK0JGZLRhtBDjLoyuZF3WsghlSHhhA9M_d1BjD-sXujlOmT9dwnjqFDNwnFHWOzZOUwa6hrqp5ssmdmcym0-hsnzIMOxadoJxk5QQiKw9AwulA/s4577/IDPCapabilities.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2308" data-original-width="4577" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX6UJtSc2gHg7GVQwyRfAF77WgPFHhBe8O3vQUnWm_U43UrO_cvtKxBq7yS2iyIUXL8q3ZbA6rZK0JGZLRhtBDjLoyuZF3WsghlSHhhA9M_d1BjD-sXujlOmT9dwnjqFDNwnFHWOzZOUwa6hrqp5ssmdmcym0-hsnzIMOxadoJxk5QQiKw9AwulA/s1600/IDPCapabilities.png" width="640" /></a></div><br /><span style="font-family: georgia;"><br /></span><p></p><p><span style="font-family: georgia;"><br /></span></p>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-26639726607409082912022-02-01T20:58:00.006-08:002023-01-15T18:57:01.847-08:00AdobeDevBlog: Building Enhanced Security into Our Container Platform<div style="text-align: left;"><span style="font-family: georgia;">In this post, we dive deeper into the security controls within Ethos that help safeguard our Continuous Integration/Continuous Deployment (CI/CD) pipelines, which are used to help deploy microservices across the Adobe ecosystem during service creation, onboarding, provisioning, and deployment. Here's a <a href="https://medium.com/adobetech/building-enhanced-security-into-our-container-platform-856fa7ab5e0c" target="_blank">link</a> to the main blog post on Medium.</span></div>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-31851947605809072762021-11-19T22:46:00.007-08:002023-01-15T18:57:13.866-08:00AdobeDevBlog: How Ethos Powers a Cloud-Native Transformation at Adobe<p><span style="font-family: georgia;">I recently moved into a product management role at Adobe. This is my first post as a PM published on Adobe's Medium Tech blog about Ethos (the team I work in). </span><span style="font-family: georgia;">Ethos is a cloud-native and cloud-agnostic platform (and principles) that streamlines the development, operation, and consumption of cloud services inside Adobe. Here's a </span><a href="https://medium.com/adobetech/how-ethos-powers-a-cloud-native-transformation-at-adobe-16c1a2e2f67a" style="font-family: georgia;" target="_blank">link</a><span style="font-family: georgia;"> to it and b</span><span style="font-family: georgia;">elow is a high-level architecture of Ethos.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimcIaruV8SmwKAb-puDN7htYXAkVRRX61yWfqZ9F4qjh47nrFdpwMr6e0HCORKFnawwGv3JNFjnxifMoxebFo_5e-Vf8Zc8t0T4bl3d2rmWTAiAVnXnSTDoH5J7VZfRQTJ6296GhX1Og/s1600/Picture1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1121" data-original-width="1430" height="502" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimcIaruV8SmwKAb-puDN7htYXAkVRRX61yWfqZ9F4qjh47nrFdpwMr6e0HCORKFnawwGv3JNFjnxifMoxebFo_5e-Vf8Zc8t0T4bl3d2rmWTAiAVnXnSTDoH5J7VZfRQTJ6296GhX1Og/w640-h502/Picture1.png" width="640" /></a></div>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-329892538563294802021-07-16T19:13:00.005-07:002023-01-15T18:57:34.111-08:00Adobe Experience Platform Query Service Video Demo<p><span style="font-family: georgia;">In this post, I want to share a demo I created working for the Adobe Experience Platform Query Service product team. The target audience are primarily pre-sales and account teams but anyone can use it get a general understanding of how Query Service connects with external tools. Below is what I worked on to create this demo:</span></p><p></p><ul style="text-align: left;"><li><span style="font-family: georgia;">Identified a common telecom sector customer churn use case</span></li><li><span style="font-family: georgia;">Ingested online/offline data into Adobe Experience Platform using AWS S3</span></li><li><span style="font-family: georgia;">Mapped the incoming data files to relevant schemas and datasets</span></li><li><span style="font-family: georgia;">Used SQL to combine those datasets into one common dataset using a <a href="https://experienceleague.adobe.com/docs/experience-platform/query/sql/syntax.html?lang=en#create-table-as-select" target="_blank">CTAS query</a></span></li><li><span style="font-family: georgia;">Created a simple churn analysis dashboard using Tableau and connected it to Query Service using PostgreSQL. </span></li><ul><li><span style="font-family: georgia;">Here's a <a href="https://drive.google.com/file/d/14om6V5ivYFxpBAke8OnLQ-SooGhtZKG2/view?usp=sharing" target="_blank">link</a> to it. Please note that the dashboard will not populate (due to AEP access requirements) but you can look at the general structure and fields being used.</span></li></ul></ul><p></p><p><span style="font-family: georgia;">Adobe Experience Platform Query Service is a powerful serverless tool that allows brands to analyze online-to-offline customer journeys and understand omnichannel attribution. Query service also allows you to join any dataset in the AEP Data Lake and capture the query results as a new dataset for use in reporting, machine learning, or for ingestion into Real-time Customer Profile. It provides customers with a rich set of SQL-based analytic capabilities to provide rich insights on customer data collected from all channels and devices.</span></p><p><span style="font-family: georgia;">In addition, here are some other practical applications of Query Service aside from combining AEP datasets and connecting to external data visualization tools:</span></p><p></p><ul style="text-align: left;"><li><span style="font-family: georgia;">Leverage Query Service to take a back up of AEP datasets.</span></li><li><span style="font-family: georgia;">Run pathing analysis, attribution analysis and sessionize raw data using <a href="https://experienceleague.adobe.com/docs/experience-platform/query/sql/adobe-defined-functions.html?lang=en#window-functions" target="_blank">Adobe defined functions</a>.</span></li><li><span style="font-family: georgia;">Create new calculated attributes using existing data like creating a new calculation for Customer Lifetime Value (CLV).</span></li></ul><p></p><p><span style="font-family: georgia;">Below is the video which is uploaded on YouTube and a direct <a href="https://www.youtube.com/watch?v=xIsfIKP-n70" target="_blank">link</a> to it.</span></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/xIsfIKP-n70" width="320" youtube-src-id="xIsfIKP-n70"></iframe></div><div><br /></div>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com1tag:blogger.com,1999:blog-5636497578556115099.post-12390754870991589552021-06-06T09:25:00.002-07:002021-06-11T10:22:22.782-07:00Multi-Org Adobe Target and AEM Experience Fragment Integration and Governance Ideas<p><span style="font-family: georgia;">Adobe Experience Manager and Adobe Target integration is one of the most powerful and robust in the Adobe Experience Cloud. I <a href="https://blog.adobe.com/en/publish/2019/11/29/4-reasons-to-use-adobe-experience-manager-and-adobe-target.html" target="_blank">wrote</a> about some of the benefits of this integration back in 2019. In this post, I want to cover two topics within the context of these two solutions:</span></p><p></p><ol style="text-align: left;"><li><span style="font-family: georgia;">Cross-IMS Org integration between AEM and Target</span></li><li><span style="font-family: georgia;">General Target workspace governance and XF nomenclature ideas</span></li></ol><h2 style="text-align: left;"><span style="font-family: georgia;"><br /></span></h2><h2 style="text-align: left;"><span style="font-family: georgia;">AEM & Target Cross-IMS Org Integration</span></h2><p><span style="font-family: georgia;">This is one topic I never got a clear answer to unless I tried and tested it myself. A well known fact about <a href="https://experienceleague.adobe.com/docs/control-panel/using/faq.html?lang=en#IMS%20Organization%20ID" target="_blank">IMS orgs</a> is that we cannot integrate solutions across which is absolutely true when it comes to the Adobe Experience Cloud Visitor ID among other solution but in this case, <b>it is possible</b> to integrate AEM with different Adobe Target instances via Adobe I/O. Having said this, I must also mention that it's not very common for us to see given most companies have a single Target instance but there are some Adobe customers that have multiple Target instances and orgs.</span></p><p><span style="font-family: georgia;">I've included the steps I took to set this up where I tested this using a single AEM author and two Target instances across two IMS orgs. Let's a closer look:</span></p><p><span style="font-family: georgia;">In AEM (6.5.x), go to Security - > Adobe IMS Configurations and either click on an existing Target integration or create a new one. </span><span style="font-family: georgia;">In this case, I already have two integrations set up with two Target instances (2 IMS orgs). </span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWzHgxyRELLeu346LrLD0_kGiLeLCxZo8lVTuDxgoOtd8xCiioCK2sYEtjFNqZoNhE_dNLRxBKfktsxaw0AotIIqFLvgruMg4xBzD37-C2Fv5du7H1w06zE5v7e2y7jy0h6lHQ-gjJZw/s1600/Screen+Shot+2021-06-05+at+4.54.40+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="654" data-original-width="1950" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWzHgxyRELLeu346LrLD0_kGiLeLCxZo8lVTuDxgoOtd8xCiioCK2sYEtjFNqZoNhE_dNLRxBKfktsxaw0AotIIqFLvgruMg4xBzD37-C2Fv5du7H1w06zE5v7e2y7jy0h6lHQ-gjJZw/s1600/Screen+Shot+2021-06-05+at+4.54.40+PM.png" width="640" /></a></div><p><span style="font-family: georgia;">The first few steps are outlined in the next two screenshots which is key where we first need to generate the public certificate/key in AEM.</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimAbfIIRf1iBO_lBqLnO4C6zXWwSl0iBxMUY44NHtq1f3XWFuflAg5fkXI892qkJFSB0le7bF6FopH2JMT048mE6G8QuvNCgrvGpWGtKXasFf1dWtOlZ34aNsAbtrBWQA33bEObAxfCA/s1600/Screen+Shot+2021-06-05+at+11.31.05+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="890" data-original-width="2260" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimAbfIIRf1iBO_lBqLnO4C6zXWwSl0iBxMUY44NHtq1f3XWFuflAg5fkXI892qkJFSB0le7bF6FopH2JMT048mE6G8QuvNCgrvGpWGtKXasFf1dWtOlZ34aNsAbtrBWQA33bEObAxfCA/s1600/Screen+Shot+2021-06-05+at+11.31.05+AM.png" width="640" /></a></div><div><br /></div><div><span style="font-family: georgia;">The next step is to upload the public key (called AEM-Adobe-IMS.crt) generated in AEM in the Adobe I/O console to integrate AEM with Target. I did this twice by uploading the public keys for both IMS configurations separately into each of the Adobe I/O consoles per IMS org.</span></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmd1YJJXnR1J7MqIu6Kcc80xjByb1RHJbMVFwxmSvdp_x_G-bF5oEVghTJxlko-L51pBmgZoEY5xbpG5pGxYe2gzce6OOaLWQC7HK4fGS5a2fRY40rS92XjSV_CBX0G9bZnDh5-GhgBg/s1600/Screen+Shot+2021-06-05+at+5.31.01+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1244" data-original-width="2048" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmd1YJJXnR1J7MqIu6Kcc80xjByb1RHJbMVFwxmSvdp_x_G-bF5oEVghTJxlko-L51pBmgZoEY5xbpG5pGxYe2gzce6OOaLWQC7HK4fGS5a2fRY40rS92XjSV_CBX0G9bZnDh5-GhgBg/s1600/Screen+Shot+2021-06-05+at+5.31.01+PM.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">You can follow the rest of the steps to set this up in Adobe's official documentation</span><span style="font-family: georgia;"> </span><a href="https://experienceleague.adobe.com/docs/experience-manager-65/administering/integration/integration-ims-adobe-io.html?lang=en" style="font-family: georgia;" target="_blank">here</a> <span style="font-family: georgia;">and once it's set up, you can test the connection for both IMS orgs.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx53bqUzHpOrWLsLD64IQkevF2ECHLQ3tBDG-GVqpcMm6tY5VVyUxgglfvF1CEgrkzSCiCpPAxZa6tf08RDkJv6CncJq308SPRa9k-Yel4MXJSEw7rd9K1AiwS-WJjyOUmqBfcoe4saw/s1600/Screen+Shot+2021-06-05+at+5.59.11+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1054" data-original-width="2048" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx53bqUzHpOrWLsLD64IQkevF2ECHLQ3tBDG-GVqpcMm6tY5VVyUxgglfvF1CEgrkzSCiCpPAxZa6tf08RDkJv6CncJq308SPRa9k-Yel4MXJSEw7rd9K1AiwS-WJjyOUmqBfcoe4saw/s1600/Screen+Shot+2021-06-05+at+5.59.11+PM.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><span style="font-family: georgia;">The final step is to connect to each Target instance and send <a href="https://experienceleague.adobe.com/docs/experience-manager-learn/sites/experience-fragments/experience-fragments-feature-video-use.html?lang=en" target="_blank">Experience Fragments</a> (XF) separately to both Target instances (and workspaces) in different IMS orgs.</span></div><p><span style="font-family: georgia;"><br /></span></p><h2 style="text-align: left;"><span style="font-family: georgia;">Adobe Target Workspace and AEM XF Governance</span></h2><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">This is another important topic that a lot of customers often ask about that's tied to best practices around creating a standardized process for organizing and naming workspaces and XFs in Target and AEM respectively. I previously <a href="https://www.rohankapooronline.com/2018/11/audience-manager-segmentation-strategy.html" target="_blank">wrote</a> about a slightly similar topic about creating a segmentation governance strategy in AAM. </span></div><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">A colleague of mine Ryan Lillis took the first pass at the Target workspace governance strategy so want to give credit where it's due and a lot of these concepts are also covered in Adobe Target's official enterprise permissions <a href="https://experienceleague.adobe.com/docs/target/using/administer/manage-users/enterprise/property-channel.html?lang=en" target="_blank">documentation</a> so I highly recommend you review it.</span></div><p><span style="font-family: georgia;">Before we can set governance in any solution, it's important for us to understand the concepts of user access in any solution. I'm not going to explain each of the user roles or the core access functionality in Target (covered in great depth in the documentation) but I have taken a stab to visualize WHAT the users are given access to in Target. </span></p><p><span style="font-family: georgia;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: georgia;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoY4tqXCKALQuzbzgT9XwSsYEXpRKj956L-9Rm0X-r2ZO4WMYS4T5pf4WAw6Q2KkJ1HmoKSQ5Y7lsz5nHytipGOh09ip6kSph-ctPa1x6fn24WEZlf4MkcABv6ZC5IHdybJmTPZ3Mu-Q/s1600/Screen+Shot+2021-06-05+at+7.14.39+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1228" data-original-width="1254" height="626" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoY4tqXCKALQuzbzgT9XwSsYEXpRKj956L-9Rm0X-r2ZO4WMYS4T5pf4WAw6Q2KkJ1HmoKSQ5Y7lsz5nHytipGOh09ip6kSph-ctPa1x6fn24WEZlf4MkcABv6ZC5IHdybJmTPZ3Mu-Q/s1600/Screen+Shot+2021-06-05+at+7.14.39+PM.png" width="640" /></a></span></div><span style="font-family: georgia;">As you can see, the "Default Workspace" in Target has access to all Target properties and any additional workspaces do not have access to Target properties by default so you will have to manually add them to the workspace. This is an important concept as in AEM 6.5, you can share Experience Fragments directly to Target workspaces. </span><div><span style="font-family: georgia;"><br /></span></div><h4 style="text-align: left;"><span style="font-family: georgia;">Target Workspace Governance</span></h4><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">Here are some options for you to consider when you're deciding your Target workspace strategy:</span><div><span style="font-family: georgia;"><br /></span></div><div><ul style="text-align: left;"><li><span style="font-family: georgia;"><b>Workspaces by Brand</b>: This works well in companies that have multiple brands and each business group operates differently.</span></li><li><span style="font-family: georgia;"><b>Workspaces by Geography/Locale: </b>This works well in companies that have multiple country sites/implementations/teams. </span></li><li><span style="font-family: georgia;"><b>Workspaces by Environment</b>: Workspaces are tied to each unique site environment like Dev, QA, Stage etc. This is getting more and more common as more companies start sending XFs to these environments for testing before a launching to production.</span></li><li><span style="font-family: georgia;"><b>Hybrid Workspaces</b>: This typically works well for a large companies that are organized by various functions but eventually, it always makes sense to formalize it based on some fundamental construct.</span></li></ul><div><span style="font-family: georgia;">It's also important to note that a company's organizational structure (divisional vs functional etc.) can also dictate how the workspaces are laid out but it's not very common as not every department necessarily has a testing program.</span></div><div><span style="font-family: georgia;"><br /></span><div><h4 style="text-align: left;"><span style="font-family: georgia;"> Experience Fragment Nomenclature Ideas</span></h4><p></p><p><span style="font-family: georgia;">I've seen examples where XFs are named as "XF1" to something which is well structured like "Site:Location:Offer".</span></p><p><span style="font-family: georgia;">In my experience, a good XF nomenclature has a delimited set of values that have a predefined logic to it and I'm only referring to cases where they're meant to be shared with a Target workspace. Some examples are:</span></p><p></p><ul style="text-align: left;"><li><span style="font-family: georgia;"><b>XFs based on Brand: </b><brand>:home:summercampaign</span></li><li><span style="font-family: georgia;"><b>XFs based on Geography</b>: en-us:home:springcampaign</span></li><li><span style="font-family: georgia;"><b>XFs based on Environment</b>: <dev/stage>:home:wintercampaign</span></li><li><span style="font-family: georgia;"><b>Hybrid XFs</b>: <brand>:en-us:home:fallcampaign:20%off</span></li></ul><p></p><p><span style="font-family: georgia;">These examples are probably oversimplified and generic but the main point I'm trying to make is that it's important to add some sort of structure to how XFs are named as we want to minimize any confusion and redundancy when these land up as offers in Adobe Target. The other important point is that both the developers in AEM and Target users should align on these before applying these widely to save time. </span></p><p><span style="font-family: georgia;">Even though Target has robust filtering capabilities for offers (and others), this is how XFs will look in Target if the two groups won't align which in this example, shows inconsistency.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixs2w4czZp4Z6Tdn1VI-4eThDFeESfknkhMg85_wn3t9k-Skv1QG3IANfoAoYdWM-TI5i5dTrpueA_kX1dMP54iRT08GeNHcnoPfyoX9N6gcWw9byucdGyvWNgQnWhPtkM7I4VKeB8Gw/s1600/Screen+Shot+2021-06-05+at+10.30.45+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="842" data-original-width="598" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixs2w4czZp4Z6Tdn1VI-4eThDFeESfknkhMg85_wn3t9k-Skv1QG3IANfoAoYdWM-TI5i5dTrpueA_kX1dMP54iRT08GeNHcnoPfyoX9N6gcWw9byucdGyvWNgQnWhPtkM7I4VKeB8Gw/s1600/Screen+Shot+2021-06-05+at+10.30.45+PM.png" width="284" /></a></div><p><br /></p><p><span style="font-family: georgia;">So, that was it! Hope you found this topic helpful. Please feel free to share with me your ideas on workspace organization or XF nomenclature best practices that you've seen work well. </span></p></div></div></div></div>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-44040714804312240332021-02-21T19:33:00.021-08:002022-01-15T23:08:53.294-08:00Overview of Adobe Experience Platform Event Forwarding<p><span style="font-family: georgia;">Happy (belated) New Year 2021! There is no denying the fact that the introduction of the Adobe Experience Platform <a href="https://experienceleague.adobe.com/docs/experience-platform/edge/home.html?lang=en" style="text-decoration-line: underline;" target="_blank">Web SDK</a> has revolutionized data collection. There are a lot of advantages of this approach but the main ones are reduced page latency, fewer cookies, a consolidated tracking library and the ability to directly stream data to Adobe Experience Cloud solutions to name a few. It's no surprise that Adobe is openly propagating this approach as the recommended path to implement all client-side solutions moving forward. I coauthored a post about the high level migration approach to the Web SDK on Adobe's official <u><a href="https://medium.com/adobetech/unify-your-adobe-experience-platform-services-with-adobe-experience-platform-web-sdk-75cf6851a9fc" target="_blank">Medium blog site</a></u>.</span></p><p><span style="font-family: georgia;">Assuming that we know the basics of the Adobe Experience Platform Web SDK, <a href="https://experienceleague.adobe.com/docs/experience-platform/xdm/home.html" target="_blank">XDM</a> and setting up the AEP schemas & datasets which will all apply in this case, this article will solely focus on </span><span style="font-family: georgia;">Event forwarding </span><span style="font-family: georgia;">which is a recently launched service </span><span style="font-family: georgia;">by the Adobe data collection team. I'm working with one of my clients to evaluate the feasibility of this feature and have already set this up on my sandbox which I'll cover in this article.</span></p><h3 style="text-align: left;"><span style="font-family: georgia;">Overview and Use Case</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;"><a href="https://experienceleague.adobe.com/docs/experience-platform/tags/event-forwarding/overview.html?lang=en" target="_blank">Event forwarding</a></span><span style="font-family: georgia;"> </span><span style="font-family: georgia;">allows customers to federate or </span><span style="font-family: georgia;">distribute</span><span style="font-family: georgia;"> data to a 3rd party platform such as Google Analytics or any system that has an API endpoint. The data is first collected from the page via the Adobe Web SDK client-side library and then sent over to a 3rd party endpoint from the Adobe Edge network. Even though it is called Event forwarding, data still needs to be collected at the source on the page.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">The primary use case for leveraging this feature is to stream data in real-time to a Data Lake for on-site personalization, decisioning or simply for data collection to run offline queries, build dashboards or create ML models.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">You can essentially leverage the implementation you have on your website to send data directly to your Data Lake which isn't very common for a lot of clients who usually send hourly or daily data feeds to their backend platform. With this, they can basically collect cherry picked data which is streamed in near real-time.<br /><br /></span></div><h3 style="text-align: left;"><span style="font-family: georgia;">Architecture</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">I had originally created this simplified architecture diagram for a <a href="https://www.rohankapooronline.com/2020/04/overview-of-real-time-cdp.html" target="_blank">blog</a> I wrote explaining the AEP Real-Time CDP which I've slightly tweaked to explain the concept of the how data is federated server-side to 3rd party platforms (explained in 3b). Basically, the AEP Edge Network is the system that federates data both to our own Adobe solutions and to 3rd party platforms.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwYY1SKm4j3x88jxg1pj6gGdmeKe0I0bzPopOXjhJiLoVwet7XcKM9WPhEdFXkvIJIPapwVj6oEL-Ap28reJf-Q_xc42hpEI1xAZsnebCCG_Qddwg_KULg8DV_2qQw4OR4rbxSFUYxFA/s1600/Screen+Shot+2021-04-28+at+10.51.13+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1532" data-original-width="1810" height="542" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwYY1SKm4j3x88jxg1pj6gGdmeKe0I0bzPopOXjhJiLoVwet7XcKM9WPhEdFXkvIJIPapwVj6oEL-Ap28reJf-Q_xc42hpEI1xAZsnebCCG_Qddwg_KULg8DV_2qQw4OR4rbxSFUYxFA/s1600/Screen+Shot+2021-04-28+at+10.51.13+PM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div></div><h3 style="text-align: left;"><span style="font-family: georgia;">Steps to Implement</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">In this section, I will cover how to implement this in Tags (formerly Launch) and also show how to collect data streamed from my sandbox using <a href="https://ngrok.com/" target="_blank">ngrok</a> which is a localhost webhook development tool that allows me to make my endpoint URL public</span><span style="font-family: georgia;">. Please note that I'll just </span><span style="font-family: georgia;">cover the basic steps that will help you make a call to a 3rd party endpoint but a</span><span style="font-family: georgia;"> more exhaustive tutorial on this can be found </span><a href="https://experienceleague.adobe.com/docs/platform-learn/comprehensive-technical-tutorial-v21/module21/aep-data-collection-ssf.html?lang=en#module21" style="font-family: georgia;" target="_blank">here</a><span style="font-family: georgia;">. So let's take a look.</span></div><div><br /></div><div><span style="font-family: georgia;">The first step is to create a separate property under the Server Side section by clicking on the drop down as shown below. Please note that you will not have access to this by default so please contact your Adobe Customer Success Manager to request access and get details around licensing.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja-uBG8fZyFekvPD4t74qVvRyIKQRRMCG5f-c8rzHeJatTQjvAe4OK7hP4Rv6ttDJK-nTVQM78-QEvX3tzdGxoVU_rC9-YqgdfsugWp0VRm9dde_LO-V247xJ0dvrvYDnLVrL3HT35sg/s1600/Screen+Shot+2021-02-21+at+12.42.08+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="410" data-original-width="1332" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja-uBG8fZyFekvPD4t74qVvRyIKQRRMCG5f-c8rzHeJatTQjvAe4OK7hP4Rv6ttDJK-nTVQM78-QEvX3tzdGxoVU_rC9-YqgdfsugWp0VRm9dde_LO-V247xJ0dvrvYDnLVrL3HT35sg/s1600/Screen+Shot+2021-02-21+at+12.42.08+PM.png" width="400" /></a></div><br /><span style="font-family: georgia;">The next step is to create a new property (Rohan's Test in my case) in this section and add the extension called "Adobe Cloud Connector". Please note that there's another extension which allows you to federate data to Google Analytics as well.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfc3EZjT76GfG3pNfeJAsqiEkrPYo9QMyekotQHhlH54_99_ClNeBfr2XNML-8rEy_1cISEIeNwOdUl3Z2I9f1VqeMwRZBrYscUBuL3kC57dVtoqomv8gC1dn0KUg73ZniXyKLHJsnQw/s1600/Screen+Shot+2021-02-21+at+12.43.11+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1064" data-original-width="1808" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfc3EZjT76GfG3pNfeJAsqiEkrPYo9QMyekotQHhlH54_99_ClNeBfr2XNML-8rEy_1cISEIeNwOdUl3Z2I9f1VqeMwRZBrYscUBuL3kC57dVtoqomv8gC1dn0KUg73ZniXyKLHJsnQw/s1600/Screen+Shot+2021-02-21+at+12.43.11+PM.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">Next, we need to create a new API endpoint. I'm using ngrok to map it to create a public facing URL tied to port 3000. The public facing </span><span style="font-family: georgia;">domain ends with f3cc.ngrok.io.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMH2XnsgHVJovyl_WW3H8cJjBOgFUm9EwwIyhalVLbOlLV4RQleb5fwsCJdoeyIsL5SSTMGIzBDDXyS64i1iYNW-GiiHPYCqm3Y4BYi_iDgLDfZQf0IWvsef1QRqFZCONO0pVpUZHBKw/s1600/Screen+Shot+2021-02-21+at+12.49.17+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="1242" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMH2XnsgHVJovyl_WW3H8cJjBOgFUm9EwwIyhalVLbOlLV4RQleb5fwsCJdoeyIsL5SSTMGIzBDDXyS64i1iYNW-GiiHPYCqm3Y4BYi_iDgLDfZQf0IWvsef1QRqFZCONO0pVpUZHBKw/s1600/Screen+Shot+2021-02-21+at+12.49.17+PM.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">I have a Node.js webhook (mapped to port 3000) which I ran while doing this test. I mapped the ngrok domain to my webhook/API endpoint and modified the URL to add '/ssftest' which is my final API endpoint URL.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghq-oXcZ3vtEJwnk1OZtKJi6jMqwc9jd171dyRTaAw9dvO20s6c0Lll7PDsenc-aP_6HD1S7rnLtRPa-YYwvBGNU11StlJWXV9Zaln1P8G9hX4Oq35zIuAZ4eVgojpPVLAVoryzER82w/s2354/Screen+Shot+2021-02-21+at+12.50.06+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="644" data-original-width="2354" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghq-oXcZ3vtEJwnk1OZtKJi6jMqwc9jd171dyRTaAw9dvO20s6c0Lll7PDsenc-aP_6HD1S7rnLtRPa-YYwvBGNU11StlJWXV9Zaln1P8G9hX4Oq35zIuAZ4eVgojpPVLAVoryzER82w/s1600/Screen+Shot+2021-02-21+at+12.50.06+PM.png" width="400" /></a></div></div></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><div style="font-family: Times;"><span style="font-family: georgia;">The next step is to enable the toggle to enable Event forwarding</span><span style="font-family: georgia;"> and pick your newly created property ID and Environment.</span></div><div style="font-family: Times;"><span style="font-family: georgia;"><br /></span></div><div style="font-family: Times;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGRA5nuhDYMRHWj4cUkKsFmwD4wGYc_c5Fd-qvDqnpW0_-5Nh_UeZiXVD1doDKe7XqKlZoFfh0f7fXCDoBfrvGkX-2q9j9llOKNw19Xah5LTsYh-KMjBSqjhaWy00NBS1PQVTQ5-CfA/s1600/Screen+Shot+2021-02-21+at+12.41.02+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1562" data-original-width="1646" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGRA5nuhDYMRHWj4cUkKsFmwD4wGYc_c5Fd-qvDqnpW0_-5Nh_UeZiXVD1doDKe7XqKlZoFfh0f7fXCDoBfrvGkX-2q9j9llOKNw19Xah5LTsYh-KMjBSqjhaWy00NBS1PQVTQ5-CfA/s1600/Screen+Shot+2021-02-21+at+12.41.02+PM.png" width="400" /></a></div></div></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">Next, we need to a new rule tied to the Adobe Cloud Connector extension and pick the option called "Make Fetch Call". Please note that you can also need to create new data elements in this property in case you want to pass any additional data to your API endpoint.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlw-Do3xiKJwOjYsL_wNj9GHeuZSldoSYx7ryQ2jTD2T3kwCXGaAu5bQkLubvoqot8gRACe_OGsQnVvztoVnXRFVddS5OCEUlkmaPZyyVXetxWnkhH_ovEKjKPkX3svI2ObEFARhTz9g/s1600/Screen+Shot+2021-02-21+at+12.59.26+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1115" data-original-width="1600" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlw-Do3xiKJwOjYsL_wNj9GHeuZSldoSYx7ryQ2jTD2T3kwCXGaAu5bQkLubvoqot8gRACe_OGsQnVvztoVnXRFVddS5OCEUlkmaPZyyVXetxWnkhH_ovEKjKPkX3svI2ObEFARhTz9g/s1600/Screen+Shot+2021-02-21+at+12.59.26+PM.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">Next, I mapped the API endpoint URL within the action. In this screen, we have the option to make different types of calls but in my case, I'm going to make a POST request. Note that I am also sending some test query string parameters as part of the JSON request. We can also add the XDM data and send it in the body of the request.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiydg4UPiwGuW11GroCY2ISpD85Z6lqVypyWw8iZ8JRfTi1en7nfcngEXiYHeKY2NfXjC9OnvPoWShfjnIDkyxiOqGwwtFdS0JIifSI0H2QnyvBG9J8bbn9wn7T_vD3cob55kYJvW-6iA/s1600/Screen+Shot+2021-02-21+at+12.59.37+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1104" data-original-width="2849" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiydg4UPiwGuW11GroCY2ISpD85Z6lqVypyWw8iZ8JRfTi1en7nfcngEXiYHeKY2NfXjC9OnvPoWShfjnIDkyxiOqGwwtFdS0JIifSI0H2QnyvBG9J8bbn9wn7T_vD3cob55kYJvW-6iA/s1600/Screen+Shot+2021-02-21+at+12.59.37+PM.png" width="640" /></a></div><span style="font-family: georgia;"><br /></span><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">Finally, we need to go to the website and load the page with the Web SDK deployed which is the ideal scenario. In my case, my sandbox already has the AEP Web SDK deployed so as soon as I refresh the page, a call gets made both to Adobe Experience Platform and to my webhook (API endpoint).</span></div><span style="font-family: georgia;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgnfGJKUglgNNmVFKGBBPpBlET-tc-B5oo8LGWgJg-rTA8QJmsfnx3uwZdboQJD3xdRRZrHcUhgdRRkGmIIbc_i5GkcNEldVk9t3XCFQIIRcSr8aeE0ykYISCga9o6-sXv4ZUUBnEewQ/s1600/Screen+Shot+2021-02-21+at+12.53.45+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1138" data-original-width="2762" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgnfGJKUglgNNmVFKGBBPpBlET-tc-B5oo8LGWgJg-rTA8QJmsfnx3uwZdboQJD3xdRRZrHcUhgdRRkGmIIbc_i5GkcNEldVk9t3XCFQIIRcSr8aeE0ykYISCga9o6-sXv4ZUUBnEewQ/s1600/Screen+Shot+2021-02-21+at+12.53.45+PM.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div>Here, I can see the query string parameter I sent in the request and some default parameters which also get sent in. If I would've sent in the XDM data object, you would've seen it here too.<br /><span><br /></span></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqgT_jEBMgEwwpjOEGzHXFCP6Tt3WeCKuJpl5CUEzV_9QbBesrx7ki1s2iKx3NklTbss_xlcoehOBdxhMWjZJmyt2ItHMuTOi_U9_0vpk3eD-O3CYkvWFG-TksGpN4npximgAlESpQYQ/s1600/Screen+Shot+2021-02-21+at+1.02.10+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1371" data-original-width="2048" height="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqgT_jEBMgEwwpjOEGzHXFCP6Tt3WeCKuJpl5CUEzV_9QbBesrx7ki1s2iKx3NklTbss_xlcoehOBdxhMWjZJmyt2ItHMuTOi_U9_0vpk3eD-O3CYkvWFG-TksGpN4npximgAlESpQYQ/s1600/Screen+Shot+2021-02-21+at+1.02.10+PM.png" width="400" /></a></div></div><h4 style="text-align: left;"><span style="font-family: georgia;"><br /></span><span style="font-family: georgia;">What Else Would I Like to See</span></h4><div><span style="font-family: georgia;"><br /></span></div></div></div><p><span style="font-family: georgia;">Below are a few additional things I'd like to see included in Launch Server Side:</span></p><p></p><ul style="text-align: left;"><li><span style="font-family: georgia;">The ability to do the same thing on a mobile app client-side implementation. Adobe is working on a Mobile app equivalent of the Web SDK so hopefully we'll see it soon.</span></li><li><span style="font-family: georgia;">It'll be great if the Launch Server Side team can collaborate with the Data/Bulk Ingestion API team and see if they can come up with shared learnings to standardize server side data collection within Adobe's own solutions as well.</span></li><li><span style="font-family: georgia;">Being able to replicate the same data elements created in the client-side Launch property to avoid redundancy.</span></li><li><span style="font-family: georgia;">Include more extensions in addition to Google Analytics to federate data server side which is collected by the Edge Server . This will hopefully allow clients to get rid of additional 3rd party scripts from the page such as Facebook and Google conversion pixels.</span></li></ul><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">Even though this is a relatively new service, I'm confident it will become more and more popular as we get closer to the impending deprecation of 3rd party cookies and introduction of more stringent data sharing policies. Hope you found this post helpful and please don't hesitate to reach out with any questions!</span></div><p></p>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-23857308310788367132020-12-19T17:41:00.020-08:002021-10-20T08:18:40.841-07:00Overview of Adobe Privacy Service and Data Repair API<p><span style="font-family: georgia;">Imagine a world where user data and information flows freely without any regulations and guidelines. Information ranging from your date of birth, health records to credit card number is accessible by anyone on the Internet. Well, given that we're still in the middle of a pandemic, let's not make things worse and get back to reality. </span></p><p><span style="font-family: georgia;">We know that web analytics and data management platforms (barring CDPs) are not supposed to store PII or PHI information and are designed to capture anonymous behavioral user information with the ability to store demographic data using indirectly identifiable encrypted IDs. However, it's virtually impossible to control what data gets sent into these tools and in my personal experience working with a lot of different clients and tools, I've seen PII data such as email address, phone number and even SSN still being passed accidentally. Now, I don't think there ever can be a situation where we can completely guarantee that this won't ever happen again but we can certainly put in the right guardrails in place before data is captured.</span></p><p><span style="font-family: georgia;"><a href="https://gdpr.eu/what-is-gdpr/" target="_blank">GDPR</a> and <a href="https://oag.ca.gov/privacy/ccpa" target="_blank">CCPA</a> (and other regulations) are some of the ways which put more power in the hands of individuals to know, opt-out and delete any data collected on them and understand how it's used. This <a href="https://hbr.org/2020/08/data-privacy-rules-are-changing-how-can-marketers-keep-up" target="_blank">article</a> explains the impact of these two regulations on marketers but before that it is also important to understand the difference between data subjects, data processor and data controller as explained <a href="https://www.adobe.com/advertising/general-data-protection-regulation.html" target="_blank">here</a>.</span></p><p><span style="font-family: georgia;">In this post, I will cover how Adobe Analytics customers can obfuscate or delete data which is done using either the <a href="https://experienceleague.adobe.com/docs/experience-platform/privacy/home.html?lang=en" target="_blank">Adobe Privacy Service</a> (UI) and <a href="https://www.adobe.io/apis/experiencecloud/analytics/docs.html#!AdobeDocs/analytics-2.0-apis/master/data-repair.md" target="_blank">Data Repair API</a> respectively. Given that my article will primarily cover how these two tools can be used to execute the deletion requests, p</span><span style="font-family: georgia;">lease review the official documentation on these two tools for the finer details which I won't cover</span><span style="font-family: georgia;">. So, let's dive in!</span></p><h1 style="text-align: left;"><span style="font-family: georgia; font-size: large;">Adobe Privacy Service</span></h1><div style="text-align: left;"><span style="font-family: georgia;">The Adobe Privacy Service provides Adobe customers with a user interface and APIs to help manage their <a href="https://experienceleague.adobe.com/docs/analytics/admin/data-governance/gdpr-submit-access-delete.html?lang=en#submit-access-and-delete-requests" target="_blank">customer data requests</a> AFTER the data has been collected as opposed to an opt-in service such as OneTrust which blocks all data from being captured in real-time. The Privacy Service allows you to selectively delete data from all Adobe solutions such as Adobe Analytics, Target etc. based on user identifiers or namespaces such as ECID or encrypted user ids. <u>Please note that the Privacy API should not be used to delete PII data captured accidentally but should only be used to serve delete requests from data subjects.</u> Also, note that I will specifically cover the privacy UI in this post but there also a <a href="https://experienceleague.adobe.com/docs/experience-platform/privacy/api/privacy-jobs.html?lang=en#check-status" target="_blank">privacy service API</a> which allows you to accomplish the same tasks if you want to do it programmatically.</span></div><div style="text-align: left;"><span style="font-family: georgia;"><br /></span></div><h3 style="text-align: left;"><span style="font-family: georgia; font-size: medium;">Use Case</span></h3><p><span style="font-family: georgia;">The primary use case for leveraging the Privacy Service is to either access or delete data for users who explicitly reach out to a brand to request a copy of all their personal data or ask for their personal data to be deleted. A good example of how users can do so is shown <a href="https://www.t-mobile.com/privacy-center/take-control-of-your-data" target="_blank">here</a>.</span></p><h3><span style="font-family: georgia; font-size: medium;"><br /></span></h3><h3><span style="font-family: georgia; font-size: medium;">Overview of Privacy Labels</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">In order to access or delete any data from Adobe Analytics, Adobe Experience Platform and other solutions, the first step is to add privacy labels to each attribute which contains sensitive data. The labels are classified into three primary categories as covered <a href="https://experienceleague.adobe.com/docs/analytics/admin/data-governance/gdpr-labels.html?lang=en#identity-data-labels#section_B2E78130957647338495EF37DE21D6BC" target="_blank">here</a> so please review these as the scope of my article doesn't cover what these are. </span><span style="font-family: georgia;">In this article, I will use two Adobe Analytics </span><span style="font-family: georgia;">variables Internal Search Term and User Name </span><span style="font-family: georgia;">as examples to first perform a data deletion request through the Privacy Service UI and then through the Data Repair API. </span></div><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">The first step is to </span><span style="font-family: georgia;">go to the Data Governance section by visiting Analytics > Admin > Data Governance within Adobe Analytics. You'll first land on the page which lets you select your report suite and will also show you the data retention policy for now long your data will be retained.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">Once you select your report suite, you can see that in my case, Internal Search Term (eVar1) variable has a l1 label which essentially means that there's PII information in this variable which is captured for some user names captured in eVar50 which has the label l2 (indirectly identifiable). <u>Please note that only the variables which are labelled will be part of the delete requests and unlabelled variables will be left as-is</u>.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBD0EgchW8D9I7mAYz74ZOrLbjobKF6JyRuv2oEww89Rp9IHGTTYqVZikYqUdyVdN-dKOL6LMDDR2kWf3_rE17XkGtp2svlqLacMqewC6GI5_bzoBafPnJ55axU8SibPMlVOoCu_DpTA/s1600/Screen+Shot+2020-11-29+at+6.40.45+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="305" data-original-width="1600" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBD0EgchW8D9I7mAYz74ZOrLbjobKF6JyRuv2oEww89Rp9IHGTTYqVZikYqUdyVdN-dKOL6LMDDR2kWf3_rE17XkGtp2svlqLacMqewC6GI5_bzoBafPnJ55axU8SibPMlVOoCu_DpTA/s1600/Screen+Shot+2020-11-29+at+6.40.45+PM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">We also need to pick some data data governance labels where I'm specifying that I want to delete all data at the person level. The labels are explained in more detail for eVar50 below. Please note that in order to delete data tied to a custom variable, you will need to define a custom namespace (profile_id in my case) which will be the primary identifier to delete IDs. You can name it anything or can use an OOTB namespace such as ECID.</span></div></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKmwbD1ItetaC_ZVchfS8k-TUQBbC3QIXVFjzUGcQT_Tsm7Cuk9QBJFNL7n3j12E3wVscnfMSTgSg-cUZfkqFIqNvv07fuCwi3_GSWrbaYdObfbYEjcHbqeF6a4yZL5xT259QkE2fehg/s1600/Screen+Shot+2020-11-29+at+6.46.25+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1278" data-original-width="1576" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKmwbD1ItetaC_ZVchfS8k-TUQBbC3QIXVFjzUGcQT_Tsm7Cuk9QBJFNL7n3j12E3wVscnfMSTgSg-cUZfkqFIqNvv07fuCwi3_GSWrbaYdObfbYEjcHbqeF6a4yZL5xT259QkE2fehg/s1600/Screen+Shot+2020-11-29+at+6.46.25+PM.png" width="400" /></a></div></div><h3><span style="font-family: georgia; font-size: medium;"><br /></span></h3><h3><span style="font-family: georgia; font-size: medium;">Privacy Job Request</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">A privacy job request can be made by visiting the privacy <a href="https://privacyui.cloud.adobe.io/" target="_blank">page</a> (requires IMS authentication). There is an option to pick the regulation type (GDPR, CCPA etc.) and delete IDs either manually or in bulk by uploading </span><span style="font-family: georgia;">IDs</span><span style="font-family: georgia;"> in a</span><span style="font-family: georgia;"> JSON file (covered below). I will cover how to do it using both methods but before I do so, let's take a look at the data captured in eVar1 and eVar50. One thing to note is that only data tied to user ids "abc123" and "def456" will be obfuscated as I will only be processing delete requests for these ids and the rest of the data will be left as-is.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0CvFNH2KdyDwTFDv2bqQNlkTD7dlhsLSzGQ6ncUJVcwVvZTO-gZlAWBSlLYqlkJw7dGlbCfyGMABnugfpUXqtyCTnT-EnBA7eNOsyQnTKsIU8_T3tSjrrlZib-k5IwelMMzHDXLcnqA/s1600/Screen+Shot+2020-12-03+at+11.13.46+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1036" data-original-width="2048" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0CvFNH2KdyDwTFDv2bqQNlkTD7dlhsLSzGQ6ncUJVcwVvZTO-gZlAWBSlLYqlkJw7dGlbCfyGMABnugfpUXqtyCTnT-EnBA7eNOsyQnTKsIU8_T3tSjrrlZib-k5IwelMMzHDXLcnqA/s1600/Screen+Shot+2020-12-03+at+11.13.46+AM.png" width="640" /></a></div><br /><span style="font-family: georgia;">Here are the two methods by which you can send a delete request from the privacy UI.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYuA0kI4W5He-ppwlkCMwi9idf7acCRMkLRDZFLIknawPM2Pd8qWRNHe10FNw0jZ9YrsSkIw69ZJqZlCjXZljZa71Ku1zYO99zFotAxQLoXKqtQJqM3U8lv94Z7Ni0JiX48IkGM5AKOw/s1600/Screen+Shot+2020-11-29+at+6.42.58+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1009" data-original-width="3118" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYuA0kI4W5He-ppwlkCMwi9idf7acCRMkLRDZFLIknawPM2Pd8qWRNHe10FNw0jZ9YrsSkIw69ZJqZlCjXZljZa71Ku1zYO99zFotAxQLoXKqtQJqM3U8lv94Z7Ni0JiX48IkGM5AKOw/s1600/Screen+Shot+2020-11-29+at+6.42.58+PM.png" width="640" /></a></div><span style="font-family: georgia;"><div><span style="font-family: georgia;"><br /></span></div>I'll first process a delete request using the manual method. Please note that you can process a request for any of the solutions mentioned but in my case, I'll be deleting (obfuscating) data from Adobe Analytics for the user id "abc123" captured in eVar50 which is tied to the namespace "profile_id" so anytime I enter the value manually, it will be obfuscated but this is not a scalable approach if you want to delete ids in bulk.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJRmlS77jWprVq72Lc3_FkjPXWJHqoXaOyP5tvuYk7n8hor4nd-sxmRM31-cSYCMg5P-A2SKanp1V6j6SwZobPRZwzHCrQ3cpBZhyphenhyphenrbEx0lbX30LBhVWGI-4XHRCUtQWuUZn-wIOvtGg/s1600/Screen+Shot+2020-11-29+at+6.47.02+PM.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: georgia;"><img border="0" data-original-height="1342" data-original-width="1054" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJRmlS77jWprVq72Lc3_FkjPXWJHqoXaOyP5tvuYk7n8hor4nd-sxmRM31-cSYCMg5P-A2SKanp1V6j6SwZobPRZwzHCrQ3cpBZhyphenhyphenrbEx0lbX30LBhVWGI-4XHRCUtQWuUZn-wIOvtGg/s1600/Screen+Shot+2020-11-29+at+6.47.02+PM.png" width="314" /></span></a></div><span style="font-family: georgia;"><div><span style="font-family: georgia;"><br /></span></div>Once you click create, you will see that a job id is created which contains my user name "abc123". </span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm0EcCUpi90l9hDH124MqGvKocACSBjK70MXk3zsm-dHUFJ0SYNgqCL76oNqmWaRmZQotBQTBk299i8iovWf3qiB91ytFOHT19l8JrNdxF6Gn1v5GT3B4kLnS5IgqwIYtbt__RJvWbSg/s1600/Screen+Shot+2020-11-29+at+6.47.29+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1075" data-original-width="2926" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm0EcCUpi90l9hDH124MqGvKocACSBjK70MXk3zsm-dHUFJ0SYNgqCL76oNqmWaRmZQotBQTBk299i8iovWf3qiB91ytFOHT19l8JrNdxF6Gn1v5GT3B4kLnS5IgqwIYtbt__RJvWbSg/s1600/Screen+Shot+2020-11-29+at+6.47.29+PM.png" width="640" /></a></div><br /><span style="font-family: georgia;">I'll now process a delete request using the JSON upload method which allows you to upload up to 1000 IDs at a time. In my case, I only have 1 ID to delete called "def456" but <u>you can upload up to 1000 per request but limit the requests to up to 10,000 IDs per day</u>. Below is what my JSON looks like. Note that you need to include your IMS org, specify the namespace and add more ids in the "users" array among other attributes.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj38ACfgYhicA7D6q9aHe92aEUWn8bnZMnJCxhhk3DU3eojy8f_PQiE2uw4CPyWQOjwxG1lQtkVce1Py68vGHXt7osvpppp9t86oSwjto89DY5jlZQWAs3w_Fr2t629nFbrBYbj7Gs_Jg/s1600/Screen+Shot+2020-11-29+at+7.12.18+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="786" data-original-width="886" height="355" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj38ACfgYhicA7D6q9aHe92aEUWn8bnZMnJCxhhk3DU3eojy8f_PQiE2uw4CPyWQOjwxG1lQtkVce1Py68vGHXt7osvpppp9t86oSwjto89DY5jlZQWAs3w_Fr2t629nFbrBYbj7Gs_Jg/s1600/Screen+Shot+2020-11-29+at+7.12.18+PM.png" width="400" /></a></div><br /><span style="font-family: georgia;">I also had my network tab open while doing this so you can see the request actually makes an API call to the Privacy Service and sends over the necessary fields to process a delete request.<br /><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_oq7iw2ea93DD2ta6UWhdUt0SrgSURKrh8tYKmPgMgVOCTJC_JT9FxnNsnTIlYbvyNVm5xHbiOoWI9P-Y-RWnEZxS0w-VzsA4NDoN8ZHd_uhiEuqbkrNFHCom1zYFxC8MFq61y7UdLw/s1600/Screen+Shot+2020-11-29+at+7.15.15+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="790" data-original-width="1670" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_oq7iw2ea93DD2ta6UWhdUt0SrgSURKrh8tYKmPgMgVOCTJC_JT9FxnNsnTIlYbvyNVm5xHbiOoWI9P-Y-RWnEZxS0w-VzsA4NDoN8ZHd_uhiEuqbkrNFHCom1zYFxC8MFq61y7UdLw/s1600/Screen+Shot+2020-11-29+at+7.15.15+PM.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><h3><span style="font-family: georgia; font-size: medium;"><br /></span></h3><h3><span style="font-family: georgia; font-size: medium;">Impact on Adobe Analytics Data</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">Once the requests have completely processed which typically takes anywhere between 5-7 days, you can see that the status is marked as "complete". I've purposely hidden the job id and requester email address.</span></div></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeRcjTQ947v9x_CHh0ledcWAPjfN46rlX9JhkrOanzhqRd16FsPS-UntJnGY2ZyVe6n67kvyD4ziA6Yiq4dQGrSL2WFTXFJWp9zBsDahBJsU1SKvKs5RrP_SyiqOcR37iN19fFDtOZrQ/s1600/Screen+Shot+2020-12-07+at+10.25.26+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1138" data-original-width="2762" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeRcjTQ947v9x_CHh0ledcWAPjfN46rlX9JhkrOanzhqRd16FsPS-UntJnGY2ZyVe6n67kvyD4ziA6Yiq4dQGrSL2WFTXFJWp9zBsDahBJsU1SKvKs5RrP_SyiqOcR37iN19fFDtOZrQ/s1600/Screen+Shot+2020-12-07+at+10.25.26+AM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">As far as data in Analytics is concerned, you will see that data in the two variables in question will contain the word "privacy-" followed up with a unique identifier for every record tied to the user IDs I sent in the request.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitLbRJp_u9GXYcB3AC5SFX2vwLDW3hl-NvvhekquVFHn0HxT0mmv8SOlSXuLEc-07UaoOrMOuKaacFm6SnKInxrko5oLv7-DrCXm5SnCRCVxmEp20mm0xMjWLoBZmSgoTXyibn1QgTtQ/s1600/Screen+Shot+2020-12-07+at+10.24.58+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="424" data-original-width="2488" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitLbRJp_u9GXYcB3AC5SFX2vwLDW3hl-NvvhekquVFHn0HxT0mmv8SOlSXuLEc-07UaoOrMOuKaacFm6SnKInxrko5oLv7-DrCXm5SnCRCVxmEp20mm0xMjWLoBZmSgoTXyibn1QgTtQ/s1600/Screen+Shot+2020-12-07+at+10.24.58+AM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDDyIDiku9FKZ06r43Hl36Vl9YZprqhj-4TOlKBvxvrKm4wMIcM1R6fs1hKoV5ZVUMyDnYi0bzrJ89JTO9dPDpN7Ao0ffaQwVmeDTYmD9ZVpDZU0Qb5Lnv4c7S0Tx5n3K8lotHhumolw/s1600/Screen+Shot+2020-12-19+at+4.23.34+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="2454" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDDyIDiku9FKZ06r43Hl36Vl9YZprqhj-4TOlKBvxvrKm4wMIcM1R6fs1hKoV5ZVUMyDnYi0bzrJ89JTO9dPDpN7Ao0ffaQwVmeDTYmD9ZVpDZU0Qb5Lnv4c7S0Tx5n3K8lotHhumolw/s1600/Screen+Shot+2020-12-19+at+4.23.34+PM.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><span style="font-family: georgia;">There's a lot of information available in the official Adobe document but I've only covered information relevant to my use case.</span></div></div><p><br /></p><h2 style="text-align: left;"><span style="font-family: georgia; font-size: large;">Data Repair API</span></h2><div><span style="font-family: georgia;"><span>The Data Repair API provides Adobe Analytics customers access to APIs which allows them to delete any data which they want to remove. This API scans all rows of data for a particular report suite and deletes all data in a custom variable defined as part of the API request.<br /></span></span></div><div><br /></div><div><span style="font-family: georgia; font-size: large;"><h3 style="font-family: Times;"><span style="font-family: georgia; font-size: medium;">Use Case</span></h3><p style="font-family: Times; font-size: medium;"><span style="font-family: georgia;">The primary use case for leveraging the Data Repair API is to completely delete data from Adobe Analytics variables. The typical scenario is when a customer may have inadvertently captured PII data in an Analytics variable.</span></p><h3 style="font-family: Times;"><span style="font-family: georgia; font-size: medium;">Data Repair API Request</span></h3></span></div><p><span style="font-family: georgia;">The official <a href="https://www.adobe.io/apis/experiencecloud/analytics/docs.html#!AdobeDocs/analytics-2.0-apis/master/data-repair.md" target="_blank">documentation</a> covers all information around the prerequisites (admin console, console.io access token, global company id etc.) and caveats so I highly recommend that you read that. In this section, I'll cover how I went about sending the API requests using Postman.</span></p><p><span style="font-family: georgia;">Populate the access token, client id (from I/O Console) and global company ID (from Analytics) and as headers in the /serverCallEstimate GET call.</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrs7Dsm7OdhZkR7R8TCrvkAI_wnTla3hc1zK4EqG15Etykr9V_ub2jSIe_ur7cdm3iYsV_jr0fdOkpJZVsuwBumV2qq6leif5VlvDP4DUueLLome6qOfBA-7ceGcis6_MQqtuiPHxQeQ/s1600/Screen+Shot+2020-12-19+at+4.37.22+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="556" data-original-width="1688" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrs7Dsm7OdhZkR7R8TCrvkAI_wnTla3hc1zK4EqG15Etykr9V_ub2jSIe_ur7cdm3iYsV_jr0fdOkpJZVsuwBumV2qq6leif5VlvDP4DUueLLome6qOfBA-7ceGcis6_MQqtuiPHxQeQ/s1600/Screen+Shot+2020-12-19+at+4.37.22+PM.png" width="640" /></a></div><br /><span style="font-family: georgia;">Pass the start and end dates as query string parameters in the same request. You will see that the API response generates a validation token along with specifying the total number of server calls.<br /></span><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRLSo2QvjuZnbwdjKRitjzaREAyQEBfCv3vx89m54lgGGAcLw6Beg1ejfXXeehDMAfGImAm7sugPO3S-dVfBWGr3Fr8vn5i9_0yMcFZXDNdrpVTfKletyWShrd80RTBrHte0DYvtcSw/s1600/Screen+Shot+2020-12-05+at+10.14.31+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1286" data-original-width="1830" height="450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRLSo2QvjuZnbwdjKRitjzaREAyQEBfCv3vx89m54lgGGAcLw6Beg1ejfXXeehDMAfGImAm7sugPO3S-dVfBWGr3Fr8vn5i9_0yMcFZXDNdrpVTfKletyWShrd80RTBrHte0DYvtcSw/s1600/Screen+Shot+2020-12-05+at+10.14.31+AM.png" width="640" /></a></div><p><span style="font-family: georgia;">The request is the actual delete POST request where we specify the variable that needs to be deleted. You can add multiple variables as part of the same request but I only sent a request for eVar50 in this example. Also, take a look at the response which provides us with a job ID and status.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGYB_Muev69b1PzTf-xIV-qe3Ouy62XokSfU_3lPjJ7zF5oQh1lFiHMECUKDE4GoVkl6jTSBTCOHVpovDcdIFqTS3YH3gU_nTLhGkyEFXREiTwe6W50x6JOqSGJ0vJgEP4OKi4_p5Rg/s1600/Screen+Shot+2020-12-19+at+4.18.46+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1372" data-original-width="1620" height="542" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGYB_Muev69b1PzTf-xIV-qe3Ouy62XokSfU_3lPjJ7zF5oQh1lFiHMECUKDE4GoVkl6jTSBTCOHVpovDcdIFqTS3YH3gU_nTLhGkyEFXREiTwe6W50x6JOqSGJ0vJgEP4OKi4_p5Rg/s1600/Screen+Shot+2020-12-19+at+4.18.46+PM.png" width="640" /></a></div><p><span style="font-family: georgia;">So, that was the extent of what I will cover but a lot of other useful information is covered in the official Adobe documentation.</span></p><h3><span style="font-family: georgia; font-size: medium;">Impact on Adobe Analytics Data</span></h3><p><span style="font-family: georgia;"></span></p><div><span style="font-family: georgia;">Once the request is processed, all data is deleted from Adobe Analytics as shown below.</span></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbOutBJlxncN-fTXppmgmR7fHEt4QHIHvVqczbHW9Ea_j-mFzdxCgvhRLXJ8saZeu6wbklnrULHQEQHstAyo-MdBLUMxqiIkwVw7SV8fzHgfbs5X-ay2l51i3V0ouqLwpg9O_72Cbuvw/s1600/Screen+Shot+2020-12-19+at+4.30.04+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="282" data-original-width="2462" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbOutBJlxncN-fTXppmgmR7fHEt4QHIHvVqczbHW9Ea_j-mFzdxCgvhRLXJ8saZeu6wbklnrULHQEQHstAyo-MdBLUMxqiIkwVw7SV8fzHgfbs5X-ay2l51i3V0ouqLwpg9O_72Cbuvw/s1600/Screen+Shot+2020-12-19+at+4.30.04+PM.png" width="640" /></a></div></div><div><span style="font-family: georgia;"><h3 style="font-family: Times; font-size: x-large;"><span style="font-family: georgia; font-size: medium;"><br /></span></h3><h3 style="font-family: Times; font-size: x-large;"><span style="font-family: georgia; font-size: medium;">What Else Would I Like to See Added</span></h3><div>Even though I'm happy that we finally have a productized solution for deleting PII data, I would like to see the following enhancements added to it:</div></span></div><p></p><ul><li><span style="font-family: georgia;">A user interface to make these requests in addition to APIs</span></li><li><span style="font-family: georgia;">Ability to add regex or conditional logic built into the UI to selectively delete data instead of deleting everything </span></li><li><span style="font-family: georgia;">Make this API available for other solutions including AAM and others</span></li><li><span style="font-family: georgia;">This is not a big deal but when I tried to send multiple requests (one for each variable), I ran into the following error. It will be nice if users are able to send multiple requests without waiting. Regardless, you can get around this by sending a delete requests for multiple variables as part of the same call.</span></li></ul><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLFAb11hCHrIzpfBlI2aBFrHGtYPuKulqwpF5xyidgUT_jvHZMJWY2m6hjOsXVjRxgwzLCZio9Unjjd_VHnjE4P3zkFvVRRj5MnUYbqvY5uAUj60kDgXaOXe63Nl84SDsWKb9_tv3Mfg/s1600/Screen+Shot+2020-12-19+at+5.20.54+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="252" data-original-width="1242" height="81" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLFAb11hCHrIzpfBlI2aBFrHGtYPuKulqwpF5xyidgUT_jvHZMJWY2m6hjOsXVjRxgwzLCZio9Unjjd_VHnjE4P3zkFvVRRj5MnUYbqvY5uAUj60kDgXaOXe63Nl84SDsWKb9_tv3Mfg/s1600/Screen+Shot+2020-12-19+at+5.20.54+PM.png" width="400" /></a></div><span style="font-family: georgia;"><div><span style="font-family: georgia;"><br /></span></div>All in all, it is a great tool for customers who want to delete data using a productized solution which is much cheaper to use. Given that I learnt about this API recently, I wanted to share my learnings with everyone. Hope you found this post informative. </span><span style="font-family: georgia;"><br /></span></div><p></p>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-39485578030600157462020-10-24T13:24:00.006-07:002021-04-28T11:12:52.339-07:00Marketo Integration with Adobe Experience Cloud Solutions<p><span style="font-family: georgia;">The Experience Cloud ID service consists of many solution integrations which I've <a href="https://www.rohankapooronline.com/2019/06/send-real-time-events-to-adobe-campaign.html" target="_blank">written</a> about in the past. The true value of the Experience Cloud ID service come to the fore with the various integrations that exist helping client really realize the true value of their investment in Adobe technology. A relatively newer addition to the Experience Cloud ecosystem is Marketo which was acquired by Adobe a few years ago for its rich cross-channel activation and marketing automation capabilities primarily in the B2B space but Marketo can be leveraged for B2C use cases as well. </span></p><p><span style="font-family: georgia;">I know that doesn't do justice to how powerful </span><a href="https://www.marketo.com/solutions/" style="font-family: georgia;" target="_blank">Marketo</a><span style="font-family: georgia;"> really is so here's a high-level overview of some of its capabilities especially around marketing automation:</span></p><p><span style="font-family: georgia;">To start off, let's start by understanding what <b>marketing automation</b> is. <u>It is a technology that automates the measurement and orchestration of omnichannel marketing initiatives. It simplifies lead management & nurturing, event marketing, personalization, regular & triggered emails or SMS.</u> I have worked extensively in the automotive vertical in the past and know how crucial it is for automotive companies or any other company to manage their leads throughout the customer journey starting from awareness to purchase. Marketo is the perfect system to do that and if you combine it with the power of the Adobe Experience Cloud, you are truly able to orchestrate and measure the customer journey from start to finish.</span></p><p><span style="font-family: georgia;">In this post, I will walk through the integration of Marketo with other Adobe Experience Cloud solutions focussing more on Audience Manager but the general process is the same for Adobe Analytics and Target. </span><span style="font-family: georgia;">Please note I'm specifically referring to Marketo Engage but will call it Marketo in this post.</span></p><div><span style="font-family: georgia;"><br /></span></div><h3 style="text-align: left;"><span style="font-family: georgia;">Use Cases</span></h3><p><span style="font-family: georgia;">Let's start with some common use cases that can be executed with this integration: </span></p><p></p><ul style="text-align: left;"><li><span style="font-family: georgia;">Cross-device media activation of leads (B2B or B2C data from Marketo activated in Audience Manager leveraging the device graph)</span></li><li><span style="font-family: georgia;">Event-driven (signups, abandonments etc.) user messaging (in Marketo based on user behavioral data from Analytics)</span></li><li><span style="font-family: georgia;">Cross-channel and cross-device personalization (via Target and Marketo based on onboarded data, user behavioral data from Analytics leveraging the device graph in Audience Manager)</span></li></ul><p></p><p><br /></p><h3><span style="font-family: georgia;">Prerequisites</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">Let's take a closer look at some of the prerequisites with this integration.</span></div><div><ul><li><span style="font-family: georgia;">An Adobe org admin can enable this integration by mapping the IMS org in Marketo (Admin section).</span></li><li><span style="font-family: georgia;">It is recommended to setup the cookie sync as early as possible between the Adobe Experience Cloud ID Service and Marketo's <a href="https://docs.marketo.com/display/public/DOCS/Add+Munchkin+Tracking+Code+to+Your+Website" target="_blank">munchkin.js</a> to ensure a higher match rate. The "cookie sync" happens automatically as long as long as both these scripts are present on the page.</span></li><li><span style="font-family: georgia;">The other important piece to keep in mind is that the munchkin cookie needs to match to a known lead with an email address via a hashed id on the website when users authenticate or submit a form or click on an email given that hashed emails IDs are sent to AAM. </span></li></ul></div><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;"><h3 style="font-family: Times;"><span style="font-family: georgia;">Architecture</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">This is a slightly detailed architecture diagram which shows the bi-directional integration between Marketo and Audience Manager and the general process is the same for Adobe Analytics and Target (currently it's only Marketo -> Target audience sharing). </span></div><div><ul style="text-align: left;"><li><span style="font-family: georgia;"><div><span style="font-family: georgia;">One thing to note in this architecture is that the Marketo to AAM integration is currently manual but the AAM->Marketo integration is automated where AAM audiences are refreshed in real-time with a backfill done every 24 hours. Step #4 is explained in more detailed in Marketo's official <a href="https://docs.marketo.com/display/public/DOCS/Send+a+List+to+Adobe+Experience+Cloud" target="_blank">documentation</a>.</span></div></span></li></ul><ul style="text-align: left;"><li><span style="font-family: georgia;"><div><span style="font-family: georgia;">Another thing to note is that in Marketo, there will be an option to either "Send to Experience Cloud" (hashed email ids) or "Sync from Experience Cloud Audience" (ECIDs) to send and receive segments respectively. For Target, it's currently a one-way sync from Marketo.</span></div></span></li></ul></div><div><span style="font-family: georgia;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVkMCxuBkyxQkr5WW9fickhVwPIH2FRNNlvd_d1XHDc9sQmSRsxYUoxL29UoVjZCbMFWaynP45Q-q3lxCl2fC23_xeHCIcIxzBY36pAZLLW9z-LJjlutmS-Owz5lNX-8WKVA-OYIW5-A/s1764/Screen+Shot+2020-10-24+at+2.37.02+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1330" data-original-width="1764" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVkMCxuBkyxQkr5WW9fickhVwPIH2FRNNlvd_d1XHDc9sQmSRsxYUoxL29UoVjZCbMFWaynP45Q-q3lxCl2fC23_xeHCIcIxzBY36pAZLLW9z-LJjlutmS-Owz5lNX-8WKVA-OYIW5-A/s1600/Screen+Shot+2020-10-24+at+2.37.02+PM.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div></div></span></div><h3 style="text-align: left;"><span style="font-family: georgia;">Other Facts</span></h3><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">Finally, let's take a quick look at some other interesting facts about the integration with Marketo:</span></div><ul style="text-align: left;"><li><span style="font-family: georgia;">Any email lead data from Marketo to Audience Manager must be hashed (handled automatically from Marketo if these are captured).</span></li><li><span style="font-family: georgia;">There is already an integration between AEM and Marketo where Marketo can receive assets from AEM to embed in emails. More information can be found <a href="https://docs.marketo.com/display/public/DOCS/Configuring+Adobe+Experience+Manager+Integration" target="_blank">here</a>.</span></li><li><span style="font-family: georgia;">An integration between <span>Ad Cloud, <span><span><a href="https://www.rohankapooronline.com/2020/04/overview-of-real-time-cdp.html" target="_blank">Real-Time CDP</a></span> </span></span>and Marketo is also possible. I have not worked with it directly but will share once I learn more.</span></li><li><span style="font-family: georgia;">This integration is not PHI compliant but can be used for any other customer not mandating PHI compliance.</span></li></ul><p></p><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: georgia;">Hope this gave you a general understanding of how this integration works. Feel free to share your use cases for this integration or let me know if you have any questions.</span></div>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-78394196753214114982020-08-23T19:06:00.003-07:002022-10-10T20:25:32.872-07:00AdobeDevBlog: Power Personalized Experiences with Project Firefly<span style="font-family: Georgia, Times New Roman, serif;">It's never been more important for organizations of all sizes to personalize their experiences for their customers and audiences, and AEM and Adobe Target are two stellar ways to do this. </span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br /></span>
<span style="font-family: Georgia, Times New Roman, serif;">Here's </span><span style="font-family: georgia, times new roman, serif;">a </span><a href="https://medium.com/adobetech/integrate-aem-target-personalized-experiences-project-firefly-6694058d5f88" style="font-family: georgia, "times new roman", serif;" target="_blank">link</a><span style="font-family: georgia, "times new roman", serif;"> to a post which I coauthored</span><span style="font-family: Georgia, Times New Roman, serif;"> to show how to use Project Firefly, our framework for building custom, cloud-native Adobe apps, to integrate AEM and Target in a separate UI to more easily achieve your personalization goals.</span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-54039141725619599892020-07-27T21:56:00.002-07:002020-11-14T13:33:11.115-08:00Comparison Between Adobe Analytics and Customer Journey Analytics<span style="font-family: "georgia" , "times new roman" , serif;">Adobe Analytics has long been the undisputed leader in the world of Web Analytics and is still a marquee product for analyzing web and mobile app data. It is the bread and butter for consultants and data analysts worldwide who work on enterprise level data. However, just like any enterprise level product, it does come with its share of challenges. I wrote some posts last year outlining some of these challenges. This <a href="https://www.rohankapooronline.com/2019/10/implications-of-classifications-in.html" target="_blank">post</a> lists a challenge we face while uploading classification data in Adobe Analytics and this <a href="https://www.rohankapooronline.com/2019/07/miscellaneous-facts-about-adobe.html" target="_blank">article</a> talks about the implication of uploading historical data (see point #3).</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">So, is there a solution that can make these challenges go away? YES there is and the solution to these challenges is <a href="https://www.adobe.com/experience-platform/customer-journey-analytics.html" target="_blank">Customer Journey Analytics</a>. Customer Journey Analytics or CJA is an enterprise wide analytics product that is built on Adobe Experience Platform. CJA allows us to join different data sources (online & offline) to give a complete view of our customers in real-time across channels. Please note that CJA is considered an add-on to Adobe Analytics, also available for Non-Platform (AEP) customers and works natively with Adobe Experience Platform.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">I</span><span style="font-family: "georgia" , "times new roman" , serif;">n this article, I'll compare Adobe Analytics with CJA based on a set of standard capabilities which are common between the two solutions and highlight some of the differences. The writeup is long but I've combined all the content in a single matrix at the end so <u>feel free to scroll down to view it in one tabular view</u>.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<h2>
<span style="font-family: "georgia" , "times new roman" , serif;">Adobe Analytics</span></h2>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">In this section, I've listed the various capabilities of Adobe Analytics and added a high level writeup explaining each of these separately. I've done the same for Customer Journey Analytics.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"></span><br />
<div>
<table align="left" cellpadding="0" cellspacing="0" hspace="0" vspace="0"><tbody>
<tr><td align="left" style="padding: 0in 9pt;" valign="top"><div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 14pt;">1.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Capture </span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> P</span></span><span style="font-family: "georgia" , serif;">rimarily takes place based on the AppMeasurement library (client-side-web), Mobile SDK (mobile app), <a href="https://helpx.adobe.com/analytics/kb/data-insertion-api-post-method-adobe-analytics.html" target="_blank">Data insertion API</a> and <a href="https://www.adobe.io/apis/experiencecloud/analytics/docs.html#!AdobeDocs/analytics-2.0-apis/master/bdia.md" target="_blank">Bulk Data Insertion API</a> (server-side).<span style="font-size: 13pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">2.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Usage</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new"; font-size: 10pt;">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data is stored in Report Suites usually setup to receive data globally or individually based on the requirement.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;"><a href="https://docs.adobe.com/help/en/analytics/components/virtual-report-suites/vrs-about.html" target="_blank">Virtual Report Suites (VRS)</a> can be created to “split” data based on web/mobile, region or Business group and can be setup based on custom session timeouts, expiration and time zones. </span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">3.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Reporting and Analysis</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new"; font-size: 10pt;">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data is visualized in Analysis Workspace or the legacy UI.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Workspace panel includes Freeform, Cohort, Fallout etc. options available to visualize data.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Calculated metrics can be created, and marketing channels can be used for further analysis.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Robust data export capabilities (PDF, CSV etc. formats) as well as access to raw data feeds.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Ability to setup alerts in case of anomalies.</span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<br /></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">4.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Identity</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";"><span style="font-size: 10pt;">o</span><span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span><span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Primarily based on cookies for client-side web tagging. <b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Based on ECID for mobile app (tied to each installed instance of the app).<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Customer IDs converted to ECID for server-side implementations in general.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Device graph data can be accessed via the <a href="https://docs.adobe.com/content/help/en/device-co-op/using/data/people.html" target="_blank">People metric</a> or leveraged via <a href="https://docs.adobe.com/content/help/en/analytics/components/cda/cda-home.html" target="_blank">Cross-Device Analytics</a>.</span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">5.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Segmentation</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";"><span style="font-size: 10pt;">o</span><span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span><span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Segmentation built into Analysis Workspace<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Visitor, Visit and Hit segment containers available.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Sequential segmentation and exclusion capabilities available to users.<span style="font-size: 13pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<br /></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">6.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Limitations</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Limited to 200 eVars/props and 1000 events.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">UI limited to 500K unique rows of data per month (Low Traffic).<span style="font-size: 13pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">7.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Classifications</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";"><span style="font-size: 10pt;">o</span><span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span><span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Classifications subject to the same restrictions as the UI in terms of only classifying the top 500K rows.<span style="font-size: 13pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">8.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Historical Data Ingestion</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";"><span style="font-size: 10pt;">o</span><span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> H</span></span><span style="font-family: "georgia" , serif;">istorical data sent in but out of order hits can affect the sequence of events and attribution of eVars and marketing channels.</span><b style="font-size: 12pt;"><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">9.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">User Permissions</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new"; font-size: 10pt;">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">User permissions are granted via the Admin Console at a more granular level for report suites etc. at a product profile level</span><span style="font-family: "georgia" , serif;">.</span><b style="font-size: 12pt;"><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoListParagraph" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">10.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Latency</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data can take up to 2 hours to be fully available in Adobe Analytics</span><span style="font-family: "georgia" , serif;">.</span><b style="font-size: 12pt;"><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
</td></tr>
</tbody></table>
</div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</div>
<h3>
<ol><ul>
</ul>
</ol>
</h3>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
<br />
<h2>
<span style="font-family: "georgia" , "times new roman" , serif;">Customer Journey Analytics</span></h2>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">In this section, I've put CJA through the same set of capabilities as I did for Adobe Analytics. Please note that there are some features that CJA lacks compared to Adobe Analytics which the product team is working on to add support for. Those are explained in more detailed <a href="https://docs.adobe.com/content/help/en/analytics-platform/using/cja-overview/cja-aa.html" target="_blank">here</a>.</span><br />
<h3>
<ol><ul>
</ul>
</ol>
<div style="font-size: medium; font-weight: 400;">
<table align="left" cellpadding="0" cellspacing="0" hspace="0" vspace="0"><tbody>
<tr><td align="left" style="padding: 0in 9pt;" valign="top"><div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">1.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Capture</span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data needs to be conformed to Adobe Experience Platform’s <a href="https://docs.adobe.com/content/help/en/experience-platform/xdm/home.html" target="_blank">XDM schema</a> to bring in any type of data.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Web SDK is used for real-time data streaming and streaming API will be available for sending data server-side.<b style="font-size: 13pt;"><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">2.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Usage</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new"; font-size: 10pt;">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data is stored in <span style="color: black;"><a href="https://docs.adobe.com/content/help/en/experience-platform/catalog/datasets/overview.html" target="_blank">datasets</a></span> created within Adobe Experience Platform and added to CJA as Connections.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;"><a href="https://docs.adobe.com/content/help/en/analytics-platform/using/cja-dataviews/configure-dataviews.html" target="_blank">Data Views</a> are similar to VRS which also allow us to define data based on the type of datasets being analyzed as well as setting custom session timeouts, expiration and defining separate time zones.<b style="font-size: 13pt;"><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">3.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Reporting and Analysis</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data in CJA is visualized in Analysis Workspace.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Workspace panel includes Freeform, Cohort, Fallout etc. options available to visualize data.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Calculated metrics can be created for further analysis, but marketing channel support is not available yet, but support is planned.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">No current ability to export data in CJA (Workspace) but support is planned. However, <a href="https://docs.adobe.com/content/help/en/experience-platform/query/home.html" target="_blank">Query Service</a> and Data Access API provides the ability to export data.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">No current ability to setup alerts but support is planned.<b style="font-size: 13pt;"><o:p></o:p></b></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">4.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Identity</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";"><span style="font-size: 10pt;">o</span><span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Tied directly to the Namespace defined within Adobe Experience Platform.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">ID can be based on anything be it cookies, CRM id, Loyalty ID or Phone number.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Custom namespaces can be defined.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data in the device graph is NOT available yet but support is planned.</span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">5.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Segmentation</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;"><a href="https://docs.adobe.com/content/help/en/analytics-platform/using/cja-components/cja-filters/filters-overview.html" target="_blank">Filters</a> built into Analysis Workspace.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Person, Session and Event segment containers available.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Leverages the same standard segmentation UI/features as Adobe Analytics.<span style="font-size: 13pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">6.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Limitations</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Unlimited metrics and dimensions and data in eVars/props is available in XDM format within CJA.<o:p></o:p></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Unlimited number of rows and unique values.<span style="font-size: 13pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">7.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Classifications</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Lookup Datasets created in Platform are not subject to any volume restrictions in terms of volume but there is a 1 GB limit which isn't </span><span style="font-family: "georgia" , serif; text-indent: -0.25in;">"enforced"</span><span style="font-family: "georgia" , serif; text-indent: -0.25in;">.</span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">8.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Historical Data Ingestion</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Any missing historical data can be uploaded into Adobe Experience Platform and then leveraged in CJA including support for out of order hits for a person.<span style="font-size: 13pt;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">9.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">User Permissions</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;"><span style="text-indent: -0.25in;"><span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span> </span><span style="font-family: georgia;"><span style="font-stretch: normal; line-height: normal;">Only p</span><span style="font-stretch: normal; line-height: normal;">roduct admins (not all users) can now perform granular tasks such as </span></span></span><span style="font-family: georgia; text-indent: -0.25in;">deleting, updating and sharing Workspace dashboards with other users</span><span face="Calibri, sans-serif" style="text-indent: -0.25in;">.</span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "georgia" , serif;"><br /></span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 0.5in; text-indent: -0.25in;">
<b><span style="font-family: "georgia" , serif; font-size: 13.5pt;">10.<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; font-weight: normal; line-height: normal;"> </span></span></b><b><span style="font-family: "georgia" , serif; font-size: 14pt;">Data Latency</span></b><b><span style="font-family: "georgia" , serif; font-size: 13.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<span style="font-family: "courier new";">o<span style="font-family: "times new roman"; font-stretch: normal; line-height: normal;"> </span></span><span style="font-family: "georgia" , serif;">Data isn’t available in near real-time can be take up to 2 hours, but real-time support is being looked into.</span></div>
<div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 12pt; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;">
<br /></div>
</td></tr>
</tbody></table>
</div>
</h3>
<h3>
<span style="font-size: small; font-weight: normal;"><span style="font-family: "georgia";"><br /></span></span></h3>
<h3>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "georgia" , "times new roman" , serif; font-size: small;"><span style="font-weight: 400;"><span style="font-size: 16px;">Here's the matrix which consolidates the capabilities compared above in a tabular format. Please note that I took a stab at also calling out which solution is (currently) better for a particular capability by adding a checkmark. If there's no checkmark, then it means that the two solutions are on par with each other or support is planned to add that feature to CJA by the product team.</span></span></span>
<span style="font-family: "georgia" , "times new roman" , serif; font-size: small;"><span style="font-weight: 400;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit-kp8fCDbfs5qSbn28wmBW48UxKcpb6HNEkOZ30bjwB4ubccGVY_v5qf6sWablPpaPPcv-jvNR2a-UmIRs86vo22bPYoQ9ddtd4Nb_-k2cZoYeiKge74gaG4o_yzVitWHkYpoXpHAwA/s1600/Screen+Shot+2020-11-14+at+1.30.24+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1678" data-original-width="1962" height="548" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit-kp8fCDbfs5qSbn28wmBW48UxKcpb6HNEkOZ30bjwB4ubccGVY_v5qf6sWablPpaPPcv-jvNR2a-UmIRs86vo22bPYoQ9ddtd4Nb_-k2cZoYeiKge74gaG4o_yzVitWHkYpoXpHAwA/s1600/Screen+Shot+2020-11-14+at+1.30.24+PM.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-size: 16px; font-weight: 400;">Hope this article provided you with some more information and context to figure out some similarities and differences between Adobe Analytics and Customer Journey Analytics. The key points to consider would be to see if you analyze large amount of dimensional data (</span></span><span style="font-family: "georgia" , "times new roman" , serif; font-size: 16px; font-weight: 400;">exceeding 500K unique rows per month), </span><span style="font-family: "georgia" , "times new roman" , serif; font-size: 16px; font-weight: 400;">often analyze customer data across multiple channels, need to add missing historical "hit level" data after the fact or connect offline data with online with the aim to get a single view of the customer, then you should seriously consider CJA.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-size: 16px; font-weight: 400;"><br /></span></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-size: 16px; font-weight: 400;">Are you in the process of considering this tool or have any further questions? Feel free to post them here.</span></span></div>
</h3>
</div>
Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com3tag:blogger.com,1999:blog-5636497578556115099.post-57081311325861334072020-07-25T18:52:00.002-07:002022-10-10T20:28:25.625-07:00AdobeDevBlog: Adobe Experience Platform Web SDK for Audience Manager<span style="font-family: Georgia, Times New Roman, serif;">With the new SDK for Adobe Audience Manager, website data has traditionally been collected from an object or data layer on the page, or Adobe Analytics has forwarded the data into Adobe Audience Manager’s server, using <a href="https://theblog.adobe.com/creating-adobe-experience-platform-pipeline-with-kafka/" target="_blank">Adobe Experience Platform Pipeline</a>. Then Adobe Experience Platform Launch will send all website event data to <a href="https://www.adobe.com/experience-platform/experience-platform-edge-network.html" target="_blank">Adobe Experience Platform’s Edge server</a> where it will be federated out to the different Adobe Experience Cloud products including Audience Manager.</span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br /></span>
<span style="font-family: Georgia, Times New Roman, serif;">I coauthored this post on Adobe's Medium Tech blog to explain how to route data to Adobe Audience Manager through the newly launched Adobe Experience Platform Web SDK. Here's a <a href="https://medium.com/adobetech/adobe-experience-platform-web-sdk-for-audience-management-751fa6d063bc" target="_blank">link</a> to it.</span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-11675395859646498752020-06-28T10:39:00.003-07:002022-10-10T20:27:58.099-07:00AdobeDevBlog: Exploring the Impacts to Adobe Analytics when Migrating to AEP Web SDK<span style="font-family: "georgia" , "times new roman" , serif;"></span><span style="font-family: "georgia" , "times new roman" , serif;"></span><span -0.063px="">Adobe</span><a class="by cv gw im gy gz" href="https://docs.adobe.com/content/help/en/experience-platform/edge/home.html" rel="noopener nofollow" style="-webkit-tap-highlight-color: transparent; background-image: url("data:image/svg+xml; background-position: 0px calc(1em + 1px); background-repeat: repeat-x; background-size: 1px 1px; box-sizing: inherit; http: //www.w3.org/2000/svg\"><line x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\" stroke=\"rgba(41, 41, 41, 1)\" /></svg>"); letter-spacing: -0.063px; text-decoration-line: none;" target="_blank"> Experience Platform Web SDK</a> is intended to replace the existing libraries across our various <a class="by cv gw im gy gz" href="https://www.adobe.com/experience-cloud.html" rel="noopener nofollow" style="-webkit-tap-highlight-color: transparent; background-image: url("data:image/svg+xml; background-position: 0px calc(1em + 1px); background-repeat: repeat-x; background-size: 1px 1px; box-sizing: inherit; http: //www.w3.org/2000/svg\"><line x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\" stroke=\"rgba(41, 41, 41, 1)\" /></svg>"); letter-spacing: -0.063px; text-decoration-line: none;" target="_blank">Adobe Experience C</a><a class="by cv gw im gy gz" href="https://www.adobe.com/experience-cloud.html" rel="noopener nofollow" style="-webkit-tap-highlight-color: transparent; background-image: url("data:image/svg+xml; background-position: 0px calc(1em + 1px); background-repeat: repeat-x; background-size: 1px 1px; box-sizing: inherit; http: //www.w3.org/2000/svg\"><line x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\" stroke=\"rgba(41, 41, 41, 1)\" /></svg>"); letter-spacing: -0.063px; text-decoration-line: none;" target="_blank">loud</a> <a class="by cv gw im gy gz" href="https://www.adobe.com/sea/experience-cloud/why-adobe.html" rel="noopener nofollow" style="-webkit-tap-highlight-color: transparent; background-image: url("data:image/svg+xml; background-position: 0px calc(1em + 1px); background-repeat: repeat-x; background-size: 1px 1px; box-sizing: inherit; http: //www.w3.org/2000/svg\"><line x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\" stroke=\"rgba(41, 41, 41, 1)\" /></svg>"); letter-spacing: -0.063px; text-decoration-line: none;" target="_blank">solutions</a> such as appMeasurement.js, at.js, dil.js, and visitorapi.js. The important difference is that a library was written from the ground up leveraging an updated schema via Adobe Experience Platform <a class="by cv gw im gy gz" href="https://www.adobe.com/experience-platform/experience-data-model.html" rel="noopener nofollow" style="-webkit-tap-highlight-color: transparent; background-image: url("data:image/svg+xml; background-position: 0px calc(1em + 1px); background-repeat: repeat-x; background-size: 1px 1px; box-sizing: inherit; http: //www.w3.org/2000/svg\"><line x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\" stroke=\"rgba(41, 41, 41, 1)\" /></svg>"); letter-spacing: -0.063px; text-decoration-line: none;" target="_blank">Experience Data Model (XDM)</a> to map and collect data agnostic of the solution the data is pushed into for further processing. <span style="color: #292929; font-family: "georgia" , "times new roman" , serif;"></span><span style="letter-spacing: -0.063px;">I coauthored this post on Adobe's Medium Tech blog to explain how to route data to Adobe Analytics through the newly launched Adobe Experience Platform Web SDK. Here's a <a href="https://medium.com/adobetech/adobe-experience-platform-web-sdk-migration-scenarios-for-adobe-analytics-91c255ec82b0" target="_blank">link</a> to it.</span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-88755985197208754772020-06-02T22:30:00.004-07:002022-10-10T20:26:40.230-07:00AdobeDevBlog: Adobe Experience Platform Web SDK Migration Scenarios<span style="font-family: "georgia" , "times new roman" , serif;">Adobe Experience Platform Web SDK consolidates solution-specific requests into a single payload for a seamless and much more simplified implementation. <span style="color: #292929; font-family: Georgia, "Times New Roman", serif; letter-spacing: -0.063px;">I coauthored this post on Adobe's Medium Tech blog</span> as part of a series of blogs we're going to write about migrating existing Adobe implementations to the newly launched Adobe Experience Platform Web SDK. Here's a <a href="https://medium.com/adobetech/unify-your-adobe-experience-platform-services-with-adobe-experience-platform-web-sdk-75cf6851a9fc" target="_blank">link</a> to it.</span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-55561839098346417712020-05-24T01:47:00.001-07:002020-05-28T00:44:06.913-07:00Visualizing Traffic on my Blog using R<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">I've been a data analyst in the past and one thing I can say for sure is that we don't have to be great analysts or statisticians to be able to read basics graphs and understand trends. Visuals are all around us whether it's stock market trends or data around the dreaded Covid-19 pandemic. By now, I'm sure all of us have heard about "flattening the curve". It literally took a pandemic for us to know what it means but the point I'm trying to make is that we are surrounded with data and people should ideally know how to understand it. I recently learnt the basics of R, which is a programming language mostly used in data analytics, </span><span style="font-family: "georgia" , "times new roman" , serif;">statistical analysis </span><span style="font-family: "georgia" , "times new roman" , serif;">and visualization. </span><span style="font-family: "georgia" , "times new roman" , serif;">R is a good language to learn for data analysts and statisticians which resonates really well with professions who know SQL. </span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In this post, I'll visualize traffic coming to my blog since 2017 (data captured in Google Analytics) and show some commonly used graphs and visualizations using <a href="https://rstudio.com/" target="_blank">R Studio</a>. The most obvious trend you'll see is traffic started gradually increasing on my blog since I started writing again in January-18 and has really spiked in the last few months. So, let's dive in!</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
</span><br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Basics of R</span></span></h3>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">As I explained earlier, R is a programming language used to analyze existing trends and also do predictive analytics using statistics. For the purposes of this article, I'm using R Studio to run basic R commands to create simple visuals such as bar graphs, line graphs and slightly more complex visuals such as bubble charts, word cloud and a map using some commonly used packages. </span></span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
</span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Data Frame</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">The first step before doing any analysis in R is data wrangling which is manipulation and transformation of data in a format which you can use for analysis. In R, we do the same thing by creating a data frame which is essentially a table that is populated typically by importing a .CSV file but other formats such as SPSS or Stata are also supported for advanced use cases. </span></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">A data frame contains rows and columns and can be compared to an Excel spreadsheet. The other thing to keep in mind is that it's okay to do some data transformation in the source file itself before bringing data into R but a lot of the manipulation is done directly in R itself. In my case, I modified the source .CSV files exported from Google Analytics for basic data formatting such as switching the metrics to Number format as an example. The command to bring data into R via a .CSV file is: </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<script src="https://gist.github.com/robbiekapoor/d921ecc7186cf45231d416eace5560af.js"></script>
<span style="font-family: "georgia" , "times new roman" , serif;">where df is the data frame, read.csv is the function which reads a .CSV file and stringsAsFactors = FALSE ensures that the data is not converted into a <a href="https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/factor" target="_blank">factor</a> to keep the source data format intact. The original file contained Page name and some common metrics such as Page views, Visits etc.</span></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Package</span></h4>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;">R packages are reusable code libraries that provide additional functionality to R and help simplify tasks. You can install packages using the install.packages() function and invoke them using the library(<libname>) function. In my case, I'm using the following packages:</libname></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;">library(ggplot2)</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">library(lubridate)</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">library(ggwordcloud)</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">library(maps)</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">library(dplyr) </span></li>
</ul>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Finally, before we take a look at the visuals, one other thing to note is that I did some basic data manipulation in R to convert the Month and Year using the <a href="https://www.rdocumentation.org/packages/lubridate/versions/1.7.8" target="_blank">lubridate</a> library by using the ymd() and mdy() functions. There are a lot other things that I can cover under basics but that's outside the scope of this post.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Visualizing Blog Traffic Trends</span></h3>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In this section, I've inserted the graphs created in R Studio which were saved as images. I've used the "ggplot2" package which is a very popular R library to visualize data. I'll admit that my blog does not get a ton of traffic but that is not my intent as I'm not into any competition to artificially inflate my traffic. My intent is to share what I know with others and document things for myself for future reference. Let's take a look at some of the trends.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Show Visits and Page Views for the Last 3 Years (Line)</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span><span style="font-family: "georgia" , "times new roman" , serif;">In this line graph, I've visualized Visits (called <a href="https://support.google.com/analytics/answer/1257084?hl=en" target="_blank">Sessions</a> in Google Analytics) and Page views for the last 3 years. </span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC_gbsrkXYPawRETQPPx1ZQu0R1OMsysrH4COTBH4zd-n36wkQAvrcnbxNhLzC9w22L4WNC9CrQ3Be-7hNEmf-FBTpnsrJz_uX_eqD1_urtkqJhG5TR9aCjeuF9aVLhmhz5BLX-IMV5w/s1600/00000c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="458" data-original-width="1600" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC_gbsrkXYPawRETQPPx1ZQu0R1OMsysrH4COTBH4zd-n36wkQAvrcnbxNhLzC9w22L4WNC9CrQ3Be-7hNEmf-FBTpnsrJz_uX_eqD1_urtkqJhG5TR9aCjeuF9aVLhmhz5BLX-IMV5w/s1600/00000c.png" width="640" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"></span>
</span><br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;">If you notice closely and look at the label I manually added, traffic started gradually increasing once I started writing again in early 2018. </span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">The biggest spike happened Thanks to my last <a href="https://www.rohankapooronline.com/2020/04/overview-of-real-time-cdp.html" target="_blank">post</a> about <a href="https://www.adobe.com/experience-platform/real-time-customer-data-platform.html" target="_blank">Real-Time CDP</a> which I wrote last month. This shows how much my readers want to consume content about the latest and greatest technology from Adobe and especially if it's around Adobe Experience Platform.</span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">I mentioned earlier that it's very common for analysts to modify the source data before bringing in the data in R which is what I did to generalize the page names by removing the month and year using the mid() function in Excel.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH_4boUBNbacq2G8D3ABN38ofpBqwOKl3O_Ft9EsK3ru6sp-NlOoFhEZc25pNOKfVZpSPsdJvOGjVr0sQb9wz3wNREiAiG4goVuOQDPGhCA5_5I5U_QEC7tOsI823n8nlYlmr-Vj3Iig/s1600/Screen+Shot+2020-05-23+at+2.13.31+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="433" data-original-width="1600" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH_4boUBNbacq2G8D3ABN38ofpBqwOKl3O_Ft9EsK3ru6sp-NlOoFhEZc25pNOKfVZpSPsdJvOGjVr0sQb9wz3wNREiAiG4goVuOQDPGhCA5_5I5U_QEC7tOsI823n8nlYlmr-Vj3Iig/s1600/Screen+Shot+2020-05-23+at+2.13.31+PM.png" width="640" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">As promised, here's the code sample to generate this visual. Please note that I created a separate data frame called 'dfl' which contained Month, Visits and Page views. Also, note that the file format is .rmd which is a format used to visualize R commands. </span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<script src="https://gist.github.com/robbiekapoor/f9fc039d55675e9ec4bf2412c09eba68.js"></script>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Top 10 Pages Visited from Jan-2017-Apr-2020 (Flipped Bar Graph)</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In this bar graph, I'm showing the top 10 page Visits by Page in the last 3 years. </span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHNEuXrtHeDNxLYXkHQpxmIb9OKSxSaQKs5xIuYzFoFajmrqyFI9LzY8LqqMeSEq1SIb789PjnbIpi6-6VW7vDma8cZGWFuhyh9VPJOxT0JkEthcK6w7TK04-X9Se03ZptcL_sh869vg/s1600/000003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="800" data-original-width="1600" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHNEuXrtHeDNxLYXkHQpxmIb9OKSxSaQKs5xIuYzFoFajmrqyFI9LzY8LqqMeSEq1SIb789PjnbIpi6-6VW7vDma8cZGWFuhyh9VPJOxT0JkEthcK6w7TK04-X9Se03ZptcL_sh869vg/s1600/000003.png" width="640" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;">The most popular page is the one I <a href="https://www.rohankapooronline.com/2008/01/funnel-drop-offabandonment-rate.html" target="_blank">wrote</a> to show the calculation of funnel drop off rate way back when I started blogging. This shows that there's still a sizable audience looking for calculation of basic metrics such as drop off rate as the traffic source of this page is primarily search engine.</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">The other popular pages is the homepage which may mean that people get sent directly to my homepage via search. Again, this is inclusive of the last 3 years worth of data so more analysis is needed to understand this fully which is outside the scope of this post.</span></li>
</ul>
<span style="font-family: "georgia" , "times new roman" , serif;">Below is the code I wrote.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<script src="https://gist.github.com/robbiekapoor/1d8452ab6cbfa87e28491afa28359c26.js"></script>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Top 10 Pages by Visits and Bo</span><span style="font-family: "georgia" , "times new roman" , serif;">unce Rate from </span></span><span style="font-family: "georgia" , "times new roman" , serif;">Jan-2017-Apr-2020 (Bubble Chart)</span></span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">In this chart, I show the top 10 pages (last 3 years) visualizing Visits and Bounce Rate. The color of the bubble is the page name and the size of the bubble is tied to Visits.</span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVlQgPRwPn5mV8Xs4NwK5084tXNAdu56JNuTDqUlEkoYj7dpsRBMhm8y9GxS2aTH2Kvion2KGAthZ1qOVEgUIhFy0fUDy6784qJIIoRr4_duGscKNq2hG1FQvnqm-KdhlGl5H6ry4RuA/s1600/00001e.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"></span></a></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5l7VGwUictRx_WEu20EkdbG9uVExMk1cMDFLiVDCXpOx8xClDDvF6dxzKMh42G7aj5QM0ibPY1tCWYVlq4dfZcxnLSZvbTflAY2-KFBOgP249ouG8e6Oqn2yC6a8SkUoUVxYLtKoGLQ/s1600/00001e.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1019" data-original-width="1600" height="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5l7VGwUictRx_WEu20EkdbG9uVExMk1cMDFLiVDCXpOx8xClDDvF6dxzKMh42G7aj5QM0ibPY1tCWYVlq4dfZcxnLSZvbTflAY2-KFBOgP249ouG8e6Oqn2yC6a8SkUoUVxYLtKoGLQ/s1600/00001e.png" width="640" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;">The most popular page name (drop off rate) has the highest Bounce Rate and Visits which shows that readers searching for drop off rate who come to my blog are MOSTLY interested in this type of content and nothing else.</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">The homepage ("/") has the lowest Bounce Rate of 66% which is obvious because users typically either search or click into a post which they came to read as opposed to just stay on the homepage.</span></li>
</ul>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Below is the code snippet.</span></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<script src="https://gist.github.com/robbiekapoor/84af955352945b1e16317f9094657c1f.js"></script>
</div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Top Traffic Sources from Jan-2017-April-2020 (Stacked Area Chart)</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In this chart, I visualize the top traffic source sending traffic to my blog for the last 3 years.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAEqWS66THyTdGIbKkzn_fQ7I5kO9xEtUfHLcLP_62D2ZH9bNJPr0wrrpXCU7TrKp2EjRVxhmOtcTBzVfv7UDAgDaaZAkOQ7YPhdwRi7hyphenhyphenpv0dEacWOjbHCr8DMWQTr9VK9r2nOdIE9w/s1600/00000d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="640" data-original-width="1600" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAEqWS66THyTdGIbKkzn_fQ7I5kO9xEtUfHLcLP_62D2ZH9bNJPr0wrrpXCU7TrKp2EjRVxhmOtcTBzVfv7UDAgDaaZAkOQ7YPhdwRi7hyphenhyphenpv0dEacWOjbHCr8DMWQTr9VK9r2nOdIE9w/s1600/00000d.png" width="640" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Organic search has traditionally been the top traffic source for my blog but the interesting thing is that a lot of visitors come directly to my blog by typing the URL which is very surprising to me unless they bookmark it.</span></span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Traffic via Social channels started appearing since I started sharing my blog posts on LinkedIn and Twitter from early 2018 which explains the trend.</span></span></li>
</ul>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Below is the code snippet.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<script src="https://gist.github.com/robbiekapoor/b9742e6cfa6990ab552de352df2270d5.js"></script>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Age and Gender Data Captured since late 2018 (Pie Chart and Bar Graph)</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"></span><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Now, this might be a bit surprising for some Adobe Analytics users to understand how Google Analytics captures demographic data. This is done by enabling the <a href="https://support.google.com/analytics/answer/2799357?hl=en" target="_blank">Demographics and Interests reports</a> in Google Analytics which uses data collected from IDFA and Google advertising cookies to help in retargeting. Again, none of this data shown here is even borderline PII so Google has taken into consideration all privacy regulations. It might be a good addition for Adobe Analytics if it can receive similar data from the Adobe Ad Cloud platform.</span></span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU-k0CkJ6PTeIGBj5xy00SP7UiLZXEYLV3tDzOGBjg33ECt9kLGYQFeI_ZMO7ULtRhDri_v3SL72kbTtKpVnME06pRxc2_EFnNff9EP9u8ALuk9gwcJ3LnQbmVxIbDu9lbI4NnUXrL2A/s1600/000005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1383" data-original-width="1528" height="577" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU-k0CkJ6PTeIGBj5xy00SP7UiLZXEYLV3tDzOGBjg33ECt9kLGYQFeI_ZMO7ULtRhDri_v3SL72kbTtKpVnME06pRxc2_EFnNff9EP9u8ALuk9gwcJ3LnQbmVxIbDu9lbI4NnUXrL2A/s1600/000005.png" width="640" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi73fJhjs2R1QkHf7cKJG-yXpPXr4G7eN78UEAgn85VaUtcZwmHv6VrIud-KlO01oOc8M6q7Uz74HSWQnCMJEfMlI3N8XkW_qSTr0Bc2stzGyps3-k6AWvkzIeRvYOPGRTZ7xXIB1myTg/s1600/000002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="929" data-original-width="929" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi73fJhjs2R1QkHf7cKJG-yXpPXr4G7eN78UEAgn85VaUtcZwmHv6VrIud-KlO01oOc8M6q7Uz74HSWQnCMJEfMlI3N8XkW_qSTr0Bc2stzGyps3-k6AWvkzIeRvYOPGRTZ7xXIB1myTg/s1600/000002.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVuQ8F970rC29NdlU6K0oAM95l4n4T8vYAPqAMlO2NLBwozlnJPUnb1K7JqT9GNX2dC3_rPx9tNRyiThcjvgw_EEkbYnYbV2arGlRaZRvtF60uetT36CE76R8_RQblMOffNy4Z4H9I1A/s1600/000008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjntd-yTkvZvXY1EJ8VJbZ0qtWFYjLLuIHaDPylDFHk3Brg0Ch4rVMEwd67MQ9s0Adyr6U0DbSUvz1Z7Iwo52XWLI7lv2YT_xtzu1cvBr-S88z8e8VgzyE_guUjKiUMvScvUr-3UJiKVw/s1600/000007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">There's not much to say here as these graphs are self-explanatory but I manually added the percentage (total is ~5500 Visitors) to show the breakdown of Gender in the Pie chart. The code snippet is show below.</span></span></span><br />
<br />
<script src="https://gist.github.com/robbiekapoor/ea8a1361933ebea5e05b4a628bd2dfa9.js"></script>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Word Cloud showing Internal Search Terms since early 2019</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Word cloud is a commonly used visual to show search terms or popular tags which people are looking at. I've imported the "</span><span style="font-family: "georgia" , "times new roman" , serif;">ggwordcloud" package to do this. </span></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjkPNN0dzA-6Kc_UzKgvkui4zm96nVEd93QX0rGA5zZo80odREvuRrIKwi6z_dE_lXVjuBgTjyQn1ET-S5kYUw7lLf7PZmGmGk0dOy8dTceovRFQQont3OzBHl9XAcFYXdZ4JFeBrKuQ/s1600/000004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="768" data-original-width="768" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjkPNN0dzA-6Kc_UzKgvkui4zm96nVEd93QX0rGA5zZo80odREvuRrIKwi6z_dE_lXVjuBgTjyQn1ET-S5kYUw7lLf7PZmGmGk0dOy8dTceovRFQQont3OzBHl9XAcFYXdZ4JFeBrKuQ/s1600/000004.png" width="640" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
</span><br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Given that I've written extensively about Adobe Audience Manager, it's not surprising that a lot of the search terms are tied to AAM.</span></span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">This also tells me what else I can write about based on what people are searching for.</span></span></li>
</ul>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Below is the code snippet.</span></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<script src="https://gist.github.com/robbiekapoor/e3f7f7ff242e34c25212ad3ce730f316.js"></script><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Map Showing Visitors by Country from Jan-2017-April-2020</span></h4>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Finally, this visual created using the "maps" and "viridisLite" (already available in R) packages shows which country is the most popular in terms of the total number of Visitors. As shown below, United States is the most popular followed up by India which are the two countries I'm associated with so I'm not surprised :)</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDRNnT7qx6aHjlkZov2CaGQ66A7C0TgDx3Yb9wMabps1-zqHdtTvyXz1PRwlLJk-wrcAqM48YJY0q0_F7cF-bQIRduKH503GL9w-lc8U_vLGN-M8hcp-3YAeudye33CqjJEypY03qW6w/s1600/00003b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="1067" data-original-width="1600" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDRNnT7qx6aHjlkZov2CaGQ66A7C0TgDx3Yb9wMabps1-zqHdtTvyXz1PRwlLJk-wrcAqM48YJY0q0_F7cF-bQIRduKH503GL9w-lc8U_vLGN-M8hcp-3YAeudye33CqjJEypY03qW6w/s1600/00003b.png" width="640" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Below is the code snippet for this.</span></span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<script src="https://gist.github.com/robbiekapoor/3aee71ab112f1716363582d346f1a39b.js"></script>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Adobe Experience Platform Data Science Workspace</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">One of the best things about Adobe Experience Platform is that it provides you the ability to run SQL queries and run ML algorithms or models directly on the data (in XDM format) in the tool which has never been the case in the past. This is super powerful and completely eliminates the additional time it would take to export the data and make it available in a platform outside of Adobe. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><a href="https://www.adobe.com/experience-platform/data-science-workspace.html" target="_blank">Data Science Workspace</a> integrates <a href="https://docs.adobe.com/content/help/en/experience-platform/data-science-workspace/jupyterlab/create-a-recipe.html" target="_blank">Jupyter notebooks</a> which is very popular open source application that allows you to run ML models, perform data visualization written in programming languages such as Python. The reason why I'm mentioning it in this post is because it can also run code written in R so theoretically everything that I showed you can work in Data Science Workspace but my understanding is that it requires the underlying data to be in XDM format. I haven't dabbled with it due to data access constraints but here's how you can access DSW and run R commands in case you have access.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitFy6-LdMjGK_d4RBu6p-9v9LyjJFdqwHJ5wEzND9qFbqYYkmuNouseny-Ki5i8cwgDYGt4kOtfnE2fhivO_OyRp2hC9-CRs22tA9Yqh7Ulit5-vOKbaUa5PN05DCkcVrTyf3c-1wiTw/s1600/Screen+Shot+2020-05-23+at+6.13.43+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="911" data-original-width="1600" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitFy6-LdMjGK_d4RBu6p-9v9LyjJFdqwHJ5wEzND9qFbqYYkmuNouseny-Ki5i8cwgDYGt4kOtfnE2fhivO_OyRp2hC9-CRs22tA9Yqh7Ulit5-vOKbaUa5PN05DCkcVrTyf3c-1wiTw/s1600/Screen+Shot+2020-05-23+at+6.13.43+PM.png" width="640" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOvAJ9q7zaBJK7M6V79b67LFlzI9pU-41ycCMucryzX1QlbMgPHh3hZtTLk_nOfnGL2g5R9roIn8DBFBur5akXkZZ7PaFvi-5NEFMHHDbB6KETG1rT3TsQXAUcPbEN0iCP0guPbzLgzA/s1600/Screen+Shot+2020-05-23+at+6.13.22+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="1182" data-original-width="1600" height="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOvAJ9q7zaBJK7M6V79b67LFlzI9pU-41ycCMucryzX1QlbMgPHh3hZtTLk_nOfnGL2g5R9roIn8DBFBur5akXkZZ7PaFvi-5NEFMHHDbB6KETG1rT3TsQXAUcPbEN0iCP0guPbzLgzA/s1600/Screen+Shot+2020-05-23+at+6.13.22+PM.png" width="640" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span><span style="font-family: "georgia" , "times new roman" , serif;">So that was it! Hope with this post, I piqued your curiosity about R and its data visualization capabilities.</span></span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-22224021604858355352020-05-08T15:39:00.005-07:002022-10-10T20:27:28.142-07:00AdobeDevBlog: Adobe I/O Architecture and Use Cases<span style="font-family: "georgia" , "times new roman" , serif;">Adobe I/O is a one-stop shop for developers, giving them everything they need to extend the capabilities of the Adobe tech ecosystem. I coauthored a post where we took a look under the hood at our I/O architecture, components, and all the dev tools and services available on I/O Runtime (Adobe's serverless platform), plus the different Adobe Experience Cloud use cases that I/O makes possible. Here's a <a href="https://medium.com/adobetech/getting-to-know-the-adobe-i-o-architecture-experience-cloud-use-cases-4c63a409ec8c" target="_blank">link</a> to Adobe's Medium Tech blog post I coauthored and below is the visual of the architecture.</span><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtbIJvWILOVARzqUccgnxVuOJuur1Snp18aJhC4eMFvRaYOkv6zHQOVji2xd10Ch29yeB7pCv5h9iIHNtvveyzSJy_hRxVBdDaPPbjTKscFVFMcbWDPUqWMxdFAqVTag3ZKjnS0D5v0Q/s1600/adobeio.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="583" data-original-width="800" height="466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtbIJvWILOVARzqUccgnxVuOJuur1Snp18aJhC4eMFvRaYOkv6zHQOVji2xd10Ch29yeB7pCv5h9iIHNtvveyzSJy_hRxVBdDaPPbjTKscFVFMcbWDPUqWMxdFAqVTag3ZKjnS0D5v0Q/s1600/adobeio.jpeg" width="640" /></a></div>
<br />
<pre style="text-align: left;"><span style="font-family: "georgia"; font-size: x-small;"><span style="background-color: white; color: rgba(0 , 0 , 0 , 0.9); font-family: , , , "segoe ui" , "roboto" , "helvetica neue" , "fira sans" , "ubuntu" , "oxygen" , "oxygen sans" , "cantarell" , "droid sans" , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol" , "lucida grande" , "helvetica" , "arial" , sans-serif; font-size: 14px;">
</span></span></pre>
</div>
Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-63875872665091556382020-04-26T08:59:00.003-07:002020-05-04T10:50:50.469-07:00Overview of Real-Time CDP<span style="font-family: "georgia" , "times new roman" , serif;">Companies are continuously innovating and coming up with new tools and technologies to enhance the experience of its customers. Optimizing and personalizing the experience of customers at every touchpoint needs to be the holy grail for all companies. I gave an <a href="https://www.rohankapooronline.com/2018/01/overview-of-data-management-platforms.html" target="_blank">overview</a> of a Data Management Platform a few years ago and have written a few article about Adobe Audience Manager since then. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In this post, I'll write about <a href="https://www.adobe.com/experience-platform/real-time-customer-data-platform.html" target="_blank">Real-Time Customer Data Platform</a> which is the activation engine and a service built on <a href="https://www.adobe.com/experience-platform.html" target="_blank">Adobe Experience Platform</a> and how it solves the ever evolving challenge of a consistent and personalized user experience. As you may be aware, Adobe Experience Platform is built with an API-first approach which makes integrating with other platforms easier and it also allows us to replicate what we can do in the UI via APIs as well.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">It's always helpful to start simple so I'll give a brief overview of what a Customer Data Platform is. T</span><span style="font-family: "georgia" , "times new roman" , serif;">here's a lot of documentation which compares a CDP to a DMP so I won't go into that in detail but will just focus on what a CDP is.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">According to <a href="https://en.wikipedia.org/wiki/Customer_data_platform" target="_blank">Wikipedia</a>, <i>"A customer data platform is a type of packaged software which creates a persistent, unified customer database that is accessible to other systems. Data is pulled from multiple sources, cleaned and combined to create a single customer profile. This structured data is then made available to other marketing systems".</i></span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">I define it as a system which consolidates known and anonymous customer information from multiple data sources to serve 1:1 real-time personalized experiences across multiple touch points and marketing channels in a privacy aware manner. Below is a visual overview of a CDP (taken from a 3rd party site). The diagram looks very similar to a DMP but a CDP differs with a DMP in the following ways:</span></span><br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;">The activation of both known (PII) and anonymous user data is possible in a CDP</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">Profiles have a much longer data retention period in a CDP</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">A complete customer profile (historical, demographic) is maintained in a CDP</span></li>
</ul>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzE9rZlL5s6xQ7-LLeYkUk64Z8TSdPM5vRbEIUB4qDqiFRfnFV8IXiUswv36VJ7f-V_1e8WxCVtOGem1qMgDwblHugK2Ng7Nw8hEEKd9-xFvN8EE2gcnDg5d8xSClvhKMurgHP1G1iuw/s1600/customer-data-platform.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="724" data-original-width="1287" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzE9rZlL5s6xQ7-LLeYkUk64Z8TSdPM5vRbEIUB4qDqiFRfnFV8IXiUswv36VJ7f-V_1e8WxCVtOGem1qMgDwblHugK2Ng7Nw8hEEKd9-xFvN8EE2gcnDg5d8xSClvhKMurgHP1G1iuw/s1600/customer-data-platform.png" width="400" /></a></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzT1UJg3PgApoyXSHiY3dUlDIDVW6cAwseTAaH11Fw5UskH-YNbt0Bg6kdaeLGozuALMIyR3NflG-OUPrg0i0lQhm30itq1oV2XXehY5QYvqROs5OU1xOp76dAFvruYoh0wsD-kcizAg/s1600/CDP.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"></span></a></div>
<div style="text-align: center;">
<span style="font-size: xx-small;"><span style="font-family: "georgia" , "times new roman" , serif; font-size: xx-small;"><span style="font-family: "georgia" , "times new roman" , serif;">Source: </span></span><a href="https://www.emailvendorselection.com/customer-data-platform-cdp-evolution-marketing-automation/">https://www.emailvendorselection.com/customer-data-platform-cdp-evolution-marketing-automation/</a></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><b>Core Elements of </b></span><b>Real-Time CDP</b></span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Below are some core components of the Real-Time CDP and how it relates to Adobe Experience Platform.</span></div>
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><b>XDM Schema & Datasets: </b>The XDM Schema describes the logical model of all data coming into Adobe Experience Platform and contains information about the identities used to build the id graph. Essentially, any data that will be activated by Real-Time CDP has to be mapped to the XDM schema format. Datasets are tied to a schema and collect data either sent either via streaming or batch format from various sources (E.g. Audience Manager, Analytics, 3rd party sources) into AEP. </span></li>
</ul>
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><b>Real-time Customer Profile: </b>The <a href="https://docs.adobe.com/content/help/en/experience-platform/profile/home.html" target="_blank">Real-time Customer Profile</a> is a combined view of all customer identities collected across multiple channels. I recently <a href="https://www.rohankapooronline.com/2020/03/overview-of-adobe-device-graph.html" target="_blank">wrote</a> about the device graph which creates a holistic view of the customer across multiple touch points. Real-Time CDP taps into the device/id graph to create a unified view of both the known and unknown customer profile on the fly depending on the use case.</span></li>
</ul>
<h4>
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><b>Real-Time Web Data Streaming: </b><span style="font-weight: normal;"><span style="font-family: "georgia" , "times new roman" , serif;">The introduction of the <a href="https://docs.adobe.com/content/help/en/experience-platform/edge/home.html" target="_blank">AEP Web SDK</a> has changed the dynamics of how Adobe data collection will happen moving forward. This essentially allows clients to send data directly to AEP in real-time as well as to Analytics, Audience Manager and Target from our website or mobile app. A lot of new content is being created on this which I'll share soon.</span></span></span></li>
</ul>
</h4>
<h4>
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><b>Real-Time Activation of Profiles: </b><span style="font-weight: normal;">Real-Time CDP allows us to send segments and PII profiles to external destinations quickly keeping in mind the rapid pace at how customers can interact with brands across multiple channels. </span></span></li>
</ul>
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Built With Privacy By Design: <span style="font-weight: normal;">All Adobe products including Real-Time CDP is built keeping privacy in mind. In case of the AEP UI, customers can use </span><span style="font-weight: 400;">Data Usage Labeling and Enforcement (DULE)</span><span style="font-weight: normal;"> labels to mark mark identities or restrict how data will be activated based on GDPR and other privacy laws. The official Adobe <a href="https://docs.adobe.com/content/help/en/experience-platform/data-governance/home.html" target="_blank">documentation</a> provides more details on this.</span></span></span></li>
</ul>
</h4>
<span style="font-family: "georgia" , "times new roman" , serif;">A lot more information can be found in the official Adobe <a href="https://www.adobe.com/experience-platform/real-time-customer-data-platform.html" target="_blank">documentation</a> in addition to what I've covered.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Adobe Solution Integration with Real-Time CDP</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Visuals always help so I created a quick high-level data flow diagram outlining how data flows into and outside of </span><span style="font-family: "georgia" , "times new roman" , serif;">AEP/Real-Time CDP</span><span style="font-family: "georgia" , "times new roman" , serif;"> from various Adobe solutions. Only the arrows coming into and flowing out of AEP/Real-Time CDP are colored and these connections can be enabled OOTB. The diagram should be self-explanatory but web data flows into AEP/Real-Time CDP via the AEP Web SDK/Adobe Analytics and 2nd/3rd party/other data flows into Real-Time CDP from Audience Manager. Data from Real-Time CDP can be shared with Adobe Campaign to personalize emails.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQDw_RVRrUYGfMIgEZHjhUXL-PeUjgYhAJLHK33QqmEXjXZG8PWU-96Sy9sVMYyZIJo9o9cQqpK70OX7tYNJi0oAeCmlcyfP5VNmh6dDKWT-xlo5RpJBkCeLb5DIHksOeWoxAF3s2Qag/s1600/Screen+Shot+2020-04-26+at+1.20.44+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"></span></a></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrwT8gWgz5VLm6qBUTdndmYDsTq8sfc4U_WDJhTyXxYY-qf5BOa3gaZC1d2ElL8tWKnn_Ju0EDmdxFtLiYLMb3u7X55ZKEOxH3FkyRUmdlK9Xh1zIgx_ykXfzY4q3dxrG3eA0e3cV92w/s1600/Screen+Shot+2020-05-04+at+10.48.34+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="903" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrwT8gWgz5VLm6qBUTdndmYDsTq8sfc4U_WDJhTyXxYY-qf5BOa3gaZC1d2ElL8tWKnn_Ju0EDmdxFtLiYLMb3u7X55ZKEOxH3FkyRUmdlK9Xh1zIgx_ykXfzY4q3dxrG3eA0e3cV92w/s1600/Screen+Shot+2020-05-04+at+10.48.34+AM.png" width="640" /></a></div>
<br /></div>
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Real-Time CDP UI Overview</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;">I'll now provide a high level overview of the Real-Time CDP UI but please be aware that these are likely to change as product is continuously making changes to optimize the user experience and add more enhancements.</span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span><span style="font-family: "georgia" , "times new roman" , serif;"><b>Profiles</b></span></span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">A profile is a collection of an individual or entity which can be used to uniquely identify it. In this screenshot, the profile is tied to the ECID identity but there can be additional identities for this profile such as email address, phone number to name a few. This is embedded within the Adobe Experience Platform UI.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMyQZSNv1A_NIpHz-8YbrcO36oes3bhEXawBJcJBFqZw8h0cP8wF9RM5zt_t_8RGyRWVd3jtGppX4_vLMCJLPDZ6Vf1sCLghT2LicCEW3FycAttprst8DPKwTHCzGj11kfvANlRE36kQ/s1600/Screen+Shot+2020-04-26+at+12.21.34+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="555" data-original-width="1600" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMyQZSNv1A_NIpHz-8YbrcO36oes3bhEXawBJcJBFqZw8h0cP8wF9RM5zt_t_8RGyRWVd3jtGppX4_vLMCJLPDZ6Vf1sCLghT2LicCEW3FycAttprst8DPKwTHCzGj11kfvANlRE36kQ/s1600/Screen+Shot+2020-04-26+at+12.21.34+AM.png" width="640" /></span></a></div>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><b><br /></b></span></div>
<div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><b>Segments</b></span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;">The segmentation UI for Real-Time CDP is the same interface which AEP uses and it looks very similar to the Segment Builder UI embedded in Adobe Analytics. Segments allow us to dissect very large amount of profiles into smaller and much more manageable chunks. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><b><br /></b></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRRhrFHlFVrgTuqIs0QKiiXKCOWnWn8aAWcVXRIsdTSqTVaAEXUe4IIIMIbjYZe8XoHkEd64-ierNFB77tM-O9BjTaeN-rixlsyowTuvqM_NSrc74uy5sPryGUecgUSwWwnvSA4btl_w/s1600/Screen+Shot+2020-04-26+at+12.18.54+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="613" data-original-width="1600" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRRhrFHlFVrgTuqIs0QKiiXKCOWnWn8aAWcVXRIsdTSqTVaAEXUe4IIIMIbjYZe8XoHkEd64-ierNFB77tM-O9BjTaeN-rixlsyowTuvqM_NSrc74uy5sPryGUecgUSwWwnvSA4btl_w/s1600/Screen+Shot+2020-04-26+at+12.18.54+AM.png" width="640" /></span></a></div>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><b><br /></b></span></div>
<div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><b>Identities</b></span></h4>
</div>
<span style="font-family: "georgia" , "times new roman" , serif;">
The identity page contains identity namespaces which contain unique information about a person. As shown below, an identity namespace can be Email, address Phone number, ECID etc. T</span><span style="font-family: "georgia" , "times new roman" , serif;">his is also embedded within the Adobe Experience Platform UI.</span><br />
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGQyooGA1xlPoC87BNBaEQo-sVDuk63W1wf-qqKtdovu9GOv7KhIEEBGHrRpvdZZE7LmUqi2Ev-QnAUkyfq8GWc9GDUpGy6IWrx5eA-6tZ80c8blXi7x0f8kk5gOBBjYYcjNZH5uwhlQ/s1600/Screen+Shot+2020-04-22+at+4.30.18+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="837" data-original-width="1600" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGQyooGA1xlPoC87BNBaEQo-sVDuk63W1wf-qqKtdovu9GOv7KhIEEBGHrRpvdZZE7LmUqi2Ev-QnAUkyfq8GWc9GDUpGy6IWrx5eA-6tZ80c8blXi7x0f8kk5gOBBjYYcjNZH5uwhlQ/s1600/Screen+Shot+2020-04-22+at+4.30.18+PM.png" width="640" /></span></a></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h4>
<b style="font-family: Georgia, "Times New Roman", serif;">Sources</b></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">The Sources->Catalog tab allows us to bring data into AEP/Real-Time CDP from various sources such as Adobe applications, CRM, Marketing automation to name a few. Data from these can be combined with each other and sent to various activation platforms. Again, t</span><span style="font-family: "georgia" , "times new roman" , serif;">his is also embedded within the Adobe Experience Platform UI.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAE8c72hvI2JJdgBgCEs1nTJQUkS-a6946HC0FQcwY1dWs4mgB-Ai1NXrIJr2DYRgQq2wPWX96q_1bYbwgLb5w9XCfJiQDfgTxIq24T-GNODUNJEwMsoTXi3w5A5E7yi3El8h4Y80yuw/s1600/Screen+Shot+2020-04-26+at+2.19.57+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="993" data-original-width="1600" height="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAE8c72hvI2JJdgBgCEs1nTJQUkS-a6946HC0FQcwY1dWs4mgB-Ai1NXrIJr2DYRgQq2wPWX96q_1bYbwgLb5w9XCfJiQDfgTxIq24T-GNODUNJEwMsoTXi3w5A5E7yi3El8h4Y80yuw/s1600/Screen+Shot+2020-04-26+at+2.19.57+AM.png" width="640" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><b>Destinations</b></span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">The Destinations->Catalog tab allows us to activate the audiences and share them with ESPs, marketing automation and advertising platforms. This is the core feature of Real-Time CDP which you won't see present in the regular AEP UI. There are two ways to send data via destinations:</span></span><br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Profile Export which allows us to export PII data to ESPs and other platforms. </span></span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">Segment Export (anonymous) which allows us to export profiles which qualified for a segment to Demand Side Platforms and is similar to how Audience Manager exports data to DSPs. </span></li>
</ul>
<span style="font-family: "georgia" , "times new roman" , serif;">This UI as shown below shows us the standard connections but also lets us connect to L</span><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">aunch</span> which allows us to forward raw signals captured in Launch using</span><span style="font-family: "georgia" , "times new roman" , serif;"> </span><a href="https://docs.adobe.com/content/help/en/experience-platform/rtcdp/destinations/destinations-cat/launch-extensions/experience-platform-launch-extensions.html" style="font-family: georgia, "times new roman", serif;" target="_blank">extensions</a> <span style="font-family: "georgia" , "times new roman" , serif;">t</span><span style="font-family: "georgia" , "times new roman" , serif;">o any 3rd party partner</span><span style="font-family: "georgia" , "times new roman" , serif;">.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMMesninRVoZEUTeUYO6fQgErOhiA4f72FS6TecDgNnnNUgdZtwcU5WJe-BccuZbXl5mEOBGqO_wovv6-0TWfccZOTDsbgOhOkmJnUo5roGO9Q_L3vAoEA0gHDIR1ZmdGzpp9_1m70hw/s1600/Screen+Shot+2020-04-19+at+8.16.56+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghZOoX7APJX3VvuhDpQBvX2fqLXoHEfcQmnc2TojadtR71gDOVfSflZwm7Zv9CrcXi84rKRA2TI3zz_EwE2ndhypKlo3ty4-P95c42owgwxIifJFE5-l95x_khmqVlTEA2IojWTZkNaQ/s1600/Screen+Shot+2020-04-26+at+2.28.03+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="992" data-original-width="1600" height="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghZOoX7APJX3VvuhDpQBvX2fqLXoHEfcQmnc2TojadtR71gDOVfSflZwm7Zv9CrcXi84rKRA2TI3zz_EwE2ndhypKlo3ty4-P95c42owgwxIifJFE5-l95x_khmqVlTEA2IojWTZkNaQ/s1600/Screen+Shot+2020-04-26+at+2.28.03+AM.png" width="640" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><b><br /></b></span></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">The following is a visual (representational) system view which shows how many profiles are connected to sources and are sent to a destination.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAe_4RhHkMAI9K1KvUT7gAfj1d-N3Bg4-5npZpFu5gSdZ3RQhqalJqevGK-D5LlbaTGIEpsCyeryIED5MiTUssIsE2eJWcaxrcIS9xcFU88dusa8X_Bs_3dxUJijKD0kxc3UOI2hklGw/s1600/Screen+Shot+2020-04-22+at+4.29.44+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="686" data-original-width="1600" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAe_4RhHkMAI9K1KvUT7gAfj1d-N3Bg4-5npZpFu5gSdZ3RQhqalJqevGK-D5LlbaTGIEpsCyeryIED5MiTUssIsE2eJWcaxrcIS9xcFU88dusa8X_Bs_3dxUJijKD0kxc3UOI2hklGw/s1600/Screen+Shot+2020-04-22+at+4.29.44+PM.png" width="640" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><b><br /></b></span><span style="font-family: "georgia" , "times new roman" , serif;">Finally, I want to emphasize that I've not heard anything about Adobe Audience Manager being impacted by Real-Time CDP as we s</span></span><span style="font-family: "georgia" , "times new roman" , serif;">till need AAM for 2nd and 3rd party data activation.</span><span style="font-family: "georgia" , "times new roman" , serif;"> Also, </span><span style="font-family: "georgia" , "times new roman" , serif;">Audience Manager has over 100 destinations whereas Real-Time CDP only has a few (currently) with connections to CRM, cloud providers and email systems but the list will only grow. I don't know about the overall product vision around the total numbers destinations and AAM in general but I'm sure our product team will clarify that.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">So, that was it! I'm sure I've left out other finer details about Real-Time CDP but this tool is continuing to evolve and will only get better as its adoption increases.</span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com2tag:blogger.com,1999:blog-5636497578556115099.post-52260903245030707262020-03-09T18:45:00.002-07:002020-08-23T18:39:35.133-07:00Overview of Adobe Device Graph<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">We are surrounded by all kinds of (regular and smart) devices. It's either a Laptop, Tablet, Smart Phone, Smart Watch, Smart TV, Smart Vacuum, </span><span style="font-family: "georgia" , "times new roman" , serif;">Smart Plug, </span><span style="font-family: "georgia" , "times new roman" , serif;">Nest Thermostat, Wifi Camera or Chromecast to name a few. However, not all of these devices</span><span style="font-family: "georgia" , "times new roman" , serif;"> are truly connected due to many factors with one being that not all devices may belong to one single company in a household but the most obvious one is the lack of a true user "Identity". The other issue we face is that it's really difficult to track users and attribute an action across all these devices consistently. Google does this well with Google Home where it's able to sync my Nest thermostat with Chromecast using my Gmail ID. The other company is </span></span><span style="font-family: "georgia" , "times new roman" , serif;">obviously</span><span style="font-family: "georgia" , "times new roman" , serif;"> </span><span style="font-family: "georgia" , "times new roman" , serif;">Adobe ;)</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">By 2030, Americans will own as many as 15 connected </span><a href="https://www.martechadvisor.com/articles/iot/by-2030-each-person-will-own-15-connected-devices-heres-what-that-means-for-your-business-and-content/" target="_blank">devices</a><span style="font-family: "georgia" , "times new roman" , serif;">. While we're not fully there yet, the introduction of new devices every year might expedite that trend. In 2016, Adobe's coined the phrase "Devices don't buy products, people do" which is still very relevant in 2020 and will be in the future. So how does Adobe establish the link between multiple devices to one person? In this post, I'll provide an overview of the various ways by which Adobe is able to link multiple devices to a person or household.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
</span><br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Concept of a Device Graph</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">According to this <a href="https://digiday.com/uk/wtf-device-graph/" target="_blank">article</a>, "<i>A device graph, also known as “identity management,” is a map that links an individual to all the devices they use, which could be a person’s computer at work, laptop at home, tablet and smartphone</i>". I'd like to add other smart devices to this list but the most common use cases for cross device analytics we see today are still around mobile, desktop and tablet but there's continuous innovation happening to bring different types of devices into the mix. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"></span></span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Probabilistic and Deterministic Linking</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">The Adobe device graph comprises of multiple devices linked together via two methods namely deterministic and probabilistic. This Adobe <a href="ttps://docs.adobe.com/content/help/en/device-co-op/using/device-graph/links.html" target="_blank">article</a> explains this concept really well but at a high level, <b>probabilistic</b> device link allows us to predict a person's identity (John Doe in our case) based on IP address, operating system etc. and <b>deterministic</b> device link allows us to identify a person based on their encrypted user ID captured on the website <a href="https://docs.adobe.com/content/help/en/id-service/using/reference/authenticated-state.html" target="_blank">sent</a> over to the Experience Cloud ID Service across devices. Please note that this matching and attribution happens </span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">The visual below is my attempt to explain the device graph at a high level where John Doe visits a website or mobile app using his iPhone, iPad and Mac. There are prettier visuals available in the Adobe documentation but I just wanted to create something simple to convey the concept.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Oxbj6cr11O519DwiVvEamFoEwMrybCk3W557Xj1wYETVtFiP_M91lyViOE5vBfT1sh5IFaX_lr2mkBligENVSt1LV556-pLxIDFUjAQwSNbALIxbfZ75sFeKvuc5y_mBk3qLQ9ORow/s1600/Screen+Shot+2020-03-08+at+6.10.40+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="1380" data-original-width="1352" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Oxbj6cr11O519DwiVvEamFoEwMrybCk3W557Xj1wYETVtFiP_M91lyViOE5vBfT1sh5IFaX_lr2mkBligENVSt1LV556-pLxIDFUjAQwSNbALIxbfZ75sFeKvuc5y_mBk3qLQ9ORow/s1600/Screen+Shot+2020-03-08+at+6.10.40+PM.png" width="391" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div style="text-align: center;">
<h3 style="text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></h3>
<h3 style="text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;">Types of Device Graphs</span></h3>
</div>
<div style="text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">There are primarily two types of device graphs which Adobe supports and these are ways by which you can create a true identity of your customers across multiple devices and sites. There's also an external graph option as well which allows companies to leverage 3rd party device graph data which is explained in detail <a href="https://docs.adobe.com/content/help/en/audience-manager/user-guide/features/profile-merge-rules/external-graph-use-cases.html" target="_blank">here</a> but it's not in scope for this post.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Device Co-Op</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">The <a href="https://docs.adobe.com/content/help/en/device-co-op/using/about/overview.html" target="_blank">Device Co-Op</a> (available in US and Canada) allows companies to participate in a device graph which allows them to identify their "linked" customer devices (at a person and household level) across a magnitude of channels and websites in near real-time. The last time I heard about the scale of the Co-op, there were 100+ companies, about 300 Million users and 2 billion devices part of the Co-op device graph but this number is obviously higher now. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9HlPgUKsmsbChM63P2qZ5xIrXL7fD7IyCkiVEM0Wg3Bf9BGIDnupRZjEolqxwNdoW8MIZin-q5RSEXTz6sZh9B07KYDIFID58CbiQhv8Ndpp5vpDNWpqTLbGMPs3FoKsIWgeRYv_9Ig/s1600/Screen+Shot+2020-03-08+at+6.28.23+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="746" data-original-width="1384" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9HlPgUKsmsbChM63P2qZ5xIrXL7fD7IyCkiVEM0Wg3Bf9BGIDnupRZjEolqxwNdoW8MIZin-q5RSEXTz6sZh9B07KYDIFID58CbiQhv8Ndpp5vpDNWpqTLbGMPs3FoKsIWgeRYv_9Ig/s1600/Screen+Shot+2020-03-08+at+6.28.23+PM.png" width="400" /></span></a></div>
<div style="text-align: center;">
<span style="font-family: "georgia" , "times new roman" , serif; font-size: xx-small;">Source: <a href="https://theblog.adobe.com/cross-device-marketing-three-tips-success/" style="text-align: left;">https://theblog.adobe.com/cross-device-marketing-three-tips-success/</a></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">The concept of the Co-op can be better understood based on the visual (above) taken from the Adobe <a href="https://theblog.adobe.com/cross-device-marketing-three-tips-success/" target="_blank">blog</a>: </span></span><br />
<br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">A customer John Doe visits the travel website and authenticates on </span>both his mobile device and laptop. </span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">He then goes to a retail website but doesn't authenticate so the retailer doesn't know who this customer is.</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">Device co-op enables the retail website to "link" the customer's devices assuming both websites (companies) participate in the Device Co-op and identifies the anonymous user as John Doe. </span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">This in turn allows both companies to personalize the experience for this customer on both devices and websites. As you can see, the Device Co-op makes use of both the probabilistic and deterministic linking methods.</span></li>
</ul>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In contrast, if these companies didn't participate in the Co-op, then the retail company wouldn't be able to know what all devices did its customers use before purchasing something and treat it as 2 unique visitors instead of 1.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Below are some common use cases of the Device Co-op:</span><br />
<br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;">If you want to access to a large pool of users for prospecting related use cases.</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">If you want to perform frequency capping across devices.</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">Some other use cases are covered <a href="https://docs.adobe.com/content/help/en/device-co-op/using/about/overview.html" target="_blank">here</a>.</span></li>
</ul>
<br />
<span style="font-family: "georgia" , "times new roman" , serif;">Here's a <a href="https://docs.adobe.com/content/help/en/device-co-op/using/about/requirements.html" target="_blank">link</a> to a document which covers the membership and eligibility criteria for companies to participate in the Device Co-op. One other requirement of the Device Co-op is for the company to make changes to its privacy policy so it takes into account all the necessary privacy requirements and it does not collect any kind of PII or behavioral data. You can view your all your devices linked to the Co-op <a href="https://cross-device-privacy.adobe.com/?d_rd=1&d_mid=12069962477727380842368745523580390251&d_orgid=9E1005A551ED61CA0A490D45@AdobeOrg#companies" target="_blank">here</a> and can unlink your devices from it anytime.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Private Device Graph</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"></span><span style="font-family: "georgia" , "times new roman" , serif;">The Private Graph is another way for a company to link their customer devices in a device graph but visible and accessible only for their own organization and not any other company. </span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Using the previous example, if we just look at the travel website alone we can treat it as a participant of the private graph as the data will simply be available within the context of that company. Private Device graph primarily makes use of the deterministic link as it works best if encrypted user ids are captured. Probabilistic matching will also be available to Private Graph sometime this year. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Below are some use cases of the Private Device Graph:</span><br />
<br />
<ul>
<li><span style="font-family: "georgia" , "times new roman" , serif;">If you want to reconcile user identities across multiple devices into one.</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">If you want to perform frequency capping across devices thereby optimizing ad spend.</span></li>
<li><span style="font-family: "georgia" , "times new roman" , serif;">If you want to establish a common identity across online and offline channels.</span></li>
</ul>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In order to participate for the Private Graph, the customer must be on Analytics Ultimate or have Audience Manager or have Target Premium and also be an Adobe Experience Platform customer. If you qualify for this as a client, subscribing to this should be a no-brainer for you given that no privacy policy updates need to take place. However, Device Co-op does give you access to a much larger amount of users which you wouldn't get with a Private Graph so you'll have to weigh your options on which one to choose.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Device Graph and Adobe Experience Cloud Solutions</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">In this section, I'll cover how to leverage some of the Adobe solutions I've used in conjunction with Device Co-op. Please note that I've only used Adobe Analytics and Audience Manager for customers participating in Co-op but there are use cases pertinent to Adobe Experience Platform, Adobe Target and Ad Cloud as well.</span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Adobe Analytics</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Device Co-op is a natural fit for Adobe Analytics given the availability of the "People" metric which deduplicates the user count tied to multiple device and provides a true representation of a user as opposed to a device. This was introduced back in 2017 so it's been around for a while now and you can find more information about it <a href="https://docs.adobe.com/content/help/en/device-co-op/using/data/people.html" target="_blank">here</a>. Below is an example of what this looks like in a sample taken from the Adobe documentation.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxvpGB80ElKDr9MCtP8BlbDiI7V7VgWsnQx-oEOTFXoQ052vD4JWJcc0LB1YCOpx27Ub7g7BFCx_TABFddSnIm9WgJ8i0q8j0imtkIJywQIbt51O29esw1fAUDW2QmjhIeg8g3Zi56Q/s1600/Screen+Shot+2020-03-09+at+9.04.50+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="714" data-original-width="1354" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxvpGB80ElKDr9MCtP8BlbDiI7V7VgWsnQx-oEOTFXoQ052vD4JWJcc0LB1YCOpx27Ub7g7BFCx_TABFddSnIm9WgJ8i0q8j0imtkIJywQIbt51O29esw1fAUDW2QmjhIeg8g3Zi56Q/s1600/Screen+Shot+2020-03-09+at+9.04.50+AM.png" width="400" /></a></div>
<div style="text-align: center;">
<span style="font-size: xx-small;"><span style="font-family: "georgia" , "times new roman" , serif;">Source: </span><a href="https://docs.adobe.com/content/help/en/device-co-op/using/data/people.html">https://docs.adobe.com/content/help/en/device-co-op/using/data/people.html</a></span></div>
</div>
<span style="font-family: "georgia" , "times new roman" , serif; font-weight: normal;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif; font-weight: normal;">The other service you can leverage (I've not used it yet) is <a href="https://docs.adobe.com/content/help/en/analytics/components/cda/cda-home.html" target="_blank">Cross Device Analytics</a> (CDA) which allows you to analyze cross device behavior in Analysis Workspace using Adobe Analytics data (needs a cross device report suite). This is not a default service and all the details and eligibility requirements are included in this Adobe Spark <a href="https://spark.adobe.com/page/8ZpjsX6Lp5XTM/" target="_blank">page</a>.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif; font-weight: normal;"><br /></span>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Audience Manager</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">If you are a member of the Co-op and use Audience Manager, you get a lot of benefits primarily around prospecting and cross device frequency capping in offsite marketing. The first thing to do is to setup your Profile Merge Rule similar to how it's shown in the screenshot below taken from Adobe's documentation. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">The other thing which is very consistent with the screenshot is that your Co-op devices per Person count should be lower than the Person count of other data sources. Finally, you should expect to see a much larger count of users (potential reach) in the Co-op Person number compared to any other data source.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihPgSBHIIrDnzDloix8giPcX1JCJX4UiWzbKC0l8mEZ7ULHz0VTEUtJiw_7yG-mEL6VN9DGpaVUQ7nqKxkHhA_NRD5vQ9DwUBzi1jGKb7WofmwG8UuTFIU-KwMAniX5vyQWdAZjhbWyw/s1600/profile-link-graph.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="791" data-original-width="1600" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihPgSBHIIrDnzDloix8giPcX1JCJX4UiWzbKC0l8mEZ7ULHz0VTEUtJiw_7yG-mEL6VN9DGpaVUQ7nqKxkHhA_NRD5vQ9DwUBzi1jGKb7WofmwG8UuTFIU-KwMAniX5vyQWdAZjhbWyw/s1600/profile-link-graph.png" width="400" /></a></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div style="text-align: center;">
<span style="font-size: xx-small;"><span style="font-family: "georgia" , "times new roman" , serif;">Source: </span><a href="https://docs.adobe.com/content/help/en/audience-manager/user-guide/features/profile-merge-rules/profile-link-metrics.html">https://docs.adobe.com/content/help/en/audience-manager/user-guide/features/profile-merge-rules/profile-link-metrics.html</a></span></div>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Adobe Experience Platform, Adobe Target, Ad Cloud</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Device Co-op also provides additional capabilities to Adobe Experience Platform for id stitching, Adobe Target for personalizing experiences across devices and to Ad Cloud for media uses cases around retargeting across devices. I haven't personally leveraged Co-op for <a href="https://docs.adobe.com/content/help/en/platform-learn/tutorials/identities/understanding-identity-and-identity-graphs.html" target="_blank">AEP</a>, <a href="https://docs.adobe.com/content/help/en/device-co-op/using/data/target.html" target="_blank">Target</a> and Ad Cloud so I'm unable to provide any additional context as I don't have much exposure to these three in the context of Device Co-op.</span><br />
<br /></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">So, that was a high level overview of the Device Graph but I'll be writing more about it as I learn more about how it's used with other solutions of the Adobe Experience Cloud stack. Please feel free to share your feedback!</span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-58415300501264189282020-02-08T21:48:00.000-08:002020-03-08T14:36:20.340-07:00Review Adobe Experience Cloud ID Cookies on Google Chrome 80<span style="font-family: "georgia" , "times new roman" , serif;">Web Browser Cookies have long been the lifeblood of the digital marketing ecosystem. A cookie is a tiny text file used by a web browser that typically captures non-intrusive information about a browser (indirectly a user) such as logged in state, user preferences and anonymized or encrypted ids etc. A cookie allows companies to measure browsing patterns (pages visited, products bought), remembering products added to a shopping cart or simply personalizing user experiences that match previous patterns and behaviors. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">As of December 2019, Google Chrome was the most popular web browser with a market share of <a href="https://www.statista.com/statistics/544400/market-share-of-internet-browsers-desktop/" target="_blank">69%</a>. Google recently <a href="https://blog.chromium.org/2019/10/developers-get-ready-for-new.html" target="_blank">released</a> their newest Chrome browser version 80 which introduced clear guidelines around how cookies need to be set moving forward keeping in mind privacy regulations such as GDPR and CCPA. As an example, Safari now completely blocks 3rd party cookies from being set. Given that Google has advertising platforms which primarily leverage 3rd party cookies, there are still a few years left before Google completely phases out 3rd party cookies by 2022 which means we don't have a lot of time left. So, what does it mean for companies like Adobe which also rely on cookies for measuring user behavior using 1st party cookies and activating anonymous profiles on publishers using 3rd party cookies in the interim?</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In this post, I will review changes made by the Adobe Identity Service team to address cookie setting requirements in Google Chrome 80. I will refer to this <a href="https://medium.com/adobetech/adobe-experience-cloud-cookie-updates-for-google-chrome-19ad67cf1598" target="_blank">article</a> written by the Adobe Identity service team and validate changes made by Adobe primarily around the Experience Cloud ID Service cookies. So let's dive in!</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">What is all the Fuss About?</span></h3>
<div>
<br /></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Here, I'll cover exactly was has been changed by Chrome 80 and I've made a simple decision tree to depict what the change is in regards to the new cookie guidelines. At a high level, 3rd party cookies need to be secure with a <a href="https://web.dev/samesite-cookies-explained/" target="_blank">SameSite</a> attribute equal to "None". On the other hand, cookies without a SameSite attribute will default to "lax". </span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjro9lHozknls1YJI3ZFzOgEQThrRVXJ9ouWGRYryzPG2t1hnYisOCpPYMKjTJGTxFePhqLCf9FYmEXqoDIjazk-69JknqXNqv4sEdW8Sr7YarpT1ShJe6HxHMnb_PLRw0DjtrCtWzkag/s1600/Screen+Shot+2020-02-08+at+8.27.58+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="817" data-original-width="1600" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjro9lHozknls1YJI3ZFzOgEQThrRVXJ9ouWGRYryzPG2t1hnYisOCpPYMKjTJGTxFePhqLCf9FYmEXqoDIjazk-69JknqXNqv4sEdW8Sr7YarpT1ShJe6HxHMnb_PLRw0DjtrCtWzkag/s1600/Screen+Shot+2020-02-08+at+8.27.58+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
</div>
<span style="font-family: "georgia" , "times new roman" , serif;">In the next two sections, I'll do a quick pre/post comparison between Chrome 79 and Chrome 80 and review the Experience Cloud demdex cookie set in both versions.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">The World Before Google Chrome 80</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">I'm first looking at Chrome version 79 and I've visited an Adobe customer website using the Experience Cloud Visitor ID Service.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1F2S74aWQmjK25oQqe82qNxGNZ9xsKFqcLJ5cjYwgSbCwnNIBAv-p4ZVHlVQZiqKX8aHnOfCAt2G1E9ZwaphXIxdNscNLQOWLtIK5BSlifNqoIinO926DgrdKEcfxqhDi9iOFuWqq4g/s1600/Screen+Shot+2020-01-30+at+7.45.20+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="678" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1F2S74aWQmjK25oQqe82qNxGNZ9xsKFqcLJ5cjYwgSbCwnNIBAv-p4ZVHlVQZiqKX8aHnOfCAt2G1E9ZwaphXIxdNscNLQOWLtIK5BSlifNqoIinO926DgrdKEcfxqhDi9iOFuWqq4g/s1600/Screen+Shot+2020-01-30+at+7.45.20+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;">I'll primarily focus on the <a href="https://docs.adobe.com/content/help/en/core-services/interface/ec-cookies/cookies-am.html" target="_blank">demdex</a> which is our 3rd party cookie that is most susceptible to deletion after this change. I previously <a href="https://www.rohankapooronline.com/2018/05/migrate-legacy-adobe-visitor-id-to_6.html" target="_blank">wrote</a> about migrating to the Visitor ID service where I've covered some of the cookies set by the ID service in more detail. </span><span style="font-family: "georgia" , "times new roman" , serif;">The first thing we see is an error in the developer console specifically calling out the demdex cookie and stating that it's set without the SameSite flag.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3GKDe7RsVPM1DaVu1WmqWzWEG9XS4CqoZTrocYPX2_YaSk1wddmFWUx4IaNBSkMzNhw53KohSXgsFGDwhi2nd5uvYy-et7U7RRNpM9UaQYvavTwrAqm7x0X02eZK_0i1V3Il7TqMpyA/s1600/Screen+Shot+2020-02-08+at+8.38.16+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="270" data-original-width="1600" height="67" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3GKDe7RsVPM1DaVu1WmqWzWEG9XS4CqoZTrocYPX2_YaSk1wddmFWUx4IaNBSkMzNhw53KohSXgsFGDwhi2nd5uvYy-et7U7RRNpM9UaQYvavTwrAqm7x0X02eZK_0i1V3Il7TqMpyA/s1600/Screen+Shot+2020-02-08+at+8.38.16+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">The World After Google Chrome 80</span></h3>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;">In this section, I will show how the Google Chrome error for demdex went away after I updated my browser version and look at the site customer website in incognito mode.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQlJXaQNzaaKQjzeNa6r-VL4S_ljoa5dwhPE4AcIJCzFP2atR8hlNhJM8w0hgGjQpgH-qGV_Ip2wXbfPOYm_YIf0pzSEQkA9PJloB-z7q10SfDv14_bcHVubiQu97xko0PxrBStUxWsw/s1600/Screen+Shot+2020-02-06+at+7.53.08+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="252" data-original-width="630" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQlJXaQNzaaKQjzeNa6r-VL4S_ljoa5dwhPE4AcIJCzFP2atR8hlNhJM8w0hgGjQpgH-qGV_Ip2wXbfPOYm_YIf0pzSEQkA9PJloB-z7q10SfDv14_bcHVubiQu97xko0PxrBStUxWsw/s1600/Screen+Shot+2020-02-06+at+7.53.08+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;">Looking at what the developer console shows for the same customer website, </span><span style="font-family: "georgia" , "times new roman" , serif;">we can see that the change was made by the Adobe ID Service (demdex) server side and the error went away. Please note that it DID NOT require a Visitor ID service version upgrade as the change was made server side. Having said that, it's always advisable to upgrade your ID service library to the latest version.</span><span style="font-family: "georgia" , "times new roman" , serif;"> </span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_B8YrNgdBQxNS4Qn4vOG_OnhyaagXnwwjMgHcyocIxxCIQZhCAFu-vr0RrRiDi6gr_bbp7olrEqnWpwzqc3pJiWrZ5jxCXNPzqoLE0ovhdY9EYG-0rUr9fNsbQDv2dPOJRyUmPKcWMw/s1600/tcorrect+setting+for+demdex-+180+day+ttl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="135" data-original-width="1600" height="32" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_B8YrNgdBQxNS4Qn4vOG_OnhyaagXnwwjMgHcyocIxxCIQZhCAFu-vr0RrRiDi6gr_bbp7olrEqnWpwzqc3pJiWrZ5jxCXNPzqoLE0ovhdY9EYG-0rUr9fNsbQDv2dPOJRyUmPKcWMw/s1600/tcorrect+setting+for+demdex-+180+day+ttl.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;">Now looking at how the demdex cookie is now set as shown by Chrome 80, we can see that the cookie has both the SameSite=None and Secure values set with a TTL expiration of 6 months.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyC-7YUzOVMt7NhgZvPCoQc7zrsuWPcaPTsJK4_j9k665SDvFZ5ONxXhM5mk3v4ErMza9AKVnyXCgNAKbWycnmJgQpQG6guLe2mVa7hQ9qYSpyJ0ExL_EUlhL1L55Yg8uKsZWxuEry3w/s1600/Screen+Shot+2020-02-08+at+8.50.14+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="69" data-original-width="1600" height="16" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyC-7YUzOVMt7NhgZvPCoQc7zrsuWPcaPTsJK4_j9k665SDvFZ5ONxXhM5mk3v4ErMza9AKVnyXCgNAKbWycnmJgQpQG6guLe2mVa7hQ9qYSpyJ0ExL_EUlhL1L55Yg8uKsZWxuEry3w/s1600/Screen+Shot+2020-02-08+at+8.50.14+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h3 style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;">What is the Recommendation for 1st Party Cookies on Safari?</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">In this section I want to talk about the importance of leveraging a <a href="https://docs.adobe.com/content/help/en/id-service/using/reference/analytics-reference/cname.html" target="_blank">CNAME</a> tracking server to measure your website activity in Adobe Analytics which is more of an issue post ITP2.1 in Safari (slightly going off topic). This Adobe <a href="https://docs.adobe.com/content/help/en/id-service/using/reference/ecid-library-methods.html" target="_blank">article</a> covers how we can use a CNAME to set a new s_ecid cookie that extends the AMCV cookie expiration to 2 years instead of 7 days which Safari enforces today (see below).</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi43KwaCF68J6GollaYE12kxjJaHy3-GNoMyr8Ku4QNI6-V7peq2xOCGsZ1Lfr1mlopAg2tyuRrTljMgUUicpUBHweqoQE8cen7Imxi-_0Ev5u86gZc1nVKmBp_80jUqtEIgWfb3Y_t_w/s1600/Screen+Shot+2020-02-08+at+9.16.21+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="1600" height="30" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi43KwaCF68J6GollaYE12kxjJaHy3-GNoMyr8Ku4QNI6-V7peq2xOCGsZ1Lfr1mlopAg2tyuRrTljMgUUicpUBHweqoQE8cen7Imxi-_0Ev5u86gZc1nVKmBp_80jUqtEIgWfb3Y_t_w/s1600/Screen+Shot+2020-02-08+at+9.16.21+PM.png" width="400" /></a></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Please note that this requires ID service version 4.3.0 + to take advantage of this change to extend your visitor expiration to 2 years instead of 7 days on Safari.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">So, that's it! Hope found this helpful in understanding what changes were made by Chrome 80 and how Adobe is prepared to address any potential tracking issues as a result of this.</span></div>
Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-60605991167656272312020-01-27T17:03:00.000-08:002020-05-24T00:49:13.389-07:00Adobe I/O Events: Webhooks and The Triggers API Call<span style="font-family: "georgia" , "times new roman" , serif;">Companies around the world are continuously evolving and finding creative ways to optimize and improve the user experience across numerous platforms. The latest buzzword in that shift is <a href="https://medium.com/swlh/serverless-architecture-complete-reference-guide-2019-55363c08d1be" target="_blank">Serverless</a> Computing </span><span style="font-family: "georgia" , "times new roman" , serif;">which is slowly shifting the narrative by allowing you to deploy abstracted code to tackle specific use cases as opposed to setting up massive a Server infrastructure. Now, I'm not saying that the latter is going away but activating specific actions is what some companies are slowly moving towards without necessarily relying on 3rd party hosted solutions. One such use case where Serverless can help is <a href="https://www.rohankapooronline.com/2019/06/send-real-time-events-to-adobe-campaign.html" target="_blank">Triggers</a> which I wrote about last year.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">I also gave an </span><a href="https://www.rohankapooronline.com/2019/12/overview-of-adobe-io.html" style="font-family: Georgia, "Times New Roman", serif;" target="_blank">overview</a><span style="font-family: "georgia" , "times new roman" , serif;"> of Adobe I/O where I wrote about the four I/O components and I/O <a href="https://www.adobe.io/apis/experienceplatform/runtime.html">Runtime</a> is at the helm of it all. In this article, I'm going to walk through the application of application of Adobe I/O Events in Triggers</span><span style="font-family: "georgia" , "times new roman" , serif;">. I'm also going to cover how to setup webhooks on your machine (Mac in my case) and leverage a script the Adobe development team wrote to use your machine to "listen" for incoming Triggers. So let's get started.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Triggers Architecture with Adobe I/O</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Below is a high level architecture diagram I created to show how the Triggers API would interact with the various Adobe I/O components primarily Runtime and Events. Please note that this is a subset of what all is possible with I/O and an overall Adobe I/O architecture diagram is still in the works which will show the complete picture. </span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghUc0VUYWHZJt_Bprw6a2ckCMxCMiJ-FOCXKIBtPsgMgWBDMj8-nCkUkqso1PYh-7snUk91SORhPFQsC2xa_1k9gV9pUZwXwGd-OCT605M2Tr7997rTyGq8cUd9MYzTmB7Qx4LxjF5hw/s1600/Screen+Shot+2020-02-12+at+12.23.37+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="903" data-original-width="1600" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghUc0VUYWHZJt_Bprw6a2ckCMxCMiJ-FOCXKIBtPsgMgWBDMj8-nCkUkqso1PYh-7snUk91SORhPFQsC2xa_1k9gV9pUZwXwGd-OCT605M2Tr7997rTyGq8cUd9MYzTmB7Qx4LxjF5hw/s1600/Screen+Shot+2020-02-12+at+12.23.37+PM.png" width="400" /></a></div>
<br />
<span style="font-family: "georgia" , "times new roman" , serif;">The steps till #7 in this diagram are almost the same as any regular Triggers lifecycle which I covered in my previous post so here, I'll cover everything from step 8 onwards. If some steps are not clear, don't worry as I will cover these in more detail later in the post. So, let's walk through these in more detail:</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">8a - A user subscribes to the Triggers API using Runtime by creating a <a href="https://zapier.com/blog/what-are-webhooks/" target="_blank">webhook</a>. A prerequisite is to subscribe to the Triggers API which is done in the Admin console (covered later).</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">8b - The webhook is registered in the Adobe Admin console which is validated by the Event Gateway.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">9a - The Analytics Trigger is sent to I/O Events as soon as the trigger is executed (E.g. cart abandonment, some page is viewed etc.).</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">9b - I/O Events sends the </span><span style="font-family: "georgia" , "times new roman" , serif;">Trigger JSON payload to the client which is collected at some endpoint leveraging Runtime via a POST request.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">9c - A Runtime <a href="https://www.adobe.io/apis/experienceplatform/runtime/docs.html#!adobedocs/adobeio-runtime/master/guides/creating_actions.md" target="_blank">action</a> is invoked </span><span style="font-family: "georgia" , "times new roman" , serif;"> </span><span style="font-family: "georgia" , "times new roman" , serif;">as a custom event </span><span style="font-family: "georgia" , "times new roman" , serif;">to send the JSON payload to a 3rd party Email Service Provider (ESP). Please note Adobe Campaign will automatically receive the JSON payload (step 7).</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">10 - Runtime action is invoked to query data and receive the output.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">11 - This output is sent to an SFTP location to Adobe Campaign or other ESPs via another action. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">12- ESP sends an email or SMS tied to the trigger payload and conditional logic.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;">13 - User clicks on the email and is routed back to the site.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Listen for I/O Events Via a Webhook</span></h3>
</div>
<div>
<br /></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">In this section, I'll cover some steps on how to setup a webhook using <a href="https://ngrok.com/" target="_blank">ngrok</a> which is a tunneling software that allows you to convert your local site URL into a public facing URL. Please note that I'm not using the Runtime AIO CLI to do this but I have it installed on my machine and the instructions to install it can be found <a href="https://github.com/adobe/aio-cli" target="_blank">here</a>. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Setup ngrok</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Download ngrok from </span><span style="font-family: "georgia" , "times new roman" , serif;">https://ngrok.com/ and run the ngrok application from your Terminal or Command Prompt pointing to the folder where the application is located. In my case, it's located in the /openwhisk folder and I'm creating an ngrok URL tied to my localhost on port 3000 by executing the command <i>./ngrok http 3000</i>. I'll cover why I chose 3000 later.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxUqVUW7GNAoVD4Va9yRP0acLGnMdD9Sc-i7zDrGdGblJsWtjaG5jyS9qraPVll6C0ZBS1TPnw-cdc5FoMbNY9Lo2gprL-ut5LTSnk4O1t5gz_zfVnR0j2y105LAtLprsjCOFVCUfuaw/s1600/Screen+Shot+2020-01-26+at+6.38.36+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="172" data-original-width="894" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxUqVUW7GNAoVD4Va9yRP0acLGnMdD9Sc-i7zDrGdGblJsWtjaG5jyS9qraPVll6C0ZBS1TPnw-cdc5FoMbNY9Lo2gprL-ut5LTSnk4O1t5gz_zfVnR0j2y105LAtLprsjCOFVCUfuaw/s1600/Screen+Shot+2020-01-26+at+6.38.36+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Once executed, you'll get the public facing URL for your localhost which is <a href="https://c926b37a.ngrok.io/">https://c926b37a.ngrok.io/</a> in my case. Please note that this URL is only public facing for 8 hours but I believe there's a paid version to make reserved URLs.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim_M4lDfh9F2TDCnxtWzbUQlHRbmwa0mPaGVq3mM32Eq-ayc5M8bQicA6V5XPHAf-PPOrW5m9gQKh4-W0hQBwBW9tHTTIWTzoDqACUaLA75SJHdoWSOVKt5OCtMgg-rgxmx4DUAvenxw/s1600/Screen+Shot+2020-01-26+at+6.39.00+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="465" data-original-width="1136" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim_M4lDfh9F2TDCnxtWzbUQlHRbmwa0mPaGVq3mM32Eq-ayc5M8bQicA6V5XPHAf-PPOrW5m9gQKh4-W0hQBwBW9tHTTIWTzoDqACUaLA75SJHdoWSOVKt5OCtMgg-rgxmx4DUAvenxw/s1600/Screen+Shot+2020-01-26+at+6.39.00+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Create a Webhook "Listening" Server</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;">In this section, I will execute some code written by the Adobe I/O Events development team </span><span style="font-family: "georgia" , "times new roman" , serif;">(A big Thanks for them!) that </span><span style="font-family: "georgia" , "times new roman" , serif;">I retrieved from the Adobe Github </span><a href="https://github.com/hirenoble/webhook_server" style="font-family: georgia, "times new roman", serif;" target="_blank">page</a><span style="font-family: "georgia" , "times new roman" , serif;"> which has additional instructions on how to set this up as well but the main thing is to install this package on your machine. The command to run is <i>npm start</i> (Node.js) once you've installed the package to run the app.js file.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcz17XVeCEo98azq01SEpddCPzwJ_o09WNANbCDynug25FrPpkGvkeOYnGeZhoxAxXE3zDC1dC6HGPGvyN1uuKStWbL27VPPA0oWeh-6MAK4xbah09Ik_SWWt-al_bDuX5jueoHvUkGA/s1600/Screen+Shot+2020-01-26+at+7.32.35+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="672" data-original-width="1138" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcz17XVeCEo98azq01SEpddCPzwJ_o09WNANbCDynug25FrPpkGvkeOYnGeZhoxAxXE3zDC1dC6HGPGvyN1uuKStWbL27VPPA0oWeh-6MAK4xbah09Ik_SWWt-al_bDuX5jueoHvUkGA/s1600/Screen+Shot+2020-01-26+at+7.32.35+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Once it executes, it publishes an HTML page on port 3000 which allows us to create our webhook. Note that this is the same port on which I created my ngrok URL. On this page, I enter a path (trigger) which creates a webhook as </span><a href="https://c926b37a.ngrok.io/webhook/trigger">https://c926b37a.ngrok.io/webhook/trigger</a> that will "listen" for any incoming triggers.</span><br />
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi59yafyv2PxvGQtIBnfdU36hwxgHkLcNIBacAk6U2cTCPyW8nvaAHhgzGyrzKF4oHDDo15BwLOG3BJTGYsLXb0HpjVoGSjlJjzmjRdfK4UFO-jvLvxhbPyEQJcRRZXI9lfEyP7hcS5yQ/s1600/Screen+Shot+2020-01-26+at+7.36.38+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="1600" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi59yafyv2PxvGQtIBnfdU36hwxgHkLcNIBacAk6U2cTCPyW8nvaAHhgzGyrzKF4oHDDo15BwLOG3BJTGYsLXb0HpjVoGSjlJjzmjRdfK4UFO-jvLvxhbPyEQJcRRZXI9lfEyP7hcS5yQ/s1600/Screen+Shot+2020-01-26+at+7.36.38+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Register Webhook in Admin Console</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;">The first step is to create an integration with Analytics Triggers in the Adobe I/O admin interface. Follow these steps to create it.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyvEVrYOKCuOiySwDPs5v2lP2hBrLg2KetVL6YBSU7FX1wNg1OqnKB1v2iNIZ1wxCEfqRSbYRi6T0RdT_27c2dCih5HRoyO8h4U1p1IGQTgBsTDCnKEcEJc-bSpp7GBB6Bz4o1rZaViA/s1600/Screen+Shot+2020-01-26+at+7.39.45+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="1600" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyvEVrYOKCuOiySwDPs5v2lP2hBrLg2KetVL6YBSU7FX1wNg1OqnKB1v2iNIZ1wxCEfqRSbYRi6T0RdT_27c2dCih5HRoyO8h4U1p1IGQTgBsTDCnKEcEJc-bSpp7GBB6Bz4o1rZaViA/s1600/Screen+Shot+2020-01-26+at+7.39.45+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisddX5OldrV4-i8i8EPxPCAt9gKD7j_m0S_e9Z90Vj4-s0r0w1WCxD-uDd3-NAStxl3iBg7GpBFI9mhmUVnHyIIugU15QdD6cPk1QLaD7z_BzKtjyJDN1BNufPPmxgZ_6930jPd9AnRA/s1600/Screen+Shot+2020-01-26+at+7.39.52+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="744" data-original-width="1600" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisddX5OldrV4-i8i8EPxPCAt9gKD7j_m0S_e9Z90Vj4-s0r0w1WCxD-uDd3-NAStxl3iBg7GpBFI9mhmUVnHyIIugU15QdD6cPk1QLaD7z_BzKtjyJDN1BNufPPmxgZ_6930jPd9AnRA/s1600/Screen+Shot+2020-01-26+at+7.39.52+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span><span style="font-family: "georgia" , "times new roman" , serif;">Once the integration is complete, the next step is to click on the "Events" tab of your integration and register & test your newly created webhook. Note that I'm registering the same webhook created in the previous step which is </span><a href="https://c926b37a.ngrok.io/webhook/trigger" style="font-family: georgia, "times new roman", serif;">https://c926b37a.ngrok.io/webhook/trigger</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1jrA5xZjYwtPc73vWndAEvEAzlXhev0I8t6yIcLDK_CGjwasT2-_hRgkPP3Vl2pvZOtIwwi_x4WWJeBb1M9HATmTCfoLtYDyJtxABfNjWu7KTG4gGwpLbq2C6VoyRzS_jomymQBxBA/s1600/Screen+Shot+2020-01-26+at+7.40.30+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="806" data-original-width="1600" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1jrA5xZjYwtPc73vWndAEvEAzlXhev0I8t6yIcLDK_CGjwasT2-_hRgkPP3Vl2pvZOtIwwi_x4WWJeBb1M9HATmTCfoLtYDyJtxABfNjWu7KTG4gGwpLbq2C6VoyRzS_jomymQBxBA/s1600/Screen+Shot+2020-01-26+at+7.40.30+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Once you save it, a challenge will be sent as a GET request to this webhook to check if it's active.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ4YGKlgFgodLEOSFoZSqfBNLsWdVZH4ynwnqWYfrplHsDFVWHrrK4LIIQviCUNdte-bmdDPmP2nyqQj3ARgd1S4FOyY0cQ-6TJUKG2acgCdYsffa8mWeq5YoYSTPF3l0zq5HaZpTaig/s1600/Screen+Shot+2020-01-26+at+7.49.04+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="349" data-original-width="1600" height="86" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ4YGKlgFgodLEOSFoZSqfBNLsWdVZH4ynwnqWYfrplHsDFVWHrrK4LIIQviCUNdte-bmdDPmP2nyqQj3ARgd1S4FOyY0cQ-6TJUKG2acgCdYsffa8mWeq5YoYSTPF3l0zq5HaZpTaig/s1600/Screen+Shot+2020-01-26+at+7.49.04+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">If it's live, then you'll see the "Active" status in the admin console page which means your webhook is now ready to listen for Triggers.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhch7qWGBaFityM1MALH-H8jDx8BndeoYwsvEa5KH3wv8CCdl_LKoJZWxBPIFW1h5pp51WBrjMQbQ59__VpMXVQ7ccHhRulwtZ97wiXFpVl9WwpYC_7X_td2aVNE3iE8oz2qH-a6VVDYQ/s1600/Screen+Shot+2020-01-26+at+7.40.53+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="566" data-original-width="1600" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhch7qWGBaFityM1MALH-H8jDx8BndeoYwsvEa5KH3wv8CCdl_LKoJZWxBPIFW1h5pp51WBrjMQbQ59__VpMXVQ7ccHhRulwtZ97wiXFpVl9WwpYC_7X_td2aVNE3iE8oz2qH-a6VVDYQ/s1600/Screen+Shot+2020-01-26+at+7.40.53+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Create and Test Your Trigger</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">For the purpose of this post, I've created a very simple Trigger Action to fire when a user visits my homepage called "sandbox-home" and visited my page a few times.</span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK9qleDUjKip9rrcg1iT0KLcpVAeqJPCVxIC3CqlDlR_iwbSIkUKw4ekz9gtZD7mq5AZ4OcXL9fY46xXon3zTiVuAUMC0FREIWH0bSTasGRBB6YYDWkMfJo7pmkcRuds-gQuR1j15Wmw/s1600/Screen+Shot+2020-01-11+at+12.24.16+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1204" data-original-width="1482" height="323" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK9qleDUjKip9rrcg1iT0KLcpVAeqJPCVxIC3CqlDlR_iwbSIkUKw4ekz9gtZD7mq5AZ4OcXL9fY46xXon3zTiVuAUMC0FREIWH0bSTasGRBB6YYDWkMfJo7pmkcRuds-gQuR1j15Wmw/s1600/Screen+Shot+2020-01-11+at+12.24.16+AM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJwxraC5EkXHSRlDledcpCw3-xOOa8b3KySpD7lke0SN0Z1-jgcp2Lv84T_0ljGay6LNJ1BW2cgOwTmkGvwpXencBBVubKXv4l3BZUySmymrf7Ttsq3FyvRuoUls4euwEqcYMKiyOqhw/s1600/Screen+Shot+2020-01-11+at+12.28.47+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="754" data-original-width="1600" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJwxraC5EkXHSRlDledcpCw3-xOOa8b3KySpD7lke0SN0Z1-jgcp2Lv84T_0ljGay6LNJ1BW2cgOwTmkGvwpXencBBVubKXv4l3BZUySmymrf7Ttsq3FyvRuoUls4euwEqcYMKiyOqhw/s1600/Screen+Shot+2020-01-11+at+12.28.47+AM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Aside from the Triggers UI, I can also see five Trigger events posted on the app.js page actively listening for the events. Based on my test, it took the between 20-30 seconds for me to receive the webhook (see below) and I got 5 triggers (POST requests).</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjToDSN7u5lA1wFkJT-3g6UUYFOw_Mm2NjykuaXYNCc_tN9r4CrIyCrJe5a-Rfh3jHKxHamrL3MNvzJipOq6IN1CLLSOmBBzwXEEWQdjm0r2a-KymK8Z5XDTDWWXHIgWIdV8iwNsNslIw/s1600/Screen+Shot+2020-01-26+at+9.29.12+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="656" data-original-width="1600" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjToDSN7u5lA1wFkJT-3g6UUYFOw_Mm2NjykuaXYNCc_tN9r4CrIyCrJe5a-Rfh3jHKxHamrL3MNvzJipOq6IN1CLLSOmBBzwXEEWQdjm0r2a-KymK8Z5XDTDWWXHIgWIdV8iwNsNslIw/s1600/Screen+Shot+2020-01-26+at+9.29.12+PM.png" width="400" /></a></div>
<br />
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Parse the Trigger POST Response</span></h3>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Finally, you can parse the trigger response by expanding the POST request. In the JSON response, we can see that there are two main components of the call where the first one has information about the timestamp, IMS org among others and the second one is the actual analyticsHitSummary payload that contains all the "enriched" data from Adobe Analytics. Please note that a valid use case for this would be to send this to a 3rd party Email Service Provider given that Adobe Campaign receives it automatically. Please note that the customer ID (used to link ACS with a customer ID) captured on your site needs to be sent in an eVar as part of the Payload.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd_aCZzq9pw4vo7P9BtR2CCc7g27157puZ_ueNs0khC1ZkuvpGiaQlcUcfX7YDG_6eWacoUBH6OqPeL1udUEyan6AZd-C5qTJ9fyW-dDEzyeu9ROGH-wphGDVIKkGw0VsSltMSxMd8ZQ/s1600/Screen+Shot+2020-01-26+at+9.34.23+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="983" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd_aCZzq9pw4vo7P9BtR2CCc7g27157puZ_ueNs0khC1ZkuvpGiaQlcUcfX7YDG_6eWacoUBH6OqPeL1udUEyan6AZd-C5qTJ9fyW-dDEzyeu9ROGH-wphGDVIKkGw0VsSltMSxMd8ZQ/s1600/Screen+Shot+2020-01-26+at+9.34.23+PM.png" width="245" /></a></div>
<br />
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">BONUS: Send a Slack Message When a Trigger Occurs</span></h3>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Now, this section is just to show how to send a message to a Slack channel when a Trigger fires. Please note that this is probably not a good use case for Slack given the frequency of Triggers so some better use cases will be server maintenance notifications, code publishing notifications, new members added or removed, fraud detection among many others. I'll just use the Triggers API to show how it works:</span></div>
<div>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Enable Incoming Webhook for Slack</span></h4>
<h4>
</h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In this step, we will integrate our webhook with Slack to send a Trigger response to a Slack channel when an event occurs. You can do that by going <a href="https://api.slack.com/messaging/webhooks">here</a> which is the regular process. In my case, I went <a href="https://adobe-acs.slack.com/apps/A0F7XDUAZ-incoming-webhooks?next_id=0">here</a> and added this app to my Slack workspace and channel called #trigger-channel.</span></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiel097RIR1cm-X35RIje1WngzeY1wNqhI7UIVwGxuY3T_W_l8F55bjSETEeWNY3iY3y9ygpfvJaSlYdirPfSGE28aHlNDbHX3YyquhPXRVa2SPsFG7jydI080isesVJwsRfdAnPI_PpQ/s1600/Screen+Shot+2020-01-20+at+3.05.53+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="809" data-original-width="1600" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiel097RIR1cm-X35RIje1WngzeY1wNqhI7UIVwGxuY3T_W_l8F55bjSETEeWNY3iY3y9ygpfvJaSlYdirPfSGE28aHlNDbHX3YyquhPXRVa2SPsFG7jydI080isesVJwsRfdAnPI_PpQ/s1600/Screen+Shot+2020-01-20+at+3.05.53+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Once you complete the integration, you'll receive your Slack Webhook URL which looks like this: </span><a href="https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX">https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX</a></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_kxOpYxw-a3cMbKHHzxTdhbc6oVjiBLTdw2URb00Jd5IJGcZ0Ov_8FljvM2py4NK9hfT66dVP85CJWKXU1zm9oDA5-6MTWsNoysG3rnOeAqpr8iXaAPqK128Anp1us-Ey9wKmztU0OQ/s1600/Screen+Shot+2020-01-20+at+3.04.39+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1083" data-original-width="1600" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_kxOpYxw-a3cMbKHHzxTdhbc6oVjiBLTdw2URb00Jd5IJGcZ0Ov_8FljvM2py4NK9hfT66dVP85CJWKXU1zm9oDA5-6MTWsNoysG3rnOeAqpr8iXaAPqK128Anp1us-Ey9wKmztU0OQ/s1600/Screen+Shot+2020-01-20+at+3.04.39+PM.png" width="400" /></a></div>
<br />
<span style="font-family: "georgia" , "times new roman" , serif;">Once the integration is complete, you can send a POST request to the hook and post a custom message like I did via Postman. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE9RM4DoaCjzO_Mclkzbo-cHkoVuFpINnE_Rbx0-qRkBaRnbQG9ukoQWzUAR8s7-mR6xOlYzTMh9oXwdx42F3WeIvai4dP7O0j9tvly4NboO5F2s0mFpDjFTmsoouNcoUpqB5l2RNkJg/s1600/Screen+Shot+2020-01-20+at+5.16.54+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="745" data-original-width="1600" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE9RM4DoaCjzO_Mclkzbo-cHkoVuFpINnE_Rbx0-qRkBaRnbQG9ukoQWzUAR8s7-mR6xOlYzTMh9oXwdx42F3WeIvai4dP7O0j9tvly4NboO5F2s0mFpDjFTmsoouNcoUpqB5l2RNkJg/s1600/Screen+Shot+2020-01-20+at+5.16.54+PM.png" width="400" /></a></div>
<br />
<span style="font-family: "georgia" , "times new roman" , serif;">Once it's done, you'll see a bunch of messages stating the the integration is setup including a "Hello World" message which I sent. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpTfE3FOZML4egsHyArzcZRinZto9Ob8TerCCsqp4LP0detx4_fE6sfTA4flt-C6d2qDgiwgixwXpNsi78BZNT6MWptGl1B4NUzLgP-jrUjvFHbv-BtCtzFIKV47h0nYgKPWgvNyB8SQ/s1600/Screen+Shot+2020-01-27+at+1.41.50+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="278" data-original-width="1600" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpTfE3FOZML4egsHyArzcZRinZto9Ob8TerCCsqp4LP0detx4_fE6sfTA4flt-C6d2qDgiwgixwXpNsi78BZNT6MWptGl1B4NUzLgP-jrUjvFHbv-BtCtzFIKV47h0nYgKPWgvNyB8SQ/s1600/Screen+Shot+2020-01-27+at+1.41.50+PM.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "georgia" , "times new roman" , serif;">Next, I'll show you how to enable Slack to receive your Triggers webhook.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Modify Code In app.js</span></h4>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Modify the <a href="https://github.com/hirenoble/webhook_server/blob/master/public/javascripts/app.js">app.js</a> file and update your webhook URL and channel name.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_5EB_A3Z-dRnBPDK2NP53mLjFnEr94ZMxjj9W2NBDSiWQ_sgpIycJVHWbeMm5cqR2X7ovMqQYY04Ata9GzBkKz6RZqjknYlrnYNVZOd7dxaYNmNI7UPCdv1zPhlyz0LOilw0-SjSiEQ/s1600/Screen+Shot+2020-01-27+at+11.51.05+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="433" data-original-width="1600" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_5EB_A3Z-dRnBPDK2NP53mLjFnEr94ZMxjj9W2NBDSiWQ_sgpIycJVHWbeMm5cqR2X7ovMqQYY04Ata9GzBkKz6RZqjknYlrnYNVZOd7dxaYNmNI7UPCdv1zPhlyz0LOilw0-SjSiEQ/s1600/Screen+Shot+2020-01-27+at+11.51.05+AM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span><span style="font-family: "georgia" , "times new roman" , serif;">Next, we'll modify the Triggers payload to customize what we want to send to our Slack channel. In my case, I want to display my ECID and URL which I've slightly modified in the script written by the Adobe I/O team.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRlBAj7ZOL8df7d6aBA3sxjsx_dNixJnekCYcEEUIrskbUYgiNMnbce1LOWaoZWqmWbNLa6Yh9Wa0Er6BLgzyobkZx31B56lzIHTI1m8BA6b7ijmoJVruYT48eeyEy3gQtEhYEj8I9A/s1600/Screen+Shot+2020-01-26+at+9.54.14+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="1600" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRlBAj7ZOL8df7d6aBA3sxjsx_dNixJnekCYcEEUIrskbUYgiNMnbce1LOWaoZWqmWbNLa6Yh9Wa0Er6BLgzyobkZx31B56lzIHTI1m8BA6b7ijmoJVruYT48eeyEy3gQtEhYEj8I9A/s1600/Screen+Shot+2020-01-26+at+9.54.14+PM.png" width="400" /></a></div>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Monitor Triggers in Slack</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Finally, we can see that we got 5 Trigger responses in our Slack channel as well like we saw in the Triggers UI and the ngrok "listening" page. Again, not sure if this a good use case for Slack but you can use the model for other use cases which are more pertinent. </span></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8u1-07oX1z3ZkPVXhkBQqLYhG0ddDqisn6VKH1FsCaU8-KutzxLy8CF65MJ8JUdEBa5xzh1xSL0ztJYj1yvK1Vkv3IKoW0TFtnp2YMBttMxgeKgS-yCbK82vvxIB9Y4ZE4W4-VgX2cA/s1600/Screen+Shot+2020-01-27+at+10.04.24+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="842" data-original-width="1571" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8u1-07oX1z3ZkPVXhkBQqLYhG0ddDqisn6VKH1FsCaU8-KutzxLy8CF65MJ8JUdEBa5xzh1xSL0ztJYj1yvK1Vkv3IKoW0TFtnp2YMBttMxgeKgS-yCbK82vvxIB9Y4ZE4W4-VgX2cA/s1600/Screen+Shot+2020-01-27+at+10.04.24+AM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">So, that was it! Hope you found this helpful for your own use case on how to use I/O Events. Are you using Adobe I/O in any form today?</span></div>
Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com1tag:blogger.com,1999:blog-5636497578556115099.post-84378905770575231412019-12-25T14:49:00.003-08:002020-05-27T00:46:43.671-07:00Overview of Adobe I/O<span style="font-family: georgia, "times new roman", serif;">Our customers are always looking for various ways to access and extend the capabilities of our solutions and APIs are a natural way to provide them with additional capabilities that the UI may not provide. <a href="https://www.adobe.io/" target="_blank">Adobe I/O</a> allows developers to find documentation and tools to integrate with the Experience, Creative, and Document Clouds in a streamlined manner. In addition, it allows developers to add more functionality to Adobe solutions and customize them to tailor experiences for their customers.</span><br />
<span style="font-family: georgia, "times new roman", serif;"><br /></span><span style="font-family: georgia, "times new roman", serif;">The Adobe I/O platform has four primary components which I'll cover at a high level. I wrote about this in more detail on <a href="https://medium.com/adobetech/getting-to-know-the-adobe-i-o-architecture-experience-cloud-use-cases-4c63a409ec8c" target="_blank">Medium</a> where I coauthored a post on the architecture of Adobe I/O and its uses cases. This post also shows how each of these components interact with each other and the Experience Cloud solutions.</span><br />
<span style="font-family: georgia, "times new roman", serif;"><br /></span>
<span style="font-family: georgia, "times new roman", serif;">
</span>
<br />
<ul>
<li><span style="font-family: georgia, "times new roman", serif;"><span style="font-family: georgia, "times new roman", serif;"><b>Adobe Developer Console (Tool)</b>: </span>The Adobe Developer <a href="https://console.adobe.io/" target="_blank">console</a> provides you with a UI to access APIs across the three Adobe clouds as shown below. Developers can create integrations with each of these solutions primarily via three authentication methods (Api key, OAuth and JWT) to access APIs for solutions such as Adobe Analytics, Audience Manager, Campaign etc. The previous <a href="https://www.rohankapooronline.com/2019/05/access-adobe-apis-using-postman.html" target="_blank">article</a> I wrote shows how to access these APIs using JWT via Postman.</span></li>
</ul>
<div>
<span style="font-family: georgia, "times new roman", serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUyzLYjc8FNPLwVYCg8M8vPg_kkla3UPohj2mbtCB-LUWXh21qYHnU_9dIV74cBrYPVWzkAUk4R4heQUkf9yRxUezWn2swdwYoOAzZccNSkwmWBHYHwSD-7fSQfhQFohCVAT621FA9Zg/s1600/Screen+Shot+2020-05-08+at+3.46.02+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="963" data-original-width="1600" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUyzLYjc8FNPLwVYCg8M8vPg_kkla3UPohj2mbtCB-LUWXh21qYHnU_9dIV74cBrYPVWzkAUk4R4heQUkf9yRxUezWn2swdwYoOAzZccNSkwmWBHYHwSD-7fSQfhQFohCVAT621FA9Zg/s1600/Screen+Shot+2020-05-08+at+3.46.02+PM.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
</div>
<ul>
<li><span style="font-family: georgia, "times new roman", serif;"><span style="font-family: georgia, "times new roman", serif;"><b>Adobe I/O Gateway (Service)</b>: Adobe </span><span style="font-family: georgia, "times new roman", serif;">I/O Gateway is the infrastructure that sits in front of Adobe services and exposes the
APIs. It does things like throttling and logging, routing and load
balancing, authentication and security, whitelisting, validating API keys, tokens among others. There isn't much documentation available and it's not an actual product or UI that clients have access to.</span></span></li>
</ul>
<div>
<span style="font-family: georgia, "times new roman", serif;"><br /></span></div>
<ul>
<li><span style="font-family: georgia, "times new roman", serif;"><span style="font-family: georgia, "times new roman", serif;"><b>Adobe I/O Events (Service)</b>: </span>Adobe I/O <a href="https://www.adobe.io/apis/experienceplatform/events.html" target="_blank">Events</a> allow you to programmatically deliver targeted, expedited, and personalized experiences based on user behavior. I/O Developers can subscribe to <a href="https://www.adobe.io/apis/experienceplatform/events/docs.html#!adobedocs/adobeio-events/master/intro/webhook_docs_intro.md" target="_blank">webhooks</a> and can define what they want to be notified for whenever certain events occur. An example is <a href="https://www.rohankapooronline.com/2019/06/send-real-time-events-to-adobe-campaign.html" target="_blank">triggers</a> which allows you to send an email if a user abandons an eCommerce cart or update your 3rd party CRM system based on any action performed on the website. Some other examples of Events are as follows:</span></li>
<ul>
<li><span style="font-family: georgia, "times new roman", serif;">When an AEM <a href="https://www.adobe.com/marketing/experience-manager-assets.html" target="_blank">asset</a> is uploaded or updated, republish the page with the newly updated asset</span></li>
<li><span style="font-family: georgia, "times new roman", serif;">If Adobe Analytics traffic spikes, create a segment</span></li>
<li><span style="font-family: georgia, "times new roman", serif;">Get a cadence and order of occurrence of events via the <a href="https://www.adobe.io/apis/experienceplatform/events/docs.html#!adobedocs/adobeio-events/master/intro/journaling_api.md" target="_blank">Journaling API</a></span></li>
<li><span style="font-family: georgia, "times new roman", serif;">Some other use cases around the creative and document clouds is outlined <a href="https://www.adobe.io/apis/experienceplatform/events/docs.html#!adobedocs/adobeio-events/master/using.md" target="_blank">here</a>.</span></li>
</ul>
</ul>
<div>
<span style="font-family: georgia, "times new roman", serif;"><br /></span></div>
<ul>
<li><span style="font-family: georgia, "times new roman", serif;"><b>Adobe I/O Runtime (Service):</b> Adobe I/O <a href="https://www.adobe.io/apis/experienceplatform/runtime.html" target="_blank">Runtime</a> is a powerful and serverless way for developers to extend the capabilities of Adobe Experience Cloud solutions with no server management required. It allows developers to transform their code into applications by writing and deploying code on top of the Adobe Experience Cloud stack. It is built on top of Apache <a href="https://openwhisk.apache.org/" target="_blank">OpenWhisk</a>, which is an open source project that is very flexible and allows you to code in many programming languages such as Node.js, JavaScript, Swift, Python, PHP, Java to name a few. The great thing about is that you don't have to setup any servers or software to run your code. Some use cases for I/O Runtime are as follows:</span></li>
<ul>
<li><span style="font-family: georgia, "times new roman", serif;">Write code to perform <a href="https://www.webopedia.com/TERM/E/ETL.html" target="_blank">ETL</a> on records stored in a 3rd party CRM system and send these to Adobe Audience Manager or Campaign</span></li>
<li><span style="font-family: georgia, "times new roman", serif;">Allows you to open an internal ticket if a negative review is added</span></li>
<li><span style="font-family: georgia, "times new roman", serif;">This <a href="https://medium.com/adobetech/data-driven-marketing-campaigns-using-adobe-experience-platforms-unified-profile-in-adobe-campaign-9d9a97e183c4" target="_blank">article</a> covers a very pertinent use case for integrating Adobe Campaign Classic with Adobe Experience Platform</span></li>
<li><span style="font-family: georgia, "times new roman", serif;">Some other Runtime related use cases are outlined <a href="https://www.adobe.io/apis/experienceplatform/runtime/docs.html#!adobedocs/adobeio-runtime/master/overview/usecases.md" target="_blank">here</a>.</span></li>
</ul>
</ul>
<div>
<span style="font-family: georgia, "times new roman", serif;"><br /></span></div>
<span style="font-family: georgia, "times new roman", serif;">As a continuation to my previous post on accessing Adobe APIs using Postman, here's another example of how to access a <a href="https://adobe-apiplatform.github.io/umapi-documentation/en/api/user.html" target="_blank">User Management API</a> to get a list of all products a user is subscribed to which can allow you to retrieve this information without logging into the Admin console UI. Please note that you need to access the Adobe Developer console to create an integration with the User Management API.</span><br />
<span style="font-family: georgia, "times new roman", serif;"><br /></span>
<span style="font-family: georgia, "times new roman", serif;">The first step is to get an access token using the JWT token created in the Developer console.</span><br />
<span style="font-family: georgia, "times new roman", serif;">
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: georgia, "times new roman", serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzE3RJeZieTg9qqC8tMB-w5f-LkQJqxifJQFaU7NlKaSQ9Ks12cWrOBI1J9nW4byY8xb_VamjoCw-o42RjDnIx4kVHV8UffFXdSi4Zm2agdcbrzd_HPrM5da5FOl4s-4Q6GxqS5pB9Nw/s1600/Screen+Shot+2019-12-17+at+12.00.36+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1600" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzE3RJeZieTg9qqC8tMB-w5f-LkQJqxifJQFaU7NlKaSQ9Ks12cWrOBI1J9nW4byY8xb_VamjoCw-o42RjDnIx4kVHV8UffFXdSi4Zm2agdcbrzd_HPrM5da5FOl4s-4Q6GxqS5pB9Nw/s1600/Screen+Shot+2019-12-17+at+12.00.36+AM.png" width="400" /></a></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: georgia, "times new roman", serif;"><br /></span>
<span style="font-family: georgia, "times new roman", serif;">Call the API to <a href="https://adobe-apiplatform.github.io/umapi-documentation/en/api/getUser.html" target="_blank">get</a> user information by using the Bearer token generated in the previous step and getting a list of all groups a user has subscribed to. There's another <a href="https://adobe-apiplatform.github.io/umapi-documentation/en/api/getUsersWithPage.html" target="_blank">API</a> which allows you to get a list of all users and their groups tied to a particular Adobe IMS org.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl96xUMkQYTiDnTnbBj4bzKgbiFSe3Af-RDwCI80ThqiIR2brWQH4yLo91b_MZrggB-_4vQ1b6rnZIZs5G6HV_R-erbeNWsB5ZvE9QcBhwdu3UIIljrYr7VNnomwIzrgBF9t350kg-Ng/s1600/Screen+Shot+2019-12-17+at+12.00.48+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1109" data-original-width="1600" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl96xUMkQYTiDnTnbBj4bzKgbiFSe3Af-RDwCI80ThqiIR2brWQH4yLo91b_MZrggB-_4vQ1b6rnZIZs5G6HV_R-erbeNWsB5ZvE9QcBhwdu3UIIljrYr7VNnomwIzrgBF9t350kg-Ng/s1600/Screen+Shot+2019-12-17+at+12.00.48+AM.png" width="400" /></a></div>
<span style="font-family: georgia, "times new roman", serif;"><br /></span>
<span style="font-family: georgia, "times new roman", serif;">I'll update this post once I've created a diagram to show how each of the I/O components talk to each other. So, how do you use Adobe I/O in your organization?</span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-17169306146879446972019-12-08T23:52:00.005-08:002020-09-19T17:53:46.786-07:00Drop Off Rate Calculator<html>
<body>
<style>
.button {
background-color: #4682B4;
border: none;
color: white;
padding: 12px 24px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 14px;
margin: 3px 1px;
cursor: pointer;
}
.textB {
width: 125px;
height: 30px;
}
.textF
{
font-size: 17px;
}
.hFont
{
font-size: 20px;
font-weight: bold;
}
</style>
<br>
<h3 class="hFont" id="headl">
<b></b></h3>
<form>
<br>
<div class="textF">
This calculator lets you calculate your funnel drop off rate. Please note that this form has limited form validation currently which I'll optimize as time permits. Also, the first calculation only requires the first and last step as it only calculates the drop off rate based on the first and last steps.<br />
<br> <br> <br>
Enter the number of steps in your conversion funnel (between 2-5): </div>
<br>
<select class="textB" id="funnStepCt" name="funnel">
<option value=""></option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select><br>
<br>
<div class="textF">
Which drop off rate calculation <a href="https://www.rohankapooronline.com/2008/01/funnel-drop-offabandonment-rate.html" target="_blank">(click to explore both calculations)</a> do you prefer (pick 1 or 2)?: </div>
<br />
<select class="textB" id="funnAB" name="funnel">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
</select><br>
<br>
<br>
<b><h><div id="dorateav1">
</div></h></b>
<b><h><div id="doratea">
</div>
</h></b>
<b><h><div id="doratebv1">
</div>
</h></b>
<b><h><div id="dorateb1">
</div>
</h></b>
<b><h><div id="dorateb2">
</div>
</h></b>
<b><h><div id="dorateb3">
</div>
</h></b>
<b><h><div id="dorateb4">
</div>
</h></b>
<br>
<br>
<input class="button" onclick="prefAB()" type="button" value="Calculate" />
<input class="button" onclick="clear1Div(),clear2Div()" type="reset" />
</form>
<script>
function clear1Div()
{
document.getElementById("dorateav1").innerHTML="";
document.getElementById("doratea").innerHTML="";
document.getElementById("headl").innerHTML="";
}
function clear2Div()
{
document.getElementById("doratebv1").innerHTML="";
document.getElementById("dorateb1").innerHTML="";
document.getElementById("dorateb2").innerHTML="";
document.getElementById("dorateb3").innerHTML="";
document.getElementById("dorateb4").innerHTML="";
document.getElementById("headl").innerHTML="";
}
function prefAB()
{
clear1Div();
clear2Div();
var prefTxt=document.getElementById("funnAB").value;
var funnSteps=document.getElementById("funnStepCt").value;
if(prefTxt=="1" && prefTxt !="" && funnSteps !="")
{
clear2Div();
clear1Div();
var first=Number(prompt("Enter the number of Visits of your first funnel step"));
var last=Number(prompt("Enter the number of Visits of your last funnel step"));
if(first != 0 && last !== 0 && /^[0-9.,]+$/.test(first) && /^[0-9.,]+$/.test(last))
{
var calc1=((last-first)/first)*100;
if(calc1 > 0 || first == last)
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 1)";
document.getElementById("dorateav1").innerHTML = "Step 1: "+first+" Visits";
document.getElementById("doratea").innerHTML = "Last Step: "+last+" Visits ----- No drop off between steps";
}
else
if(calc1 < 0 && first != "" && last !== "")
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 1)";
document.getElementById("dorateav1").innerHTML = "Step 1: "+first+" Visits";
document.getElementById("doratea").innerHTML = "Last Step: "+last+" Visits ----- Overall Drop off Rate is: "+Math.floor(calc1)+"%";
}
}
else {
var txtClr = "<span style='color:#FF0000'>" + "Enter a valid number for all steps </span>";
document.getElementById("dorateav1").innerHTML = txtClr;
}
}
else
if(prefTxt=="2" && prefTxt !="" && funnSteps !="")
{
clear2Div();
clear1Div();
for(i=0;i<funnSteps;i++)
{
var curr=i+1;
if(i==0)
{
var stepA=Number(prompt("Enter the Visits of step number "+curr));
//document.getElementById("dorateav1").innerHTML = "Step 1: "+stepA+" Visits";
}
if(i==1)
{
var stepB=Number(prompt("Enter the Visits of step number "+curr));
var calc2=((stepB-stepA)/stepA)*100;
if(calc2 > 0 || stepB == stepA)
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("doratebv1").innerHTML = "Step 1: "+stepA+" Visits";
document.getElementById("dorateb1").innerHTML = "Step 2: "+stepB+" Visits ---- No drop off between steps";
}
else
if(calc2 < 0 && stepB != 0 && /^[0-9.,]+$/.test(stepB))
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("doratebv1").innerHTML = "Step 1: "+stepA+" Visits";
document.getElementById("dorateb1").innerHTML = "Step 2: "+stepB+" Visits ---- Drop off rate between steps 1 & 2 is: "+Math.floor(calc2)+"%";
}
/*else {
var txtClr = "<span style='color:#FF0000'>" + "Enter a valid number for all steps </span>";
document.getElementById("dorateb1").innerHTML = txtClr;
}*/
}
if(i==2)
{
var stepC=Number(prompt("Enter the Visits of step number "+curr));
var calc3=((stepC-stepB)/stepB)*100;
if(calc3 > 0 || stepC == stepB)
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("dorateb2").innerHTML = "Step 3: "+stepC+" Visits --- No drop off between steps";
}
else
if(calc3 < 0 && stepC != 0 && /^[0-9.,]+$/.test(stepC))
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("dorateb2").innerHTML = "Step 3: "+stepC+" Visits --- Drop off rate between steps 2 & 3 is: "+Math.floor(calc3)+"%";
}
/*else {
var txtClr = "<span style='color:#FF0000'>" + "Enter a valid number for all steps </span>";
document.getElementById("dorateb2").innerHTML = txtClr;
}*/
}
if(i==3)
{
var stepD=Number(prompt("Enter the Visits of step number "+curr));
var calc4=((stepD-stepC)/stepC)*100;
if(calc4 > 0 || stepD == stepC)
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("dorateb3").innerHTML = "Step 4: "+stepD+" Visits -- No drop off between steps";
}
else
if(calc4 < 0 && stepD != 0 && /^[0-9.,]+$/.test(stepD))
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("dorateb3").innerHTML = "Step 4: "+stepD+" Visits -- Drop off rate between steps 3 & 4 is: "+Math.floor(calc4)+"%";
}
/* else {
var txtClr = "<span style='color:#FF0000'>" + "Enter a valid number for all steps </span>";
document.getElementById("dorateb3").innerHTML = txtClr;//&& /^[0-9.,]+$/.test(stepB) && /^[0-9.,]+$/.test(stepC)
}*/
}
if(i==4)
{
var stepE=Number(prompt("Enter the Visits of step number "+curr));
var calc5=((stepE-stepD)/stepD)*100;
if(calc5 > 0 || stepE == stepD)
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("dorateb4").innerHTML = "Step 5: "+stepE+" Visits - No drop off between steps";
}
if(calc5 < 0 && stepE != 0 && /^[0-9.,]+$/.test(stepE))
{
document.getElementById("headl").innerHTML = "Drop Off Rate (Option 2)";
document.getElementById("dorateb4").innerHTML = "Step 5: "+stepE+" Visits - Drop off rate between steps 4 & 5 is: "+Math.floor(calc5)+"%";
}
}
}
if(stepA == 0 || stepB == 0 || stepC == 0 || stepD == 0 || stepE == 0)
{
var txtClr = "<span style='color:#FF0000'>" + "Enter a valid number for all steps </span>";
document.getElementById("dorateb4").innerHTML = txtClr;
}
}
else
if(funnSteps<=1 && funnSteps>5 && prefTxt != "1" && prefTxt != "2" || funnSteps==null || typeof funnSteps == "string")
{
var txtClr = "<span style='color:#FF0000'>" + "Choose a value from both drop down menus </span>";
document.getElementById("doratea").innerHTML = txtClr;
}
}
</script>
</body>
</html>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-16722351976254003032019-11-28T14:48:00.000-08:002019-12-11T22:58:20.242-08:00Adobe.com Blogpost: Adobe Experience Manager to Adobe Target Tips and Tricks<span style="font-family: "georgia" , "times new roman" , serif;">I recently wrote an article published on the Adobe <a href="https://theblog.adobe.com/4-reasons-to-use-adobe-experience-manager-and-adobe-target/" target="_blank">blog site</a> which talks about the benefits of integrating Adobe Experience Manager with Adobe Target. I also put together a tips and tricks document which can be found <a href="https://www.adobe.com/content/dam/www/us/en/marketing/target/pdfs/AEM_Sites_for_Adobe_Target_Tips_and_Tricks.pdf" target="_blank">here</a>. Hope you find these helpful!</span>Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0tag:blogger.com,1999:blog-5636497578556115099.post-49918894230325247162019-11-10T18:35:00.001-08:002019-11-12T21:55:36.586-08:00Deploy Audience Manager Email Pixel in Adobe Campaign Standard<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: "georgia" , "times new roman" , serif;">Email is a very effective channel to reach your customers and it's one of the more cheaper options to consider in your overall marketing strategy. It's estimated that email users will hit 3 Billion by 2020 according to this <a href="https://www.mediapost.com/publications/article/270890/3-billion-email-users-expected-by-2020.html" target="_blank">article</a> which is ~40% of the total world population (7.7 Billion as of October-19). </span><span style="font-family: "georgia" , "times new roman" , serif;">Last year, I <a href="https://rkapoor.blogspot.com/2018/10/adobe-audience-manager-email-pixel-id.html" target="_blank">wrote</a> about tracking email clicks and </span><span style="font-family: "georgia" , "times new roman" , serif;">impressions </span><span style="font-family: "georgia" , "times new roman" , serif;">in Audience Manager that captures the user id and syncs it with the DMP. I didn't cover how to deploy this pixel in an Email Service Provider (ESP) so in this post, I’ll explain how to deploy AAM email pixels in Campaign Standard and specifically expand on the "Deploy the Pixel in the Email Marketing Software" section from the previous post. I'm also writing this as I got a few questions about how to actually do it in an ESP so given that Campaign is an Adobe product, this made sense to me.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">I'm going to refer to some components of the Campaign Standard UI in this post so you can read this Adobe <a href="https://docs.adobe.com/content/help/en/campaign-standard/using/designing-content/quick-start.html" target="_blank">article</a> in case you're not familiar with how to create an email template. Let's go through the various steps:</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Use Case</span></h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Before we continue, let's take a closer look at the problem we're trying to solve. The main use case here is to perform an Audience Manager ID sync on users who view or click on an email. This can be helpful when you don't have a good way to capture authenticated users on your website for AAM Id sync/natural match purposes. The other advantage here is that you can upload additional data into Audience Manager tied to these IDs and connect these with additional data sources thereby activating on your Email marketing channel users.</span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">It's important to note that there's no concept of a UUID cookie here unless the email is viewed in a browser but given that we add an ID sync, we target users tied to the data source and profile merge rule in Audience Manager. Again, the primary intent is data onboarding in AAM and limited activation which is made possible via the ID sync.</span></div>
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></h3>
<h3>
<span style="font-family: "georgia" , "times new roman" , serif;">Deploy the AAM Pixels in Campaign Standard</span></h3>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Assuming that we're using the same pixel format (Subdomain).demdex.net/event?d_event=imp&d_cid=(DataSourceID)%01(HashedID)%011&c_emailopen=true&c_campaign=acs542test, we can add the pixel in the email designer where I will cover how to add the pixel both using HTML (imp pixel) and the email designer UI (click pixel) in Campaign Standard. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">AAM Impression Pixel (HTML)</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;">In the email designer UI, select the "HTML" option.</span>
<span style="font-family: "georgia" , "times new roman" , serif;"><b><br /></b></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizf3OoOIAu6TfIXJo6ERhkU65C6ZEnDyOWZ4T7PgLOPyhZRDJXMRGRQMZ7g4Qv_SBmrv9oKIZt9zxNxCeQAhWpNnUaHfbY8AJIkKqMwU9QqdfIykau4dH5UiBKrIzogYDqtOuOVnEfcw/s1600/Screen+Shot+2019-11-10+at+4.34.55+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="879" data-original-width="1600" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizf3OoOIAu6TfIXJo6ERhkU65C6ZEnDyOWZ4T7PgLOPyhZRDJXMRGRQMZ7g4Qv_SBmrv9oKIZt9zxNxCeQAhWpNnUaHfbY8AJIkKqMwU9QqdfIykau4dH5UiBKrIzogYDqtOuOVnEfcw/s1600/Screen+Shot+2019-11-10+at+4.34.55+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;">At the end of the HTML code, manually add the image tag. Please note that I'm using the same user ID as per my last post as I don't have a hashed ID in Campaign but in order to get the most value, I highly encourage you to add a hashed id tied to email and for that, you'll have to use the Email Designer option to add the user ID as a personalized field (see next section).</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1KAp6d53NzgmfOVoS1wXn2JbNn193KzGMuC0_03Yckd8wSfDY4mHX1pUYZtnNxB0Ur33SwPQ5MoXAx_L9dEwCoQjp6rOuSGOKyNwrgewrGK5JfsnOmWhcxoVd0Uq7dls-no-oCmLpQ/s1600/Screen+Shot+2019-11-10+at+4.35.58+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "georgia" , "times new roman" , serif;"><img border="0" data-original-height="394" data-original-width="1600" height="97" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1KAp6d53NzgmfOVoS1wXn2JbNn193KzGMuC0_03Yckd8wSfDY4mHX1pUYZtnNxB0Ur33SwPQ5MoXAx_L9dEwCoQjp6rOuSGOKyNwrgewrGK5JfsnOmWhcxoVd0Uq7dls-no-oCmLpQ/s1600/Screen+Shot+2019-11-10+at+4.35.58+PM.png" width="400" /></span></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><b><br /></b></span>
</span><br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">AAM Click Pixel (Email Designer)</span></h4>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Follow the steps laid out in this Adobe <a href="https://docs.adobe.com/content/help/en/campaign-standard/using/designing-content/personalization.html#personalizing-urls" target="_blank">article</a> to personalize the links. I will show a simple example of how to do that but will not really include it for my example. </span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">Select the "Get Started" CTA and click on the pencil icon to to add a URL. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikFTa8Gb1PoZM1Ffj-p72QK08qWHqvAvb_abd9H2eWQJQL6kgYBQJidPq5FWzDdq-22Xg00YXvaCZ9h3QyU7wMZbaHEbb0W4VypT9-9HxqPSe2HV8SLed0FyI5s_1l7AgsOLZfyTCxRw/s1600/Screen+Shot+2019-11-10+at+4.58.26+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="969" data-original-width="1600" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikFTa8Gb1PoZM1Ffj-p72QK08qWHqvAvb_abd9H2eWQJQL6kgYBQJidPq5FWzDdq-22Xg00YXvaCZ9h3QyU7wMZbaHEbb0W4VypT9-9HxqPSe2HV8SLed0FyI5s_1l7AgsOLZfyTCxRw/s1600/Screen+Shot+2019-11-10+at+4.58.26+PM.png" width="400" /></a></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span>
<span style="font-family: "georgia" , "times new roman" , serif;">In the editor, I've added a click pixel where I've included the <a href="https://docs.adobe.com/content/help/en/audience-manager/user-guide/implementation-integration-guides/media-data-integration/click-data-pixels.html" target="_blank">d_rd</a> (Mandatory redirect URL) parameter which redirects you the landing page URL that needs to be encoded. Also, note that I've added a personalization field as an example so if you have a user ID, you can add it to the pixel as shown below. Finally, I've also added a custom query string parameter called "m_source" which you can track on your landing page in an eVar if you use Adobe Analytics or leverage the <a href="https://support.google.com/analytics/answer/1033863?hl=en" target="_blank">utm parameters</a> if you use Google Analytics.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1bNXTsEDYdZIv_g9OC_dsaB3oRxtFUvRord5iJ40FUHEa3Ap0xNAC647fWonnUp4gde9Gd4K_YWhexwHn3hKD6uARKZRU9aNGFDgJiYlU0gO6gYvElUcACpDdSmfT4kn1ow30APkpNA/s1600/Screen+Shot+2019-11-09+at+1.03.32+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="770" data-original-width="1600" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1bNXTsEDYdZIv_g9OC_dsaB3oRxtFUvRord5iJ40FUHEa3Ap0xNAC647fWonnUp4gde9Gd4K_YWhexwHn3hKD6uARKZRU9aNGFDgJiYlU0gO6gYvElUcACpDdSmfT4kn1ow30APkpNA/s1600/Screen+Shot+2019-11-09+at+1.03.32+PM.png" width="400" /></a></div>
<div>
<br />
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Create Traits in AAM</span></h4>
</div>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">Before sending the email, make sure that you create the relevant traits tied to impressions and clicks in Audience Manager. I cover this in the next section.</span></div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span></h4>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">Send the Email</span></span></h4>
<span style="font-weight: normal;"><span style="font-family: "georgia" , "times new roman" , serif;">In my example, I just sent to email to myself which is why you just see one email sent.</span></span><br />
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">
</span></span>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">
</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE_p_AuQ7xP0V_ESyQg8B8otQJXsqOtYiRM9DORisjl_a3BDR4qIlHk8P2rUH4fXfjjeKrsg8YR1BVRk5MGWvkSCe78IIaSzwt_0ICTZBuIX-Rdn-dKBN-g9BJeMlNu7_vNN6O5fxTsw/s1600/Screen+Shot+2019-10-20+at+10.18.56+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="780" data-original-width="1600" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE_p_AuQ7xP0V_ESyQg8B8otQJXsqOtYiRM9DORisjl_a3BDR4qIlHk8P2rUH4fXfjjeKrsg8YR1BVRk5MGWvkSCe78IIaSzwt_0ICTZBuIX-Rdn-dKBN-g9BJeMlNu7_vNN6O5fxTsw/s1600/Screen+Shot+2019-10-20+at+10.18.56+PM.png" width="400" /></a></span></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">
</span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">
</span></span>
<br />
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">I can see the email in Microsoft Outlook where an impression pixel will fire as well as the click pixel if a user clicks on the "Get Started" CTA. </span> </span></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">
</span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ-0qEIxVJ_xaLoOSVk1bFE9LwtVB_lS-c15s_31ah9_s6Uyk97xhiFxEMp5EbKgjQRtNt0n_bOvU820hRPULpDtMEUX9KPldi2OdCmjS3z5VqnAl3dMgJDSvvaAFZrYX8IE6oy0NVXA/s1600/Screen+Shot+2019-10-20+at+10.20.39+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1252" data-original-width="1600" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ-0qEIxVJ_xaLoOSVk1bFE9LwtVB_lS-c15s_31ah9_s6Uyk97xhiFxEMp5EbKgjQRtNt0n_bOvU820hRPULpDtMEUX9KPldi2OdCmjS3z5VqnAl3dMgJDSvvaAFZrYX8IE6oy0NVXA/s1600/Screen+Shot+2019-10-20+at+10.20.39+PM.png" width="400" /></a></span></span></div>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;">
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></span></span></span><br />
<h3 style="font-family: Times;">
<span style="font-family: "georgia" , "times new roman" , serif;">Validate the AAM Pixels</span></h3>
<div style="font-family: georgia, "times new roman", serif;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<div style="font-family: georgia, "times new roman", serif;">
<span style="font-family: "georgia" , "times new roman" , serif;">We already covered how to validate the email pixels in the last post I wrote but I'm going to do so again as now I'm deploying the pixels in an actual ESP this time around.</span></div>
<div style="font-family: georgia, "times new roman", serif;">
<span style="font-family: "georgia" , "times new roman" , serif;"><br /></span></div>
<h4 style="font-family: georgia, "times new roman", serif;">
<span style="font-family: "georgia" , "times new roman" , serif;">Validate in Campaign Standard</span></h4>
<div style="font-family: georgia, "times new roman", serif;">
We can preview the email in Campaign where it shows you how the email will look on both Desktop and Mobile. After opening up the network tab, I'm able to see the impression pixel fire. <u>Please note that this needs to occur before you send the email so I skipped a step here.</u></div>
<div class="separator" style="clear: both; font-family: georgia, "times new roman", serif; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbWVbLE2NxxwORYEDSQNZ2AwkO6GFmpsp44E85u_bZY-E3ohHMiTLKHVytrhyL3ukylhqfDeXXFlZDbVfVJHOIV8DA5BZa7oFxjfolGUVfjlLMYyTZbqwIFJlGGyJggLK0lW4fMszJ5g/s1600/Screen+Shot+2019-10-20+at+10.13.08+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="766" data-original-width="1600" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbWVbLE2NxxwORYEDSQNZ2AwkO6GFmpsp44E85u_bZY-E3ohHMiTLKHVytrhyL3ukylhqfDeXXFlZDbVfVJHOIV8DA5BZa7oFxjfolGUVfjlLMYyTZbqwIFJlGGyJggLK0lW4fMszJ5g/s1600/Screen+Shot+2019-10-20+at+10.13.08+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; font-family: georgia, "times new roman", serif; text-align: center;">
<br /></div>
<h4 style="font-family: georgia, "times new roman", serif;">
<span style="font-family: "georgia" , "times new roman" , serif;">Validate Impression Pixel in Microsoft Outlook</span></h4>
<span style="font-family: "georgia" , "times new roman" , serif;">
For the purposes of this demo and to simplify QA, I'm manually opening up the email in a browser but note that the pixel will fire in Outlook as well. I'm able to see an impression pixel firing after I open it in a browser.</span><br />
<div class="separator" style="clear: both; font-family: georgia, "times new roman", serif; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggRany9wD5OA7NG90uXsu0PJc5odJ2l7gYGvk-ZK2PS-01of5TRdi0616JX5Zfl5rSQ_LKhP2U7sBwx56XIBVLb4mTr9RSoYxIhIJq2hbGajqQCmKP8M068fOOArV7YheUD5Oj9-NdOw/s1600/Screen+Shot+2019-10-20+at+10.20.18+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="909" data-original-width="1600" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggRany9wD5OA7NG90uXsu0PJc5odJ2l7gYGvk-ZK2PS-01of5TRdi0616JX5Zfl5rSQ_LKhP2U7sBwx56XIBVLb4mTr9RSoYxIhIJq2hbGajqQCmKP8M068fOOArV7YheUD5Oj9-NdOw/s1600/Screen+Shot+2019-10-20+at+10.20.18+PM.png" width="400" /></a></div>
<div style="font-family: georgia, "times new roman", serif;">
<br /></div>
<div>
<h4>
<span style="font-family: "georgia" , "times new roman" , serif;">Validate Click Pixel in Microsoft Outlook</span></h4>
</div>
<div style="font-family: georgia, "times new roman", serif;">
In this case, I clicked on the "Get Started" CTA and preserved logs in Chrome to see that the click pixel took me to the landing page as fired a call to AAM.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKnyNKnFWpw5NpzWr4Jn-S0ibqwpph-tVU4ciKZiQWTBk1Sl24pbLsV7L7opaA8QTHSfan6fHpixwinwrUYVUah76yc7S2VujITvOp3M3JzgVZQdrb_J-ulLC4pW0BpLyM1F_5IOcd8A/s1600/Screen+Shot+2019-10-24+at+10.53.11+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1029" data-original-width="1600" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKnyNKnFWpw5NpzWr4Jn-S0ibqwpph-tVU4ciKZiQWTBk1Sl24pbLsV7L7opaA8QTHSfan6fHpixwinwrUYVUah76yc7S2VujITvOp3M3JzgVZQdrb_J-ulLC4pW0BpLyM1F_5IOcd8A/s1600/Screen+Shot+2019-10-24+at+10.53.11+PM.png" width="400" /></a></div>
<div style="font-family: georgia, "times new roman", serif;">
<br /></div>
<div style="font-family: georgia, "times new roman", serif;">
<h4>
Validate Email Pixels in Audience Manager</h4>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
The next step is to validate the email pixels in AAM. We created two traits tied to impression and click and both show that I qualified for each of the traits.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUpnBzIFQeXhCzcOOlw2HS1H3pEZSRJiyvWWdNqAa9z961XlHmOEPijf85b4o7xgtLyu3EuLOMAeZ6BKEVAW_HdKph7UI4tltYQ1dzpINfM0vfpLldcQh-VAiSHEko9zcDZpSse2hNOg/s1600/Screen+Shot+2019-11-10+at+5.51.20+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="794" data-original-width="1600" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUpnBzIFQeXhCzcOOlw2HS1H3pEZSRJiyvWWdNqAa9z961XlHmOEPijf85b4o7xgtLyu3EuLOMAeZ6BKEVAW_HdKph7UI4tltYQ1dzpINfM0vfpLldcQh-VAiSHEko9zcDZpSse2hNOg/s1600/Screen+Shot+2019-11-10+at+5.51.20+PM.png" width="400" /></a></div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCtV4kQJQ_VVOH4KPbmyf0xkfeBYs-qjb5mwNfisdnlV14Ne8ALH9-rFCS07P3WON4dfl_P1IU-S5imALxf5Lnma9a3kMiefkAA7xbGSHRPtVTp8Xz8_N9GWgDLJAqYsWJ819mnvTJOw/s1600/Screen+Shot+2019-10-27+at+12.16.42+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="762" data-original-width="1600" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCtV4kQJQ_VVOH4KPbmyf0xkfeBYs-qjb5mwNfisdnlV14Ne8ALH9-rFCS07P3WON4dfl_P1IU-S5imALxf5Lnma9a3kMiefkAA7xbGSHRPtVTp8Xz8_N9GWgDLJAqYsWJ819mnvTJOw/s1600/Screen+Shot+2019-10-27+at+12.16.42+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<h4>
Validate Email Clicks in Analytics Solution</h4>
</div>
<div>
The final step is to validate how many users actually land on your site which will be users who click on the email. In my case, I have Google Analytics tagged on my blog so I've included a quick example but in hindsight, I should've leveraged the utm parameters as I'm using GA but you can capture this query param in your Campaign ID variable.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EOPulL28OhCCuSjiXPRW8kp15BWmCTGJ7QecouzL5Thn9XombiAvoHR0GMZ75FnwD9te8vWWOl8Z-VA5hZjeF0Bazq52VVsfzI8j5L5JNYcHK31vOH7KKq1TmVva6zHolwBcRps5lA/s1600/Screen+Shot+2019-11-10+at+5.06.06+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="765" data-original-width="1600" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EOPulL28OhCCuSjiXPRW8kp15BWmCTGJ7QecouzL5Thn9XombiAvoHR0GMZ75FnwD9te8vWWOl8Z-VA5hZjeF0Bazq52VVsfzI8j5L5JNYcHK31vOH7KKq1TmVva6zHolwBcRps5lA/s1600/Screen+Shot+2019-11-10+at+5.06.06+PM.png" width="400" /></a></div>
<br /></div>
<div>
So that's the extent of the various steps involved in tracking AAM email pixels in Adobe Campaign Standard.<br />
<br /></div>
</div>
<h3 style="font-family: georgia, "times new roman", serif;">
Additional Things to Consider</h3>
<div>
<span style="font-family: "georgia" , "times new roman" , serif;">I'm going to cover some additional points that are important to consider before doing this.</span><br />
<div style="font-family: georgia, "times new roman", serif;">
<br /></div>
<div style="font-family: georgia, "times new roman", serif;">
</div>
<ul>
<li><b>Emails and JavaScript: </b>Emails don't run JavaScript code so we have to leverage an AAM image tag for capturing impressions and clicks. </li>
</ul>
<ul>
<li><b>Email Client Limitation</b>: Audience Manager or any other image pixels don't fire by default in Gmail or any other web based email service but the pixel will fire when you click the option to view the email in detail (separate browser tab/window) which is typically included at the end of the email. An app based email service such as Outlook will fire the pixel by default so you will have to estimate the potential drop-off because of this limitation.</li>
</ul>
<ul>
<li><b>Email Click Redirect</b>: You will notice that the clicked URL will momentarily redirect to Campaign before taking you to the final landing page. This happens because a click needs to be registered in Campaign which is visible in the native <a href="https://docs.adobe.com/content/help/en/campaign-standard/using/reporting/about-reporting/about-dynamic-reports.html" target="_blank">Campaign reporting UI</a>.</li>
</ul>
<ul>
<li><b>Feasibility of the AAM Click Pixel</b>: You may or may not need the click pixel depending on how well the tracking is on your landing page. If you're already tracking the query string parameter on your landing page then you may not need to implement the click pixel as it will incur an additional AAM server call in addition to the impression pixel. So, if the intent is just to ID sync users in AAM then you won't really need to implement it.</li>
</ul>
</div>
<div style="font-family: georgia, "times new roman", serif;">
<br />
So, that's a wrap! Hope you found this post useful as you can use the same framework to deploy any other image pixel aside from AAM in Campaign Standard.</div>
Rohan Kapoorhttp://www.blogger.com/profile/12749952609626021877noreply@blogger.com0