HI @littlerain2310, I have the same issue and was wondering if you can help? I am creating a loop based on whether the user would like to pay or order more. This is my function:
class FormGetRestaurantMenuCategoryOrderMoreDishes_en(FormValidationAction):
def name(self):
return 'form_get_restaurant_menu_category_order_more_dishes_en'
@staticmethod
def required_slots(tracker: Tracker) -> List[Text]:
"""A list of required slots that the form has to fill"""
return ["order_more_or_pay_en" ]
def slot_mappings(self) -> Dict[Text, Union[Dict, List[Dict]]]:
"""A dictionary to map required slots to
- an extracted entity
- intent: value pairs
- a whole message
or a list of them, where a first match will be picked"""
return {"order_more_or_pay_en":[self.from_text()]}
def validate(self, dispatcher, tracker, domain):
value = tracker.latest_message.get("text")
slot_to_fill = tracker.get_slot("requested_slot")
intent = tracker.latest_message.get("intent", {}).get("order_more_or_pay_en")
if slot_to_fill == "order_more_or_pay_en":
if intent =="pay":
return [SlotSet("order_more_or_pay_en", value)]
else:
return [SlotSet("order_more_or_pay_en", None)]
return [SlotSet(slot, value) for slot, value in slot_values.items()]
#def submit(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any], ) -> List[Dict]:
# if tracker.get_slot('order_more_or_pay_en') == 'Order More':
# dispatcher.utter_message(text="Choose wisely...")
# elif tracker.get_slot('order_more_or_pay_en') == 'Pay':
# dispatcher.utter_message(text="Please be patient you will need to answer more questions before you can pay :)")
# return []
I want it to repeat if the user chooses from a button that he/she wants to order more but it continues with the story for if the user wants to pay. Can you please tell me what I did wrong?