How To Craft Compelling Chatbot Conversations
Use These Principles to Effectively Direct Your Chatbot Dialog
Introduction
Ensure your chatbot always select and return the most appropriate Conversational Node…
Learn how to approach building conversational dialogs and address complex conversations.
General Tips
Firstly, before coding or creating a single node, plan the scope of your conversations. Writing it out on a board as a team helps.
Don’t debate and subsequently create nodes of events you think might occur. Look with-in your organization for existing conversations. That might be call centre recordings, live agent chat transcripts etc.
Avoid copying business processes as-is; these are rarely conversational. Speak to the people involved in conversing with customers on a daily basis and understand how they approach it and communicate it. These conversations should suffice in order to craft a narrative for the Conversational UI.
Decide on a persona, tone and level of formality and continually reflect on this while crafting the dialog. Keep in mind, the dialog is all your user have to work with; it informs their next action.
Always announce that the user is in-fact speaking to a digital assistant. Don’t present the chatbot as a human, or leave doubt in the user’s mind.
Not every aspect of the conversation needs to be in Natural Language and unstructured. There are instances where you can craft some structure; should the situation demand it.
Adding Nodes
If you create conversational nodes, make sure you give each node an appropriate and descriptive name. You might know at this present moment exactly where this node fits in, but in a few months time, as the complexity of your bot grows, this will change.
Depending on the development environment you use, when you need to capture an array of information; analogous to a form, try doing this in one dialog.
Your environment should have an option to capture various slots and prompt intelligently for missing data. Jumping from node to node to perform a task is not optimal.
If complexity lies ahead in the conversation, warn the users regarding what is waiting round the bend.
When adding advanced features to your dialog; for instance digression, disambiguation, jump-to’s etc, always be aware of the impact it will have on the existing conversation.
Continuous regression testing is important.
Do not over optimize your number of conversational nodes by randomly jumping from one dialog node to another. It might initially seem efficient to re-use dialogs. But this can clutter your dialog and cause it to be error prone during updates and enhancements. Re-creating nodes will allow for changes to be more isolated.
Adding Responses
The dialog returned to the user must be as short as possible, and applicable to the point where the user is within the conversation.
Mirror the perceived user intent in the response. This can act as reassurance to the user in terms of intent confirmation. But also, it gives the user the opportunity to correct any misunderstanding as soon as possible.
Only link out to sites or other resources when it is absolutely necessary. The user opted for the chatbot as the channel of choice, so try and keep it like that.
Avoid the over structuring conversations. The aim of a conversation is to allow the user to enter data in an unstructured fashion. The allure of conversational UI’s are that the user does not have to structure their input as they would for a website or app.
And this speaks to the challenge of a chatbot which needs to create structure from the unstructured input.
When you introduce structure too early or too much of it, it takes away from the whole conversational experience. This is always a temptation to add structure to the conversation in the form of buttons, as it does feel that the flow of information is better facilitated.
But then it ceases to be a conversational interface and revert to merely being a structured conversation housed within a conversational application or environment.
Use the graphic elements (conversational components) only if traction is not gained in the conversation. Once structure is introduced and the conversation is advancing, revert again to a more unstructured, conversational approach.
Avoid using an number of dialog nodes when one will do. See what options are available, conditional responses and to what extend elements can be randomize.
Capturing User Input
Most environments have auto-correction available. In some cases you need to return the user’s input to them; for instance: “you said:…”. In these cases you want to correct spelling and use that version for your linguistic model, but return to original version to the user.
It is useful to determine the number of words in your user’s input. This will assist you in assessing if you will be able to parse the user input.
Some chatbots detect the length of a user’s input, if it is too long, the user is asked to shorten their input. Or break their dialog into single questions. This improves the likelihood of your chatbot in hitting the correct intent.
Compound queries or input from an user results in multiple intents. These different intents can be detected by looking at a threshold of the different intents defined. An alternative is making use of disambiguation; presenting the user with a few options to choose from.
Ambiguous Intents
There will be cases where a user enters input that results in being ambiguous to such a degree that that a few intents are relevant to the request. How does the dialog know which dialog intent to respond to? If you make use of disambiguation, you can present the user with a few options to choose from. See Disambiguation for more details.
Conclusion
For many chatbot development environments the NLU / NLP portion is very very much reliant on ML and the results yielded are often astounding.
However, the challenge with most environments are the steering of the conversational dialog which contains conditions, dialog wording, often graphic elements etc.
There are chatbot frameworks which are moving towards the deprecation of the callflow, for instance Rasa. But in most cases it is still a very graphic and state machine driven environment.