And how to keep your chatbot projects sane
That means you need stories, rules, and fallbacks to cover all those variations.
If Rasa sees a conflict between a story and a rule, like:
It complains — even if both make sense in different contexts.
There’s no native “substory” mechanism like in some dialogue frameworks. You have to manually repeat similar sequences across multiple stories, unless you use Forms or Actions very smartly.
If you want to change bot behavior based on a slot like complaint_type
, you need:
slot_was_set
)That’s a lot of config for just a simple if/else.
If your bot needs structured data (e.g., complaint type), use a Form to guide the conversation and auto-handle missing slots.
Instead of complex story trees, centralize logic in a custom action:
if complaint_type == "major":
dispatcher.utter_message("Let me escalate this.")
else:
dispatcher.utter_message("Thanks for letting us know.")
This makes your stories shorter and logic cleaner.
If you already have a story doing X, don’t also write a rule doing X unless:
Use fallback policies wisely — they cover unexpected user inputs without breaking the flow.
Yes, Rasa can be too much for small bots or when you’re doing everything manually. But it shines when: