Expand my Community achievements bar.

SOLVED

Subscription Landing Page that places Profiles in Audiences

Avatar

Level 4

Hi,

In Adobe Campaign Standard, there are some out of the box Subscription Landing Pages which you can code to include additional fields like First name, Last name, Email, etc.  Is there any way when a person subscribes via the subscription page, Along with adding them in Profiles, can you also add them in Audiences?  if so, Can you provide a hint how....

1 Accepted Solution

Avatar

Correct answer by
Level 10

Hi Clarence,

You have several ways of getting a list with all subscribers that registered through a landing page:

  • Setting up a service. When someone submits the form, his profile is added to the database, and he is also subscribed to a "service". You can set this in the landing page properties. You can then easily have a "Query" type audience which will simply contain "Subscribers of the XXX service". Query audiences are computed dynamically every time they are used.
  • Defining a recurring workflow which contains:
    • A scheduler (for example executed once a day)
    • An Incremental Query that retrieves profiles who registered through a specific landing page. Using an Incremental query allow you to only retrieve new profiles since the last execution.
    • A Save Audience activity that will add the new profiles to the Audience of your choice.
      Note that audiences managed that way are static lists of profiles.

Let me know if you'd like more details. Here a a few links that might help:

Hope this helps,

Florent.

View solution in original post

17 Replies

Avatar

Correct answer by
Level 10

Hi Clarence,

You have several ways of getting a list with all subscribers that registered through a landing page:

  • Setting up a service. When someone submits the form, his profile is added to the database, and he is also subscribed to a "service". You can set this in the landing page properties. You can then easily have a "Query" type audience which will simply contain "Subscribers of the XXX service". Query audiences are computed dynamically every time they are used.
  • Defining a recurring workflow which contains:
    • A scheduler (for example executed once a day)
    • An Incremental Query that retrieves profiles who registered through a specific landing page. Using an Incremental query allow you to only retrieve new profiles since the last execution.
    • A Save Audience activity that will add the new profiles to the Audience of your choice.
      Note that audiences managed that way are static lists of profiles.

Let me know if you'd like more details. Here a a few links that might help:

Hope this helps,

Florent.

Avatar

Level 4

Florentlb,

Thanks I will try to set this up.  Would this be the same setup if this was an ACS API through Adobe IO?

Avatar

Level 10

Hi,

I think so. Let me know if you have any specific question.

Florent

Avatar

Level 4

Florentlb,

I have set this up. I noticed, as you mentioned above that I can only select Audiences that are of the Type "List" to add the profiles to. the Audiences of Type "Query" are not selectable (or showing up).  Is that what is expected?

Avatar

Level 10

Hi Clarence,

Yes, the fact that Query audiences are computed dynamically makes it incompatible with List audiences, which are static. Basically:

  • Query audience: you define rules and it automatically calculates the matching population. But what is saved are the rules, so that every time you use that audience the rules are applied again and you have a freshly computed population.
  • List audience: through a workflow, you compute a population (by query, file upload, etc.) and save it using a Save audience activity. What is saved is the final population that arrived in the Save audience activity, making it a static list.

So you cannot have a mix of the 2.

Which of the possibilities mentioned above are your trying to implement?

The easiest way I see if you want to regularly add members to the audience is to first create the original audience through a workflow so that it's a list audience, that you can then complete everytime you execute the workflow.

If you simply want to recompute it entirely on a regular basis then you can juste use a Query audience, that you can define directly under the Audiences menu.

Hope it's not too confusing, it can be a bit tricky (there are even other types of audiences...).

Let me know if I can help further,

Florent.

Avatar

Level 4

Florent,

I have successfully implemented the List Audiences since I am exporting from Exact Target via a workflow and using AEM for subscriptions.  Thank you for all your help, now I can put them from AEM subscriptions into Audiences.  Thanks again. 

Avatar

Level 2

Florent,

Can you please let me know how to handle AEM subscirptions to campaign.

We have a subscirption button in AEM page and we need to trigger an email from adobe campaign on click of button. Can you please let me know the procedure?

Thanks,

Vidhu

Avatar

Level 10

Hi Vidhu,

There is a feature in the integration between AEM and AC that allows to create forms that are mapped with Campaign fields. Here is an overview of how it works: Creating Adobe Campaign Forms in AEM - docs.adobe.com 

Let me know if this works for you,

Florent

Avatar

Level 2

Hi Florent,

I have followed the instructions and developed a form , However after submitting the form I am facing the below issue.

We are using Adobe Campaign Training Environment and I am not sure all the features are available.

Log file of publish instance AEM:

