# Send Slack Message (/docs/workflows/reference/category/messaging/sendSlackMessage)

> For the complete documentation index, see [llms.txt](https://docs.tandemcx.ai/llms.txt). Any page on this site can be fetched as Markdown by appending `.md` to its URL.

Posts a message to a Slack channel

Posts a message to a Slack channel, or as a direct message to one person, using a connected Slack integration. Set **Send To** to choose which. Pick the channel or recipient from the workspace, or type a `$(variable)` to choose it at runtime — a channel id (`C0123ABCD`) for a channel, a user id (`U0123ABCD`) for a DM. The message text is `$(variable)`-interpolated too. Capture `$.ts` (the message timestamp) and `$.channel` (the resolved channel id — for a DM this is the private conversation, not the user id) into variables to reference the message later. Prerequisites: the integration's Slack app needs the `chat:write` scope; the bot must be invited to the target channel, including any private channel you want to post to or see listed. The channel dropdown additionally needs `channels:read` (public) and `groups:read` (private); direct messages need `users:read` to list people and `im:write` to open the conversation. Bots and deactivated accounts are not offered as recipients — Slack refuses app-to-app DMs. Adding a scope requires reinstalling the app to the workspace, which issues a NEW bot token you must paste back into the integration. The flow takes the `failed` exit when Slack rejects the message, and `default` otherwise.

**Category:** Messaging  
**Provider:** Slack  
**Requires integration:** slack  
**Latest version:** 1.0.0

## Fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Slack Integration (`slackIntegration`) | dynamicDropdown | Yes | Connected Slack app whose bot posts the message. |
| Send To (`destination`) | string | No | Whether the message goes to a channel or as a direct message to one person. Defaults to a channel. |
| Channel (`channel`) | dynamicDropdown | Yes | Channel to post to. Pick one from the workspace, or type a $(variable) to choose the channel at runtime. Private channels appear once the bot has been invited to them. |
| Recipient (`user`) | dynamicDropdown | Yes | Person to direct-message. Pick one from the workspace, or type a $(variable) holding a Slack user id to choose at runtime. Bots and deactivated accounts are not listed — Slack refuses app-to-app DMs. |
| Message (`text`) | textArea | Yes | Message text to post. Supports $(variable) interpolation. |
| Sender Name (`username`) | string | No | Overrides the bot name shown on the message. Requires the chat:write.customize scope. |
| Sender Icon (`iconEmoji`) | string | No | Emoji shown in place of the bot avatar, e.g. :robot_face:. Requires the chat:write.customize scope. Example: `:robot_face:` |
| Variables (`variables`) | array of objects | No | Save values from the Slack response, by JSONPath. |

## Exits

- `default` (required)
- `failed` (required)
- `invalidInput` (system)
- `fallback` (system)

System exits (auto-injected, hidden when unwired): `invalidInput`, `fallback`.
