Product 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.
Showing posts with label Adobe Campaign Standard. Show all posts
Showing posts with label Adobe Campaign Standard. Show all posts
Friday, May 8, 2020
AdobeDevBlog: Adobe I/O Architecture and Use Cases
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 link to Adobe's Medium Tech blog post I coauthored and below is the visual of the architecture.
Sunday, April 26, 2020
Overview of Real-Time CDP
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 overview of a Data Management Platform a few years ago and have written a few article about Adobe Audience Manager since then.
In this post, I'll write about Real-Time Customer Data Platform which is the activation engine and a service built on Adobe Experience Platform 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.
It's always helpful to start simple so I'll give a brief overview of what a Customer Data Platform is. There'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.
According to Wikipedia, "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 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:
A lot more information can be found in the official Adobe documentation in addition to what I've covered.
Visuals always help so I created a quick high-level data flow diagram outlining how data flows into and outside of AEP/Real-Time CDP 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.
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.
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. This is also embedded within the Adobe Experience Platform UI.
The following is a visual (representational) system view which shows how many profiles are connected to sources and are sent to a destination.
Finally, I want to emphasize that I've not heard anything about Adobe Audience Manager being impacted by Real-Time CDP as we still need AAM for 2nd and 3rd party data activation. Also, 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.
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.
In this post, I'll write about Real-Time Customer Data Platform which is the activation engine and a service built on Adobe Experience Platform 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.
It's always helpful to start simple so I'll give a brief overview of what a Customer Data Platform is. There'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.
According to Wikipedia, "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 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:
- The activation of both known (PII) and anonymous user data is possible in a CDP
- Profiles have a much longer data retention period in a CDP
- A complete customer profile (historical, demographic) is maintained in a CDP
Source: https://www.emailvendorselection.com/customer-data-platform-cdp-evolution-marketing-automation/
Core Elements of Real-Time CDP
Below are some core components of the Real-Time CDP and how it relates to Adobe Experience Platform.
- XDM Schema & Datasets: 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.
- Real-time Customer Profile: The Real-time Customer Profile is a combined view of all customer identities collected across multiple channels. I recently wrote 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.
- Real-Time Web Data Streaming: The introduction of the AEP Web SDK 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.
- Real-Time Activation of Profiles: 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.
- Built With Privacy By Design: All Adobe products including Real-Time CDP is built keeping privacy in mind. In case of the AEP UI, customers can use Data Usage Labeling and Enforcement (DULE) labels to mark mark identities or restrict how data will be activated based on GDPR and other privacy laws. The official Adobe documentation provides more details on this.
A lot more information can be found in the official Adobe documentation in addition to what I've covered.Adobe Solution Integration with Real-Time CDP
Visuals always help so I created a quick high-level data flow diagram outlining how data flows into and outside of AEP/Real-Time CDP 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.
Real-Time CDP UI Overview
Profiles
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.
Segments
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.Identities
Sources
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, this is also embedded within the Adobe Experience Platform UI.
Destinations
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:- Profile Export which allows us to export PII data to ESPs and other platforms.
- 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.
The following is a visual (representational) system view which shows how many profiles are connected to sources and are sent to a destination.
Finally, I want to emphasize that I've not heard anything about Adobe Audience Manager being impacted by Real-Time CDP as we still need AAM for 2nd and 3rd party data activation. Also, 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.
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.
Monday, January 27, 2020
Adobe I/O Events: Webhooks and The Triggers API Call
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 Serverless Computing 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 Triggers which I wrote about last year.
I also gave an overview of Adobe I/O where I wrote about the four I/O components and I/O Runtime 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. 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.
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:
8a - A user subscribes to the Triggers API using Runtime by creating a webhook. A prerequisite is to subscribe to the Triggers API which is done in the Admin console (covered later).
8b - The webhook is registered in the Adobe Admin console which is validated by the Event Gateway.
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.).
9b - I/O Events sends the Trigger JSON payload to the client which is collected at some endpoint leveraging Runtime via a POST request.
9c - A Runtime action is invoked as a custom event 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).
10 - Runtime action is invoked to query data and receive the output.
11 - This output is sent to an SFTP location to Adobe Campaign or other ESPs via another action.
12- ESP sends an email or SMS tied to the trigger payload and conditional logic.
13 - User clicks on the email and is routed back to the site.
Download ngrok from 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 ./ngrok http 3000. I'll cover why I chose 3000 later.
Once executed, you'll get the public facing URL for your localhost which is https://c926b37a.ngrok.io/ 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.
In this section, I will execute some code written by the Adobe I/O Events development team (A big Thanks for them!) that I retrieved from the Adobe Github page 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 npm start (Node.js) once you've installed the package to run the app.js file.
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 https://c926b37a.ngrok.io/webhook/trigger that will "listen" for any incoming triggers.
The first step is to create an integration with Analytics Triggers in the Adobe I/O admin interface. Follow these steps to create it.
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 https://c926b37a.ngrok.io/webhook/trigger.
Once you save it, a challenge will be sent as a GET request to this webhook to check if it's active.
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.
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).
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 here which is the regular process. In my case, I went here and added this app to my Slack workspace and channel called #trigger-channel.
Once you complete the integration, you'll receive your Slack Webhook URL which looks like this: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Once the integration is complete, you can send a POST request to the hook and post a custom message like I did via Postman.
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.
Next, I'll show you how to enable Slack to receive your Triggers webhook.
Modify the app.js file and update your webhook URL and channel name.
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.
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.
I also gave an overview of Adobe I/O where I wrote about the four I/O components and I/O Runtime 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. 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.
Triggers Architecture with Adobe I/O
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.
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:
8a - A user subscribes to the Triggers API using Runtime by creating a webhook. A prerequisite is to subscribe to the Triggers API which is done in the Admin console (covered later).
8b - The webhook is registered in the Adobe Admin console which is validated by the Event Gateway.
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.).
9b - I/O Events sends the Trigger JSON payload to the client which is collected at some endpoint leveraging Runtime via a POST request.
9c - A Runtime action is invoked as a custom event 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).
10 - Runtime action is invoked to query data and receive the output.
11 - This output is sent to an SFTP location to Adobe Campaign or other ESPs via another action.
12- ESP sends an email or SMS tied to the trigger payload and conditional logic.
13 - User clicks on the email and is routed back to the site.
Listen for I/O Events Via a Webhook
In this section, I'll cover some steps on how to setup a webhook using ngrok 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 here.
Setup ngrok
Download ngrok from 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 ./ngrok http 3000. I'll cover why I chose 3000 later.
Once executed, you'll get the public facing URL for your localhost which is https://c926b37a.ngrok.io/ 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.
Create a Webhook "Listening" Server
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 https://c926b37a.ngrok.io/webhook/trigger that will "listen" for any incoming triggers.
Register Webhook in Admin Console
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 https://c926b37a.ngrok.io/webhook/trigger.
Once you save it, a challenge will be sent as a GET request to this webhook to check if it's active.
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.
Create and Test Your Trigger
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.
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).
Parse the Trigger POST Response
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.
BONUS: Send a Slack Message When a Trigger Occurs
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:
Enable Incoming Webhook for Slack
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 here which is the regular process. In my case, I went here and added this app to my Slack workspace and channel called #trigger-channel.
Once you complete the integration, you'll receive your Slack Webhook URL which looks like this: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Once the integration is complete, you can send a POST request to the hook and post a custom message like I did via Postman.
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.
Modify Code In app.js
Modify the app.js file and update your webhook URL and channel name.
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.
Monitor Triggers in Slack
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.
Sunday, November 10, 2019
Deploy Audience Manager Email Pixel in Adobe Campaign Standard
I'm going to refer to some components of the Campaign Standard UI in this post so you can read this Adobe article in case you're not familiar with how to create an email template. Let's go through the various steps:
Use Case
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.
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.
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.
Deploy the AAM Pixels in Campaign Standard
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.
AAM Impression Pixel (HTML)
In the email designer UI, select the "HTML" option.
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).
AAM Click Pixel (Email Designer)
Follow the steps laid out in this Adobe article to personalize the links. I will show a simple example of how to do that but will not really include it for my example.
Select the "Get Started" CTA and click on the pencil icon to to add a URL.
In the editor, I've added a click pixel where I've included the d_rd (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 utm parameters if you use Google Analytics.
Select the "Get Started" CTA and click on the pencil icon to to add a URL.
In the editor, I've added a click pixel where I've included the d_rd (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 utm parameters if you use Google Analytics.
Create Traits in AAM
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.
Send the Email
In my example, I just sent to email to myself which is why you just see one email sent.
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.
Validate the AAM Pixels
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.
Validate in Campaign Standard
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. Please note that this needs to occur before you send the email so I skipped a step here.
Validate Impression Pixel in Microsoft Outlook
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.Validate Click Pixel in Microsoft Outlook
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.
Validate Email Pixels in Audience Manager
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.
Validate Email Clicks in Analytics Solution
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.
So that's the extent of the various steps involved in tracking AAM email pixels in Adobe Campaign Standard.
Additional Things to Consider
I'm going to cover some additional points that are important to consider before doing this.
- Emails and JavaScript: Emails don't run JavaScript code so we have to leverage an AAM image tag for capturing impressions and clicks.
- Email Client Limitation: 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.
- Email Click Redirect: 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 Campaign reporting UI.
- Feasibility of the AAM Click Pixel: 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.
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.
Saturday, June 22, 2019
Send Real-Time Adobe Analytics Events to Adobe Campaign via Triggers
Triggers are part of the Experience Cloud Activation Core Service and have been in existence for a few years now. There's a lot of documentation already out there but with this post, I'll fill in some gaps that exist in the public facing documentation. I will also provide a quick overview of Triggers from my sandbox account, cover common use cases, share a logical architecture diagram and discuss the provisioning process along with some common access issues. Let's get into it!
Triggers allow marketers to activate Adobe Analytics events in Adobe Campaign to re-market and engage customers via emails and other channels. Adobe Campaign is the main solution that leverages Triggers to send emails or SMS based on an action performed on the site in near real-time. I will be covering the integration between Triggers and Adobe Campaign Standard (ACS) at a high level.
We can access Triggers by going to the Activation site and clicking "Manage Triggers" (provisioning covered in the next section). There are 4 types of Triggers we can create which are:
Below is the UI we see when we create a new Trigger based on an abandonment.
Once created, Triggers will start collecting data immediately based on the conditional logic. In my actual example, I've created a simple Trigger based on an action tied to a particular Page Name.
There are numerous use cases that can be met using Triggers and below are some examples. Please note that for these to work properly, the user would have to be signed in.
Aside from these, we can leverage the propensity score attribute to NOT trigger an email if a user is likely to visit the website in the next 30 days.
This is a very important piece of this integration and is a required step to sync Customer or Declared IDs captured on the site with AAM or Customer Attributes and eventually with Campaign. This can be done easily in a Tag Manager like Launch.
Reconcile Triggers with the ID Service in Campaign Standard
The final step is to reconcile the an encrypted ID with a Declared ID data source in Adobe Campaign Standard. Below is an example of a Declared ID data source in ACS which is a new data source that needs to be created tied to the authenticated Customer ID by going to Administration -> Application settings -> Shared Data Sources. The link below the image covers this step in more detail.
Here's some more information on how to configure Triggers to send emails in Adobe Campaign Standard:
Triggers are also Accessible via Adobe I/O
I recently wrote about Adobe APIs last time and covered how to create an integration in Adobe I/O but this link covers how to connect with the Triggers API.
I recently ran into some issues while trying to access Triggers and had to log tickets internally at Adobe so if you run into these issues, you'll have to ask your Campaign consultant to log these on your behalf.
Below is a simplified architecture diagram I put together to outline the integration between Analytics and Adobe Campaign Standard using Triggers. I've leveraged some internal documentation to provide more details primarily around steps 4-6. Below is a screenshot of that and a summary of the various steps.
1 - AEM Services the page
2a - ECID Service is called and relevant IDs are returned back to the page
2b - If the visitor is logged in, an Authenticated "Declared ID" will be paired with the ECID
3 - Analytics image request fires and page/event level data gets sent to Adobe Analytics
4 - Real-Time Events sent via Analytics are detected using the Triggers State Machine
5 - Events are "enriched" with the Customer ID sent from the ID Service
6 - The enriched trigger events are sent through Pipeline Services and made available to Campaign. ACS "listens" for Trigger data that comes in as IDs starting with analyticsHitSummary
7 - Campaign queries data sources to build personalized multi-channel messages
8 - Campaign ingests/shares data from/to other data sources
9 - ACS delivers marketing messages across channels (Email, SMS) based on Triggers
10 - Customer clicks on the email and is routed back to the client website
So that was it! I hope you found this post helpful and hope that it will pique your interest in Triggers if you aren't already using it. Here's a link to another post where I've written about how to use webhooks to listen for Triggers.
Overview of Triggers
Triggers allow marketers to activate Adobe Analytics events in Adobe Campaign to re-market and engage customers via emails and other channels. Adobe Campaign is the main solution that leverages Triggers to send emails or SMS based on an action performed on the site in near real-time. I will be covering the integration between Triggers and Adobe Campaign Standard (ACS) at a high level.
We can access Triggers by going to the Activation site and clicking "Manage Triggers" (provisioning covered in the next section). There are 4 types of Triggers we can create which are:
- Abandonment (Send an email or SMS after a gap of between 10 minutes to 2 hours)
- Actions (Send an email or SMS if a particular action is performed on the site)
- Session Start (Send an email or SMS if an action occurred at the start of a session)
- Session End (Send an email or SMS if an action occurred at the end of a session)
Below is the UI we see when we create a new Trigger based on an abandonment.
Once created, Triggers will start collecting data immediately based on the conditional logic. In my actual example, I've created a simple Trigger based on an action tied to a particular Page Name.
Few Considerations While Using Triggers
- We can create up to 100 Triggers.
- We cannot bring in any calculated metrics or segments created in Adobe Analytics.
- There's no way to select a Visitor container like we can in the Analytics Segment UI.
- Values from Adobe Analytics reporting don't automatically populate in the dropdown menu when we use the "Equal" operator.
- For Products or other dimensional data, there's no way to know which particular product has been added to the cart etc. so all the data is sent as it comes in. Prior manipulation of data will have to done to specify exactly which product was sent.
- The conditional logic to create Triggers can get really cumbersome and there's a lot of flexibility provided around boolean logic and Containers provided in the Triggers UI.
Common Use Cases For Triggers
There are numerous use cases that can be met using Triggers and below are some examples. Please note that for these to work properly, the user would have to be signed in.
- Abandonment (Time Bound)
- A user abandons the cart or form and needs to be contacted within 10 minutes
- A user signs up for an offer and you need to send a confirmation email
- Notify of a shipment or password reset
- A user purchases a product
- Actions (Event Driven)
- A user views a promotional video
- A user completes a survey
- Personalize email to show last product viewed
- Confirm when a prospect opts-in for a newsletter
- Session Start and End-I haven't used these yet
- A user visits a campaign landing page after clicking on an ad
- A user did not sign up for a form and exited the site
Aside from these, we can leverage the propensity score attribute to NOT trigger an email if a user is likely to visit the website in the next 30 days.
Triggers Provisioning
Email the Digital Request Alias
Anyone can can email the Digital-Request@adobe.com alias to get Triggers enabled for their Experience Cloud Org. This team will enable Triggers in the Admin Console as well as enable Triggers in Adobe Campaign Standard (They create an additional ticket). Below is what needs to be communicated in the email:- Marketing Cloud Company Name
- IMS ORG ID
- Analytics Login Company (could be same as marketing cloud company name)
Map Report Suites to the Experience Cloud Org
All Adobe Analytics Report Suites need to be mapped to the correct Experience Cloud Org as explained here.Enable Triggers in the Admin Console
In the Adobe Admin console, we need to turn on the toggle to enable Triggers as shown below.Create Data Sources
Create a data source in Customer Attributes to capture authenticated users which includes an integration code. This is needed to tie users logging in to the website with profile data in Adobe Campaign Standard. Please note that the user ID is hashed and needs to be reconciled in Adobe Campaign Standard (covered below).Sync the Hashed User IDs with the Experience Cloud
This is a very important piece of this integration and is a required step to sync Customer or Declared IDs captured on the site with AAM or Customer Attributes and eventually with Campaign. This can be done easily in a Tag Manager like Launch.
Reconcile Triggers with the ID Service in Campaign Standard
The final step is to reconcile the an encrypted ID with a Declared ID data source in Adobe Campaign Standard. Below is an example of a Declared ID data source in ACS which is a new data source that needs to be created tied to the authenticated Customer ID by going to Administration -> Application settings -> Shared Data Sources. The link below the image covers this step in more detail.
Here's some more information on how to configure Triggers to send emails in Adobe Campaign Standard:
Triggers are also Accessible via Adobe I/O
I recently wrote about Adobe APIs last time and covered how to create an integration in Adobe I/O but this link covers how to connect with the Triggers API.
Common Access Issues
I recently ran into some issues while trying to access Triggers and had to log tickets internally at Adobe so if you run into these issues, you'll have to ask your Campaign consultant to log these on your behalf.
The first issues I ran into was around not being able to create a trigger. The fix for this was to map the report suites to the Experience Cloud (covered above).
This is an issue which I'm currently facing for a client where I'm unable to create an authenticated Customer ID Data Source. I had to log an internal ticket to get this resolved.
Simplified Integration Architecture
Below is a simplified architecture diagram I put together to outline the integration between Analytics and Adobe Campaign Standard using Triggers. I've leveraged some internal documentation to provide more details primarily around steps 4-6. Below is a screenshot of that and a summary of the various steps.
2a - ECID Service is called and relevant IDs are returned back to the page
2b - If the visitor is logged in, an Authenticated "Declared ID" will be paired with the ECID
3 - Analytics image request fires and page/event level data gets sent to Adobe Analytics
4 - Real-Time Events sent via Analytics are detected using the Triggers State Machine
5 - Events are "enriched" with the Customer ID sent from the ID Service
6 - The enriched trigger events are sent through Pipeline Services and made available to Campaign. ACS "listens" for Trigger data that comes in as IDs starting with analyticsHitSummary
7 - Campaign queries data sources to build personalized multi-channel messages
8 - Campaign ingests/shares data from/to other data sources
9 - ACS delivers marketing messages across channels (Email, SMS) based on Triggers
10 - Customer clicks on the email and is routed back to the client website
So that was it! I hope you found this post helpful and hope that it will pique your interest in Triggers if you aren't already using it. Here's a link to another post where I've written about how to use webhooks to listen for Triggers.
Subscribe to:
Posts (Atom)

















































