Regulations such as HIPAA require that Journey Optimizer should provide a way to archive messages sent to individuals. Indeed, if your customers raise a claim, they should have the ability to get a copy of the sent message for verification purpose.
For the email channel, Journey Optimizer provides a built-in BCC email capability. Learn more
Additionnaly, for all channels, you can use the ‘Template’ field in the Entity Dataset, which contains the details of the non-personalized message templates. Export the dataset with this field to save metadata such as: who sent the message, to whom and when. Note that personalized data is not exported - only the template (format and structure of the message) is taken into account. Learn more
Journey Optimizer does not own support for SMS archival requirement. For dedicated archival support, work with your SMS vendor (Synch or Twilio).
You can send blind carbon copy (BCC) of an email sent by Journey Optimizer to a dedicated BCC address. This optional feature allows you to retain copies of email communications you send to your users for compliance and/or archival purposes. The BCC address is not visible to other recipients of the message.
To enable the BCC email option, enter the email address of your choice in the dedicated field of the channel surface (i.e. message preset). You can specify any external address in correct format, except an email address defined on a subdomain delegated to Adobe. For example, if you delegated the marketing.luma.com subdomain to Adobe, any address like firstname.lastname@example.org is prohibited.
You can only define one BCC email address. Make sure the BCC address has enough reception capacity to store all the emails that are sent using the current channel surface.
More recommendations are listed in this section.
If you have purchased the Healthcare Shield add-on offering, you must ensure that your BCC addresse’s ISP supports the TLS 1.2 protocol.
Once configuration is done, all email messages based on this surface are blind-copied to the BCC email address you entered. From there, messages can be processed and archived using an external system.
Your BCC feature usage is counted against the number of messages you are licensed for. Hence, only enable it in the surfaces used for critical communications that you wish to archive. Check your contract for licensed volumes.
The BCC email address setting is immediately saved and processed at the surface level. When you create a new message using this surface, the BCC email address is automatically displayed.
However, the BCC address gets picked up for sending communications following the logic described here.
To ensure your privacy compliance, BCC emails must be processed by an archiving system capable of storing securely personally identifiable information (PII).
As messages can contain sensitive or private data, such as personally identifiable information (PII), make sure the BCC address is correct, and secure the access to messages.
Your inbox used for BCC should be properly managed for space and delivery. If the inbox returns bounces, some emails may not be received and therefore will fail to get archived.
Messages may be delivered to the BCC email address before the target recipients. BCC messages can also been sent even though the original messages may have bounced.
Do not open or click through the emails sent to the BCC address as it is taken into account in the total opens and clicks from the send analysis, which could cause some miscalculations in reports.
Do not mark messages as spam in the BCC inbox, as it will impact all the other emails sent to this address.
Do not click the unsubscribe link in the emails sent to the BCC address as you will immediately unsubscribe the corresponding recipients.
Regulations such as GDPR state that Data Subjects should be able to modify their consent at any time. Because the BCC emails you are sending with Journey Optimizer include securely personally identifiable information (PII), you must edit the CJM Email BCC Feedback Event Schema to be able to manage these PII in compliance with GDPR and similar regulations.
To do this, follow the steps below.
Go to Data management > Schemas > Browse and select CJM Email BCC Feedback Event Schema.
Click to expand _experience, customerJourneyManagment then secondaryRecipientDetail.
In the Field properties on the right, scroll down to the Identity checkbox.
Select it and also select Primary identity.
Select a namespace from the drop-down list.
Learn more on managing Privacy and the applicable regulations in the Experience Platform documentation.
Reporting as such on BCC is not available in the journey and message reports. However, information is stored on a system dataset called AJO BCC Feedback Event Dataset. You can run queries against this dataset to find useful information for debugging purpose for example.
You can access this dataset through the user interface. Select Data management > Datasets > Browse and enable the Show system datasets toggle from the filter to display the system-generated datasets. Learn more on how to access datasets in this section.
To run queries against this dataset, you can use the Query Editor provided by the Adobe Experience Platform Query Service. To access it, select Data management > Queries and click Create query. Learn more
Depending on what information you are looking for, you can run the following queries.
For all the other queries below, you will need the journey action ID. Run this query to fetch all action IDs associated with a particular journey version ID within the last 2 days:
SELECT DISTINCT CAST(TIMESTAMP AS DATE) AS EventTime, _experience.journeyOrchestration.stepEvents.journeyVersionID, _experience.journeyOrchestration.stepEvents.actionName, _experience.journeyOrchestration.stepEvents.actionID FROM journey_step_events WHERE _experience.journeyOrchestration.stepEvents.journeyVersionID = '<journey version id>' AND _experience.journeyOrchestration.stepEvents.actionID is not NULL AND TIMESTAMP > NOW() - INTERVAL '2' DAY ORDER BY EventTime DESC;
To get the
<journey version id>parameter, select the corresponding journey version from the Journey management > Journeys menu. The journey version ID is displayed at the end of the URL displayed in your web browser.
Run this query to fetch all message feedback events (especially feedback status) generated for a particular message targeted to a specific user within the last 2 days:
SELECT _experience.customerJourneyManagement.messageExecution.journeyVersionID AS JourneyVersionID, _experience.customerJourneyManagement.messageExecution.journeyActionID AS JourneyActionID, timestamp AS EventTime, _experience.customerJourneyManagement.emailChannelContext.address AS RecipientAddress, _experience.customerjourneymanagement.messagedeliveryfeedback.feedbackStatus AS FeedbackStatus, CASE _experience.customerjourneymanagement.messagedeliveryfeedback.feedbackStatus WHEN 'sent' THEN 'Sent' WHEN 'delay' THEN 'Retry' WHEN 'out_of_band' THEN 'Bounce' WHEN 'bounce' THEN 'Bounce' END AS FeedbackStatusCategory FROM cjm_message_feedback_event_dataset WHERE timestamp > now() - INTERVAL '2' day AND _experience.customerJourneyManagement.messageExecution.journeyVersionID = '<journey version id>' AND _experience.customerJourneyManagement.messageExecution.journeyActionID = '<journey action id>' AND _experience.customerJourneyManagement.emailChannelContext.address = '<recipient email address>' ORDER BY EventTime DESC;
To get the
<journey action id> parameter, run the first query described above using the journey version id. The
<recipient email address> parameter is the targeted or actual recipient’s email address.
Run this query to fetch all BCC message feedback events generated for a particular message targeted to a specific user within the last 2 days:
SELECT _experience.customerJourneyManagement.messageExecution.journeyVersionID AS JourneyVersionID, _experience.customerJourneyManagement.messageExecution.journeyActionID AS JourneyActionID, _experience.customerJourneyManagement.emailChannelContext.address AS BccEmailAddress, timestamp AS EventTime, _experience.customerJourneyManagement.secondaryRecipientDetail.originalRecipientAddress AS RecipientAddress, _experience.customerjourneymanagement.messagedeliveryfeedback.feedbackStatus AS FeedbackStatus, CASE _experience.customerjourneymanagement.messagedeliveryfeedback.feedbackStatus WHEN 'sent' THEN 'Sent' WHEN 'delay' THEN 'Retry' WHEN 'out_of_band' THEN 'Bounce' WHEN 'bounce' THEN 'Bounce' END AS FeedbackStatusCategory FROM ajo_bcc_feedback_event_dataset WHERE timestamp > now() - INTERVAL '2' day AND _experience.customerJourneyManagement.messageExecution.journeyVersionID = '<journey version id>' AND _experience.customerJourneyManagement.messageExecution.journeyActionID = '<journeyaction id>' AND _experience.customerJourneyManagement.secondaryRecipientDetail.originalRecipientAddress = '<recipient email address>' ORDER BY EventTime DESC;
Run this query to fetch all recipient addresses who have not received the message whereas its BCC entry exists within the last 30 days:
SELECT DISTINCT bcc._experience.customerJourneyManagement.secondaryRecipientDetail.originalRecipientAddress AS RecipientAddressesNotRecievedMessage FROM ajo_bcc_feedback_event_dataset bcc LEFT JOIN cjm_message_feedback_event_dataset mfe ON bcc._experience.customerJourneyManagement.messageExecution.journeyVersionID = mfe._experience.customerJourneyManagement.messageExecution.journeyVersionID AND bcc._experience.customerJourneyManagement.messageExecution.journeyActionID = mfe._experience.customerJourneyManagement.messageExecution.journeyActionID AND bcc._experience.customerJourneyManagement.secondaryRecipientDetail.originalRecipientAddress = mfe._experience.customerJourneyManagement.emailChannelContext.address AND mfe._experience.customerJourneyManagement.messageExecution.journeyVersionID = '<journey version id>' AND mfe._experience.customerJourneyManagement.messageExecution.journeyActionID = '<journey action id>' AND mfe.timestamp > now() - INTERVAL '30' DAY AND mfe._experience.customerjourneymanagement.messagedeliveryfeedback.feedbackstatus IN ('bounce', 'out_of_band') WHERE bcc.timestamp > now() - INTERVAL '30' DAY;