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}