To implement your logic I would define a list slotavailable_options that holds the currently available options with influence_conversation: true. Then Iād write a custom action action_learn_more that shows buttons based on available_options, and have the buttons send the same intent with an entity that indicates the chosen option: payload: '/choose{{"option": "A"}}', etc. The entity should have a corresponding slot option that holds the option that the user chose. Finally, a second custom action explain_option gives the explanation to the option stored in the option slot and removes that option from available_options.
With this setup, I think you can define the entire logic in two rules: one that applies when available_options still contains something, and one that applies when available_slots is empty.
@j.mosig reply makes more sense to me now that I learned about:
categorical slots
calling more than one action in rules.yml
This allows me to list remaining options whenever I need to, and show remaining options only for some options (maybe option b wants to show sub options instead).
rule: Show options in the beginning
steps:
- intent: /get_started
- action: action_remaining_options
- rule: Show remaining suggestions after option a
steps:
- intent: choose_option # Shows option a and removes it from options
- action: action_choose_option
- slot_was_set:
- suggestion: option_a
- action: action_remaining_options