28.08.2017 17:09:04.706 *ERROR* [0:0:0:0:0:0:0:1 [1503920344701] POST /content/campaigns/geometrixx-outdoors/master/e-mails/Sample.html HTTP/1.1] org.apache.sling.servlets.get.impl.DefaultGetServlet No renderer for extension html, cannot render resource ResourceWrapper, type=mcm/campaign/components/form/actions/profileSave, path=/content/campaigns/geometrixx-outdoors/master/e-mails/Sample/jcr:content/par/start, resource=[JcrNodeResource, type=foundation/components/form/start, superType=null, path=/content/campaigns/geometrixx-outdoors/master/e-mails/Sample/jcr:content/par/start]

28.08.2017 17:09:05.402 *INFO* [0:0:0:0:0:0:0:1 [1503920344701] POST /content/campaigns/geometrixx-outdoors/master/e-mails/Sample.html HTTP/1.1] com.day.cq.mcm.campaign.impl.CampaignConnectorImpl Status code: 403; response body is: Authentication required                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

28.08.2017 17:09:05.402 *INFO* [0:0:0:0:0:0:0:1 [1503920344701] POST /content/campaigns/geometrixx-outdoors/master/e-mails/Sample.html HTTP/1.1] com.day.cq.mcm.campaign.impl.CampaignConnectorImpl Requested: /jssp/nms/amcStoreProfile.jssp - data: key=&keyValue=&data={}&mapping=mapRecipient&resource=mapRecipient&__sessiontoken=***

28.08.2017 17:09:05.404 *ERROR* [0:0:0:0:0:0:0:1 [1503920344701] POST /content/campaigns/geometrixx-outdoors/master/e-mails/Sample.html HTTP/1.1] com.day.cq.mcm.campaign.servlets.SaveProfileServlet Could not save profile data

com.day.cq.mcm.campaign.ConnectionException: Unexpected status code (expected 200, was 403)

at com.day.cq.mcm.campaign.impl.CampaignConnectorImpl.postGeneric(CampaignConnectorImpl.java:292)

at com.day.cq.mcm.campaign.impl.CampaignConnectorImpl.postFunction(CampaignConnectorImpl.java:211)

at com.day.cq.mcm.campaign.servlets.SaveProfileServlet.saveProfile(SaveProfileServlet.java:92)

at com.day.cq.mcm.campaign.servlets.SaveProfileServlet.doPost(SaveProfileServlet.java:143)

at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:149)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:346)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378)

at org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552)

at org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:71)

at com.adobe.granite.rest.assets.impl.AssetContentDispositionFilter.doFilter(AssetContentDispositionFilter.java:96)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.wcm.core.impl.WCMDebugFilter.doFilterWithErrorHandling(WCMDebugFilter.java:192)

at com.day.cq.wcm.core.impl.WCMDebugFilter.doFilter(WCMDebugFilter.java:159)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.wcm.core.impl.WCMComponentFilter.filterRootInclude(WCMComponentFilter.java:375)

at com.day.cq.wcm.core.impl.WCMComponentFilter.doFilter(WCMComponentFilter.java:190)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:138)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.personalization.impl.TargetComponentFilter.doFilter(TargetComponentFilter.java:96)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProcessorImpl.java:282)

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.dispatchRequest(SlingRequestProcessorImpl.java:322)

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.dispatch(SlingRequestDispatcher.java:211)

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.forward(SlingRequestDispatcher.java:146)

at com.day.cq.wcm.core.impl.WCMComponentFilter$ForwardRequestDispatcher.forward(WCMComponentFilter.java:503)

at com.day.cq.wcm.foundation.forms.FormsHandlingServletHelper.doPost(FormsHandlingServletHelper.java:155)

at com.day.cq.wcm.foundation.forms.impl.FormsHandlingServlet.doPost(FormsHandlingServlet.java:128)

at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:149)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:346)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378)

at org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552)

at org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:71)

at com.adobe.granite.rest.assets.impl.AssetContentDispositionFilter.doFilter(AssetContentDispositionFilter.java:96)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.wcm.core.impl.WCMDebugFilter.doFilterWithErrorHandling(WCMDebugFilter.java:192)

at com.day.cq.wcm.core.impl.WCMDebugFilter.doFilter(WCMDebugFilter.java:159)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.wcm.core.impl.WCMComponentFilter.filterRootInclude(WCMComponentFilter.java:375)

at com.day.cq.wcm.core.impl.WCMComponentFilter.doFilter(WCMComponentFilter.java:190)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:138)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.personalization.impl.TargetComponentFilter.doFilter(TargetComponentFilter.java:96)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProcessorImpl.java:282)

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.dispatchRequest(SlingRequestProcessorImpl.java:322)

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.dispatch(SlingRequestDispatcher.java:211)

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.forward(SlingRequestDispatcher.java:146)

at com.day.cq.wcm.foundation.forms.FormsHandlingServletHelper.handleFilter(FormsHandlingServletHelper.java:216)

at com.day.cq.wcm.foundation.forms.impl.FormsHandlingServlet.doFilter(FormsHandlingServlet.java:138)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.adobe.granite.optout.impl.OptOutFilter.doFilter(OptOutFilter.java:76)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.wcm.foundation.forms.FormsHandlingServletHelper.handleFilter(FormsHandlingServletHelper.java:221)

