Optimize your chatbot with Google Analytics
The golden rule when creating any kind of online service is to monitor its activity through analytics. Any business needs analytics, they are helping leaders take decisions, increase revenues, and optimize processes among other things.
Chatbots are no exceptions to this rule and they also need their data to be analyzed in order to improve. Right now, any chatbot company provides data like the number of messages sent and received, number of users, etc… and this is great to measure the chatbot activity on a macro level, but more often than not, chatbot creators also need some use-case oriented analytics, like a conversion funnel for a newsletter signup chatbot.
Google Analytics for chatbots
Google Analytics is a very powerful tool that pretty much everybody has used in the past. Most people know it as a service that provides analytics about the audience behavior on a website, but it can also be used with chatbots, and in this case to create a funnel.
The overall mechanism
In order to create a funnel, we’ll need the chatbot to send:
- A starting event: the user starts the flow
- Events throughout the flows, very much like checkpoints, will show us when a user drops
- An ending event: the user subscribed
All these events must be sent to Google Analytics.
Let’s see how that works with CSML using the development studio.
In the example below, we’ll assume you’ve created a free account on the studio.
Step 1: the chatbot
Let’s create a simple newsletter signup chatbot with only three questions in three different steps that eventually trigger a Zapier event to register the user.
Right now this chatbot is not yet linked to Google Analytics but at least we know what it’ll look like.
start:
say "Hi, let's subscribe to an awesome newsletter 💌 !"
// Starting event should go here
goto firstname
firstname:
say "What's your firstname?"
hold
remember firstname = event
// First flow event
goto lastname
lastname:
say "What's your lastname?"
hold
remember lastname = event
// Second flow event
goto email
email:
say "What's your email address?"
hold
if (!event.contains("@")) {
say "Please enter a valid email address"
goto email
}
remember email = event
// Third flow event
goto save
save:
do Fn("zapier",
hook="myhook/myhookid",
payload={
"firstname": firstname,
"lastname": lastname,
"email": email
}
)
say "Ok **{{firstname}} {{lastname}}**, I have registered your email **{{email}}** to our newsletter!"
say "Enjoy the great content 🎉"
// Ending event
goto end
Step 2: Setting up Google Analytics
a. Get the Google Analytics Property ID
First of all, you will obviously need a Google Analytics account. You can then either use an existing property (website account) or create one. To go forward, you will only need the property ID that looks like “UA-xxxxxxx-x”.
To find this ID, open Google Analytics, go to “Admin” at the bottom left of the screen, then click on “Property settings”, you’ll then see the ID under “Tracking ID”.
b. Setup the Google Analytics App
Now we need to connect the chatbot to Google Analytics. In order to do so, you can use the Google Analytics App in the Studio, you’ll just need to provide your Google Analytics property ID (UA-xxxxxxx-x) when you set up the app.
c. Setup the UUID App
Since you want Google Analytics to be able to track sessions, you’ll need to provide a unique ID per user. Luckily, there is an app for that: UUID. Go to the app store and set it up.
Step 3: Get the chatbot to send the events at the right time
Remember the code we wrote earlier? We’re going to edit it as follows:
- Adding a unique id for each new user
- Adding the events checkpoints
It should look like this:
start:
// If the user doesn't exist, we create a new id using the uuid app
if (!user_id) remember user_id = Fn("utils/uuid", version="v4")
say "Hi, let's subscribe to an awesome newsletter 💌 !"
do Fn("google/analytics", method="sendEvent", params={"user_id": user_id,"category": "csml_nl_chatbot","action": "flow_process","label": "start"})
goto firstname
firstname:
say "What's your firstname?"
hold
remember firstname = event
do Fn("google/analytics", method="sendEvent", params={"user_id": user_id,"category": "csml_nl_chatbot","action": "flow_process","label": "firstname"})
goto lastname
lastname:
say "What's your lastname?"
hold
remember lastname = event
do Fn("google/analytics", method="sendEvent", params={"user_id": user_id,"category": "csml_nl_chatbot","action": "flow_process","label": "lastname"})
goto email
email:
say "What's your email address?"
hold
if (!event.contains("@")) {
say "Please enter a valid email address"
goto email
}
remember email = event
do Fn("google/analytics", method="sendEvent", params={"user_id": user_id,"category": "csml_nl_chatbot","action": "flow_process","label": "email"})
goto save
save:
do Fn("zapier",
hook="myhook/myhookid",
payload={
"firstname": firstname,
"lastname": lastname,
"email": email
}
)
say "Ok **{{firstname}} {{lastname}}**, I have registered your email **{{email}}** to our newsletter!"
say "Enjoy the great content 🎉"
do Fn("google/analytics", method="sendEvent", params={"user_id": user_id,"category": "csml_nl_chatbot","action": "flow_process","label": "end"})
goto end
As you can see, we create “checkpoints” throughout the flow, every time a user reaches one of these checkpoints, an event will be sent to Google Analytics.
Now if you try it out, you should see something that looks like the screenshot below.
Step 4: The funnel!
It’s hard to believe, but the funnel is ready…you only need to wait for Google Analytics to update it. Updates happen the next day, so once you see the events in the “Realtime > Events” menu, just wait 24 hours and then go to “Behavior > Events > Events flow”, and you’ll see the funnel below!
That’s it, you’re now ready to analyze and optimize your chatbots.
Here are a few ideas:
- You could perform AB testing by creating two steps doing the same thing and randomly sending the users to one step or the other. Each of these two steps would send different labels to Google Analytics, you would then be able to check which step performs best.
- In the example above, you could send an event to Google Analytics if the users enter an invalid email address, then you would be able to see how many users drop after entering an invalid email address.
- You could also ask for more information from the users if your funnel shows a very low drop rate.
I am sure there are tons of possible optimizations, what would be the first optimization on your list? Share it in the comments!
For more information about CSML, visit csml.dev!