StripeCon Europe 2021 talk about integrating the SilverStripe CMS and Mautic marketing automation open source platforms - by Giancarlo Di Massa @digitall_it
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. 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. 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. 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
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
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!
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
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
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. 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. 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. 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!
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. 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. 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. 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. 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
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
33. 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!
34. 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]
36. 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
37. 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
39. 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
40. 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
41. 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!
43. 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!
44. Write a new
password to
change it!
mapping allows
to use existing
field names in
your forms!
Module provides
a working default!
48. 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!
50. 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
51. 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
52. 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
54. GDPR compliancy
DevOps
• Double opt-in
• Data storage
• Distinct checkboxes
• Tracking and cookies
composer require lerni/klaro-cookie-consent
✔
✔
Privacy policy
Marketing
55. 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
57. 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!
58. 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
59. 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
66. 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