Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

Share

SilverStripe ♥︎ Mautic

Download to read offline

StripeCon Europe 2021 talk about integrating the SilverStripe CMS and Mautic marketing automation open source platforms - by Giancarlo Di Massa @digitall_it

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

SilverStripe ♥︎ Mautic

  1. 1. GIANCARLO DI MASSA // DIGITALL.IT Empowering your website by integrating an open source marketing automation platform SilverStripe♥Mautic
  2. 2. Intendedaudience
  3. 3. What’s marketing automation? Seasoned developer • Finds installation of the platform and module code trivial • Wants to learn core marketing automation concepts • Wants to know more about Mautic
  4. 4. How to create a module? Novice developer • Is an Open Source code consumer • Creates code for his own projects • Wants to learn some best practices on integrating third party services • Would like to start contributing by converting his/her existing code to a shareable module
  5. 5. We use HubSpot, so what? Marketing Agency • Already implements marketing automation day to day • Uses a closed source software • Is considering the switch to a complete Open Source solution based on Mautic and SilverStripe
  6. 6. How about deliverability? Junior DevOps Operator • Knows that sending mass emails can be difficult • Would prefer certified third party email transports • Would like to improve deliverability of the emails sent on server
  7. 7. Theproblemwithnewsletters
  8. 8. Another newsletter? Great effort to stand out • Newsletters and emails sent one to one are treated differently • Mailboxes have a systemic problem of information overload • Typical user receives hundreds if not thousands of UCE (Unsolicited Commercial Email) every month • Even after removing all the spam, there are still a lot of emails to read
  9. 9. Nigerian prince! Get his fortune, now! € $ ¥
  10. 10. Tom Fishburne "The best marketing doesn’t feel like marketing."
  11. 11. Dear <First> <Last> Limited customization • We can actually understand if the email is actually tailored for us or speaks to a general public • Knowing my name is not enough anymore • We care about timing as well • To be effective, some information needs to be delivered over a long period (spaced repetition) ALL YOUR BASE ARE BELONG TO US!
  12. 12. Dan Jak "Personalisation – it is not about first/ last name. It’s about relevant content."
  13. 13. Working over numbers SaaS services tier limited • Some services bill you by each email sent, or by contacts, or by features • Pricing tiers are organized by design so that important features are available only on higher plans • Complete systems that incorporate real marketing automation tend to have monthly costs that cut out smaller businesses
  14. 14. HubSpot Marketing Hub pricing
  15. 15. HubSpot CMS Hub pricing
  16. 16. Right here, right now Timing • Newsletters are usually organized around the concept of bulk synced communication • The same information is delivered to a whole group all at the same time • It doesn’t consider that contacts are at various stages of engagement
  17. 17. Marketingautomationconcepts
  18. 18. Contact added Send welcome email #1 Opens email #1? Wait 1 day Sends followup email #2 Opens email #2? Add 10 points to contact Add 10 points to contact Wait 2 days Sends followup email #3 Opens email #3? Remove contact Add 10 points to contact Downloads a PDF Add 20 points to contact Set contact as hot lead More than 50 pts? Tweets with mention or hashtag Add 20 points to contact Visits website Add 5 points to contact Show focus Yes Yes Yes No Yes Marketing automation Campaign basic example
  19. 19. John Caldwell "To get the right message to the right person at the right time you first need to get the right data to the right database at the right time."
  20. 20. Decision Action Condition Contact performs an operation (downloads a file, opens an email, visits a website) Mautic performs an operation (sends an email, changes contact group) Variables (field values, submitted form data) influence operation flow Marketing automation Decision tree UI
  21. 21. Drip marketing Marketing automation • The contact, or lead, starts a journey • He/she is exposed to engagement events and actions • Receives messages via email, SMS and/or Twitter • Answers messages, visits your site, downloads files • Enriches his card with new data • This may take days, weeks, even months!
  22. 22. Points
  23. 23. Matt Blumberg "Reaching the inbox isn't your goal - engaging people is"
  24. 24. Hot lead Marketing automation • The journey of the contacts continues until one of them gets a very high score • That will mean he/she is very interested in your product or service • The contact is now an hot lead and you can decide to directly and manually engage to him/her over phone, Zoom or email • At this stage, the contact is pushed (hot lead handover) to another integration, usually a CRM, or you simply get an email notification telling there’s a call to make
  25. 25. Lead generation Marketing automation • Lead Ads from Google, Facebook, LinkedIn, Instagram • Google Ads • Your website traffic • Organic social networking • Events and conferences • Re-engaging existing customers list That means you don’t pay ad money! People to sell stuff to Mummy Granny Jennifer from high school Creepy guy next door Michael, because I helped him out with the lawn
  26. 26. Landing pages Marketing automation • Web pages with content highly optimized for conversion • Can be made with a drag and drop builder directly in the marketing automation platform • Usually disconnected from the main website, don’t even have any sort of menu or navigation • Intercept a very delicate moment in the user's decision-making process
  27. 27. Channels Marketing automation • Email • Push notifications • iOS and Android • Web • SMS • Tracks anwers • Respects “Do Not Contact” duh! In Mautic that’s managed by One Signal Mautic comes with an integration for Twilio out of the box Definitely not TV channels! (hey I got the same remote!)
  28. 28. Lead nurturing Marketing automation • Contact lifecycle • Stages • Segments • Progressive profiling • Video gating • Focus items • Bars • Modals • Full page takeovers • Social monitoring • Twitter hashtags and mentions In short, we’re talking about tailor made popups that know you! Marketing funnel
  29. 29. MauticInstallation
  30. 30. GIANCARLO DI MASSA // DIGITALL.IT // STRIPECON 2021 • SaaS version by Acquia, who acquired Mautic on May 2019 • Acquia mantains a paid-for version called Campaign Studio on mautic.com • Open Source version on mautic.org benefits of active development made possible by Acquia programmers • Thriving community of developers • Active marketplace of both free and paid-for plugins that extends the platform • Can be integrated with other projects either via a Mautic Plugin, Mautic API and even Zapier • Also available as a Docker Hub as a single image mautic/mautic MauticInstallation Self-hosted and SaaS
  31. 31. GIANCARLO DI MASSA // DIGITALL.IT // STRIPECON 2021 • Symfony project • Can be installed via • All releases available as a zipball on mautic.org website • Requires a database and at least one dedicated email address • Major version 4.0 has just been released on August 2021 and supports PHP 7.4 MauticInstallation Basic deployment composer create-project mautic/core mautic ^4 —no-dev Suggested installation method by developers! Yay! PHP 8.0 coming soon!
  32. 32. GIANCARLO DI MASSA // DIGITALL.IT // STRIPECON 2021 MauticInstallation Required Cron jobs Update segments mautic:segments:update Update campaigns mautic:campaigns:update Execute Campaign Actions mautic:campaigns:trigger • Mautic uses the Symfony Console Component • Console is called via • Some operations need to be performed periodically via cron jobs and are required • The scripts may be resource intensive as they process 300 contacts at time • You can use —batch-limit=X to limit the number of contacts to be processed at once php path/to/mautic/bin/console [arguments]
  33. 33. GIANCARLO DI MASSA // DIGITALL.IT // STRIPECON 2021 MauticInstallation Optional Cron jobs Send queued emails mautic:emails:send Process bounces mautic:email:fetch Monitor social networks mautic:social:monitoring Batch send webhooks mautic:webhooks:process Update IP Lookup Database mautic:iplookup:download Clean up old data mautic:maintenance:cleanup -g -n Send scheduled reports mautic:reports:scheduler Import data from CSV files in background mautic:import Some operations can be performed periodically via cron jobs and are optional
  34. 34. GIANCARLO DI MASSA // DIGITALL.IT // STRIPECON 2021 • Broadcasts are emails sent to a segment (a group of contacts) • Those are sent while waiting with the browser window open • If the segment is large, you can send in background via an optional cron job MauticInstallation Optional Broadcast Cron job Send scheduled broadcasts mautic:broadcasts:send
  35. 35. GIANCARLO DI MASSA // DIGITALL.IT // STRIPECON 2021 • CCPA stands for California Consumer Privacy Act (CCPA) • Similar to GDPR, first law of his kind in the United States • Applies to all for-profit corporations around the world that sell the personal information of more than 50,000 California residents annually • Or have gross annual revenues in excess of $ 25 million • Or derive more than 50 percent of their annual turnover from the sale of personal information of California residents MauticInstallation MaxMind CCPA Compliance Cron jobs
  36. 36. GIANCARLO DI MASSA // DIGITALL.IT // STRIPECON 2021 If your installation falls under CCPA and if at least one of the preceding conditions is met, there are some required cronjobs to run MauticInstallation MaxMind CCPA Compliance Cron jobs Update the “Do Not Sell” list mautic:donotsell:download Purge data in the the “Do Not Sell” list mautic:max-mind:purge
  37. 37. php -d memory_limit=4096M bin/console cache:clear php -d memory_limit=4096M bin/console mautic:update:find php -d memory_limit=4096M bin/console mautic:update:apply php -d memory_limit=4096M bin/console doctrine:migration:status php -d memory_limit=4096M bin/console doctrine:migration:migrate YO U R B E S T Clears the cache! Checks for updates! Updates the installation! Checks the database structure! Updates the database structure! Allocates more memory to the script!
  38. 38. IntegrationModuleDemo
  39. 39. git clone https://github.com/digitall-it/docker.git docker cd docker mkdir src docker-compose up -d docker exec -it docker_web_1 /bin/bash composer create-project silverstripe/installer /var/www/html cd html composer require silverstripe/userforms composer require digitall-it/silverstripe-mautic --prefer-source ./vendor/bin/sake dev/build "flush=all" Based on Brett Tasker's configuration Creates a web and database servers! SSH into Docker! Creates a SilverStripe project! Installs the UserForms module! Installs the Mautic integration module! Rebuilds the SilverStripe database and clears caches! Clones from the source repository instead of extracting the Packagist zipball so you can commit! Thanks!
  40. 40. Write a new password to change it! mapping allows to use existing field names in your forms! Module provides a working default!
  41. 41. The module caches the segment list: if you change it in Mautic, flush the cache!
  42. 42. $Mautic = Injector::inst()->get('Mautic'); $Mautic->setAuth(SiteConfig::current_site_config()); $fieldsMapped = $Mautic->MapFields($fields, SiteConfig::current_site_config()->MauticFieldMapping); if (count($fieldsMapped) > 0) $Mautic->addOrUpdateContact($fieldsMapped, $MauticSegmentAlias); Manual push of contacts put this name here!
  43. 43. What’s next? Integration module • Internationalization • Support for oAuth 1.0 and 2.0 • Unit and functional tests • Extension hooks • All fields of contact can change on update • Ability to add points and trigger events • Stable release 1.0 at the end of the year • Mautic plugin to push data back! ..and bugfixes!
  44. 44. DevOps
  45. 45. Email deliverability: DKIM • DKIM stands for DomainKeys Identified Mail and provides an encryption key and digital signature that verifies that an email message was not faked or altered • Requires native support by a modern mail server • You need to publish the correct public key and verification criteria records into your DNS server • You also need to ensure that email sent from your server are signed DevOps
  46. 46. Email deliverability: SPF DevOps • SPF stands for Sender Policy Framework • Allows to set a policy that authorizes particular hosts to send mail from the domain • The receiver checks the policy list to ensure that the sender server is included • You need to publish the correct SPF policy record into your DNS server
  47. 47. Email deliverability: DMARC • DMARC stands for Domain-based Message Authentication, Reporting & Conformance • Extends the capabilities of the SPF and DKIM sender policies • The DMARC policy defines how the receiver should treat email messages depending on the results of DKIM and SPF checking • You need to publish the correct DMARC policy record into your DNS server DevOps
  48. 48. Mail transports DevOps • Amazon Simple Email Service • Elastic Email • Gmail • Mailjet • Mandrill • Pepipost • Sendgrid • Sendmail • SMTP • Sparkpost
  49. 49. GDPR compliancy DevOps • Double opt-in • Data storage • Distinct checkboxes • Tracking and cookies composer require lerni/klaro-cookie-consent ✔ ✔ Privacy policy Marketing
  50. 50. Bounce management DevOps • Some transports use Variable envelope return path (VERP), a technique to detect undeliverable e-mail addresses. It works by using a different return path (also called "envelope sender") • In practice, they use real time created aliases like myemail+12345@domain.dev to know exactly who received the email • Some trasports instead have webhooks and callbacks: Elastic Email, Amazon, Mandrill, Mailjet, Sparkpost, SendGrid
  51. 51. HowIMetYourModule
  52. 52. Module base • Add your name/organisation to LICENSE.md • Actually read and update the README files • Update the composer.json and package.json with your chosen package name • Create a new repository on git and push your module base • Login and fill a form on packagist.org to publish your module • Composer require the module in a development SilverStripe environment, preferring source • Start developing your module, you can even push directly from the vendor/yourmodule folder of the environment! How I Met Your Module git clone https://github.com/silverstripe/silverstripe-module yourmodule cd yourmodule rm -rf .git && git init your journey begins here! cleans the git history so you get a fresh start! yes, it’s that easy! use the docker, Luke! the horn from How I Met Your Mother.. what, you didn’t see the show? c’mon, Neil Patrick Harris rocked, there!
  53. 53. Best practices How I Met Your Module • Do not create directly your classes • Try to decouple your code as much as possible • Consider TDD (test driven development) • Do not require unnecessary code • Do not just assume everyone will want your javascript code in the frontend! • Leverage SilverStripe Cache in your results if you can! use SilverStripeCoreInjectorInjector; . . . $object = Injector::inst()->create('MyClassName') SilverStripeCoreInjectorInjector: PsrSimpleCacheCacheInterface.myModuleCache: factory: SilverStripeCoreCacheCacheFactory constructor: namespace: "myModuleCache" use PsrSimpleCacheCacheInterface; use SilverStripeCoreInjectorInjector; . . . $cache = Injector::inst() ->get(CacheInterface::class . ‘.myModuleCache’); $myValue = $cache->get(‘myCacheKey'); $cache->set('myCacheKey', 1234); if (!$cache->has('myCacheKey')) {. . .} $cache->delete(‘myCacheKey'); $string = $anotherobject->method(); $object->method($string); when instancing! switchable and testable! in your yaml in your code
  54. 54. Mautic API • Exposes a REST API • Has his own PHP Mautic API Client • My module builds on top of that How I Met Your Module APIAUTH CONTACTAPI MAUTICAPI MAUTIC
  55. 55. CaseStudy“NegomboPark”
  56. 56. Questions? Twitter @digitall_it #ilovestripecon https://marketing.digitall.it/stripecon2021
  57. 57. GIANCARLO DI MASSA // DIGITALL.IT Thankyou Credits NOHK, Element5 Digital, Christina Morillo, Tim Gouw, Markus Spiske, Kaboompics.com, Danny Meneses, R. Fera, Musa Artful, Tim Douglas, Eva Elijas, Ketut Subiyanto, Nothing Ahead, Redrecords, Gradienta, Angela Roma, RF._.studio, Mikhail Nilov, Markus Winkler Pexels Stock Photos Mikhail Fesenko, Karsten Winegeart Unsplash Stock Photos

StripeCon Europe 2021 talk about integrating the SilverStripe CMS and Mautic marketing automation open source platforms - by Giancarlo Di Massa @digitall_it

Views

Total views

36

On Slideshare

0

From embeds

0

Number of embeds

0

Actions

Downloads

2

Shares

0

Comments

0

Likes

0

×