The techniques discussed below provide solutions to common use cases and conversation challenges.
Keep the consumer in the current dialog
In a bot, at branching points within a dialog, the consumer is asked to answer questions or make choices about how to proceed. Depending on the goal of the bot, you might need to ensure that the consumer's next utterance doesn't jump the consumer out into another dialog due to the NLU matching the utterance to another intent. Sometimes jumping to another dialog is desirable, but other times it isn't. For example, you might need the consumer to answer a specific question, so you need a way to keep the consumer in the current dialog until that's done.
You can help to keep the consumer in the current dialog by offering predefined options in a menu of buttons or predefined choices to a multiple-choice question. However, there's no guarantee that the consumer won't ignore these and type a response of their own. This means you need a way to handle any other response.
To solve this problem, you can create a rule with a No Match condition that directs the flow as you need, either to repeat the same question or to redirect the flow to somewhere else within the bot.
To implement this solution
- In the interaction, create a final (last) rule.
- In the rule definition, name the rule. Then add a condition that uses the "No Match" match type. A condition that uses this match type catches all utterances that aren't caught by earlier rules. (In the condition, you can optionally specify a message to send to the consumer before the flow continues to the next action.)
- Under And Go To, select the desired next action.
In our example below, the No Match condition directs the flow to the current interaction in order to repeat it. This interaction is a question that asks for the consumer's email address.
Our example dialog flow now looks like this:
When the user enters anything but a well-formed email address, this yields a conversation that looks like the following, where the email address question is repeated:
For more information on the "No Match" match type and other match types that can be used in conditions, see here.
Block consumer interruptions
One bot scenario that is typical is to have the bot present several text interactions containing information, with small delays between each interaction (to aid accessibility issues). After the interactions are sent in sequence, the bot then asks the consumer a question to decide the next step in the conversation flow.
The problem that can occur in this scenario is that there's nothing to prevent the consumer from typing an utterance while the bot is sending the sequence of messages. When this happens, the utterance is processed for matching intents and patterns, which means it can "jump" the consumer to an upcoming question in the current dialog, to another dialog, or result in a fallback response.
To solve this problem where the consumer interrupts the bot with "intermediate" messages, you can use a set of specific environment variables that work together to catch and ignore all consumer utterances until the next question is reached.
To implement this solution
- Add an environment that stores a set of environment variables for the bot. If the bot is already linked to an existing environment, skip this step and append the variables to the existing environment.
- In the environment, add the following system environment variables:
system_handleIntermediateUserMessage- Set this to true.
system_intermediateBotMessage- Specify a value.
system_intermediateBotResponseTimeout- Specify a value.
Environment variable name Description Type Example system_handleIntermediateUserMessage Enables the behavior to catch and ignore "interrupt" messages by the consumer. Boolean true system_intermediateBotMessage Optionally used in conjunction with
system_handleIntermediateUserMessage. This is the message to send to the consumer if they send an utterance while their messages are blocked.
string Please wait…we are still responding to your last message. system_intermediateBotResponseTimeout Used in conjunction with
system_handleIntermediateUserMessage. This is the timeout period in milliseconds (e.g., 15000 = 15 seconds). This value determines how long the bot will wait to send a message before moving on to sending the next message. In other words, if the wait for a message is too long, this instructs the bot to skip it after the specified amount of time.
- Link the environment to the bot if it isn't already linked.