Back to Blog

Complete Guide From Beginner to Expert in Chatbots and Conversational Design


During this course, we will briefly go over why you should learn conversational design, and how this course will help you get better at creating chatbots. Then we will get started and concept our chatbot before creating a account.

Once we are all set to start developing our chatbots within the chatbot development platform, it’s time to go over templates, all types of triggers and replies, as well as other functionalities like entities, audiences, broadcasts and more!

Then we will go over some more advanced features, like how you can create a single chatbot for multiple channels and languages, and how you can best launch and monitor your bot.

At last, some common mistakes will be explained, to make sure you won’t repeat them, and you will get all the information you need to keep yourself updated on future developments.

Table of contents

  1. Why you should learn Conversational Designing
  2. Why you should read this course
  3. Getting Started
  4. Signing up at
  5. Working with Templates
  6. Triggers
  7. Replies
  8. Entities
  9. Audiences
  10. Broadcasts
  11. Project Settings
  12. Chat App
  13. Omnichannel Design
  14. Multilingual Design
  15. Some final tweaks
  16. Launching your bot
  17. Analytics
  18. Avoiding common mistakes
  19. Keep yourself up to date

1. Why you should learn Conversational Designing

When your company keeps getting the same types of questions, it would be inefficient to let them all be answered by agents every time. Sometimes companies even have a list with frequently asked questions with the answers, and their customer service employees are pretty much just copying and pasting the answers for common questions.

By creating a chatbot to handle these repetitive tasks, agents will be able to focus more on the more important and complex questions. This allows them to really help those who need it.

There are of course way more benefits chatbots can provide for your company, such as a better accessibility, a decrease in costs, an increase in revenue, and a better customer experience, but those are already explained in Why do companies with digital customer contact need automation?, so we recommend reading that article if you haven’t already.

2. Why you should read this course

When you already have some experience with conversational design, or even with, you might think you already know how it all works, and that might be true, but in reality a lot of bot designers tend to make the same mistakes.

Most of these mistakes can be easily avoided by making sure that your basic fundamentals are good. As a result of following this course, you will probably find out that your entire process of creating chatbots will become more efficient and less vulnerable to mistakes, even if you already have some experience.

It will also give you more inspiration about certain ways to solve specific problems or creative methods for improving your chatbot experience even more!

3. Getting started

Before you start getting crazy with implementing all various bot functionalities, the first step doesn’t actually contain any development at all. To ensure the process will be as effective as possible, it is recommended that you first start with concepting your bot and your workflow.

To help you get started easily, we made the following checklist for you to go over before starting developing your chatbot:

Analyze current customer behaviour

First, you’ll need to get an overview of the way your current customers are behaving themselves. On what languages and channels are they trying to reach you? What are the frequently asked questions or complaints?

The reason it’s important to determine the most popular messaging channels for your user base before actually developing your bot, is that for some channels, like WhatsApp, you will have to implement certain functionalities in a slightly different way due to channel limitations, which we will go through later during this course.

Create an overview of your FAQ and categorize them

Getting insight in what your customers are asking for, makes it more clear what the focus of your bot should be. If you first start developing your bot for solely the most important aspect, it will be easier to add other features later on.

If you already have an FAQ on your website, that might be a great start for the initial framework of your bot. We even have a tool for automatically converting your chatbot from your FAQ!

If you don’t have an FAQ yet, no problem. But we highly recommend you create an overview of the top frequently asked questions including the answers to those questions.

It will also be helpful to categorize these questions by a couple of topics. You could do this for example in Google Spreadsheets.

(Optional) Assign team roles

If your chatbot will be developed with a team instead of just by you, it can be helpful to assign roles, as explained in The Team behind a Chatbot Dream: 3 Roles Explained.

4. Signing up at

During this course, we will be using, an innovative chatbot development platform that allows you to easily create bots without the need of code due to its Drag & Drop system.

We have added screenshots to make it easier for you to follow the steps, but it might be possible that by the time you are reading this, some aspects of the platform look slightly different. That’s because is constantly trying to innovate and improve or add great functionalities to its chatbot-building platform.

The first step for getting started is signing up. If you already have a account, you can skip to the next section of this course.

Firstly, make sure to read the terms of service and privacy policy and check the box if you agree to them.

Secondly, you can use your Gmail account to login, or you can use any other email address.

Sign up at

After clicking on the Sign Up button, click on Get Started.

Get started with

Next, fill in your name and language. Don’t worry if you want to create bots for multiple languages. You will still be able to create bots in other languages.

Profile Information

The next step is to fill in your organization name and select the industry of your company, as well as your role within the company. This will help us identify what kind of updates are important to you, so we are able to send you some relevant information in case you need it.

You can choose from the industries below. Click on an industry to learn more about how chatbots can be useful for that specific industry.

If your company is active in multiple industries, no worries. Just select the industry that best suits your chatbot use case. Selecting an industry will not limit any features that are not relevant to that specific industry, so you will still be able to create anything you envision, even if it’s partially for a totally different use case.

Select Other if your industry doesn’t really match any of the listed options. is always interested in adapting to new industries and helping them grow with the use of conversational automation, so if you want to create a chatbot for a totally different industry, feel free to share your use case by sending an email to [email protected]!

You will also need to fill in your role within your company:

Organization Information

Now it’s time to name your bot. You can change this name at any time within your Project Settings. We will show you how to do that later during this course.

You will also need to select a language for your bot. supports over 100 languages, and it’s even possible to create Multilingual Chatbots, chatbots that understand multiple languages. We will explain how to do that later, but for now we will start by creating an English chatbot.

