Actions
The Action class is the base class for any custom action. To
define a custom action, create a subclass of the Action class
and overwrite the two required methods, name and run. The
action server will call an action according to the return value
of its name method when it receives a request to run an action.
A skeleton custom action looks like this:
class MyCustomAction(Action):
    def name(self) -> Text:
        return "action_name"
    async def run(
        self, dispatcher, tracker: Tracker, domain: Dict[Text, Any],
    ) -> List[Dict[Text, Any]]:
        return []
Methods
Action.name
Defines the action's name. The name returned by this method is the one used in your bot's domain.
- 
Returns:
Name of action
 - 
Return type:
str 
Action.run
async Action.run(dispatcher, tracker, domain)
The run method executes the side effects of the action.
Parameters
- 
dispatcher – the dispatcher which is used to send messages back to the user. Use
dispatcher.utter_message()or any otherrasa_sdk.executor.CollectingDispatchermethod. See the documentation for the dispatcher - 
tracker – the state tracker for the current user. You can access slot values using
tracker.get_slot(slot_name), the most recent user message istracker.latest_message.textand any otherrasa_sdk.Trackerproperty. See the documentation for the tracker. - 
domain – the bot's domain
 
Returns
A list of rasa_sdk.events.Event instances. See the documentation for events.
Return type
List[Dict[str, Any]]
Example
In a restaurant bot, if the user says “show me a Mexican restaurant”,
your bot could execute the action ActionCheckRestaurants,
which might look like this:
from typing import Text, Dict, Any, List
from rasa_sdk import Action
from rasa_sdk.events import SlotSet
class ActionCheckRestaurants(Action):
   def name(self) -> Text:
      return "action_check_restaurants"
   def run(self,
           dispatcher: CollectingDispatcher,
           tracker: Tracker,
           domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
      cuisine = tracker.get_slot('cuisine')
      q = "select * from restaurants where cuisine='{0}' limit 1".format(cuisine)
      result = db.query(q)
      return [SlotSet("matches", result if result is not None else [])]
This action queries a database to find restaurants matching
the requested cuisine, and uses the list of restaurants found
to set the value of the matches slot.