{"id":57700,"date":"2023-07-11T09:06:08","date_gmt":"2023-07-11T03:36:08","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=57700"},"modified":"2024-06-10T15:38:36","modified_gmt":"2024-06-10T10:08:36","slug":"campaign-standard-integration-in-aem","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/campaign-standard-integration-in-aem\/","title":{"rendered":"Campaign Standard Integration in AEM"},"content":{"rendered":"<h3><strong>Introduction:<\/strong><\/h3>\n<p>In this comprehensive guide, we will walk you through the end-to-end process of integrating Adobe Campaign Standard into Adobe Experience Manager (AEM) with a real-world use case. You will learn how to seamlessly connect the two platforms and leverage the power of Adobe Campaign&#8217;s marketing automation capabilities within AEM. We will cover the steps from setting up the integration, creating projects, generating key pairs, and establishing secure authentication. With a practical use case, we will demonstrate how to retrieve customer profiles, send personalized transactional messages, and seamlessly subscribe users to newsletters. Get ready to unlock the full potential of Adobe Campaign Standard within your AEM environment.<strong><br \/>\n<\/strong><\/p>\n<h3 id=\"CampaignStandardIntegrationinAEM-Prerequisites:\"><strong>Prerequisites:<\/strong><\/h3>\n<ol>\n<li>\u00a0You should have access to\u00a0<a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/console\/\" rel=\"nofollow\">Adobe developer console.<\/a><\/li>\n<li>\u00a0On dev console, you should have access to\u00a0<a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/developer-console\/docs\/guides\/services\/services-add-api-jwt\/\" rel=\"nofollow\">Adobe Campaign.<\/a><\/li>\n<li>\u00a0You should have access to Adobe Campaign Standard instance access as well to create campaigns and messages.<\/li>\n<\/ol>\n<h3 id=\"CampaignStandardIntegrationinAEM-StepstoIntegrateAdobeCampaignAPIsinAEMproject\">Steps to Integrate Adobe Campaign APIs in AEM project<\/h3>\n<ol>\n<li>Create an account at the<a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/console\/\" rel=\"nofollow\">\u00a0Adobe developer console<\/a>.<\/li>\n<li>On dev console, create a project and add the Campaign API to it.<\/li>\n<li>Generate key pair in project setup and store the private key from the downloaded config file.<\/li>\n<li>Navigate to the API documentation to see which operations you can perform in Adobe Campaigns via Adobe I\/O.<\/li>\n<li>Set up a connection with the campaign standard server using the JWT token to fetch the access token. You can find\u00a0<a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/developer-console\/docs\/guides\/authentication\/IMS\/\" rel=\"nofollow\">documentation\u00a0<\/a>on how to do this on the developer console.<\/li>\n<li>Now you have the access token, and you can make use of all the available APIs from Adobe I\/O.<\/li>\n<\/ol>\n<h2 id=\"CampaignStandardIntegrationinAEM-StepsExplained\"><u>Steps Explained<\/u><\/h2>\n<h3 id=\"CampaignStandardIntegrationinAEM-1.CreateProjectforCampaignsatAdobedevconsole\">1.\u00a0 Create Project for Campaigns at the Adobe dev console<\/h3>\n<ol>\n<li>Navigate to the\u00a0<a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/console\/\" rel=\"nofollow\">dev console<\/a>. If not created the account, create and proceed.<br \/>\n<a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/developer-console\/docs\/guides\/projects\/projects-empty\/\" rel=\"nofollow\">Create a project<\/a>\u00a0for your application.<\/li>\n<li>Once created, <a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/developer-console\/docs\/guides\/services\/services-add-api-jwt\/\" rel=\"nofollow\">add Campaign API<\/a>\u00a0to your project. Select Adobe Campaign and then Generate Key pair in the next step.\n<p>config.zip gets downloaded. Public Key Certificate and the private key gets downloaded<\/li>\n<li>After successful API creation, you will land on Adobe Campaign SDK details for your project with Service Account credentials info.<\/li>\n<li>If you go to the last of the page, you can navigate to the <u><a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/get-started-apis.html?lang=en\" rel=\"nofollow\">API documentation<\/a><\/u> where you can make use of these credentials to access Campaign APIs.Here you can navigate which all operations we can perform in Adobe campaigns via Adobe I\/O.\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-57749\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-23_23-34-47-1024x230.png\" alt=\"\" width=\"625\" height=\"140\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-23_23-34-47-1024x230.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-23_23-34-47-300x68.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-23_23-34-47-768x173.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-23_23-34-47-624x140.png 624w, \/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-23_23-34-47.png 1111w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/li>\n<\/ol>\n<h3 id=\"CampaignStandardIntegrationinAEM-2.CampaignsStandardAuthentication\">2. Campaigns Standard Authentication<\/h3>\n<p>You can set up connection with the campaign standard server using the JWT token to fetch Access Token. (<a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/developer-console\/docs\/guides\/authentication\/IMS\/\" rel=\"nofollow\">documentation<\/a>)<\/p>\n<p>From the config we downloaded earlier at the project creation on developer console,<br \/>\n<em>Get and store the private key<\/em>.<\/p>\n<p>Adobe I\/O &#8211;\u00a0<a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/about-campaign-standard-apis\/setting-up-api-access.html?lang=en\" rel=\"nofollow\">setting up API access steps<\/a><\/p>\n<p>For implementation reference , check the code below:<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeHeader panelHeader pdl\"><b>Login API Post<\/b><\/div>\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_615259\" class=\"syntaxhighlighter sh-midnight nogutter java\">\n<pre class=\"line number1 index0 alt2\" data-bidi-marker=\"true\"><code class=\"java comments\">\/\/privateKey = RSA private key retrieved earlier<\/code> <code class=\"java comments\">\r\n\/\/ orgid = Organization id , techact = Technical Account Id.\u00a0<\/code> \r\n<code class=\"java comments\">\/\/ apikey = Client id, clientsecret = Client Secret<\/code> \r\n<code class=\"java comments\">\/\/AUTH_SERVER_FQDN = \"ims-na1.adobelogin.com\"\u00a0<\/code> \r\n\r\n<code class=\"java comments\">\/\/Initialize JWT Claims(Payload)<\/code> \r\n<code class=\"java plain\">String[] metascopes =\u00a0<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">String[]{<\/code><code class=\"java string\">\"ent_campaign_sdk\"<\/code><code class=\"java plain\">};<\/code> \r\n<code class=\"java plain\">HashMap&lt;String, Object&gt; jwtClaims =\u00a0<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">HashMap&lt;&gt;();<\/code> \r\n<code class=\"java plain\">jwtClaims.put(<\/code><code class=\"java string\">\"iss\"<\/code><code class=\"java plain\">, orgid);<\/code> \r\n<code class=\"java plain\">jwtClaims.put(<\/code><code class=\"java string\">\"sub\"<\/code><code class=\"java plain\">, techact);<\/code> \r\n<code class=\"java plain\">jwtClaims.put(<\/code><code class=\"java string\">\"exp\"<\/code><code class=\"java plain\">, System.currentTimeMillis() \/\u00a0<\/code><code class=\"java value\">1000<\/code>\u00a0<code class=\"java plain\">+ 86400L);<\/code> \r\n<code class=\"java plain\">jwtClaims.put(<\/code><code class=\"java string\">\"aud\"<\/code><code class=\"java plain\">,\u00a0<\/code><code class=\"java string\">\"https:\/\/\"<\/code>\u00a0<code class=\"java plain\">+ AUTH_SERVER_FQDN +\u00a0<\/code><code class=\"java string\">\"\/c\/\"<\/code>\u00a0<code class=\"java plain\">+ apikey);<\/code> \r\n<code class=\"java keyword\">for<\/code>\u00a0<code class=\"java plain\">(String metascope : metascopes) {<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">jwtClaims.put(<\/code><code class=\"java string\">\"https:\/\/\"<\/code>\u00a0<code class=\"java plain\">+ AUTH_SERVER_FQDN +\u00a0<\/code><code class=\"java string\">\"\/s\/\"<\/code>\u00a0<code class=\"java plain\">+ metascope, Boolean.TRUE);<\/code> <code class=\"java plain\">\r\n}<\/code> \r\n<code class=\"java spaces\">\u00a0<\/code>\u00a0 \r\n<code class=\"java comments\">\/\/sign with Private Key<\/code> \r\n<code class=\"java plain\">String jwtToken = Jwts.builder().setClaims(jwtClaims).signWith(RS256, privateKey).compact();<\/code> \r\n<code class=\"java spaces\">\u00a0<\/code>\u00a0 \r\n<code class=\"java comments\">\/\/Perform HTTP post<\/code> \r\n<code class=\"java plain\">HttpPost authPostRequest =\u00a0<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">HttpPost(<\/code><code class=\"java string\">\"<a href=\"https:\/\/ims-na1.adobelogin.com\/ims\/exchange\/jwt\/\">https:\/\/ims-na1.adobelogin.com\/ims\/exchange\/jwt\/<\/a>\"<\/code><code class=\"java plain\">);<\/code> \r\n<code class=\"java plain\">authPostRequest.addHeader(CACHE_CONTROL, NO_CACHE);<\/code> \r\n<code class=\"java plain\">List&lt;NameValuePair&gt; params =\u00a0<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">ArrayList&lt;&gt;();<\/code> \r\n<code class=\"java plain\">params.add(<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">BasicNameValuePair(<\/code><code class=\"java string\">\"jwt_token\"<\/code><code class=\"java plain\">, jwtToken));<\/code> \r\n<code class=\"java plain\">params.add(<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">BasicNameValuePair(<\/code><code class=\"java string\">\"client_id\"<\/code><code class=\"java plain\">, apikey));<\/code> \r\n<code class=\"java plain\">params.add(<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">BasicNameValuePair(<\/code><code class=\"java string\">\"client_secret\"<\/code><code class=\"java plain\">, clientsecret));<\/code> \r\n<code class=\"java plain\">authPostRequest.setEntity(<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">UrlEncodedFormEntity(params));<\/code> \r\n<code class=\"java plain\">HttpResponse response = httpClient.execute(authPostRequest);<\/code> \r\n<code class=\"java spaces\">\u00a0<\/code>\u00a0 \r\n<code class=\"java comments\">\/\/process response<\/code> \r\n<code class=\"java plain\">HttpEntity entity = response.getEntity();<\/code> \r\n<code class=\"java plain\">JsonObject jo =\u00a0<\/code><code class=\"java keyword\">new<\/code>\u00a0<code class=\"java plain\">JsonParser().parse(EntityUtils.toString(entity)).getAsJsonObject();<\/code> \r\n<code class=\"java keyword\">return<\/code>\u00a0<code class=\"java plain\">jo.get(<\/code><code class=\"java string\">\"access_token\"<\/code><code class=\"java plain\">).getAsString();<\/code><\/pre>\n<div data-bidi-marker=\"true\"><\/div>\n<p>Now that we have the Access Token with Us,<\/p>\n<\/div>\n<div class=\"syntaxhighlighter sh-midnight nogutter java\">We can make use of all the available APIs from Adobe I\/O<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"CampaignStandardIntegrationinAEM-3.RetrieveProfilesfromCampaignStandard\">3. Retrieve Profiles from Campaign Standard<\/h3>\n<p><a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/managing-profiles\/retrieving-profiles.html?lang=en\" rel=\"nofollow\">API documentation<\/a><\/p>\n<p>Added cURL, used in demo project, below for reference<br \/>\n<strong>Retrieve Profiles<\/strong><\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_534867\" class=\"syntaxhighlighter sh-midnight nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<pre class=\"line number1 index0 alt2\" data-bidi-marker=\"true\"><code class=\"java plain\">curl --location -g --request GET\u00a0<\/code><code class=\"java string\">'<a href=\"https:\/\/mc.adobe.io\/\">https:\/\/mc.adobe.io\/<\/a>{{org_id}}\/campaign\/profileAndServices\/profile'<\/code> <code class=\"java plain\">\\<\/code> \r\n<code class=\"java plain\">--header\u00a0<\/code><code class=\"java string\">'X-Api-Key: {{api_key}}'<\/code>\u00a0<code class=\"java plain\">\\<\/code> \r\n<code class=\"java plain\">--header\u00a0<\/code><code class=\"java string\">'Authorization; Bearer {{access_token}}'<\/code>\u00a0<code class=\"java plain\">\\<\/code> \r\n<code class=\"java plain\">--header\u00a0<\/code><code class=\"java string\">'Content-Type: application\/json'<\/code>\u00a0<code class=\"java plain\">\\<\/code> \r\n<code class=\"java plain\">--data-raw '{<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"ctx\"<\/code><code class=\"java plain\">: {<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">},<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"email\"<\/code><code class=\"java plain\">:\u00a0<\/code><code class=\"java string\">\"\\\"\\\\\\\"polidew222@agrolivana.com\\\\\\\"\\\"\"<\/code> \r\n<code class=\"java plain\">}'<\/code><\/pre>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<p><span style=\"font-family: Consolas, Monaco, monospace;\">Now we have the APIs in Place.<\/p>\n<p><\/span><\/div>\n<\/div>\n<\/div>\n<p>We have integrated shooting emails from our demo AEM app via\u00a0<strong>Transactional Messaging<\/strong>\u00a0and subscribing to\u00a0<strong>Newsletter Campaigns<\/strong>\u00a0on Campaign Standard:<\/p>\n<h3 id=\"CampaignStandardIntegrationinAEM-4.SendingTransactionalMessagefromAEMapp\">4. Sending Transactional Messages from the AEM app:<\/h3>\n<p><a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/communication-channels\/transactional-messaging\/getting-started-with-transactional-msg.html\" rel=\"nofollow\">API documentation<\/a> for creating transactional Messages on Campaign standard<br \/>\nOnce you have followed the above steps and published &amp; tested your transactional message<br \/>\nYou can navigate to the Event configuration of the transactional message and check the Api preview for\u00a0<a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/managing-transactional-messages.html?lang=en\" rel=\"nofollow\">managing the message via REST Api<\/a>.<\/p>\n<p>Refer to cURL below, used in our demo AEM app, for reference<\/p>\n<p><strong>Send Transactional Message<\/strong><\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_624986\" class=\"syntaxhighlighter sh-midnight nogutter java\">\n<pre class=\"line number1 index0 alt2\" data-bidi-marker=\"true\"><code class=\"java plain\">curl --location -g --request POST\u00a0<\/code><code class=\"java string\">'<a href=\"https:\/\/mc.adobe.io\/\">https:\/\/mc.adobe.io\/<\/a>{{org_id}}\/campaign\/mctangerinedigiapacptrsd\/EVTsampleTransactionalEmail'<\/code>\u00a0<code class=\"java plain\">\\<\/code> <code class=\"java plain\">--header\u00a0<\/code><code class=\"java string\">'X-Api-Key: {{api_key}}'<\/code>\u00a0<code class=\"java plain\">\\<\/code> \r\n<code class=\"java plain\">--header\u00a0<\/code><code class=\"java string\">'Authorization; Bearer {{access_token}}'<\/code>\u00a0<code class=\"java plain\">\\<\/code> \r\n<code class=\"java plain\">--header\u00a0<\/code><code class=\"java string\">'Content-Type: application\/json'<\/code>\u00a0<code class=\"java plain\">\\<\/code> \r\n<code class=\"java plain\">--data-raw '{<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"email\"<\/code><code class=\"java plain\">:\u00a0<\/code><code class=\"java string\">\"test-u6vse5z1s@srv1.mail-tester.com\"<\/code><code class=\"java plain\">,<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"ctx\"<\/code><code class=\"java plain\">: {<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"hasInsurance\"<\/code><code class=\"java plain\">:\u00a0<\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">,<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"dob\"<\/code><code class=\"java plain\">:\u00a0<\/code><code class=\"java string\">\"string127\"<\/code><code class=\"java plain\">,<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"lname\"<\/code><code class=\"java plain\">:\u00a0<\/code><code class=\"java string\">\"Vashistha\"<\/code><code class=\"java plain\">,<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"fname\"<\/code><code class=\"java plain\">:\u00a0<\/code><code class=\"java string\">\"Pulkit\"<\/code> \r\n<code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code> \r\n<code class=\"java plain\">}'<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"CampaignStandardIntegrationinAEM-5.IntegrationofNewsletterSubscription\">5. Integration of Newsletter Subscription:<\/h3>\n<p>Making Use of Adobe I\/O we have integrated following Logic for Campaign Standard with the Subscribe to Newsletter Campaign on our AEM application\u00a0:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-57750\" src=\"\/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-24_10-49-41-1.png\" alt=\"\" width=\"780\" height=\"186\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-24_10-49-41-1.png 780w, \/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-24_10-49-41-1-300x72.png 300w, \/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-24_10-49-41-1-768x183.png 768w, \/blog\/wp-ttn-blog\/uploads\/2023\/07\/image-2023-4-24_10-49-41-1-624x149.png 624w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>In the above component, on the home page User enters the mail id and hits subscribe.<br \/>\nNow on the application layer, we are making use of the following business logic to subscribe users to the Newsletter :<\/p>\n<ol>\n<li><a class=\"external-link\" href=\"https:\/\/developer.adobe.com\/developer-console\/docs\/guides\/authentication\/IMS\/\" rel=\"nofollow\">User authentication via JWT to fetch auth token.<\/a><\/li>\n<li><a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/managing-profiles\/retrieving-profiles.html?lang=en\" rel=\"nofollow\">Checking if user exists on Campaign Standard user db<\/a>\u00a0(Search on linked page=&gt;\u00a0Sample request to filter profiles on the basis of email)<\/li>\n<li>If not, then <a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/managing-profiles\/creating-profiles-api.html?lang=en\" rel=\"nofollow\">create\u00a0<\/a>and\u00a0<a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/managing-profiles\/retrieving-profiles.html?lang=en\" rel=\"nofollow\">fetch\u00a0<\/a>profile.<\/li>\n<li>If it exists, then store the profile.<\/li>\n<li><a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/managing-transactional-messages.html?lang=en\" rel=\"nofollow\">Send a transactional message<\/a>\u00a0to the mail id.<\/li>\n<li>Use the profile to fetch the subscription URL for the profile from the json =&gt; profilejson[0].subscriptions.href<\/li>\n<li>Now use the subscription URL for the User and Pkey for the subscription service in Campaign Standard to <a class=\"external-link\" href=\"https:\/\/experienceleague.adobe.com\/docs\/campaign-standard\/using\/working-with-apis\/managing-services-and-subscriptiopns\/perform-subscriptions.html?lang=en\" rel=\"nofollow\">subscribe user to Service<\/a>\u00a0(use Method 1).<\/li>\n<\/ol>\n<p><b>Conclusion:<br \/>\n<\/b><\/p>\n<p>In conclusion, this article has described how to integrate Adobe Campaign APIs with AEM. The integration allows you to send transactional messages and subscribe users to newsletter campaigns on Campaign Standard. The code examples provided in the article can be used as a starting point for your own integration projects. The integration of Adobe Campaign and AEM provides several benefits, including improved email deliverability, increased engagement, and automated workflows.<\/p>\n<p>Specifically, Adobe Campaign can help you:<\/p>\n<ul>\n<li>Improve the deliverability of your emails by providing insights into your email audience and helping you create targeted and personalized messages.<\/li>\n<li>Increase engagement with your email subscribers by providing you with tools to track opens, clicks, and other metrics.<\/li>\n<li>Automate your email marketing workflows, freeing your time to focus on other tasks.<\/li>\n<\/ul>\n<p>If you are looking for a way to improve your email marketing, then integrating Adobe Campaign with AEM is a great option. The integration provides a number of benefits that can help you to improve the deliverability, engagement, and automation of your email campaigns.<\/p>\n<p><b><span style=\"font-weight: 400;\">If you still have questions, comment and join the discussion! <\/span><\/b>Meanwhile, check out our other blog posts: <a href=\"https:\/\/www.tothenew.com\/blog\/jose-encryption-and-aem-keystore-integration\/\"><span style=\"font-weight: 400;\">JOSE Encryption and AEM Keystore Integration<\/span><\/a><\/p>\n<div class=\"ap-custom-wrapper\"><\/div><!--ap-custom-wrapper-->","protected":false},"excerpt":{"rendered":"<p>Introduction: In this comprehensive guide, we will walk you through the end-to-end process of integrating Adobe Campaign Standard into Adobe Experience Manager (AEM) with a real-world use case. You will learn how to seamlessly connect the two platforms and leverage the power of Adobe Campaign&#8217;s marketing automation capabilities within AEM. We will cover the steps [&hellip;]<\/p>\n","protected":false},"author":1453,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":56},"categories":[5868,1964,446,1953,4926,1],"tags":[5273,5277,4847,5272,5276,5274,5275],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/57700"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1453"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=57700"}],"version-history":[{"count":8,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/57700\/revisions"}],"predecessor-version":[{"id":57757,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/57700\/revisions\/57757"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=57700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=57700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=57700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}