Contextual No Match Pattern
A pattern to help deal with situations where we were not able to interpret user input in a contextualised way
One of the biggest challenges of failing to understand what the user said is that recovery can be quite hard. With OpenDialog we make it simple to recover in a contextualised way so that we can get the user back on track quickly.
Consider the following scene:

The Gather Profile Info scene
In this scene, the main goal is to gather relevant profile information.
It is very likely that the user will say something that we will not be able to interpret. In this case, the conversation engine will proactively look for a turn that is able to handle an intent called
intent.core.TurnNoMatch
. The Conversation Engine generates this turn on its own when it fails to find a matching interpreter. In order for us to be able to react to this intent we need to set up a Turn that is listening for that intent. Here is what the configuration can look like:

Contextual No Match configuration
You can then deal with the No Match situation in whatever way will best fit the context at hand.
As well as the
intent.core.TurnNoMatch
intent, the OpenDialog conversation engine will work up a stack looking for matching no match intents from Turn up until Conversation and then globally. The logic is as follows:- If there is no matching intent for what the user just entered, the conversation engine generates a
intent.core.TurnNoMatch
intent - If no
intent.core.TurnNoMatch
intent is found, the conversation engine generates aintent.core.SceneNoMatch
- If no
intent.core.SceneNoMatch
is found, the conversation engine generates aintent.core.ConversationNoMatch
intent - If this is not found, a global
intent.core.NoMatch
is looked for.
NB Any new scenario you create in OpenDialog will have a generic NoMatch intent generated for you. If this has been deleted or removed, things might not work as expected.