Then need to select your primary use case. Click on any of the use cases below to learn more about it:

After selecting your use case, it’s time to select your preferred channel. We will start simple by showing you how to create a chatbot on a Web Widget. Later we will also add some more channels like WhatsApp, Twitter and Messenger. Due to’s omnichannel design, it’s possible to create a single bot for multiple channels. Click on any of the integrations below to learn more about it:

Project Information

After you are done, you are all set to start creating your own chatbots!

5. Working with Templates

The first thing you see is that there are a lot of templates to help you get started. These templates are great for when you are new to chatbot development, since they give you a good example of how to implement certain functions within your bot. Some of them contain frequently used flows for specific use cases like Customer Service, and other templates show how to implement a more advanced feature, like finding the current weather.

Chatbot Templates

You can even combine multiple templates, but if you do that, make sure there are no duplicate intents or flows in your project.

During this course, we will first dive into chatbots for Customer Service, so add that template to your bot project by clicking on it. After selecting the template, you can see it creates a couple of flows:

Customer Service Chatbot Template

We will be going over each of these flows to have a look at how they work, but first, we will show you how to add another template. Click on the Plus icon next to your Flows on the top left corner of your screen and select Template.

Adding a Chatbot Template

Let’s add the Webshop FAQ Template since our customer service chatbot has to be able to answer the frequently asked questions of our fictional webshop of course!

Webshop FAQ Chatbot Template

Deleting Flows

Since the templates are pretty generic, probably not all of the flows from that template will be useful for your bot. You can simply delete any flow by selecting it (by clicking on the flow name), and clicking on the trash icon:

Deleting a flow

The reason why we chose to delete this flow is because there already is another flow that starts with the same trigger. Every flow should have a different trigger, or the bot might now know what to do when that specific trigger has been activated.

6. Triggers

But what are triggers exactly? Chatbots basically have two types of actions, triggers and replies. A trigger is an action that triggers a part of the bot, usually an action from a user. An example of a trigger is when a user asks a question to the bot. Replies are what the bot does in response to the trigger being triggered. An example would be the bot responding with an answer to that question the user just asked.

Triggers are always pink within, and Replies are in black, so it’s very easy to distinguish them. You can add triggers and replies to your flow by simply dragging and dropping them into your flow from the right side of the dashboard.

We will now go over all types of triggers and explain how they work:

Text Trigger (Intent)

Text Triggers are the most basic type of trigger. They are also referred to as Intents. An Intent is simply a text message from a user. Some examples of intents are:

People use a lot of different ways to ask or tell the same thing. To explain this, we will look at the first intent we just gave as an example, the “Hello” intent.

Intent Training

Not everybody greets by exactly saying “Hello”, since there are infinite ways to say something else that means the same thing:

In the beginning, your bot doesn’t know that “Hi” means the same as “Hello”, so you will have to teach it. This is what we call “Intent Training”. Click on the TRAIN button on your intent to start training it.

Hello Intent

In the Intent Training screen, you will be able to add variations to your intent. The more variations you teach to your bot, the better it will become in understanding similar words or sentences. After adding more than 10 examples, it will also be able to detect words that don’t exactly match one of the given training examples, but looks very similar to it.

Let’s add some more examples and press Save (in the top right corner).

Hello Intent Training Examples

This was just a very basic intent. It isn’t really necessary to spend a lot of time on those simple intents. As you can see in the following example, it gets more complicated for longer questions:

Contact Care Intent Training Examples

Even when you have trained your chatbot very well, it will probably still sometimes not understand some messages. Your bot will need to know what to do in case it doesn’t understand something, and that’s where the Unknown Trigger comes in!


The Unknown gets triggered when the bot doesn’t understand the message from the user. By creating a flow that starts with this trigger, you can instruct the bot what to do in this situation. There are multiple options to handle the unknown. The most common solution is adding a text reply to that flow with something like “I didn’t understand that. Could you please rephrase your question?”.

The Unknown

Quick Replies

If your company is also working with customer service agents, this would be a good flow to offer the user the possibility to talk to an agent. A very user friendly approach to this option would be adding a Quick Reply. Click on the Text Reply, so it gets selected, and then you can see you have the option to add Quick Replies on the right side of the dashboard.

Add a Quick Reply, set it to “Send text”, which means the user will be able to send a text message to the bot by clicking on the Quick Reply button, and add the label and value. The label will be the text on the button, and the value will be the text that gets sent by clicking on it.

Quick Replies

Read our blog about handling the unknown for more information.

Media Trigger

Let’s also add a flow that starts with the Media Trigger. To create a new flow, click on the same Plus icon we previously used for adding a template, but this time click on Flow.

Adding a new flow

This will add a new flow called “Untitled”. Double click on the flow name to change it.

Renaming your Flow

Let’s change it to “Image”, because this will be the flow that will be triggered when the user sends an image to the bot. Next, drag the Media Trigger into your newly created flow. If you click on it, you can see on the right side of your screen that you have multiple options for what type of Media should trigger it. Let’s keep it on Image for now.

The Media Trigger

As always, we will need to add a reply to our trigger. Let’s add a text reply which says “That’s a nice picture!”.

But what if someone sends a picture that isn’t nice? For example, when they ordered a TV from your website and the screen is broken. Then it would lead to even more frustration when the bot responds in an inappropriate way. That’s why you should be careful with that. allows you to use image recognition, but for now that might be a bit complex to explain already. An easy solution would be to handover the conversation to an agent when the bot detects the user sends an image. Remove the Text Reply and add a Handover to the flow:

