Conditions
Conditions are used in flows in three different places:- In flow guards to determine whether a flow can be started.
- In the next field of a flow step to choose between branches of your business logic.
- In the
rejectionsfield of acollectstep to validate slot values.
Syntax
Conditions in flows are written using natural language that can include logical operators, conditional operators and other constructs. They are evaluated with the pypred library. These conditions support the following operators,not: Negates a condition.and: Combines two conditions with logical AND.or: Combines two conditions with logical OR.>: Greater than.>=: Greater than or equal to.<: Less than.<=: Less than or equal to.=: Equal to.!=: Not equal to.is: Checks for identity.is not: Checks for non-identity.contains: Subset operator that checks if a set contains a valuematches: Uses regular expressions to match strings.
Parentheses
Use parentheses to group expressions and control the order of evaluation. For example:Subset Operator
Subset operatorcontains can be used in the format SET contains VALUE
where SET is the set of possible values and VALUE being the name of slot.
For example:
contains operator can also be used to identify substrings when used as
slots.product contains "Rasa" however this check is case-sensitive.
Constants
- String literals: Enclose in single or double quotes (
'example'or"example"). - Numeric literals: Numbers without quotes (
42). - Constants:
true,false,undefined,null,empty
Regular Expressions
When using thematches operator, you can include regular expression modifiers.
The regex modifier should be enclosed in quotes. For example, this flow step checks if
the zipcode slot contains a United States zip code :
product matches "(?i).*rasa.*" which checks for the substring rasa within
the variable product.
Empty Values
If you want to check if a boolean slot is not set, you need to use the syntax<boolean-slot> is null.
To check if a text slot is not set or empty, use the syntax not <text-slot>.
Examples
Here are some examples of conditions that demonstrate the use of different constructs.Namespaces
Namespaces are used to access different types of data in predicates used in branching conditions, slot validation, and flow guards. There are two available namespaces:slots and context. The slots namespace
is used to access slot values, while the context namespace is used to access
the current dialogue frame properties.
Slots
Theslots namespace is used to access slot values. The slot name must be
prefixed with slots. to be accessible in the condition. For example:
slots. namespace,
the validation that runs during training will fail with an appropriate error.
Context
Thecontext namespace is used to access the properties of the current dialogue frame.
The property must be prefixed with context. to be accessible in
the predicate. For example:
Dialogue Frames
The dialogue manager organizes the advancement of flows (both user defined and built-in) in a dialogue frame stack. The dialogue frame stack represents a LIFO (Last-In-First-Out) stack of dialogue frames. Different types of dialogue frames are mapped to built-in conversational patterns that enable conversation repair. Each dialogue frame has aflow_id and step_id property. The flow_id is the id of the current
flow and the step_id is the id of the current step in the flow.
The following dialogue frames types are available:
- cancel: handles flow cancellation
- chitchat: handles chitchat
- clarify: handles clarification
- collect information: handles information collection
- completion: handles flow completion
- continue interrupted: handles continuation of interrupted flows
- correction: handles correction
- internal error: handles internal errors
- search: handles knowledge search
- skip question: handles skipping of information collection
- code change: cleans the stack after an assistant update
- can not handle: handles situations where the assistant cannot handle
- human handoff: handles handoff to human
- validate slot: handles real-time slot validations that are strictly independent of business logic
- customer satisfaction: handles customer satisfaction feedback collection at the end of a conversation
Cancel
Theflow_id is pattern_cancel_flow. The step_id is START.
In addition, the following properties are available:
canceled_name: the name of the flow that should be canceledcanceled_frames: the list of stack frames that should be canceled
Chitchat
Theflow_id is pattern_chitchat. The step_id is START.
Clarify
Theflow_id is pattern_clarify. The step_id is START.
In addition, the following properties are available:
names: the list of names of the flows that the user can choose fromclarification_options: the options that the user can choose from as a string
Collect Information
Theflow_id is pattern_collect_information. The step_id is START.
In addition, the following properties are available:
collect: the name of the slot that should be filledutter: the response that should be executed to ask the user for informationcollect_action: the action that should be executed to ask the user for informationrejections: the optional list of validation checks that should be executed if the user provides invalid information
context.collect property in your flow, you must write this in jinja templating style
and prefix it with the slots. namespace. This is because context.collect corresponds to the slot name, and every slot must
be preceded by the slots. namespace.
For example:
Completion
Theflow_id is pattern_completed. The step_id is START.
In addition, the following properties are available:
previous_flow_name: the name of the flow that has been completed
Continue Interrupted
Theflow_id is pattern_continue_interrupted. The step_id is START.
In addition, the following properties are available:
previous_flow_name: the name of the flow that was interruptedinterrupted_flow_names: names of the previous flows that were interruptedinterrupted_flow_ids: ids of the previous flows that were interruptedinterrupted_flow_options: options of interrupted flows that the user can choose from as a stringmultiple_flows_interrupted: boolean indicating whether multiple flows were interrupted
Correction
Theflow_id is pattern_correction. The step_id is START.
In addition, the following properties are available:
is_reset_only: indicates if the correction is only a reset of the flowcorrected_slots: slot key-value pairs that should be correctedreset_flow_id: the ID of the flow to reset to, defaults toNonereset_step_id: the ID of the step to reset to, defaults toNone
Internal Error
Theflow_id is pattern_internal_error. The step_id is START.
In addition, the following properties are available:
error_type: string that indicates the type of error. Common values:rasa_internal_error_default— generic internal errors (including agent and MCP tool failures unless a more specific type applies)rasa_internal_error_user_input_too_long— user input exceeded the configured character limitrasa_internal_error_user_input_empty— blank user message
info: dict with structured failure context. Contents vary by call site; many paths push an empty dict. When a ReAct/A2A sub agent or MCP tool call fails,infoincludes fields you can use in flow predicates and responses. See thecontext.infofield reference for available keys and a customization example.
Knowledge Search
Theflow_id is pattern_search. The step_id is START.
Skip Question
Theflow_id is pattern_skip_question. The step_id is START.
Code Change
Theflow_id is pattern_code_change. The step_id is START.
Can Not Handle
Theflow_id is pattern_cannot_handle. The step_id is START.
In addition, the following properties are available:
reason: string indicates the reason why the assistant cannot handle
Human Handoff
Theflow_id is pattern_human_handoff. The step_id is START.
Validate Slot
New in 3.12You can now enable real-time slot validation in Rasa Pro 3.12.0.
flow_id is pattern_validate_slot. The step_id is START.
In addition, the following properties are available:
validate: the name of the slot that should be validatedrefill_utter: the response that should be executed to ask the user to refill the invalid slotrefill_action: the action that should be executed to ask the user to refill the invalid slotrejections: the list of validation checks that should be executed if the user provides information for a slot that requires validation
context.validate property in your flow, you must write this in jinja templating style
and prefix it with the slots. namespace. This is because context.validate corresponds to the slot name, and every slot must
be preceded by the slots. namespace.
For example:
Customer Satisfaction
New in 3.16You can now enable customer satisfaction feedback collection in Rasa Pro 3.16.0.
flow_id is pattern_customer_satisfaction. This pattern is triggered from pattern_completed via a link step when the user opts to end the conversation.