---
title: Slack alerts
description: Connect a Slack channel so refresh, data source, billing and platform alerts post there, pick the channel, test it, and fix a connection that stopped working.
updated: 2026-09-06
tier: pro
---

Dashies posts the same alerts to Slack that it sends by email. One Slack channel
is connected per workspace.

Email is addressed to a person and Slack is addressed to a channel, so the two
are controlled at different levels. There is no per-person Slack switch, because
a channel is not a person.

## Connect a channel

:::steps

### 1. Open the workspace's Notifications pane

Open Settings, then **Notifications** under that workspace's group. Only an admin
of the workspace can connect Slack to it.

It needs a paid plan on that workspace. On a free plan the install refuses with
`Alerts are a Pro feature. Upgrade this space to connect Slack.`

### 2. Press Add to Slack

The card reads:

```text
Not connected. Alerts for this workspace go to email only.
Connecting posts technical alerts into one public channel, which you pick on Slack's own screen. Dashies asks for permission to post messages, to list public channels, and for the channel webhook Slack requires before it will show you that picker. Dashies posts with its bot token and never uses that webhook.
```

The button takes you to Slack's own Allow screen. Dashies asks for four bot
permissions and no others: post messages, post into public channels it has not
been invited to, list public channels, and the channel webhook. The card's "post
messages" covers the first two of those.

**The fourth is asked for so that Slack asks the question, not to gain a way in.**
Slack shows its channel dropdown only to an app that requests the channel webhook,
which is the whole reason that permission is on the list. Dashies never reads,
stores or posts through the webhook URL Slack hands back: every message goes
through the Slack API with the bot token.

**Granting it does make Slack create a webhook in your own workspace**, and Slack
gives you its configuration page. So there is nothing on the Dashies side to
rotate, and the webhook Slack mints sits unused in your Slack app's own settings,
where you can see it and remove it like any other.

### 3. Pick the channel on Slack's screen, and allow it

The Allow screen carries a channel dropdown. Choose the channel there and press
Allow. **The install comes back with the channel already set**, so there is
nothing left to do on this side. The card reads:

```text
Slack is connected.
```

and its summary line reads `Alerts for this space post to Slack.`

### 4. Change the channel later

Press **Change channel** on the card. The picker lists **public channels only**,
newest page first, with a search box and a **Load more** button. Search narrows
what has been loaded; Load more widens it. If nothing matches, the picker says
which of the two you need:

```text
No match in the channels loaded so far. Load more to widen the search.
```

Dashies cannot see private channels at all, so a private one never appears.

### 5. Send a test message

Press **Send test message**. It posts immediately and touches no dashboard:

```text
This is a test message. Technical alerts for this space will arrive in this channel.
```

The pane confirms with `Test message sent. Check the channel.`

:::

:::note{title="A connection can still have nowhere to post"}
Three ways to get there, and only the first is history. Dashies began asking Slack
for the channel recently, so an install made before that can sit connected with no
channel. Slack can hand back no channel at all. **And a brand new install can reach
it too**: storing the channel is deliberately allowed to fail without failing the
install, because answering with an error over a channel that did not save would
send you to reinstall something that worked. **In all three the card says so rather
than looking healthy**: it carries an amber `No channel` pill and, in place of its
summary line, a warning that cannot be dismissed.

```text
Connected, but alerts have nowhere to post.
Slack is installed for this space. Until a channel is picked, every alert that would have gone to Slack is dropped and nothing says so.
```

Press **Choose a channel** on the card, or **Pick a channel** on the warning
itself. Coming back from Slack into this state opens the picker for you, and
while it is open the warning's own button is hidden and the card's control reads
**Close**. The picker opens with a line saying what it is for:

```text
Alerts post to one public channel. Pick the one this space should use.
```
:::

:::warning{title="A channel's membership is Slack's, not this workspace's"}
The pane says this on the card, once, because the admin choosing the channel is
the only person who can weigh it:

```text
Anyone in the channel can read these alerts, including people who are not members of this workspace.
```

Alerts carry dashboard names, data source names and classified error reasons.
Because Dashies asks for permission to post into public channels it has not
joined, nobody in the channel had to admit the app for that to happen. This is
inherent to a Slack integration rather than a defect: pick the channel
accordingly.
:::

## What posts where

The same category matrix decides both channels. Each category on the
**Notifications** pane has a switch for email and a switch for Slack, and they
are independent: a workspace can send refresh failures to Slack and nothing else,
or send everything by email and nothing to Slack.

A Slack destination belongs to a **workspace**, not to a person or a dashboard.
It receives alerts about every dashboard in that workspace and about that
workspace's data sources, plan and query hosts, whoever created them.

Your own switch is the other half and it is not a destination. **Email me about
my dashboards**, on Settings then **Alerts**, is your account's delivery
preference: it covers alerts about every workspace you belong to, and turning it
off stops every one of those EMAILS, whatever a workspace admin has set here.

**It does not reach Slack.** The switch is applied to EMAIL recipients only, so turning it
off silences your inbox and leaves this channel posting about the same dashboards. That is
the rule this page opens with, seen from the other side: a channel is not a person, so a
person's switch has nothing to act on.

