Connect a ValidateForm to another ValidateForm

Hello guys, I’ve made a full rule-based bot with rasa.

It’s all working, but now I have a new branch in the decision tree.

Now when scenary_one_menu slot is filled with 2 I want to close the current hospital_form and immediatly open a new ValidateNewForm with the new branch dialog, but I don’t know how can I do it since I need an intent to active a form and I don’t have one.

Thanks guys!

Rules.yml

# Hospital form
- rule: Activ
  steps:
  - intent: greet
  - action: utter_greet
  - action: hospital_form
  - active_loop: hospital_form

- rule: Send hospital form
  condition:
  - active_loop: hospital_form
  steps:
  - action: hospital_form
  - active_loop: null
  - slot_was_set:
    - requested_slot: null
  - action: action_submit
  - action: action_reset_all_slots

Action.py

class ValidateHospitalForm(FormValidationAction):
    def name(self) -> Text:
        return "validate_hospital_form"

    def validate_user_lgpd(
            self,
            slot_value: Any,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: DomainDict,
    ) -> Dict[Text, Any]:
        """Validate user_gdpr"""

        if slot_value == '1':
            dispatcher.utter_message(response="utter_user_gdpr_yes")
            dispatcher.utter_message(response="utter_scenery_one_menu")
            return {"user_gdpr": slot_value}
        elif slot_value == '2':
            dispatcher.utter_message(response="utter_user_gdpr_no")
            return {"user_gdpr": None, "requested_slot": None}
        else:
            dispatcher.utter_message(response="utter_user_gdpr_wrong")
            return {"user_gdpr": None}

    def validate_scenery_one_menu(
            self,
            slot_value: Any,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: DomainDict,
    ) -> Dict[Text, Any]:
        """Validate scenery_one_menu"""

        if slot_value == '#':
            dispatcher.utter_message(response="utter_scenery_one_menu")
            return {"scenery_one_menu": None, "user_lgpd": None}
        elif slot_value == '1':
            dispatcher.utter_message(response="utter_scenery_one_menu_answer_one")
            dispatcher.utter_message(response="utter_user_logged_name")
            return {"scenery_one_menu": slot_value}
        elif slot_value == '2':
            dispatcher.utter_message(response="utter_scenery_one_menu_answer_two")
            return {"scenery_one_menu": None, "user_gdpr": None, "requested_slot": None}
        else:
            dispatcher.utter_message(response="utter_scenery_one_menu_wrong_answer")
            return {"scenery_one_menu": None}

There’s an example in the financial-demo here.