The Handover action

We will also need the same flow for when somebody sends a different type of media, like a video, sound file or a different type of file. You can create new flows for each media type, or duplicate the flow you just made and change the media type.

Duplicating Chatbot Flows

Event Trigger

Unlike the previous triggers we discussed, the Event Trigger doesn’t get activated by the user but by the bot itself. Events are a very powerful tool for routing your bot to different flows or branches. They allow you to build more complex functionalities within your bot than simply answering questions or detecting files.

There are 4 ways to trigger an event:

If you use none of the 4 options above for an event, it won’t be possible to access everything you put under that event. It is a common mistake to add events to your bot without adding ways to trigger them.

Event Reply

The easiest way to trigger an event is by adding the Event Reply to your flow. Simply drag in the Event Reply, select it, and choose which event you want to let it route to on the right side of the dashboard.

Ref links

For some channels, like Messenger and Web Widget, you have the possibility to let users trigger an event by opening a specific URL. This URL will be shown on its settings on the right side of your screen when you click on an Event Trigger if you have integrated your bot with a channel that supports ref links.

For more information, read our blog about links.

Manually triggering by agent

If you look at the settings of the Event, you can see there is a checkbox that says “Allow Manual Trigger”. It is off by default. If you enable this option, agents will be able to manually trigger the event from our Chat App.

Manually triggering events by agent

Within the Chat App, the agent can click on the flag icon to manually trigger an event. Doing this will unpause the bot.

Manually triggering events within the Chat App

Code Actions

You can also trigger events with code actions. This is more advanced and requires coding, so for more information, have a look at the Code Action Docs.

Timer Trigger

The Timer trigger is used for letting the chatbot wait for a specific time period before continuing to the next action. It cannot be used as an initial trigger for a flow, so it has to be placed in the context.

The time the trigger has to wait can be adjusted within the settings of the Timer Trigger. You let it wait just a few seconds, or even multiple days!

Continue timer on reply

Timer Triggers get cancelled when an action gets triggered before the timer runs out, for example when the user sends another message before the bot is done waiting. If you check the checkbox for “Continue timer on reply”, the bot will not cancel when an action gets triggered. There are some use cases where it can be helpful to enable this setting, but for most of the time you will not need it.

Send typing

Send typing will show a “typing” animation to the user within the chat, so it looks like the bot is actually typing its message. This can make the bot feel more human, but it has another benefit: if the user sees the bot is still typing its response, the user is less likely to interfere by sending more (impatient) messages.

Timer Trigger Settings

More information about the Timer Trigger

Timers are great for optimizing the customer experience, since they allow you to add Feedback Flows, handle waiting time, and more! For more tips on how to improve your bot using Timer Triggers, read our blog 3 ways to improve your chatbot by using Timers.

Differences between the Timer Trigger and the Delay Action

It is important to know the difference between the Timer Trigger and the Delay Action. Delays are used for letting the bot wait a couple seconds before sending the next text message. Waiting a short amount of time between sending messages by the bot allows the user to take the time to read the first message before he or she receives the next. This will also make the bot feel less spammy when you have a flow that sends multiple Text Replies.

You could theoretically achieve the same result by using Timer Triggers between every Text Reply from the bot, but that’s not what they are meant to do, since we have the Delays for that.

Any Text Trigger

The Any Text Trigger is used for extracting information from the user input. If you ask the user for some information, you can save it with this trigger. Some examples of information you can ask and save with the help of the Any Text Trigger:

Asking and capturing an email address

To explain how the Any Text Trigger works, we will create a flow where we ask the user for his or her email address. Start the flow with an Event Trigger or an Intent, because you cannot start a new flow with the Any Text Trigger.

Underneath the Event Trigger, add a Text Reply with some bot response, like “What is your email address?”. Next, drag in the Any Text Trigger from your triggers section.

The Any Text Trigger

You will see by default the Any Text Trigger will have “something” filled in as its value. This “something”, will be the name of the parameter the bot creates when capturing user input within this Any Text Trigger. It is recommended that you change this parameter name to give you more information about what sort of information is stored within that particular parameter.

To change the parameter name, click on the Any Text Trigger. That will open its settings on the right side of the dashboard. Change the name to email for example. You will also see there is another option apart from changing the parameter name, the “should be” option. If you click on it you will get a dropdown list with all your entities and the system types.

Configure what type the Any Text should be

Since we didn’t create any entities in this project yet, we only see the system types. If you don’t select anything here, all types of messages sent by the user will be matched. In our example, we only want to know the email address of the user, so the Any Text Trigger shouldn’t be matched if the user doesn’t send a message that contains an email address. Let’s select Email address from the system types list and see how it works.

We can test this flow by using the Try it Out preview mode. Save your flow and click on Try it Out on the top of the dashboard. This will open a new window which you can use for testing the chatbot within the platform itself. If you click on the flag icon in the bottom left corner, you can trigger events. Let’s use that to trigger the Ask email address event to start our flow.

Trigger events in Try it Out

After triggering the event, you can see the bot responds with “What is your email address?”. If we then continue the conversation by typing our email address, you can see it will save it within the param we made. The right side of the Try it Out window shows you some information about this conversation, like the params.

See Parameter Values During Testing

Combining the Any Text Trigger with an Unknown

But what if the user types an invalid answer (a message that doesn’t contain an email address)? Let’s test it to find out by triggering the event again.

As you can see, when the user types his name instead of his email address, the Any Text Trigger doesn’t get matched. Instead, the Unknown from a flow we made earlier gets triggered.

