Designing a conversational experience requires a set of best practices that go beyond the natural language understanding and personality of your chatbot. You will need to account for unexpected scenarios, interruptions, ambiguities and other situations that are the norm when having a conversation in real life.
When we started creating Darvin.ai – a platform for building chatbots – as an incubation project at Progress, we decided to follow an opinionated approach that leads chatbot developers through a set of best practices. Let's take a look at what we deem important as best practices in designing state of the art conversational experiences.
Darvin.ai is a Progress incubation project to create a new tool for building and deploying artificial intelligence (AI) chatbots into various channels. Darvin.ai makes it easy to create chatbots on top of existing systems that interact with users in a natural way using cognitive flow and rich UI without requiring developers to define decision trees and spend time training chatbots.
Your "welcome" message is designed to help your users understand how to interact with your chatbot, and it's one of the most important messages.
Ensure that your chatbot doesn't sound robotic. Give it personality and its own character that is aligned with the voice of your brand.
Using a neutral gender is the best option as it allows users to focus on the activity that they are doing instead of drawing too much attention to the character.
Your "welcome" message is the place to list all options that your bot can do so that users don't waste time trying to engage in a conversation that your bot doesn't support.
Every Darvin.ai chatbot requires a getting-started conversation that lists the most important (most frequent) types of conversations as quick replies to the user.
Ensure that your welcome message provides users with an ability to restart the conversation so that they don't feel trapped.
There is a
built-inrestart command in a Darvin.ai chatbot. You can change the keyword using the commands setting in your conversation.
It's often necessary to hand off the conversation to a person. Ensure that this option is available for your users, and your chatbot stays silent while the operator and the user are continuing the conversation.
There is a built-in
silence-timeoutsettings for every chatbot in Darvin.ai that you can use to mute your chatbot until the operator resolves an issue with the user.
The majority of the platforms for building chatbots allow you to do some kind of intent training as part of their natural language understanding. However, intents are too granular and make it hard for you to design a meaningful conversation. That is why, in Darvin.ai, we have broken the training into two pieces:
Conversation training that will help your chatbot identify the correct conversation that needs to be started with the user.
Entity training that will teach your bot to recognize entities from a conversation with a user.
Imagining your chatbot as a set of conversations is a much simpler way to design your chatbot. Also, each conversation usually matches with an existing interaction that your users may already be familiar with, either through a mobile app, website or email.
The user might change their mind about an input they just entered, or they may want to completely change the topic of conversation. Ensure that your chatbot can deal with such interruptions, rather than pushing the user in a fixed decision tree that they need to follow.
Darvin.ai evalutes the probability with each user message that the user is switching the topic of the conversation, or that they are providing information about a previous step of the conversation, achieving truly intelligent conversation.
When you talk to a person, it's rare that they use the same words and sentences to interact with you. Make sure that you make the conversation versatile by including multiple messages that the bot can choose from.
Darvin.ai allows you to define multiple responses for each question that will be sent randomly.
The majority of the channels that support chatbots such as Facebook, Viber and Slack, provide some kind of a quick reply or options that can facilitate making a decision. Ensure that you are using them to enrich the conversational experience.
Darvin.ai supports both
staticdefinition of quick replies that are entered manually, or
dynamicdefinition that retrieves the options from a web service.
Using natural language understanding helps you understand what your users want to do, and also extract entities from the conversation. However, it's important that you keep the user informed about what the bot actually understood.
Darvin.ai provides the ability to set
acknowledgments, which are messages that will be used only when the bot identifies the entity without explicitly asking for it. For example, if the user start the conversation with a message, and the bot identifies an entity (let's say doctor), it will send the acknowledgment messages for the doctor entity to the user.
There are cases when a bot can identify multiple values for a given entity. For example, imagine there is a chatbot for booking doctor appointments, and the user sends the following message "Is Dr. John Burke or Dr. Stan Smith a better doctor?". Unless your bot has a conversation for comparing doctors, it will need to clarify for which doctor the user wants to book an appointment.
ambiguitysetting for each step in a conversation. That way your chatbot can automatically present the user with quick replies to identify the correct user input.
There will be times when your users abandon a conversation. The next time the user engages with your chatbot, the best practice is to begin the conversation with the user where it was left off, or set an expiration time for your conversation session.
But both approaches are not optimal. If the user returns in 2 weeks, they will not want to continue a 2 week old conversation. On the other hand, while an expiration for your session with the user is a better option, it's tricky to guess the correct expiration length. That is why we recommend actually asking the user whether they want to continue their session 30 minutes after their last message. This draws attention to your chatbot if the user got distracted, and keeps them in control.
Regardless of how many conversations and entities you trained your chatbot to understand, there is always a chance that things will go wrong. There are several must-have scenarios that you need to support outside the regular conversations of your chatbot.
Building a smart chatbot that pulls dynamic data from web services is always exposed to the risk of a failing service call. Ensure that you have good error handling on all dynamic services that will keep the user informed if things fall apart.
general-failuresetting for each chatbot that will be used when it encounters experiences technical problems.
Until your chatbot gains enough training data, there will be scenarios when your chatbot won't understand all of your intents. If you are using a standard message such as "I am not sure I understand what you said," avoid sending it more than 3 consecutive times, and direct the user to an operator instead.
Since I work on Darvin.ai, obviously, my examples all relate to using it. Nonetheless, whether you choose Darvin.ai or another platform to build your chatbot, you should consider implementing these best practices wherever they seem appropriate.