> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onyx.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Slack Bot

> How to set up a Slack bot connected to Onyx

## Overview

Onyx can connect to your Slack workspace and answer questions like an expert teammate.

You can configure OnyxBot to respond to certain types of messages, in specific channels,
and with selected data from your index.

<img className="rounded-image" src="https://mintcdn.com/danswer/2sYx2-qEkfFozZU5/assets/admins/slackbot/slackbot_response.png?fit=max&auto=format&n=2sYx2-qEkfFozZU5&q=85&s=eb884ded39ad334d77458c9308dc0baf" alt="Onyx Slack Bot" width="1422" height="790" data-path="assets/admins/slackbot/slackbot_response.png" />

## Setup

<Note>
  You must be an admin of the Slack workspace to set up the Slack bot.
</Note>

<Steps>
  <Step title="Create a new Slack App">
    Navigate to the [Slack App Dashboard](https://api.slack.com/apps)
    and click **Create New App** → **From a manifest**.

    Select the workspace you want to connect to Onyx.
  </Step>

  <Step title="Use the YAML manifest">
    Click the **YAML** tab and paste the following manifest into the box:

    ```yaml YAML Manifest expandable theme={null}
    display_information:
      name: OnyxBot
      description: I help answer questions in Slack!
    features:
      app_home:
        home_tab_enabled: false
        messages_tab_enabled: true
        messages_tab_read_only_enabled: false
      bot_user:
        display_name: OnyxBot
        always_online: true
      slash_commands:
        - command: /onyx
          description: Get back a private answer!
          usage_hint: Put your question here!
          should_escape: false
    oauth_config:
      scopes:
        bot:
          - app_mentions:read
          - channels:history
          - channels:join
          - channels:read
          - chat:write
          - commands
          - groups:history
          - groups:read
          - im:history
          - im:read
          - mpim:history
          - reactions:write
          - reactions:read
          - usergroups:read
          - users:read.email
          - users:read
        user:
          - channels:history
          - channels:read
          - groups:read
          - im:read
          - mpim:history
          - mpim:read
          - search:read
    settings:
      event_subscriptions:
        bot_events:
          - app_mention
          - message.channels
          - message.groups
          - message.im
          - message.mpim
      interactivity:
        is_enabled: true
      org_deploy_enabled: false
      socket_mode_enabled: true
      token_rotation_enabled: false
    ```

    Click **Create** and you will be taken to the app page.
  </Step>

  <Step title="Generate an App Token">
    Scroll down to the **App-Level Tokens** section and click **Generate Token and Scopes**.

    Give your token a name, add the `connections:write` scope to the app-level token and click **Generate**.
    Save this token for later.

    <Tip>
      You can customize your Slack bot's name, description, and icon in the **Display Information** section.
    </Tip>

    <img className="rounded-image" src="https://mintcdn.com/danswer/2sYx2-qEkfFozZU5/assets/admins/slackbot/slackbot_app_token.png?fit=max&auto=format&n=2sYx2-qEkfFozZU5&q=85&s=2f82ab39cf2254af187afefb5ba550c0" alt="Onyx Slack Bot App Token" width="2564" height="1644" data-path="assets/admins/slackbot/slackbot_app_token.png" />
  </Step>

  <Step title="Install the Slack App">
    Navigate to the **OAuth & Permissions** tab, click **Install to Workspace**,
    and follow the instructions to install the app.

    Copy the **Bot User OAuth Token** and **User OAuth Token** (Recommended) and save it for later.

    <Note>
      Onyx does not currently support token rotation.
    </Note>

    <img className="rounded-image" src="https://mintcdn.com/danswer/2sYx2-qEkfFozZU5/assets/admins/slackbot/slackbot_bot_token.png?fit=max&auto=format&n=2sYx2-qEkfFozZU5&q=85&s=f6874a5575b7ea14b7e330d0be080107" alt="Onyx Slack Bot Bot Token" width="2430" height="1126" data-path="assets/admins/slackbot/slackbot_bot_token.png" />
  </Step>

  <Step title="Setup Onyx for the Slack Bot">
    Navigate to the Onyx Admin Panel and select the **Slack Bots** tab.

    Enter the **Bot Token**, **App Token**, and **User Token** (Recommended) and click **Create!**

    <img className="rounded-image" src="https://mintcdn.com/danswer/2sYx2-qEkfFozZU5/assets/admins/slackbot/slackbot_onyx_setup.png?fit=max&auto=format&n=2sYx2-qEkfFozZU5&q=85&s=4d81b3fe86e4ce004f07b63d258e5f13" alt="Onyx Slack Bot Onyx Setup" width="2032" height="1500" data-path="assets/admins/slackbot/slackbot_onyx_setup.png" />
  </Step>

  <Step title="Configure the Slack Bot's Behavior">
    Once your Slack bot is created, you can configure it's universal behavior through the **Default Configuration**.

    You can also set channel-specific behavior using **Channel Configurations**.

    <img className="rounded-image" src="https://mintcdn.com/danswer/2sYx2-qEkfFozZU5/assets/admins/slackbot/slackbot_config.png?fit=max&auto=format&n=2sYx2-qEkfFozZU5&q=85&s=b2de30df5d71743051f2b95a89c3e859" alt="Onyx Slack Bot Configuration" width="2132" height="2186" data-path="assets/admins/slackbot/slackbot_config.png" />
  </Step>
</Steps>

### How to use the Onyx Slack Bot

There are a few ways to chat with the Onyx Slack bot:

<Tip>
  Your admin may enable any or all of these methods in your Slack workspace. Additionally,
  the configurations may change based on the channel you are in.
</Tip>

<AccordionGroup>
  <Accordion title="Tag the bot with your question">
    ```
    @onyxbot What is the best practice for handling 429 errors in connectors?
    ```

    OnyxBot will respond in a thread to your message.
  </Accordion>

  <Accordion title="Use a slash command">
    ```
    /onyx How many PTO days do I get per year? Do they roll over?
    ```

    OnyxBot will send an ephemeral message. This means only you will see the response.
  </Accordion>

  <Accordion title="Send a message in a channel with the bot added">
    ```
    What were the takeaways from Katie's meeting with our big prospect last week?
    ```

    OnyxBot may be configured to answer any question in Slack even if you didn't tag it. In this case,
    it will respond in a thread to your message.
  </Accordion>

  <Accordion title="Direct message the bot">
    ```
    Look for conversations about this stack trace...
    ```

    You can direct message the OnyxBot app to ask private questions.
  </Accordion>
</AccordionGroup>

OnyxBot may also be configured with none, some, or all of your indexed data.
Ask your admin what is available through your OnyxBot.

## Advanced Configuration

There are a set of advanced configuration options available via environment variables that control your Slack bot's
behavior.

You can find the full list of configuration options [in the Onyx
GitHub](https://github.com/onyx-dot-app/onyx/blob/main/backend/onyx/configs/onyxbot_configs.py).

<Warning>
  These configuration options are rarely needed and should be used with caution.
</Warning>

<AccordionGroup>
  <Accordion title="ONYX_BOT_NUM_RETRIES">
    Number of retry attempts for generating an answer before failing.

    Default: `5 (int)`
  </Accordion>

  <Accordion title="ONYX_BOT_NUM_DOCS_TO_DISPLAY">
    Number of documents shown under "Reference Documents".

    Default: `5 (int)`
  </Accordion>

  <Accordion title="ONYX_BOT_DISABLE_DOCS_ONLY_ANSWER">
    Disable responses that only show "Reference Documents" when the LLM cannot answer.

    Default: `false (bool)`
  </Accordion>

  <Accordion title="ONYX_BOT_REACT_EMOJI">
    Emoji reaction shown while Onyx considers a message.

    Default: `eyes (str)`
  </Accordion>

  <Accordion title="ONYX_BOT_FOLLOWUP_EMOJI">
    Emoji used to suggest that the user may need more help.

    Default: `sos (str)`
  </Accordion>

  <Accordion title="ONYX_BOT_FEEDBACK_VISIBILITY">
    Visibility for AI answer feedback submitted to OnyxBot. Options: `private` (only the clicking user),
    `anonymous` (public but anonymous), `public` (public with username).

    Default: `private (str)`
  </Accordion>

  <Accordion title="NOTIFY_SLACKBOT_NO_ANSWER">
    If enabled, OnyxBot sends a brief apology message when it cannot find an answer, so users aren't left wondering.

    Default: `false (bool)`
  </Accordion>

  <Accordion title="ONYX_BOT_DISPLAY_ERROR_MSGS">
    Show brief error explanations when something goes wrong answering a question (useful for debugging).

    Default: `false (bool)`
  </Accordion>

  <Accordion title="ONYX_BOT_RESPOND_EVERY_CHANNEL">
    Respond in all channels by default, instead of only those configured in the UI.

    Default: `false (bool)`
  </Accordion>

  <Accordion title="ONYX_BOT_MAX_QPM">
    Maximum questions per minute the bot can answer. Set to `0` or leave unset for uncapped.

    Default: `uncapped (int)`
  </Accordion>

  <Accordion title="ONYX_BOT_MAX_WAIT_TIME">
    Maximum time in seconds a question will wait in the queue before timing out.

    Default: `180 (seconds; 3 minutes)`
  </Accordion>

  <Accordion title="ONYX_BOT_FEEDBACK_REMINDER">
    Minutes after which a reminder DM is sent to request feedback on an answer. Set to `0` to disable.

    Default: `0 (disabled; 0 minutes)`
  </Accordion>

  <Accordion title="ONYX_BOT_REPHRASE_MESSAGE">
    Rephrase Slack user messages before sending to the LLM (may improve clarity for the model).

    Default: `false (bool)`
  </Accordion>

  <Accordion title="ONYX_BOT_RESPONSE_LIMIT_PER_TIME_PERIOD">
    Number of responses OnyxBot can send within a time window. Set to `0` to disable the limit.

    Default: `5000 (int)`
  </Accordion>

  <Accordion title="ONYX_BOT_RESPONSE_LIMIT_TIME_PERIOD_SECONDS">
    Length of the response limit window in seconds.

    Default: `86400 (seconds; 24 hours)`
  </Accordion>
</AccordionGroup>
