Hi, I'm Joe

Founder and CTO of ubisend. Proud Father of a beautiful little girl, developer, occasional globetrotter and, time permitting, a keen runner and cyclist.

Building a successful chatbot

First things first, what exactly is a chatbot? A quick Google will give you lots of different answers to this simple question. I have attempted my own definition with the caveat that this fledgeling technology is constantly evolving so this may well be out of date by the time you read it. Here goes:

A chatbot is a software program that an end user interacts with via a conversational interface such as Facebook Messenger, Slack, Telegram, etc. The software program itself can utilise artificial intelligence to simulate conversation using natural language understanding (NLU), it can also be rule/flow based with the goal of directing a user down a specific path or it can be a combination of the two.


I have been building enterprise-level chatbots at ubisend since early 2016. The spectrum of projects we have been involved with has been huge and includes everything from sales tools to celebrity personas to daily news briefings. Even though the scope of these projects has been so varied, I have come to the conclusion that many of the key concepts to building a successful bot remain consistent no matter what the goal or scope.

The rest of this article will provide you with an overview of these key concepts. I would recommend you keep these in mind if you are building a bot.

Key concepts

Manage expectations

For me, this is one of the most important points of all. At the very beginning of the user journey, set the expectations of what your bot can do. This would usually be in the very first message or at the end of the onboarding sequence if you have one. It should be a concise overview of the main purpose of your bot. The Golden State Warriors bot is a great example of how to do this well!


Personalising messages can be as simple as using the name of the user when chatting right up to building up a full user profile you can use later to tailor the content of your messages. The more information you have, the more personal you can make your service which will serve to delight your users.

Don’t try to know everything

Trying to respond to every question should not be the goal of your bot. In my experience, you will waste a lot of time setting up your bot for questions that its users will never ask and lose focus of the core objectives.

Have defined goals

No matter what the purpose of your bot, make sure you know what it is you are trying to achieve. If you are new to bots, you are likely working with a completely different interface than you are used to. One that you have little control over. This can make it more difficult to direct a user where you want them to go or even educate them on what they can achieve with the bot. Keeping your goals in mind can help you to focus better on the user journey.

Know your subject matter

This is aimed more at those bots utilising NLU to determine the intent of the user’s input and respond accordingly.

Now that you have a set of defined goals and have set the expectations of the user, your bot better be able to do what you say your bot can do! Failing to answer a question on a subject you have told the user they can talk about ends in a pretty bad user experience.

Be clever with your content

If it’s a bad experience for the user when your bot can’t answer a question, it’s even worse when the bot asks the question and can’t understand the response. With that in mind, try not to ask questions in your responses unless you are confident you will be able to handle it and reply accordingly. I have made this mistake in the past…

Error handling

It’s inevitable, your bot will get it wrong and this is OK. Users tend not to be put off as long as you give them a way of getting back on track. Consider using what I like to call conversation aligners. If your bot is stuck, give the user a way to move on and perhaps reaffirm the scope of your bot to try and guide the user into talking about something you can handle. We built this into the PG tips Monkey bot to great effect.

If things are going really wrong, you may also want to consider giving the user an option to speak with a human.

Keep learning and iterating

Finally and most importantly, analyse the conversations your bot is having and learn from them. If you are using NLU, figure out where your bot is getting it wrong and train it so it doesn’t make the same mistake again. If you have a flow-based based bot, make sure there are no bottlenecks where users are getting stuck. As with most pieces of software, learning from your users is important.

The great thing about bots is you’re not reliant on feedback from the user. You are getting the feedback in real time as you can see exactly what the user is asking and what they are trying to do. You’ll quickly be able to see what is working, what isn’t and what the most obvious features are that you need to add.


As with most software projects, building bots can be very challenging and equally rewarding. Watching conversations in real-time is an unusual experience as it’s not often you get to see exactly what your user is seeing. This is the best feedback you could possibly get to help iterate and improve things of your users. Keep things simple, defined and allow a user a way out if they get stuck and you will be well on your way to a successful chatbot.

I hope this has been useful. If you have any feedback, please feel free to get in touch.

I hope you enjoyed reading this. If you have any questions or comments, drop me a message