Custom action running more than once

I have a custom action which assigns random numbers to 2 variables. but it gets executed by the bot even when not intended. What could be the issue and how can i fix it…?

after seeing the messages in the terminal using the --debug command when running the actions server, i noticed that the request to run that action was received at least 3 times and it was executed successfully. But, i have mentioned the action only once in my story.

I am unable to figure out what is causing this. Please help me out here

You have the right idea review the debug log and you can post it here if you like. I would also want to look at rules/stories that reference the action.

Here is the stories file

version: "3.1"

stories:
- story: help and goodbye
  steps:
  - intent: help
  - action: utter_help
  - intent: goodbye
  - action: utter_goodbye

- story: thanks and greet
  steps:
  - intent: thanks
  - action: utter_thanks
  - intent: greet
  - action: utter_greet

- story: Add Numbers path B
  steps:
  - intent: addition_B
  - action: utter_ask_operand1
  - intent: inform_number1
  - or:
    - slot_was_set:
      - operand_B1: '1'
    - slot_was_set:
      - operand_B1: '5'
  - action: utter_ask_operand2
  - intent: inform_number2
  - or:
    - slot_was_set:
      - operand_B2: '2'
    - slot_was_set:
      - operand_B2: '3'
  - action: action_get_info
  - action: action_perform_addition_B

- story: Subtaction path B
  steps:
    - intent: subtraction_B
    - action: utter_ask_operand1
    - intent: inform_number1
    - action: utter_ask_operand2
    - intent: inform_number2
    - action: action_get_info
    - action: action_perform_subtraction_B


- story: interactive_story_1
  steps:
  - intent: greet
  - action: utter_greet

- story: Add Numbers path A
  steps:
  - intent: addition_A
    entities:
    - operand_A1: '4'
    - operand_A2: '5'
  # - slot_was_set:
  #   - first_number: '4'
  # - slot_was_set:
  #   - second_number: '5'
  - action: action_get_info
  - action: action_perform_addition_A

- story: Subtraction path A
  steps:
  - intent: subtraction_A
    entities:
    - operand_A1: '8'
    - operand_A2: '3'
  - action: action_get_info
  - action: action_perform_subtraction_A

- story: Addition Quiz
  steps:
  - intent: ask_addition_quiz_A
  - action: action_addition_quiz_A
  - action: utter_ask_addition_quiz
  - action: action_listen
  - intent: inform_ans_addition_quiz_A
  - action: check_ans_addition_quiz_A

- story: interactive_story_1
  steps:
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 5
  - slot_was_set:
    - addQ_ans_sys: 6
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 5
  - slot_was_set:
    - addQ_num_2: 4
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: utter_ask_addition_quiz

- story: interactive_story_1
  steps:
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 7
  - slot_was_set:
    - addQ_num_2: 1
  - slot_was_set:
    - addQ_ans_sys: 8
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 6
  - slot_was_set:
    - addQ_num_2: 2
  - slot_was_set:
    - addQ_ans_sys: 8
  - action: utter_ask_addition_quiz
  - intent: inform_number1
    entities:
    - operand_B1: '8'
  - slot_was_set:
    - operand_B1: '8'
  - slot_was_set:
    - addQ_num_1: 4
  - slot_was_set:
    - addQ_num_2: 4
  - slot_was_set:
    - addQ_ans_sys: 8
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_sys: '8'
  - action: check_ans_addition_quiz_A
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 9
  - slot_was_set:
    - addQ_num_2: 1
  - slot_was_set:
    - addQ_ans_sys: 10
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 3
  - slot_was_set:
    - addQ_num_2: 4
  - slot_was_set:
    - addQ_ans_sys: 7
  - action: utter_ask_addition_quiz
  - intent: inform_number1
    entities:
    - operand_B1: '5'
  - slot_was_set:
    - operand_B1: '5'
  - slot_was_set:
    - addQ_num_1: 8
  - slot_was_set:
    - addQ_num_2: 1
  - slot_was_set:
    - addQ_ans_sys: 9
  - intent: inform_ans_addition_quiz_A
  - action: check_ans_addition_quiz_A