Combining the Any Text Trigger with an Unknown

It works how it should now, but there is one thing to improve. When the flow with the Unknown gets triggered, the user isn’t in the flow for asking the email address anymore. If the user now types a valid input for his email address, the Any Text Trigger won’t be matched anymore because it’s not in the right context:

Combining the Any Text Trigger with an Unknown incorrectly

Ideally, we want to keep the user in the right flow, even if the Unknown gets triggered. Luckily, there is an easy solution for this. Close the Try it Out preview and go back to the flow for asking the email address.

Next, add an Unknown next to the Any Text Trigger. Now, when the Any Text Trigger can’t get matched, this Unknown will be triggered instead of the Unknown from the other flow.

Any Text Trigger Tutorial

Looping Flows

Also, let’s add a Text Reply with an error message that instructs the user what to do, before routing back to the start of the flow, so the bot will ask for the email address again. This is what we call Looping Flows.

Let’s also add a response for when the user did send a valid email address. You can even send the stored value back to the user, by typing the name of the parameter between double curly brackets.

Looping Flows Example

When testing again, be sure to click on Clear in the bottom right corner of the window. This will reset the conversation. As you can see in the screenshot below, the user will now stay in the right flow when responding with an invalid answer, and after answering a valid email address at the second attempt, the bot will respond with the stored value of the parameter.

Looping Flows Testing

More information about the Any Text Trigger

The Any Text Trigger isn’t the only method for gathering information with your chatbot. You can also use Entities or Code Actions for that. For more information about the differences, check out How to capture user input. How entities work will be explained later during this course.


Conditions, also known as If/Else-statements, are a very powerful tool for creating more complex solutions within your bot. With some creativity, you can easily create very specific functionalities for your chatbot.

Combining conditions with parameters

Let’s say you only want enterprise email addresses to be able to contact you. Then you might want to let your chatbot check if the user uses a Gmail email address or not. Conditions are great for checking these kinds of things and creating different branches for both scenarios.

Let’s add the conditions and add a Text Reply to both of them:

Adding Conditions to your Chatbot

Now the conditions are in place, but they don’t do anything yet. We will have to add some rules to them. Click on a condition to be able to configure its settings, similar to how you already did it with some other actions.

Now you are able to add condition rules. Add one and instruct it that the param “email” should contain gmail, as shown in the image below.

Configuring Condition Settings

If condition A can’t get matched, it will try to go into condition B. Since there is nothing else we want to check at this point, we don’t need to add any rules to that condition.

When we test again, you can see the bot is responding differently for users with a Gmail address.

Testing Chatbot Conditions

Conditions with multiple rules

Let’s also add Hotmail email addresses to condition A by adding another rule to it. If we would test it then, it would not work. Why is that? That’s because the email address of the user will not contain both Gmail and Hotmail, but just one.

In order to make it work, set the condition to “ANY rule is valid” instead of “ALL rules are valid”. This will let the chatbot know that either Gmail or Hotmail should trigger condition A, instead of a response that contains both.

Different types of Conditions

A/B testing

There is also an option for A/B testing, which can be used for letting the bot randomly pick one of the conditions. This can be helpful for creating slightly different versions of a flow and testing which one works best. You can also use A/B testing for Soft Launching chatbots.

Soft Launch Chatbots Tutorial

Make sure that you set all conditions to A/B testing in order to make it work. You are not limited to just condition A and B, but you can add as many as you want.

Learn more about A/B testing in Chatbots.

More information about conditions

If you would like to learn more about conditions, you’ll definitely find 5 Ways To Improve Your Chatbot By Using Conditions very interesting.

7. Replies

Now we have learnt about the different types of triggers, it’s about time we show you how the replies work as well. There are a lot of types of replies:

Text Reply

During this course we already used the Text Reply a couple of times, but we haven’t yet gone in-depth with all of its possibilities.

If you click on one of your Text Replies, you’ll have 3 different tabs with settings:

Text Variants

In the first one, Text, you can insert your simple text message, but you can also add more variants below. If you fill in some variants, every time this Text Reply gets sent, only one of these variants will be sent randomly.

This way you can make your bot experience feel less repetitive, which can be especially useful for flows that might be triggered a couple of times by the same user, like for example a feedback flow.

Text Variants

You might think using variants can also be helpful for A/B testing, but we recommend using conditions for that instead, like we explained earlier, because that method would be easier to measure.

We will go over measuring the effectiveness of your flows later when we talk about Tags.

Quick Replies

We already discussed how Quick Replies work earlier in this course, when we were talking about the Unknown. For more information, see How to use Quick Replies.

Advanced settings for Text Replies

In the Advanced settings you have the option to customize speech, but we will not go over that during this course.

You also might still see the option for Delay Delivery, but we recommend to not use that, since it will be deprecated soon due to the recent addition of the Delay, which we will talk about in a moment.

The last advanced setting is the option to add tags. We will also go over tags later during this course.

Advanced Text Reply Settings

Event Reply

Event Replies have one simple function: Triggering Event Triggers. In order to be able to set up an Event Reply, make sure that you save your flow after creating the corresponding Event Trigger.


Delays are used for letting the bot wait a certain amount of time before continuing the flow. These are particularly helpful for large flows with multiple text replies from the bot.

If your chatbot would send all those responses simultaneously, it would feel a bit spammy to the user. He or she won’t have the time to read the first message before already receiving the second and the third one.

If you use delays to add a few seconds between the bot responses, you enable the user to take the time to first read the message before continuing, which is great for the customer experience!

