Rasa action not returning utterance

Hey guys,

Rasa 2

I’m trying to run an action that will retrieve an utterance. As follows:

class WeeklySummary(Action):

    def name(self) -> Text:
        return "action_weekly_summary"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

            result = {'count': 6, 'next': None, 'previous': None, 'results': 
                [{'id': 800, 'name': 'mood_level', 'create_time': '2022-05-06T13:03:16.049150Z', 'value': 1, 'utterance': 3038,'user': 16},
                {'id': 736, 'name': 'mood_level', 'create_time': '2022-05-05T09:39:32.228408Z', 'value': 1, 'utterance': 3031,'user': 16},
                {'id': 721, 'name': 'mood_level', 'create_time': '2022-05-04T09:07:06.798165Z', 'value': 1, 'utterance': 1563,'user': 16},
                {'id': 435, 'name': 'mood_level', 'create_time': '2022-04-28T13:49:59.982708Z', 'value': 1, 'utterance': 1556,'user': 16}]}
            
            y                = 0
            limit_date       = date.today() - timedelta(days=7)
            mood_level_group = []
            mood_level_string = ""

            if len(result.get("results")) > 0:
                
                while len(result.get("results")) > y:

                    mood_level_dates = datetime.strptime(result.get("results")[y]["create_time"], '%Y-%m-%dT%H:%M:%S.%fZ').date()

                    if mood_level_dates > limit_date:

                        mood_level_group.append(result.get("results")[y])
                        mood_date = calendar.day_name[datetime.strptime(mood_level_group[y]["create_time"], '%Y-%m-%dT%H:%M:%S.%fZ').date().weekday()]
                        mood_level = mood_level_group[y]["value"]

                        if (mood_level == "-2"):
                            mood_level = "😭"
                        elif (mood_level == "-1"):
                            mood_level = "πŸ™"
                        elif (mood_level == "0"):
                            mood_level = "😐"
                        elif (mood_level == "1"):
                            mood_level = "πŸ™‚"
                        else:
                            mood_level = "πŸ˜‡"


                        mood_level_string = (f"{mood_date}: {mood_level}" + f"\n{mood_level_string}")
                        y = y + 1

                        continue

                    else:
                        logger.info(f'Retrieved Mood Level: {mood_level_string}')
                        utterance = [mood_level_string]
                        dispatcher.utter_message(text=utterance)
                        return []

            else:
                logger.info(f'No daily reports found')                
                return [FollowupAction(name="utter_no_daily")]

I have my action server running and I see the result of my actions, as a I expected:

2022-05-09 19:24:47 INFO     actions.actions  - Retrieved Mood Level: Wednesday: πŸ˜‡
Thursday: πŸ˜‡
Friday: πŸ˜‡

But the message is not being send to the user, and running rasa shell --debug the follow error appears:

2022-05-09 19:24:57 ERROR    asyncio  - Task exception was never retrieved
future: <Task finished name='Task-2' coro=<configure_app.<locals>.run_cmdline_io() done, defined at /Users/luiza/Desktop/x/xx/xx-web/rasa-bot/venv/lib/python3.8/site-packages/rasa/core/run.py:131> exception=TimeoutError()>

Someone knows what could be happening?

You are wrapping mood_level_string in a list.

And dispatcher.utter_message() expects a string, while you have a list.

To fix it, just don’t use the brackets:

utterance = mood_level_string
dispatcher.utter_message(text=utterance)
1 Like