at com.adobe.cq.wcm.core.components.internal.servlets.CoreFormHandlingServlet.doFilter(CoreFormHandlingServlet.java:131)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.day.cq.wcm.core.impl.WCMRequestFilter.doFilter(WCMRequestFilter.java:90)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.adobe.cq.mcm.campaign.servlets.CampaignCopyTracker.doFilter(CampaignCopyTracker.java:100)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.rewriter.impl.RewriterFilter.doFilter(RewriterFilter.java:83)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at com.adobe.granite.httpcache.impl.InnerCacheFilter.doFilter(InnerCacheFilter.java:81)

at com.adobe.granite.httpcache.impl.InnerCacheFilter.doFilter(InnerCacheFilter.java:60)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:138)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:73)

at com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl.doFilter(ResourceResolverHelperImpl.java:83)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.doProcessRequest(SlingRequestProcessorImpl.java:151)

at org.apache.sling.engine.impl.SlingMainServlet.service(SlingMainServlet.java:219)

at org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:85)

at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:79)

at com.adobe.granite.license.impl.LicenseCheckFilter.doFilter(LicenseCheckFilter.java:308)

at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)

at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74)

at org.apache.felix.http.sslfilter.internal.SslFilter.doFilter(SslFilter.java:96)

at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)

at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74)

at org.apache.sling.security.impl.ReferrerFilter.doFilter(ReferrerFilter.java:295)

at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)

at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74)

at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:138)

at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)

at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74)

at org.apache.sling.featureflags.impl.FeatureManager.doFilter(FeatureManager.java:116)

at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)

at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74)

at org.apache.sling.engine.impl.log.RequestLoggerFilter.doFilter(RequestLoggerFilter.java:72)

at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)

at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74)

at org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:128)

at org.apache.felix.http.base.internal.dispatch.DispatcherServlet.service(DispatcherServlet.java:49)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)

at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)

at org.eclipse.jetty.server.Server.handle(Server.java:499)

at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)

at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)

at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)

at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)

at java.lang.Thread.run(Unknown Source)

Avatar

Level 2

HI Florent,

Trying to implement the exact same thing but getting an error.

I have put a separate question

Getting error while connecting AEM with Campaign

Will you be able to shed some light here?

Regards,

Manas

Avatar

Level 10

Hi Vidhu,

Can you double check that you are correctly authenticated on both authoring and publishing AEM instances?

Florent

Avatar

Level 10

Sure Manas,

Having a look right now,

Florent

Avatar

Level 2

Hi Florent,

I have checked the campaign configuration in both author and publish instance. we are using training instance hosted by adobe. will that be any reason for this issue

I have configured aemserver operator in campaign and using the same in author and publish and when we connected , we got a message connection test is successful.

Thanks

Vidhu

Avatar

Level 10

Hi Vidhu,

Which version of AEM are you using? So I can make sure of the prerequisites, if any. If the cloud service is correctly set in AEM (and indicates that the connection was tested successfully) and you are able to create a Campaign form, that should be all I can think about.

Please have a look at this page: Troubleshooting your Adobe Campaign Integration - docs.adobe.com  There might be some hints regarding your AEM installation that you'd need to check.

From the logs you shared though, it seems the first one is triggered by the fact that you are not logged in to the publish instance (you can check if you are logged in from yourinstanceURL/crx/de/index.jsp)

If that does not help, please raise a ticket to Adobe support, they'll be able to investigate this further.

Let me know,

Florent

Avatar

Level 2

Hi Florent,

We have resolved the connectivity issues, However after submitting the form, We are getting below error.

01.09.2017 17:27:19.120 *ERROR* [0:0:0:0:0:0:0:1 [1504267039108] POST /content/campaigns/geometrixx-outdoors/master/e-mails/article_cam.html HTTP/1.1] org.apache.sling.servlets.get.impl.DefaultGetServlet No renderer for extension html, cannot render resource ResourceWrapper, type=mcm/campaign/components/form/actions/serviceSubscribe, path=/content/campaigns/geometrixx-outdoors/master/e-mails/article_cam/jcr:content/par/start, resource=[JcrNodeResource, type=foundation/components/form/start, superType=null, path=/content/campaigns/geometrixx-outdoors/master/e-mails/article_cam/jcr:content/par/start]

Any help to resolve this issue please?

Thanks,

Vidhu

Avatar

Level 10

Hi Vidhu,

Looks like there is an issue with the subscription action, can you share a screenshot of how you configured the subscription button?

Florent

Avatar

Level 1

Hi,

Can you give some details on what connectivity issues you have resolved. We have similar issue with saving profile data to campaign from AEM Forms.

Any inputs will really help.

Thanks in advance.

-Ramakrishna