So one of the main pitfalls in creating a conversational system is assuming that you have to answer everything, no matter how bad it is. In a real life conversation we only go so far.
If you attempt to answer every question the user stops talking and treats the conversation system more like a search engine. So it’s good to force the user to at least give enough context.
Watson intents generally don’t work great with a single word. To that end create a node with the following condition.
This will capture the one word responses. You can then say something like: “Can you explain in more detail what it is you want?“.
Of course you can have single word domain terms. They don’t give you enough context to answer the user, but enough to help the user. For example, lets say you are making a chat bot for a Vet office. So you may set up a node like this:
You can then list 2-3 questions the user can click and respond to. For example:
1. Why does my fish call me Bob?
2. How do fish sleep?
If you do need to create a list, try to keep it to four items or under.
Two to Three Words
Two to three words can be enough for Watson to understand. But it’s possible that the person is not asking a question. They could be trying to use it like a search engine, or a statement. You may also want to capture this.
To that end you can use the following condition.
|input.text.matches(‘^\S+ \S+$|^\S+ \S+ \S+$’)
This will only capture 2-3 words that do not contain a question mark.
Here is the sample conversation script.
Handling Process Flows
While stepping a user through a process flow, don’t assume that the user will ask random questions. Even if they do, you don’t have to answer them. In real life, we wouldn’t try to answer everything if we are in the middle of something.
We may answer something in context, but we are more likely to get impatient, or ask to stop doing the flow and go back to Q&A.
So when creating your flow, try to keep this in mind. If the user asks something outside of what you expect, ask again only make the answers linkable (as long as there is a limit of answers). For example:
Watson: Do you want to a cat or a dog?
User: How do fishes sleep?
Watson: I don’t understand what you mean. Did you want a cat or a dog?
If the user persists, you can create a break out function. As you do a first pass through your user testing, you can see where you need to expand out. Don’t start off coding as if you expect them to break out everywhere.