Until a channel is connected the Slack column is switched off, and the matrix says
which of the two reasons applies:

```text
Slack is not connected for this workspace, so its column is off. It turns on once a Slack channel is connected here.
```

```text
Slack is connected but no channel is picked, so its column is off. Pick a channel in the Slack card above.
```

**The second is the one worth reading twice.** Nothing is broken and reinstalling
repairs nothing, so it is easy to miss if you only read the matrix, and every
alert that would have gone to Slack is dropped until a channel is picked. The
Slack card sits above the matrix on the same pane and says it louder, with an
amber `No channel` pill and a warning that cannot be dismissed.

A Slack message carries the same paragraphs as the email and one button to the
page that can answer the next question.

**Its heading is the email's headline rather than the whole subject.** Most
subjects read `<what happened>: <what it happened to>`, and where the half after the
colon is the name of a dashboard, a data source or a workspace, the heading keeps the
first half and a small line under the paragraphs names the thing instead, so one
string is not repeated three times down the message. Two shapes keep the whole
subject: one with no colon at all, such as `Payment failed for <plan>`, and the
workspace security notice, whose second half says what changed rather than naming
anything.

The full subject still travels with an opening message as its notification preview,
which is what Slack shows in the sidebar and what a screen reader announces. A thread
reply carries its own resolution line there instead.

A Slack message carries no addresses, no tokens and no numbers the email does not
carry.

## Recoveries reply in the thread

A message that CLOSES a situation posts as a **thread reply** under the message
that opened it, so an outage and its recovery stay together rather than arriving
as two unrelated posts days apart.

| Reply | Threads under |
|---|---|
| `Refresh recovered` | `Refresh failing`, `Still failing`, `Refresh delayed on our side`, `Refresh suspended` |
| `Refresh back on schedule` | `Refresh overdue`, `Refresh not scheduled` |
| `Data source recovered` | `Data source failing` |
| `Query host answering again` | `Query host not answering` |
| `Payment received` | `Payment failed` |
| `Refresh resumed` | `Refresh paused` |
| `Up to date` | `Showing data as of <date>` |

A closing message only threads under an opener of its own family and about the
same subject. Where no opening message can be found, it posts as a normal message
rather than threading under something unrelated.

**A reply is shorter than the message it answers.** It carries the resolution line
and nothing else: no heading, no button, and no repeat of the line naming the
dashboard, because all three are already in the message above it.

## When Slack stops accepting messages

If Slack refuses, the card's pill turns red and reads `broken`, with the reason:

```text
Dashies cannot post to Slack right now.
Slack stopped accepting messages from Dashies: <reason from Slack>.
```

Two different things break, and they have different fixes:

- **The install is dead.** Somebody removed the Dashies app from the Slack
  workspace, or the token was revoked. Nothing works until it is installed again.
  Press **Reconnect to Slack** on the card and go through the Allow screen.
- **The channel is gone.** The channel was archived, deleted, or is one Dashies
  can no longer reach. The install is fine. Press **Change channel** and pick
  another one.

**Send test message is hidden while the card is broken**, because a test that
cannot pass tells you nothing you did not already know. **Disconnect** stays
available in both states.

Alerts are not lost while Slack is broken. A message that cannot be sent is
retried on a widening ladder, and the run page records every attempt. See
[If a message cannot be delivered](/operate/failure-alerts#if-a-message-cannot-be-delivered).

## Disconnect

**Disconnect** revokes the token with Slack and stops the channel receiving
anything. The card returns to `Not connected. Alerts for this workspace go to
email only.` and the Slack column in the matrix switches off.

Disconnecting changes nothing about email, and it changes nothing about your
dashboards.

## If the install does not finish

Slack returns to the pane with a reason, shown as a sentence:

| What the pane says | What happened |
|---|---|
| `The install was cancelled on Slack, so nothing changed.` | You pressed Cancel on the Allow screen. |
| `Alerts are a Pro feature. Upgrade this space to connect Slack.` | The space has no paid plan. |
| `Only an admin of this workspace can connect Slack to it.` | You are a member rather than an admin. |
| `Slack sent us back without an authorization code. Try connecting again.` | The round trip lost its code. Start again. |
| `Slack approved the install but Dashies could not record it. Try again.` | Slack said yes and our write failed. Nothing was stored, so retrying is safe. |
| `The Slack app is not configured on this deployment.` | The deployment has no Slack credentials. |
| `Slack support is not finished rolling out here yet. Try again shortly.` | The route answered before this deployment carried Slack support. Try again. |
| `The Slack install did not finish.` | Slack came back with no reason at all. |

Anything else is shown as the token Slack returned, because that is more use than
a generic apology.

## Check it worked

1. The card shows the Slack workspace name and the channel as `#name`, with a
   green `active` pill.
2. **Send test message** posts and the pane says `Test message sent. Check the
   channel.`
3. The **Notifications** matrix shows a live Slack switch on every category the
   space is entitled to.
4. On the next real alert, the message appears in the channel with a heading, the
   same paragraphs as the email and one button, and its recovery arrives as a
   reply in the same thread.
