> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.lido.app/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Connect Slack

Connect a Slack workspace to Lido so workflows can post messages to channels, send DMs, and trigger on Slack events. The same connection powers the **Send Slack** node, the `SENDSLACK` formula, and Slack-related workflow triggers.

---

## When to connect

- You want workflow notifications to land in a Slack channel (e.g., "New invoice extracted: $1,234 from Acme Corp").
- You want a workflow to fire when a message is posted in a channel or someone reacts to a message.
- You want spreadsheet automations to post per-row updates via `=SENDSLACK(...)`.

---

## Before you start

You need:

- A Slack workspace and an account with permission to add apps. For larger Slack workspaces, **workspace admin approval** may be required.
- Admin rights to add integrations to your Lido workspace.
- A clear sense of which channel(s) Lido should post into.

---

## Step-by-step

1. Open Lido workspace settings → **Integrations**.
2. Click **Add Integration → Slack**.
3. Click **Connect** to start the OAuth flow. Sign in to your Slack workspace.
4. Review the requested scopes:
   - `chat:write` — post messages
   - `channels:read` / `groups:read` — list channels you can post to
   - `im:write` — send direct messages
   - (others vary by feature)
5. Approve.
6. Lido stores the credential and it appears as a selectable option in **Send Slack** nodes and `SENDSLACK` formulas.

If your Slack workspace requires admin approval, you'll see a "Request to install" screen. Your admin gets a notification and approves on your behalf.

---

## Posting to private channels

Lido can only post to channels the connecting account has access to. For private channels:

1. Add the user account that connected Lido to the private channel (`/invite @user` from inside the channel).
2. Or, configure Lido to post via a Slack bot user, then invite the bot to the channel (`/invite @lido` or whatever the bot is called in your workspace).

---

## Send Slack node parameters

| Parameter | What to put in it |
| --- | --- |
| `credential` | Slack credential ID (auto-filled when you pick the credential) |
| `channel` | Channel name (`#invoices`) or user (`@aleks`) |
| `message` | The message text. Supports Slack mrkdwn (bold, italic, code, links) and expressions like `{{$item.data.vendor}}` |
| `attachments` | Optional rich attachments (Slack Block Kit JSON) |
| `thread_ts` | Optional — post in a thread reply |
| `unfurl_links` | Whether to expand link previews (default true) |

---

## SENDSLACK formula (in spreadsheets)

```
=SENDSLACK(credential_id, channel, message, [thread_ts])
```

Use it in a column or action to post per-row. For example, a column that posts a Slack notification when an invoice row is added:

```
=SENDSLACK("creds_xyz", "#invoices", "New invoice from " & A2 & " for $" & B2)
```

Wire it to an action so it only sends on demand or on a schedule (rather than every time the formula recalculates).

---

## Receiving Slack messages

Lido supports a **Slack Trigger** for events like:

- New message posted in a channel
- Message containing a specific keyword
- Someone reacts with a specific emoji
- A user mentions the Lido bot

Use this to drive workflows from chat — e.g., reply to a message containing "create ticket" by spinning up a Linear/Jira issue, or react with a checkmark when a message has been processed.

---

## Tips

- **Use a Slack bot user for production** instead of a personal account. Personal connections break when the user leaves.
- **Pick clear channel naming.** `#lido-invoices` reads better than `#workflow-3-output` six months later.
- **Use Block Kit for rich messages.** A simple bullet list of fields beats a single concatenated sentence for scannability.
- **Mute noisy bots.** If your workflow posts dozens of times a day, give the channel a clear purpose so people don't tune it out.
- **Test in a private test channel first.** A misconfigured workflow can spam #general very fast.

---

## Common mistakes

- **Posting to a channel the connected account isn't in.** Add the account (or bot) to the channel first.
- **Hard-coded channel name in the formula.** Use a workspace setting or a column reference so you can change channels without editing every formula.
- **Including raw `{{$item.data...}}` in literal mode.** The expression won't evaluate. Toggle the parameter to expression mode.
- **No error handling.** A failed Slack post (rate limit, channel deleted) silently drops the notification. Wire the Send Slack node's error output somewhere.
- **Slack's rate limits.** Slack throttles aggressive posting. For high-volume notifications, batch into one message per minute instead of one per row.

---

## Disconnecting

Workspace settings → Integrations → find the Slack credential → **Remove**. Workflows and formulas using the credential will fail until you reconnect or point them at a different credential.

---

## Related articles

- Send extracted data to email or Slack
- Triggers: how workflows start (Slack Trigger)
- Build your first workflow
- Connect Gmail or Outlook