To reset all slots you can define a custom action:
class ActionFlushSlots(Action):
def name(self) -> Text:
return "action_flush_slots"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
slots = []
for key, value in tracker.current_slot_values().items():
if value is not None:
slots.append(SlotSet(key=key, value=None))
return slots
You can invoke this action wherever you want in your stories and rules. Alternatively, you can add to your validate function the lines of code inside the run method above.