my bot runs a custom action that takes around 20 seconds as it includes pulling data from a public API.
Therefore, I want to send a message informing the user about this delay.
I defined the following rule in the rules.yml:
- rule: Say the action takes a while whenever user requests new tracks steps: - intent: request_new_tracks - action: utter_takesawhile - action: custom_action_get_new_tracks
The utter_takesawhile is defined as followed in the domain.yml:
responses: utter_takesawhile: - text: Please wait, this action takes a while as it needs to pull data from the Spotify API.
The custom action looks as follows in the actions.py:
class GetNewTracks(Action): def name(self) -> Text: return "custom_action_get_new_tracks" async def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: # Establish connection to Spotify API through Spotipy sp = connect_to_api() # Read artists CSV artists = read_artists_csv() # # Get all new tracks from artists in CSV file days = 10 tracklist = get_new_tracks_from_artists(sp, artists["artist_uri"], days=days) dispatcher.utter_message(text="Tracks from selected artists in the last " + str(days) + " days:") for track_name in tracklist['track_name']: dispatcher.utter_message(text=track_name) return 
Expected behavior: Bot sends message, then performs the action (which also has a dispatcher.utter_message)
Observed behavior: Message “takesawhile” is only visible to the user after the custom action has finished.
I already tried to remove the “async” but the behavior remains the same. I also tried to define a new custom action that utters the message, still the same behavior is observed.
Is there a way to force the bot to send the utter to the user before the custom action starts running?
Thanks a lot.