# Slack

You first have to create a Slack app to get credentials.
Once you have them you can add these to your `credentials.yml`.

## Getting Credentials

**How to get the Slack credentials:** You need to set up a Slack app.

> 1. To create the app go to [https://api.slack.com/apps](https://api.slack.com/apps) and click on **Create New App**.
>
> 2. Activate the following features:
> - Interactivity & Shortcuts > Interactivity (if your bot uses any [interactive components](https://api.slack.com/reference/block-kit/interactive-components) , e.g. buttons)
> - Add your Rasa request URL `http://<host>:<port>/webhooks/slack/webhook`, replacing the host and port with the appropriate values that point to your Rasa X or Rasa Open Source deployment.
> - Event subscriptions > Subscribe to bot events: `message.channels`, `message.groups`, `message.im`, `message.mpim`
> - App Home > Always Show My Bot as Online
>
> 3. Get the `Bot User OAuth Access Token` from the OAuth & Permissions page. Click `Install App to Workspace` and allow access to your workspace. You will need to provide this value in your credentials later in these instructions. It should start with `xoxb`.
>
> 4. In the “OAuth & Permissions > Redirect URLs” enter the endpoint for receiving Slack messages. This is the same URL you entered above for Interactivity & Shortcuts - `http://<host>:<port>/webhooks/slack/webhook`.
>
> 5. Go to the “Event Subscriptions” section, turn on the “Enable Events” and add the endpoint here also.

For more detailed steps, visit the [Slack API docs](https://api.slack.com/incoming-webhooks).

## Running on Slack

If you want to connect to the slack input channel using the run script, e.g. using:
```
rasa run
```
Do not forget to run the action server if this is required by your bot, e.g. using:
```
rasa run actions
```
You need to supply a `credentials.yml` with the following content:

- The `slack_channel` can be a channel or an individual person that the bot should listen to for communications, in addition to the default behavior of listening for direct messages and app mentions, i.e. “@app_name”. To get the channel id, right click on the channel choose Copy Link and the id will be the last component in the URL.
- Use the entry for `Bot User OAuth Access Token` in the “OAuth & Permissions” tab as your `slack_token`. It should start with `xoxb`.

```
skack:
  slack_token: "xoxb-286425452756-safjasdf7sl38KLls"
  slack_channel: "C011GR5D33F"
  slack_retry_reason_header: "x-slack-retry-reason"  # Slack HTTP header name indicating reason that slack send retry request. This configuration is optional.
  slack_retry_number_header: "x-slack-retry-num"  # Slack HTTP header name indicating the attempt number. This configuration is optional.
  errors_ignore_retry: None  # Any error codes given by Slack included in this list will be ignored. Error codes are listed here.
```
The endpoint for receiving slack messages is `http://localhost:5005/webhooks/slack/webhook`, replacing the host and port with the appropriate values. This is the URL you should add in the “OAuth & Permissions” section as well as the “Event Subscriptions.”
