Coder Social home page Coder Social logo

coremedia / coremedia-marketing-integration Goto Github PK

View Code? Open in Web Editor NEW
2.0 44.0 2.0 1.14 MB

CoreMedia extensions for integrating marketing tools into CoreMedia for newsletter creation

License: Other

Java 69.15% ActionScript 12.04% FreeMarker 14.32% JavaScript 0.06% SCSS 4.43%
coremedia cms integration marketing marketing-tools coremedia-labs ibm-watson marketo salesforce newsletter

coremedia-marketing-integration's Introduction

Status: Active For CoreMedia CMS Tested: 3.1801.2

Coremedia Marketing Integration

This CoreMedia extension will allow you to integrate just about any marketing tool or platform into your CoreMedia system. We have provided out-of-the-box integration implementations for IBM Watson, Salesforce Marketing Cloud and Marketo.

Employ the beauty and power of the Studio interface to craft your newsletter using templates. Drag and drop content into your newsletter and perfect the look of it with our immediate preview update. Then send it with the push of a button to your marketing tool. Reaching your customers via email was never easier.

This extension provides a generic interface which can be used to implement integrations for practically any marketing tool with an API that enables newsletter customization. We've also included the integration implementation for marketing systems such as Salesforce Marketing Cloud, Marketo or IBM Watson Campaign Automation which can be used out-of-the box.

The configuration is done through settings and templates which can be conveniently created in CoreMedia Studio. Extending or even looking at the code is completely unneccesary, as all setup for connections to the marketing system, options and templates is kept cleanly separated from the extension code.

Here is an overview of the steps to take to install and configure the extension. The details for these steps together with example settings can be found in the wiki.

1. Get the extension

To install the extension, download the project as zip file and unpack it into the extensions folder of your workspace. The add the marketing extension to your extensions.properties file. Then run the extension tool on your workspace to enable the extension and build with maven.

2. Configure the connection to the marketing system

Every marketing system integration consists of a connection and services that are attached to the connection. The first available service is the NewsletterService which is implemented for IBM, Salesforce and Marketo. The connection is configured using a Settings document containing the name and location of the service and the credentials.

3. Add the setup configuration for the Newsletter Service

Here you will configure the settings for the service, such as the replyTo and from email address, and the template to use for rendering. This is also done via a Settings document.

4. Add the Marketing UI to Studio

Configure the Studio form for pages to show a Marketing tab. This tab will allow you to push your newsletter to your configured marketing tool directly from Studio.

5. Create a template for your newsletter

The code repository for the Marketing integrations also contains an example theme which you may customize for your needs. The example templates have specific placeholders for IBM which may need to be changed. Alternatively, you may create your own theme using our frontend developer workflow.

That's it! After these 5 easy steps, your extension is installed and ready to use.


CoreMedia Labs

Welcome to CoreMedia Labs! This repository is part of a platform for developers who want to have a look under the hood or get some hands-on understanding of the vast and compelling capabilities of CoreMedia. Whatever your experience level with CoreMedia is, we've got something for you.

Each project in our Labs platform is an extra feature to be used with CoreMedia, including extensions, tools and 3rd party integrations. We provide some test data and explanatory videos for non-customers and for insiders there is open-source code and instructions on integrating the feature into your CoreMedia workspace.

The code we provide is meant to be example code, illustrating a set of features that could be used to enhance your CoreMedia experience. We'd love to hear your feedback on use-cases and further developments! If you're having problems with our code, please refer to our issues section.

coremedia-marketing-integration's People

Contributors

jensdallmann avatar katherine-thompson avatar mfaust avatar sbuettne avatar skochte avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

coremedia-marketing-integration's Issues

Salesforce Marketing Cloud - Classic Content EOL announced, update to Content Builder

Update from Classic Content to Content Builder. Classic Content EOL is December 2018.
If we don't update, we won't be able to push newsletter to SFMC any more starting January 2019.

"Classic Content end of support has been announced. Find additional details here. Use Content Builder to simplify your email creation, testing, and sending experience."
https://help.salesforce.com/articleView?id=mc_overview_content_and_email_creation_tools.htm&type=5

Marketo throws an error, if Studio tries to push a newsletter template, which already exists

If a marketing template already exists in Marketo, Studio complains with "For input string: "content" failed to convert to a number".
The error is actually caused by the fact that the newsletter template already exist in Marketo.

Maybe we should push the same template to Marketo with name "_1", "_2" etc, or just notify the editor in Studio that the template already exists in Marketo.

2018-06-29 15:55:48 [ERROR] com.coremedia.blueprint.marketing.marketo.api.MarketoClient [] - Error from marketo: Fashion Newsletter Duplicate email template name (catalina-exec-9)
2018-06-29 15:55:48 [WARN] com.coremedia.blueprint.marketing.marketo.api.MarketoNewsletterServiceImpl [] - An existing template was already found with name 'Fashion Newsletter', executing update instead. (catalina-exec-9)
2018-06-29 15:55:48 [ERROR] com.coremedia.blueprint.marketing.marketo.api.MarketoNewsletterServiceImpl [] - Failed to push marketo newsletter template: For input string: "content" failed to convert to a number (catalina-exec-9)
java.io.IOException: For input string: "content" failed to convert to a number
at com.coremedia.blueprint.marketing.marketo.api.MarketoClient.updateEmailTemplate(MarketoClient.java:66)
at com.coremedia.blueprint.marketing.marketo.api.MarketoNewsletterServiceImpl.pushTemplate(MarketoNewsletterServiceImpl.java:36)
at com.coremedia.blueprint.studio.marketing.newsletter.NewsletterResource.pushTemplate(NewsletterResource.java:112)
at sun.reflect.GeneratedMethodAccessor748.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
at com.coremedia.rest.spring.JerseyController.handleRequest(JerseyController.java:167)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.coremedia.blueprint.livecontext.ecommerce.filter.CommerceConnectionFilter.doFilter(CommerceConnectionFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.coremedia.elastic.core.impl.servlet.TenantFilter.doFilter(TenantFilter.java:55)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.coremedia.rest.cap.authentication.SpringSecurityCapSessionFilter.doFilter(SpringSecurityCapSessionFilter.java:106)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)

Push to Marketing uses hardcoded live cae hostname

And reads this value from a setting. Therefore you cannot reuse the same content for different environments. We have solved this for es differently using placeholders.

Have a look at com.coremedia.blueprint.base.elastic.social.links.SimpleLinkFormatter

The SimpleLinkFormatter wraps the default LinkFormatter and adds a fake ServletRequest.

com.coremedia.blueprint.base.links.impl.LinkAbsolutizer handles the creation of an absolute Link for you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.