For more information about how to use Delays, and what the differences are with Timer Triggers, read Delaying replies.

Location Reply

You probably already guessed it, but the Location Reply is used for sending a location. These Location Replies are using Google Maps.

If you look at the settings for the Location Reply, you’ll see you need to add a latitude and longitude. If you don’t know how to find them, no worries!

Simply search for a location on Google Maps, and they will both be shown in the URL (see image below). The first one is the latitude, and the second coordinate is the longitude. Copy and paste them into your Location Reply and you are all set!

How to find the latitude and longitude

To make it as easy as possible for the user to find you, add an action to the Location Reply (found within the settings as well). With this action, you can configure what should happen when somebody clicks on the reply. Set it to URL and paste the Google Maps URL.

This way, your users can find your location, and even get directions to it, which is great!

The Location Reply

Button Reply

Buttons are great for giving the user a couple of options to choose from, similar to quick replies. The main difference is that buttons won’t disappear after clicking on one of them. This enables the user to go back and pick another option.

That’s the reason why Button Replies come in great if you are developing a chatbot that works with menus. It wouldn’t be optimal for user friendliness to use Quick Replies for menu options, since they make it harder for the user to change his mind and pick another option.

The Button Reply

Another benefit of Button Replies in comparison to Quick Replies, is that they give you some more options, like opening URLs.

Using URLs within Buttons


Cards can also contain buttons, but they give you even more options. Cards also allow you to add a subtitle, or even an image or video.

The Card Reply


A carousel is pretty much a collection of multiple cards. This is a great feature for displaying some of your products, stores, or menu options.

If you look at its settings, you’ll see it looks similar to the Card:

The Carousel Reply

But if you head over to the Carousel settings, you see it’s also possible to arrange the order of the cards and add new ones.

Adding Cards to your Carousel

List Reply

List Replies also have a similar function to carousels, but they will look slightly different. Whether to go for the List Reply or a Carousel is pretty much up to personal preference.

The List Reply

Media/File Replies

The Image Reply, Video Reply, Audio Reply and File Reply work all the same. All you need to do here, is to insert the URL of the file. If the file you want to send with your bot isn’t online, you can host it on for example Google Cloud to get an URL for it.

Using Dropbox isn’t recommended for this, since it isn’t guaranteed to work perfectly this way.

YouTube URLs will not work, so be sure that the video you’d like to send is hosted as well. If you want to send an image that is already online somewhere, simply copy the image address.

Copy the Image Address


Actions can be added to your flow if you’d like to use code. An example would be adding an Action that captures the Unknown input into a parameter, so that the bot can detect (by using conditions) if the message contains a specific topic.

Triggering Code Actions
Code Action for Capturing Unknown Messages

Actions are also used a lot for triggering Zapier actions.

Since code actions might be a little too complicated already for this beginners course, we won’t go too deep into that yet. If you are interested in learning more about them, head over to the Code Action Documentation.


The Reset action gives you the option to reset everything, only reset all the parameters, or reset just one specific parameter.

The function that resets everything is great for creating a specific Reset Flow, which can be very useful while testing your bot.

The Reset Action

An example where resetting a specific parameter comes in handy, would be when you ask for the name of the user, and the user tries to be funny by typing a nasty word instead of his or her actual name.

By using a Profanity Filter, you can detect these kinds of words, and let the user try again. If you’d just reroute them back to the “Ask name” event in the image below, and the user would enter another name, the parameter would have both values.

Since you only want to save the second value, you reset the first one (with the profanity), before looping the flow back. This way the wrong value won’t be saved.

Clearing a Parameter

If you want to know how to set up a Profanity Filter, check out the tutorial video below.

Profanity Filter Tutorial


With Tags, you can save specific information to that specific user. When working with external Customer Care software like Khoros, you can make these tags visible to the agents, so it will be easier for them to see what flows the user has been through for example.

Tags can also have a more backend-focussed function. By combining tags with conditions, you can develop more complex solutions for your bot, such as Locking Flows.

Locking Chatbot Flows Tutorial

You have the ability to remove tags as well.

Adding or Removing a Tag


Even though chatbots can do a lot already these days, it is unrealistic to think they will be able to answer all questions your company receives. That’s why it’s utmost important to Nail the bot to human handoff by using the Handover action in the right way.

When the handover is triggered, the bot will pause. This means that the chatbot will not be responding to incoming messages anymore, because an agent should respond instead. You don’t want both the agent and the chatbot to respond simultaneously of course.

If you for some reason don’t want the bot to automatically pause, you do have the option to turn this off within the handover settings.

There you’ll also see the option to change the time period the bot should pause. If you leave this empty, it will use the default value from your project settings.

Handover Pause

By default, this value will be 15 minutes. This means that if an agent doesn’t take over the conversation between that time period, the bot will resume again. To change this, go to Project Settings → Language and adjust it to your preference.

An agent can also resume the conversation within the Chat App.


The Resolve action can be placed into flows where you know the user has been helped. You also have the ability to tell if the bot or the agent resolved the chat, which can be helpful for monitoring the bot performance.

The Resolve Action


The Teleport action can be used for “teleporting” the user from the current chatbot to another one, but we won’t cover that during this course.

Channel limitations

When you have integrated your chatbot with one or more channels, you might see that some of them have faded out. This means the integrated channel does not support those types of replies.

For example, on SMS and WhatsApp, you can’t send rich UI elements like buttons or carousels. The current channel limitations for the replies for WhatsApp chatbots are shown in the image below.

Channel Limitations for WhatsApp

To see all channel limitations, see’s Triggers & Replies Reference.

