Matthew Bibby
Matthew Bibby

Spaced Repetition, Email Automation Software and Custom Follow-Ups

Matthew BibbyMatthew Bibby

Have you ever wanted to send follow-up lessons to learners via email to help them deepen their understanding of the core material over time?

Or maybe you want to send specific emails to learners who are struggling with certain parts of a course? Imagine if you could provide those who scored a low grade on a particular assessment with some additional help, without bothering those who clearly have it covered?

In this tutorial, we are going to continue looking at integrating email automation software into our eLearning courses so that we can send highly customised information to our learners via email.

In this tutorial, we are going to continue looking at integrating email automation software into our eLearning courses so that we can send highly customised information to our learners via email.

Where Do We Begin?

If you haven't already, please start by reading the Extend Your eLearning Beyond the Initial Course tutorial, as it covers the basics of how to integrate Drip into your eLearning courses.

Here is a quick recap of the steps covered in the first tutorial:

This tutorial will expand on these steps and we will go into more detail on how to structure the Drip workflows so that we can get achieve the desired outcomes.

Specifically, we are going to set up a workflow that will send information to learners on a set schedule. Then, we will modify that workflow so that additional assistance is offered to those learners who struggled with a particular part of the course.

Setting Up Our Storyline File

So to achieve the above, we will need our Storyline course to collect the learner's name and email and we will also need some sort of assessment that can be used to assess their understanding of the course content.

So let's start with the source file from the last tutorial and replace the Submit button from the first slide with a Next button.

At this stage, we are just collecting the Name and Email in a Storyline variable, we aren't actually sending anything to Drip yet.

Collect name and email

Then, we will add a quiz. A very simple quiz. I'm pretty sure you'll be able to get it correct on the first try, if that's what you'd like to do:

quiz question

The idea here is that we want to send a message to Drip that says:

