---
title: Responding to actions
lang: en
slug: action-respond
order: 6
---
There are two main ways to respond to actions. The first (and most common) way is to use `say()`, which sends a message back to the conversation where the incoming event took place.
The second way to respond to actions is using `respond()`, which is a utility to use the `response_url` associated with the action.
```python
# Your middleware will be called every time an interactive component with the action_id “approve_button” is triggered
@app.action("approve_button")
def approve_request(ack, say):
# Acknowledge action request
ack();
say("Request approved 👍");
```
Using respond()
Since `respond()` is a utility for calling the `response_url`, it behaves in the same way. You can pass a JSON object with a new message payload that will be published back to the source of the original interaction with optional properties like `response_type` (which has a value of `in_channel` or `ephemeral`), `replace_original`, and `delete_original`.
```python
# Listens to actions triggered with action_id of “user_select”
@app.action("user_select")
def select_user(ack, action, respond):
ack();
respond(f"You selected <@{action['selected_user']}>")
```