Textual Selection Lists

If you are creating a bot for a channel that is limiting some replies you’d like to use, there are almost always some good workarounds to come up with.

A lot of chatbots are using Button Replies or Carousels for menus with topics for a question. This makes it easier for the user, since they only have to click on one of the options instead of manually typing their question.

The Button Reply

These buttons aren’t possible on WhatsApp or SMS, but if you still want to enable the user to easily respond from a list of options without too much effort, you can display the options within a Textual Selection List, as shown below.

Textual Selection List

The user would only have to respond with “2” for example if they would like to get more information about refunds. This way, it’s still very easy to respond quickly.

Another benefit of using these Textual Selection Lists, is that they allow you to display more options in a single reply than Button Replies (which are restricted to 3 buttons per card). This makes it so that you don’t need to create additional sub menus.

For more information about how to set up these Textual Selection Lists, check out the YouTube tutorial below.

Textual Selection List Tutorial

8. Entities

Entities are great for extracting data from the user input. You can also use the Any Text Trigger for extracting information (or Code Actions), but entities work differently.

Entities are made of lists with different keywords and synonyms to those keywords. An example would be a list with different payment methods.

Entity for different Payment Methods

If you add this entity to the intent where the user asks for the available payment methods, the intent will look like this:

Using Entities within Intents

You can highlight the entity within the training examples of your intent by selecting it with your mouse, or double clicking on it. It’s also possible to add multiple entities to a single intent.

Now, when the user triggers the intent, the bot will check if the user has already included a value for the entity within the text message. If that’s the case, the parameter “payment_methods” will automatically contain that value.

In the example below, our fictional shop accepts all payment methods except for cash. You can use condition A for checking if the value of the entity is cash, so the bot can tell the user that’s not possible:

Combining Entities with Conditions

Next, condition B will check if the entity has a value, and if so, it returns the value by using the entity name between double curly braces, similar to how we did it with the parameter from the Any Text Trigger.

Checking if the entity has a value

If the user just said something like “How can I pay?”, the message doesn’t contain the entity. Then condition C, the “Else” condition, will be triggered and the chatbots sends a list of all available payment methods. Another benefit from using entities, it that you don’t need to create a separate intent for everything. You don’t need to create an intent for “Is it possible to pay with Cash”, as well as an intent for “Is it possible to pay with iDeal?”.

Just create a single intent for all variations and use the entity. This doesn’t only save a huge amount of time, but it will also make the bot less vulnerable to false intent matching. If you create a lot of similar intents, the bot might get confused and accidentally match the wrong intent on some occasions.

Also see Working with entities instead of multiple intents for more explanation.

9. Audiences

Within the Audience overview, you can see who interacted with the bot. You can also see the language, channel, and the date and time of the first interaction with the bot.

The Audience Overview

For channels where the user is anonymous, like the Web Widget, users won’t show up in your audience.

It is also possible to import audiences from a CSV file, which can be useful for marketing or internal workspace chatbots that work with broadcasts.

10. Broadcasts

Broadcasts give you the ability to proactively send messages with your bot, to all your users, a segment, or even one particular user.

Firstly, click on the plus icon to create a broadcast. Give it a name and select a group. Create a new group if you didn’t already create one.

The Broadcast function

Secondly, select whether you want to send the broadcast to only a specific user, or a segment, and select the right user/segment. If you can’t select anything here, your audience is probably still empty, so let some people chat with the bot to add them to your audience, or simply import them with a CSV file.

Next, let your chatbot know when it should send the broadcast. You have the following options:

Selecting one of the options above will change the settings for it. These settings pretty much speak for themselves.

After that it’s time to select what the chatbot should actually do during this broadcast. You have 3 options for this:

Most of the time broadcasts are used for triggering an event. You can create for example a flow with some weekly discounts for your shop and use broadcasts to send those offers to your user base every Monday at 12.

For more information about scheduling broadcasts, we suggest you have a look at How to schedule and broadcast chatbot messages.

If you are planning on using broadcasts, make sure to check the channel rules for it, since some channels have understandably created restrictions for it in order to make sure people won’t create spam bots this way.

11. Project Settings

You can find your project settings by clicking on the gear icon in the bottom left corner of the dashboard. The project settings are divided into 5 sections:

General project settings

Here you can find your project ID, which cannot be changed. The general project settings also display your project name and label, which you can change if you’d like to.

You can also enable channel specific design. We will go over that later during this course.

At last, you can delete your entire project as well in the general settings section.


Within the backup section, it’s possible to create exports and imports of your chatbot. It is recommended to occasionally make backups. This feature is only available to clients with a pro plan or an enterprise plan.

This function isn’t just useful for creating backups, but it will also be very useful for duplicating bots. That way you can have a development and a production version of your chatbot. Why you should use a dev and prod version of your project, is explained in 4 Steps to Launch Your Bot Successfully.


Within the Languages settings you can obviously change the language of your bot, but there are some more useful configuration options in this section.

Different regions

You can’t only change the language, but also the region. Why would you want to do that? Let’s say your clients are from both the USA and Canada, so most people from both countries will probably contact your company in English.

If the answers to some questions differ for both countries, you could create slightly different versions for both countries, even if they are using the same language. How you can add more regions and languages to your bot will be explained later during this course, at the Multilingual Design chapter.

Confidence threshold

You might have noticed already during testing in the Try it Out preview that there are some percentages displayed on the right side of the window. These percentages are the confidence the bot has that the text message belongs to the intent.

In the example below, the bot is 93% confident that “At what time does your shop close?” has a similar meaning to “What are your opening hours?”.