- story: interactive_story_1
  steps:
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 3
  - slot_was_set:
    - addQ_ans_sys: 4
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 5
  - slot_was_set:
    - addQ_num_2: 4
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: utter_ask_addition_quiz
  - intent: nlu_fallback
    entities:
    - addQ_ans_user: '9'
  - slot_was_set:
    - addQ_num_1: 4
  - slot_was_set:
    - addQ_num_2: 4
  - slot_was_set:
    - addQ_ans_sys: 8
  - action: action_get_info
  - action: check_ans_addition_quiz_A
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 7
  - slot_was_set:
    - addQ_num_2: 1
  - slot_was_set:
    - addQ_ans_sys: 8
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 2
  - slot_was_set:
    - addQ_num_2: 7
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: utter_ask_addition_quiz
  - intent: nlu_fallback
    entities:
    - addQ_ans_user: '5'
  - slot_was_set:
    - addQ_num_1: 5
  - slot_was_set:
    - addQ_num_2: 5
  - slot_was_set:
    - addQ_ans_sys: 10
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_user: '5'
  - action: check_ans_addition_quiz_A
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 3
  - slot_was_set:
    - addQ_num_2: 6
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 5
  - slot_was_set:
    - addQ_num_2: 4
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: utter_ask_addition_quiz
  - intent: nlu_fallback
    entities:
    - addQ_ans_user: '6'
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 6
  - slot_was_set:
    - addQ_ans_sys: 7
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_user: '6'
  - action: check_ans_addition_quiz_A
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 4
  - slot_was_set:
    - addQ_num_2: 2
  - slot_was_set:
    - addQ_ans_sys: 6
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 2
  - slot_was_set:
    - addQ_num_2: 7
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: utter_ask_addition_quiz
  - intent: nlu_fallback
    entities:
    - addQ_ans_user: '6'
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 7
  - slot_was_set:
    - addQ_ans_sys: 8
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_user: '6'
  - action: check_ans_addition_quiz_A

- story: interactive_story_1
  steps:
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 2
  - slot_was_set:
    - addQ_num_2: 5
  - slot_was_set:
    - addQ_ans_sys: 7
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 9
  - slot_was_set:
    - addQ_ans_sys: 10
  - action: utter_ask_addition_quiz
  - intent: nlu_fallback
    entities:
    - addQ_ans_user: '5'
  - slot_was_set:
    - addQ_num_1: 4
  - slot_was_set:
    - addQ_num_2: 3
  - slot_was_set:
    - addQ_ans_sys: 7
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_user: '5'
  - action: check_ans_addition_quiz_A
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 7
  - slot_was_set:
    - addQ_num_2: 3
  - slot_was_set:
    - addQ_ans_sys: 10
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 2
  - slot_was_set:
    - addQ_num_2: 7
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: utter_ask_addition_quiz
  - intent: nlu_fallback
    entities:
    - addQ_ans_user: '5'
  - slot_was_set:
    - addQ_num_1: 5
  - slot_was_set:
    - addQ_num_2: 1
  - slot_was_set:
    - addQ_ans_sys: 6
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_user: '5'
  - action: check_ans_addition_quiz_A

- story: interactive_story_1
  steps:
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 7
  - slot_was_set:
    - addQ_ans_sys: 8
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 3
  - slot_was_set:
    - addQ_num_2: 2
  - slot_was_set:
    - addQ_ans_sys: 5
  - action: utter_ask_addition_quiz
  - intent: nlu_fallback
    entities:
    - addQ_ans_user: '5'
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 4
  - slot_was_set:
    - addQ_ans_sys: 5
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_user: '5'
  - action: check_ans_addition_quiz_A

- story: interactive_story_1
  steps:
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 8
  - slot_was_set:
    - addQ_num_2: 1
  - slot_was_set:
    - addQ_ans_sys: 9
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 5
  - slot_was_set:
    - addQ_ans_sys: 6
  - action: utter_ask_addition_quiz
  - intent: inform_ans_addition_quiz_A
    entities:
    - addQ_ans_user: '6'
  - slot_was_set:
    - addQ_num_1: 3
  - slot_was_set:
    - addQ_num_2: 2
  - slot_was_set:
    - addQ_ans_sys: 5
  - slot_was_set:
    - addQ_ans_user: '6'
  - action: check_ans_addition_quiz_A
  - intent: ask_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 5
  - slot_was_set:
    - addQ_num_2: 5
  - slot_was_set:
    - addQ_ans_sys: 10
  - action: action_addition_quiz_A
  - slot_was_set:
    - addQ_num_1: 1
  - slot_was_set:
    - addQ_num_2: 8
  - slot_was_set:
    - addQ_ans_sys: 9

And here is the rules file

version: "3.1"

rules:
- rule: respond to greet
  steps:
  - intent: greet
  - action: utter_greet

- rule: respond to goodbye
  steps:
  - intent: goodbye
  - action: utter_goodbye

- rule: respond to thanks
  steps:
  - intent: thanks
  - action: utter_thanks

- rule: provide help
  steps:
  - intent: help
  - action: utter_help

Here is the action debug logs