The person that we identified on the first slide of the course knows (or doesn't know) this content.

So let's create a text variable in Storyline called Topic_01 and then add a trigger to the check boxes that will adjust this variable based on the option the user selects:

So the above trigger will change the Topic_01 variable to Topic 1 Correct which will be used to show that the learner answered the quiz correctly.

And if the learner clicks the incorrect option then the Topic_01 variable will be changed to Topic 1 Incorrect:

Naturally, the logic in a real course is likely to be more complex than this because competency (usually) isn't based on the answer to a single question.

For example, you may want to use a trigger on a result slide that will change the Topic_01 variable to Topic 1 Competent if someone scores over 80% on a quiz:

But for now, let's not worry about that and just keep things simple for this demo.

Pass The Information to Drip

Now we just need to modify the JavaScript that we used to pass the information from Storyline to Drip. You'll recall that in the first tutorial we used this code to pass the Name and Email variables to Drip:

var player = GetPlayer();
var learnerName = player.GetVar("Name");
var learnerEmail = player.GetVar("Email");
_dcq.push(["identify", {
email: learnerEmail,
first_name: learnerName,
tags: ["Completed Drip Demo"]

So we need to modify this to also include the other information that we want to send. First, let's strip out the stuff that we don't need:

var player = GetPlayer();
var learnerName = player.GetVar("Name");
var learnerEmail = player.GetVar("Email");
_dcq.push(["identify", {
email: learnerEmail,
first_name: learnerName,
tags: []

All that has been removed is the "Completed Drip Demo" text as we don't want to send that tag to Drip this time around.

So let's grab the value of the Topic_01 variable from Storyline and pass that to a new JavaScript variable called topic01:

var topic01 = player.GetVar("Topic_01");

We will then use the topic01 variable to determine what tag should be added to Drip:

tags: [topic01]

So the Execute JavaScript trigger should now look like this:

var player = GetPlayer();
var learnerName = player.GetVar("Name");
var learnerEmail = player.GetVar("Email");
var topic01 = player.GetVar("Topic_01");
_dcq.push(["identify", {
email: learnerEmail,
first_name: learnerName,
tags: [topic01]

This means that when the Submit button is pressed, the learner's name and email will be passed to Drip, along with the value of the Topic_01 variable from Storyline.

So depending on how the learner answers the question, either Topic 1 Correct or Topic 1 Incorrect will be added as a tag to their account.

But There Is A Problem

If the learner completes the quiz and answers it incorrectly, the tag Topic 1 Incorrect will be added to Drip.

If they then try again and answer correctly, the tag Topic 1 Correct will be added. However, this won't replace the Topic 1 Incorrect tag so things will quickly get confusing!

In Drip, tags are shown underneath the subscriber's email address on their profile. This is great, as it means you can quickly glance at that area to see if they have been tagged in a certain way. But as you can see in the image below, this doesn't really tell us much if both tags have been applied:

So instead of just adding another tag, we need to first remove the Topic 1 Incorrect and Topic 1 Correct tags that may already be there.

Let's change our JavaScript to do that:

var player = GetPlayer();
var learnerName = player.GetVar("Name");
var learnerEmail = player.GetVar("Email");
var topic01 = player.GetVar("Topic_01");
_dcq.push(["identify", {
email: learnerEmail,
first_name: learnerName,  
remove_tags: ["Topic 1 Incorrect", "Topic 1 Correct"],

Now if you look at the above JavaScript, we are just removing tags using the remove_tags property.

To add the new tag, we need to make a second identify call:

_dcq.push(["identify", {
tags: topic01

It may seem silly to make two calls to achieve this, but if you combine them into one identify call, the new tag ends up getting removed as well! And that would make the whole exercise kind of pointless.

So, the complete code that we need in our Execute JavaScript trigger is:

var player = GetPlayer();
var learnerName = player.GetVar("Name");
var learnerEmail = player.GetVar("Email");
var topic01 = player.GetVar("Topic_01");
_dcq.push(["identify", {
email: learnerEmail,
first_name: learnerName,  
remove_tags: ["Topic 1 Incorrect", "Topic 1 Correct"],
_dcq.push(["identify", {
tags: topic01

So now, if the learner answers the quiz incorrectly and then comes back and gets it right, Drip will show that the Topic 1 Incorrect tag has been removed before it applies the Topic 1 Correct tag:

We can now publish our Storyline course. But before we jump over to Drip to look at how to structure our workflows, remember that you'll need to add your Drip Site Code Snippet to the published output so that everything works correctly.

Setting Up Automated Workflows

Now that we've looked at what we need to do in Storyline to send the right information to Drip, let's create our Drip workflows.

First, we will build a workflow that will send follow-up lessons that are spaced out over time to help learners deepen their understanding of the topic. Then we will look at ways to customise this based on whether or not the learner is struggling with the topic.

In Drip, go to the Automation tab and click the New Workflow button:

Then we'll be prompted to name our new workflow. It doesn't matter what you call it, as you'll be the only person who sees it, so just give it a name that makes sense to you and then hit the Create Workflow button:

We'll then be taken to a page that looks something like this:

This is where we'll build our workflow. While it may seem a little confusing at first, you'll come to love the visual nature of this tool as it makes it very easy to plan out complex workflows with confidence.

The first things that we need to define are the triggers that bring people into this workflow. Remembering that our Storyline demo will either send the tag Topic 1 Incorrect or Topic 1 Correct to Drip, so our triggers should match that.

So click on the Define your trigger... button:

A huge list of events that can be used to trigger this flow will appear. Most of these aren't relevant to what we are doing here today, so scroll down to the Applied a tag option and select that:

Then we can enter the first tag that we want to use to trigger our workflow:

After clicking Update Trigger, we will then see our updated workflow:

Now, as we need to also watch for the tag Topic 1 Correct we'll need to define a second trigger. So click on the grey plus icon as shown below to add another trigger at the beginning of the workflow:

Add the other tag and then our workflow will look like this:

Now that we have defined how the learner enters the workflow, we need to specify what happens next. Hit the plus icon that is above the Exit this workflow step and we'll be presented with a number of options:

Hidden beneath these six types of steps are a plethora of options, but we'll only be touching on a couple of these in this tutorial. So select Action as the step and then choose Send a one-off email from the Edit Action options:

We'll then have the option to edit the email settings, which we can do now by clicking the Edit email settings link:

A page where we can enter the details of the email will appear:

Now while this looks like a pretty standard email form, there are a couple of special things going on here. Of particular note is the {{ subscriber.first_name }} code. This, as you can probably guess, will be replaced with the subscriber's first name when the email is sent. Remember how we captured the learner's name in Storyline and passed it to Drip? This is why.

The little snippet of code shown above is written using a template language called Liquid, which can be used to do all sorts of interesting stuff. But we will come back to that later.

The other interesting thing that is going on in this email is the click here link which is used to stop the workflow. Setting this up is outside the scope of this tutorial, but if you are interested in knowing how it is done, then let me know in the comments below.

Anyway... after we've written our email, we can just hit the Back to workflow button at the top of the page to go back to our workflow.

The next thing we'll want to do is add a delay so that the second email won't get sent immediately. To do this, we just need to click the plus icon and then specify that we want to add a delay:

Then we can edit the delay. You can specify the number of days, hours or minutes that the delay should last for. If you select days, you also have the option to select what days of the week Drip can resume sending emails (so that, for example, you can avoid emails being sent on a weekend):

But in the case of this demo, let's just set the delay to 5 minutes:

After updating the delay, our workflow will look like this:

We can then expand on these steps to send additional emails, for example:

Obviously, this isn't a very realistic example.

After someone completes a training course you aren't going to send follow-up emails every 5 minutes! That'd just be silly.

A more realistic example would space the follow-ups over weeks or even months, with the delays between reminders getting spread out more as people become increasingly familiar with the content.

The image below (taken from here) shows how the amount of information retained changes over time as a result of these follow-ups:

"Taken together, evidence continues to recommend practice that is scheduled throughout a learning event rather than concentrated in one time or place. To apply this guideline, [...] also consider ways to leverage media in ways that will extend learning over time." - Ruth Clark and Richard E. Mayer, E-Learning and the Science of Instruction.

Anyway, we aren't focusing on theories here, but rather looking at how to set stuff up in Drip... so let's get back to it.

Changing the Emails That Are Sent Based on the Quiz

Now let's modify our workflow based on the learner's performance in the quiz. Let's have the first email go out to everyone and then modify the workflow so that people who answered the quiz correctly will receive different emails to those who answered it incorrectly.

Let's add a new step below the first delay but make this one a Decision step:

Then we need to edit the decision to specify when the subscriber should go down the 'Yes' or 'No' paths. In this case, we will start by checking if the Topic 1 Correct tag has been applied.

So click on the Define your decision... button, choose the Tags filter and change the options as shown below:

That portion of our workflow will now look like this:

As we know that only those who have the tags Topic 1 Correct and Topic 1 Incorrect will enter this workflow, we can use this one decision to cover both possibilities.

Because as if the tag isn't Topic 1 Correct, then it'll be Topic 1 Incorrect.

However, when using these concepts in production work, there are often times where you'll need to evaluate more complex outcomes. In that case, you can always nest decisions as shown below:

Isn't it pretty

Anyway, once we've set up our decision, then we can modify what we want to happen in each of the pathways. For example:

And there are lots of other things you could do to make this even more useful, such as:

The decision shown above considers if the subscriber has opened any of the last three emails and if not, it will send a notification email. The notification email doesn't get sent to the learner, but to their trainer. For example:

Customisation Within Emails

There is also a lot that can be done with individual emails to customise them further. This is great if you want to avoid multiple decisions in a workflow or need to account for more complex possibilities.

In the below example, Liquid has been used to tweak one paragraph of an email based on how the learner performed in the quiz:

The key parts of this are:

{% if subscriber.tags contains “Topic 1 Correct” %}

Any text entered after this will only be sent to those who answered correctly.

{% elsif subscriber.tags contains “Topic 1 Incorrect” %}

Any text after this will only be sent to those who answered incorrectly.

{% endif %}

This ends the if statement. Any text after this will be sent to everyone.

Once again, this a very basic example. Liquid is an incredibly powerful templating language than can be used in some very interesting ways to further customise the emails that get sent out.

Here's a Demo

When you complete the demo below, you'll be entered into a simple workflow that uses Liquid to customise parts of the email.

Just so you know what you are getting yourself in for, here's the workflow:

If you'd like to see how the correct and incorrect response to the quiz changes the content of the emails, you can complete the demo multiple times. But please keep in mind that you need to wait to receive both emails before you retry the demo, as if you are already in the workflow, Drip won't add you a second time.

That being said, if you do happen to retry the demo during the 5-minute delay, Drip will take note of any changed tags and will customise the second email appropriately.

Anyway, here is the demo:

Now, I know that we have covered a lot in this tutorial, but we've only looked at a tiny fraction of what Drip can do.

It is an incredibly powerful and flexible system.

When used alongside Storyline, it can not only help extend your eLearning beyond the boundaries of a typical course, but it means that you can provide customised, effective and appropriate assistance to each learner over time without having to keep track of everything manually.

There is still a lot more that we can do with this integration, we've only just scratched the surface. Next, we will look at how to:

Depending on your feedback, I may also write more tutorials that go even deeper into this topic. If that is something you'd like to see, please let me know in the comments below or you can contact me privately.

Files you might need:

Here is the .story file that was used in this tutorial.

Frequently Asked Questions:

Q. I really want to use this integration in my organisation, but this is all a bit overwhelming. Can you help?
A. Of course, that's what I'm here for. If you'd like to have a quick chat about how we can work together, then you can book a free, no obligation consult. If none of the available times suit you, please let me know and I'll see if I can move some things around.

Q. I just logged into Drip and it looks different to the screenshots you've shared. Why is that?
A. Drip is constantly getting better. There is a very smart team of people who are actively improving it to make it easier to use and more effective. If you can't figure out how to do what you are trying to do, just let me know.

Q. What if I don't want to use tags each time I send data to Drip?
A. There are lots of different ways that you could set this up. When working on a more complex integration, you may prefer to use an identify call initially and then push calls and events (or a combination of events and tags depending on what you're tracking) to record progress. Lead scoring can also be handy... but this is something we will look at in the next tutorial.

Q. Where can I learn more about spaced repetition
A. Check out the Forgetting Helps You Remember: Why Spaced Learning Works article in the Learning Solutions Magazine. It is also discussed in Ruth Clark and Richard E. Mayer's E-Learning and the Science of Instruction book, which frankly, every serious eLearning Developer should read. Here's another relevant quote from the book:

"The so-called spacing effect—that practice sessions spaced in time are superior to massed practices in terms of long-term retention—is one of the most reliable phenomena in human experimental psychology. The effect is robust and appears to hold for verbal materials of all types as well as for motor skills" - Druckman and Bjork (1991).

Q. I'm using Articulate 360, what do I have to do differently?
A. Instead of adding the Drip snippet to the story.html and story_html5.html files, you'll need to add it to the story_flash.html and story_html5.html files. Just pop it before the closing </body> tag. If you get stuck, let me know.

Q. Do I need to copy the Drip snippet into those files each time I publish my course?
A. Yes, you do. When you get to the point that you want to use this integration with every course you publish, you could consider altering the templates that those files are created from so that you don't need to do it manually. If you need a hand doing that, let me know.

Q. Where can I learn more about Drip?
A. Here is a free 11-part video course that looks at how Drip works. Not all of this will be relevant to what are discussing here, but it will give you a good understanding of the basics of using Drip.

Q. Does this work in HTML5? (i.e. will it work on my phone and tablet?)
A. Yes, it will.

Q. Will this work in Articulate Mobile Player?
A. No, it won't. Because the Articulate Mobile Player doesn't like JavaScript.

Q. Will this work in an LMS?
A. Yes, it will.

Q. Do Articulate support this method?
A. No, they are not able to offer assistance with JavaScript stuff. So if you run into issues when using this approach, their support team won't be able to assist. However, I may be able to help, so reach out if you're stuck.

Q. My question isn't listed here, what should I do?
A. Complain to management. I've heard the boss is pretty friendly

If you found this tutorial helpful and think others in your network will also, please share using the share buttons below. Thanks!

Matthew Bibby

Matthew Bibby

I'm Matt. I'm an eLearning Consultant. I help people like you develop memorable, engaging and profitable training programs. What do you need a hand with?