Confidence Level

By default, your confidence threshold will be at 70%. Because 93% is higher than 70%, the intent got matched. If you’d change the confidence level to 95%, it wouldn’t match that message anymore.

Confidence Threshold

By setting your confidence threshold to a higher percentage, your bot will become less likely to falsely match intents, but the downside is that more messages won’t get matched. 70% is a good starting point for most chatbots, but by testing your bot a lot you might find out that a lower or higher percentage works better for your specific bot.

Minutes to auto pause

We already told you about this option when we discussed the Handover action. When your bot is still just in the testing phase, you might want to set this to just 1 or 2 minutes in order to speed up testing.

AI model

You can choose between the single language model, which should be used if you want to create a bot with just one language and region, and the multi-lang model for multilingual chatbots.

Business Hours

With the help of Business Hours, you can let conditions work with specific dates and times. This way, you can for example branch your handover flow, so that your users will get a different response when your agents aren’t working at that time.

Business Hours within Conditions

To create Business Hours, simply click on the plus icon and give your Business Hours a label, timezone, channel and language. Then you can select the open times for each day, as well as adding specific times for special dates like holidays.

You can also add multiple sets of Business Hours, for example when your Sales team is working on different times than your Customer Care team.

For more information, have a look at How To Add Business Hours To Your Chatbot.

Business Hours

Resolve (beta)

Since the Resolve project settings are still in beta, we won’t cover that during this course. You can find more information in the Data Retention Documentation.

12. Chat App

If you aren’t planning on integrating your chatbot with an external Customer Care tool, you might want to use the Chat App as an alternative. It is still pretty basic, but it will do the job for simple customer care.

You can see incoming messages, even if the bot hasn’t triggered a handover yet. When a handover is triggered, you will receive a message in the Chat App that someone needs to be assisted.

During a chat, known information about the user will be shown on the right side of the screen.

You can also assign users to yourself, archive and delete conversations, and if you head over to the Chat App settings, you can configure which projects to assign to you as an agent.

The Chat App

For more information, see 3 Steps to get started with the new Chatapp.

13. Omnichannel Design

Due to’s Omnichannel Design, it’s possible to create a single bot for multiple channels. You can even make adjustments for each channel, so you can optimize your chatbot even more!

Multichannel Multilingual Promo video

To add another channel, simply go to Integrations within the dashboard and add another channel. Note that the WhatsApp and Twitter integration will cost extra. See the Pricing Page for more information.

Add Multiple Integrations with Omnichannel Design

Once you have added all the integrations you need, go through your flows and check if they are all good. Due to channel limitations, you will have to change some flows a bit.

The flow we made earlier with the Location Reply now is marked purple instead of pink. This means the flow isn’t exactly the same for all channels. Let’s have a look and see what’s going on with this flow.

Purple Highlighted Flow Example

As shown above, the Location Reply is purple, so that one isn’t the same on all channels. That’s because that type of reply works on some channels, like WhatsApp, but doesn’t work on for example Twitter. If we have a look at the Twitter version of this flow, you will see the Location Reply isn’t there, simply because that’s just not possible.

Specific Channel Changes for Twitter

You could solve this by changing the Text Reply for this channel to “This is our address: Burgemeester Brokxlaan 12, 5041 DB Tilburg, Netherlands”.

Besides all integrated channels, you’ll also see the “SHARED” tab. This is the part of the flow that’s exactly the same for all channels. If you make changes to the flow within the SHARED tab, the changes will be made to all channels. This makes it faster and easier to make changes to all your channels simultaneously.

If you change something in a specific channel tab, it will only change for that channel. This way you can optimize each specific channel at a time.

If you are planning on developing a multi-channel chatbot solution, it is advised to read Multichannel design - How to create 1 chatbot for WhatsApp, Messenger and Web.

14. Multilingual Design

Easily add other languages and regions to your bot with’s Multilingual Design. You only have to create the bot for one language and it will automatically translate to all of the other languages you add!

The video below will explain step-by-step how to add other languages, and what you should do next, since you aren’t done right after adding more languages.

You’ll have to check whether everything is translated correctly and approve it. This function assists you in avoiding translation mistakes.

Multilingual Design Tutorial

15. Some final tweaks

Before you get to the point where you are about to launch your chatbot, let’s first go over some last tweaks you can do to make your bot even better!

Reusable Flows

There are various final tweaks you can do to make your chatbot even better. A good place to start would be checking if you implemented all sorts of reusable flows (if necessary):

The 3 flows above all tend to start with an Event Trigger. To trigger them, use the Timer Trigger with an Event Reply underneath it in all correct places within your bot.

The Feedback Flow can get triggered when the bot has given an answer to a question, the “Do you still need help?” flow can be useful when somebody hasn’t responded for a certain amount of time, and the “Can I help you with anything else?” flow can be the result of then somebody responded that the previous bot response helped them out.

Generic Flows

Also don’t forget to include Flows for some generic intents like:

String Templates

Also, to personalize your conversational experience as much as possible, you can make use of String Templates. This can help you out with simple functions like including someone’s name within a Text Reply, but you can also go more advanced and convert dates and timezones.

16. Launching your bot

After the development process it’s time to launch the first version of your bot. It wouldn’t be wise to just simply implement your bot and be done with it, because there is always a risk you forgot to add some important intents to your bots, or some events or conditions aren’t configured correctly.

Through experience with multiple clients, has created a strategy with 4 Steps to Launch Your Bot Successfully, so be sure to check that out before going live with your chatbot!

17. Analytics

