This article includes a conversation design pattern to handle user input after asking “Is there anything else I can do for you?”. It is suitable for virtual agents which contain more than one use case or are designed for deflection.
To a supposedly simple question "Is there anything else I can do for you?", many different answers can be received, such as "Yes", "Yes, I would like to book another appointment", "No", "No, thank you", or simply "I would like to book another appointment". The variety of user inputs makes it difficult to give an adequate answer, but with the following patterns we show you how to prepare for most of them.
What you are going to learn is, how to build these patterns, either within the Main Flow or as a separate Flow and either with an Optional Question Node or a Question Node. Furthermore, we’ll look into the advantages and disadvantages of each approach, and evaluate which of the shown ones is the best fit for your scenario. Let’s start with the Optional Question Node and the approach within the Main Flow.
Anything else in the Main Flow
Use the Case Node in your Lookup in the Main Flow as a placeholder for the Anything else case. You just write "Anything else" in the value field and don’t select anything from the Intent Select dropdown.
Make sure the Question Type is set on Yes/No. And the Forget Question Threshold should be on 1 because we don’t want any interferences later in the conversation.
Explanation of the onAnswer process
If the input of the user somehow contains a positive or negative statement, the flow execution takes place on onAnswer.
If the user input contains a negative statement, the flow execution takes place on Then. There, we first thank the user and after a short pause we ask for feedback. In this example we use the Webchat capabilities and display an overlay to the user with some rating possibilities, also see our Request Rating Node. We wait for input and after receiving it, we check if they entered something in our rating overlay in the Webchat or if they cancelled and entered something new, for example "Ah I forgot, I wanted to book another appointment". If the latter takes place, the flow will follow Else and we restart again with the Think Node and the input from the user. If the former takes place the flow will follow Then and we thank the user for the feedback, go to the beginning of the Main Flow and wait for another user input.
If the user input contains a positive statement, the flow execution takes place on Else. We first check if the user intended something that already exists in the NLU Model, if not we ask again how we can help.
Explanation of the onQuestion process
For every other user input, for example "I want to make an appointment" with no positive or negative statement, the flow will be executed on onQuestion.
Be aware that the flow execution takes place until the end of the flow, so if you have other Nodes after your Optional Question Node, these will be executed.
Anything else with a separate Flow and attached Main Flow
In some cases, for example your Main Flow is already pretty big or you don’t have an explicit Main Flow, you might want to build a separate Flow for Anything Else. To share the knowledge of the Main Flow with the Anything Else Flow, we need to attach the Main Flow.
The advantage to this is that we can access the maintained Intents in the Main Flow and are able to handle inputs like "yes, I want to know more about my appointment" differently since the intention of the user can be found in the shared NLU model.
Make sure that Continue main Flow after attached Flow is disabled. You’ll find more information on Attached Flows here.
Approach with an Optional Question Node
Just use the same structure as described above, but make sure that every open end points to the Main Flow.
Approach with a Question Node
Within the Question Node we need to make sure that we don’t require an explicit response from the user, like "yes" or "no". That’s why we make use of the Text Question Type and we need a Lookup Node where we choose Type instead of Intent.
Explanation of the processes for the different Case Nodes
pAnswer: We only hit the pAnswer Case when the user states a positive confirmation without intention we’re already aware of. This is why we only ask, how we can help and after that go to the Main Flow and wait for another user input.
nAnswer: It’s the same process as in the Optional Question Node.
Default: This will only be executed if we didn't find any intention of the user, therefore, we can just use another Go To Node to the Main Flow, continue the flow execution and enter the Default Case.
Depending on the particular use case, either the Optional Question Node or the Question Node is suitable. With the Optional Question Node we have more flexibility regarding the user input, because we do not expect only one specific type of input, in this case "yes" or "no". But the fact that the question can be answered later sometimes leads to conflicts in the dialog. Therefore, the Optional Question Node should only be used if it's expected that the question might not be answered directly. The Question Node, on the other hand, requires a "yes" or "no", but also reacts flexibly when using the Question Type Text. The disadvantage here is, by breaking out of the conversation, we still need to answer the question and cannot skip for a specific amount of user inputs.
The difference between including the pattern in the Main Flow or in a separate Flow is mainly the architecture of your agent. The separate Flow is suitable when we not only have one Main Flow, but several Flows with Intents. If you have only one Main Flow in your agent, it is probably best to include the pattern directly in it.
Finally, it depends on your target audience, how they interact with the virtual agent and the use case which fits the pattern best.
Feel free to download the showcased Flows in the attached package.
You may also be interested in a conversation design pattern that handles more than just the regular expressions for positive and negative confirmations.