2024-01-15 22:08:37 INFO     rasa_sdk.executor  - Registered function for 'action_get_info'.
2024-01-15 22:08:37 INFO     rasa_sdk.executor  - Registered function for 'action_perform_addition_A'.
2024-01-15 22:08:37 INFO     rasa_sdk.executor  - Registered function for 'action_perform_subtraction_A'.
2024-01-15 22:08:37 INFO     rasa_sdk.executor  - Registered function for 'action_perform_addition_B'.
2024-01-15 22:08:37 INFO     rasa_sdk.executor  - Registered function for 'action_perform_subtraction_B'.
2024-01-15 22:08:37 INFO     rasa_sdk.executor  - Registered function for 'action_addition_quiz_A'.
2024-01-15 22:08:37 INFO     rasa_sdk.executor  - Registered function for 'check_ans_addition_quiz_A'.
2024-01-15 22:08:37 INFO     rasa_sdk.endpoint  - Starting plugins...
2024-01-15 22:08:37 DEBUG    rasa_sdk.plugin  - No plugins found: No module named 'rasa_sdk_plugins'
2024-01-15 22:08:37 INFO     rasa_sdk.endpoint  - Action endpoint is up and running on http://0.0.0.0:5055
2024-01-15 22:08:37 DEBUG    rasa_sdk.utils  - Using the default number of Sanic workers (1).
2024-01-15 22:11:25 DEBUG    rasa_sdk.executor  - Received request to run 'action_addition_quiz_A'
2024-01-15 22:11:25 DEBUG    rasa_sdk.executor  - Finished running 'action_addition_quiz_A'
2024-01-15 22:11:28 DEBUG    rasa_sdk.executor  - Received request to run 'action_addition_quiz_A'
2024-01-15 22:11:28 DEBUG    rasa_sdk.executor  - Finished running 'action_addition_quiz_A'
2024-01-15 22:11:40 DEBUG    rasa_sdk.executor  - Received request to run 'action_addition_quiz_A'
2024-01-15 22:11:40 DEBUG    rasa_sdk.executor  - Finished running 'action_addition_quiz_A'
2024-01-15 22:11:42 DEBUG    rasa_sdk.executor  - Received request to run 'check_ans_addition_quiz_A'
2024-01-15 22:11:42 DEBUG    rasa_sdk.executor  - Finished running 'check_ans_addition_quiz_A'

As you can see, the action action_addition_quiz_A is running more than once.

Your problem is probably related to those long stories. I would delete all of the stories and replace them with rules and forms. Use forms for those longer stories.

Thank you. I will implement this and check it out

I used forms for 1 story and it is working fine, thank you for that. after the execution of the form, the bot is going for action_nlu_fallback. Is it because it is getting confused by the stories or something else? Will be be solved if i replace all my stories with forms and rules?

Check if you accidentally duplicated the trigger or if there’s some unexpected fallback triggering it. Also, dive into your stories file again, sometimes the order matters more than we think.

Now i have encountered a new problem after using forms. The intent is being recognized correctly, but the correct entity is not being recognised. what do i do?

I have used forms and rules instead of stories, something like this…

- rule: Activate addition_quizA_form
  steps:
  - intent: addition_quizA
  - action: addition_quizA_form
  - active_loop: addition_quizA_form

- rule: Submit addition_quizA_form
  condition:
  - active_loop: addition_quizA_form
  steps:
  - action: addition_quizA_form
  - active_loop: null
  - slot_was_set:
    - requested_slot: null
  - action: action_ask_addition_quizA


- rule: Activate check_ans_quizA_form
  condition:
  - active_loop: check_ans_quizA_form
  steps:
  - intent: addition_quizA
  - action: check_ans_quizA_form
  - active_loop: check_ans_quizA_form

- rule: Submit check_ans_quizA_form
  condition:
  - active_loop: check_ans_quizA_form
  steps:
  - action: check_ans_quizA_form
  - active_loop: null
  - slot_was_set:
    - requested_slot: null
  - action: check_ans_addition_quizA

But the action action_ask_addition_quizA gets executed unwantedly.

I need my addition_quizA_form to run which controls the action_ask_addition_quizA action. \

Here’s my actions file

class ActionAskAdditionQuiz_A(Action):
    def name(self) -> Text:
        return "action_ask_addition_quizA"
    
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict]:
        
        # dispatcher.utter_message(template="utter_ask_addition_quiz")
        # global addQ_num1, addQ_num2, addQ_ans_sys
        addQ_num1=  random.randint(1, 9)
        addQ_num2 =  random.randint(1, 9)
        
        while(addQ_num1 + addQ_num2 >= 10):
            addQ_num1 =  random.randint(1, 9)
            addQ_num2 =  random.randint(1, 9)
            
        bot_ans = addQ_num1 + addQ_num2
        
        return [SlotSet("addQ_num_1", addQ_num1), SlotSet("addQ_num_2", addQ_num2), SlotSet("bot_ans", bot_ans)]
    
class CheckAnsAdditionQuiz_A(Action):
    def name(self) -> Text:
        return "check_ans_addition_quizA"
    
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict]:
        
        addQ_ans_user = tracker.get_slot("user_ans")
        addQ_ans_sys = tracker.get_slot("bot_ans")
        
        if(addQ_ans_user == addQ_ans_sys):
            dispatcher.utter_message(text="ಉತ್ತರ ಸರಿಯಾಗಿದೆ")
        else:
            dispatcher.utter_message(text="ತಪ್ಪು ಉತ್ತರ!")
        
        return []

Please help me out

Hi, I’m facing the same problem.

Rasa version: 3.6.21-full