When you have launched your bot, you might think you are finally done. Well… you aren’t. Similar to your website or app, a chatbot is never really finished. There are always things to measure and improve.

Platform Analytics

That’s where Analytics comes in! The built-in analytics overview within the platform will help you detect which flows need to be improved, which channel is working better, at what times you are getting the most amount of questions, and more.

You can see the Analytics are split up in multiple areas:

We’ll go over each of them in short now.


The number of interactions with your bot is the total number of different people that have had a conversation with it. On some channels, like the Web Widget for example, the user is anonymous.

That results in the bot being not able to notice when the same person comes back later after closing the chat. Not that this might make the data for your interactions not 100% accurate.

Also, when a conversation has been resolved, and the user starts asking another question, this will count as a new interaction.


This will show you how many handovers have taken place for each channel.

Opening events

The total number of daily triggered opening events for each channel can be seen here.


A session is similar to an interaction, but the difference is that when another conversation with the same person starts after 15 minutes (or longer) of no response, it counts as another session. This means that someone can have multiple sessions a day.

For more information about sessions, visit the Pricing Page.

Channel volume

The channel volume can be used for comparing the chat volume between different channels.

Outbound volume

Here you can see the total number of daily messages sent by the bot in comparison to the number of messages sent by agents.


The audience analytics will show the number of individual users that interacted with the bot per day. No matter how many sessions or interactions the user had, it will always count as 1 within towards the audience.

Export report

Here you have the option to export your analytics report. You can also select the date range, and there is an overview of all your exported reports.

Export your Chatbot Analytics

External Analytics

There are also other ways to keep track of your chatbot analytics. Easily integrate your chatbot with Dashbot, Google Analytics, Chatbase or Insocial.

You can also integrate your chatbot with Zapier to export data to Google Spreadsheets.

Google Sheets Chatbot export Tutorial

18. Avoiding common mistakes

To achieve maximum results, it is important to avoid common mistakes.

Accidentally looping flows incorrectly

One mistake that is easily made, is accidentally looping flows, so the bot will keep repeating the same cycle. To give you an example of this, we created the flow below, where the bot will tell the user to click on one of the buttons after the user hasn’t done anything in 2 minutes.

It might look like a smart idea to then route back to the main menu, so the user receives the options again, but the problem here is that after another 2 minutes, the bot will do that again, and after 2 more minutes once more, and so on.

Multiple existing chatbots use a similar “Do you still need help?” flow, which triggers after a certain amount of inactivity from the user, and then show the menu options again so it’s easy for the user to continue.

There is nothing wrong with that. In fact, it is even a good addition to the bot for most use cases, but just be sure to not create a never ending cycle this way.

Looping a flow incorrectly

Not using context correctly

Some people tried creating their entire chatbot within a single flow. This way, a lot of intents can’t get matched, even if they would have a 100% confidence level. That’s because the context will cause problems if your intents are on a low level of a flow instead of on the beginning of separate flows.

Chat Bot Context Tutorial

Resetting within context

If you use the Reset action to reset everything, the bot will lose its context. Let’s have a look at the flow where we explained the profanity filter earlier during this course. It should work like shown in the screenshot below.

Resetting within Context

It’s working correctly because the Reset action was instructed to only reset the parameter containing the name:

Clearing a Parameter

The common mistake is to reset everything here instead. Then the bot might lose its context and won’t match the correct step anymore.

Adding Events without triggers for them

Another common mistake is that people forget that an Event Trigger can never activate on its own without actually being triggered by either a Code Action, an Agent, a Ref URL or an Event Reply.

We often come across flows like the example below, which won’t work.

Incorrect use of the Event Trigger

Multiple flows starting with an Unknown or the same intent

If multiple flows in the same bot project have the same intent or an Unknown at the beginning of the flow, there is no context the bot can use to route the user to the right flow. This might cause some problems, like the bot matching the wrong flow, or can disallow the bot to match some messages at all.

Using the Timer Trigger instead of Delays

For adding some delays between Text Replies from the bot, some people tend to use Timer Triggers instead of Delays. This could theoretically work, but you will be far more likely to make a mistake this way.

Timer Triggers don’t have the “Continue on reply” checkbox checked by default. If you leave this unchecked and the user responds before the given time period is over, the Timer Trigger will not activate anymore.

Delays always continue on reply, which makes them ideal for adding brief delays between your bot messages. They also look more compact, so large flows will keep looking more organized this way.

Forgetting about channel (character) limitations

Perhaps the most frequently made mistake is that people forget about channel limitations, or specific character limits. For example, if you add more than 20 characters to a Quick Reply in Messenger, it won’t fit.

By testing in the destined channels instead of only in the Try it Out testing preview, you can get a better understanding of how your bot is coping with the respective channel restrictions.

19. Keep yourself up to date

Congratulations on completing this course! We hope you learned a lot! But this is of course not everything there is to learn about chatbots. has a wide variety of other blogs and documentation that can extend your knowledge even more!

The chatbot industry is still relatively new and keeps on developing rapidly. is constantly working on improvements for its platform, to ensure that you can create the best conversational solutions for your company and your clients.

That’s why it’s important to stay updated on the latest developments, such as new integrations, functions or other changes to the platform.

To ensure you don’t miss out on any important news, follow on LinkedIn, Twitter, Facebook and Instagram, and subscribe on the YouTube Channel.

Also, feel free to join our Slack Community. With over 1000+ enthusiastic chatbot developers, this is the place to be for getting a quick answer to all your questions, and to get inspiration from other ambitious bot projects!

Request demo