# Actions

Actions are the things your bot runs in response to user input. There are four kinds of actions in Rasa:

> 1. **Utterance actions**: start with `utter_` and send a specific message to the user.
> 2. **Retrieval actions**: start with `respond_` and send a message selected by a retrieval model.
> 3. **Custom actions**: run arbitrary code and send any number of messages (or none).
> 4. **Default actions**: e.g. `action_listen`, `action_restart`, `action_default_fallback`.

## [Utterance Actions](https://legacy-docs-v1.rasa.com/1.10.12/core/actions/#id4)

To define an utterance action (`ActionUtterTemplate`), add a response to the domain file that starts with `utter_`:

```
responses:
  utter_my_message:
    - "this is what I want my action to say!"
```

It is conventional to start the name of an utterance action with `utter_`. If this prefix is missing, you can still use the response in your custom actions, but the response can not be directly predicted as its own action. See [Responses](https://legacy-docs-v1.rasa.com/1.10.12/core/responses/#responses) for more details.

## [Retrieval Actions](https://legacy-docs-v1.rasa.com/1.10.12/core/actions/#id5)

Retrieval actions make it easier to work with a large number of similar intents like chitchat and FAQs. See [Retrieval Actions](https://legacy-docs-v1.rasa.com/1.10.12/core/retrieval-actions/#retrieval-actions) to learn more.

## [Custom Actions](https://legacy-docs-v1.rasa.com/1.10.12/core/actions/#id6)

An action can run any code you want. Custom actions can turn on the lights, add an event to a calendar, check a user’s bank balance, or anything else you can imagine.

Rasa will call an endpoint you can specify when a custom action is predicted. This endpoint should be a webserver that reacts to this call, runs the code and optionally returns information to modify the dialogue state.

To specify your action server use the `endpoints.yml`:

```
action_endpoint:
  url: "http://localhost:5055/webhook"
```

And pass it to the scripts using `--endpoints endpoints.yml`.

You can create an action server in node.js, .NET, java, or any other language and define your actions there - but we provide a small python SDK to make development there even easier.

## [Default Actions](https://legacy-docs-v1.rasa.com/1.10.12/core/actions/#id9)

The available default actions are:

|     |     |
| --- | --- |
| `action_listen` | Stop predicting more actions and wait for user input. |
| `action_restart` | Reset the whole conversation. Can be triggered during a conversation by entering `/restart` if the [Mapping Policy](https://legacy-docs-v1.rasa.com/1.10.12/core/policies/#mapping-policy) is included in the policy configuration. |
| `action_session_start` | Start a new conversation session. |
| `action_default_fallback` | Undo the last user message and utter a message that the bot did not understand. |
| `action_deactivate_form` | Deactivate the active form and reset the requested slot. |
| `action_back` | Undo the last user message. Can be triggered during a conversation by entering `/back`. |

All the default actions can be overridden. To do so, add the action name to the list of actions in your domain:

```
actions:
- action_default_ask_affirmation
```

Rasa will then call your action endpoint and treat it as every other custom action.
