Send Slack Message

The Send Slack Message node posts a message to a Slack channel or DM as part of your workflow. Use it for alerts, notifications, approvals, and team communication.

Prerequisites

Connect your Slack workspace in Build → App Authorizations before using this node.

Configuration

FieldTypeRequiredDescription
ConnectionSelectYesYour connected Slack workspace
ChannelSelect/FXYesChannel to post in (e.g., #general, #alerts). Also supports DMs by user ID.
MessageFX formulaYesThe message text. Supports Slack markdown and workflow variables.
Thread TSFX formulaNoReply in a thread by providing the parent message timestamp
Unfurl linksToggleNoShow link previews (default: true)
Unfurl mediaToggleNoShow media previews (default: true)

Slack formatting

Slack uses its own markdown syntax:

SyntaxResult
*bold*bold
_italic_italic
~strikethrough~strikethrough
`code`code
> quoteblockquote
:emoji:emoji icon
<@U1234>@mention a user
<#C1234>#channel link
<https://url|Display Text>clickable link

Using variables in messages

Reference data from any previous node:

:bell: *New Lead Alert*

*Name:* {{trigger.body.name}}
*Email:* {{trigger.body.email}}
*Score:* {{tinygpt.result.score}}/100
*Tier:* {{tinygpt.result.tier}}

_Submitted at {{trigger.timestamp}}_

Thread replies

Post in a thread instead of the main channel:

  1. Set Thread TS to the parent message's timestamp
  2. Common source: &#123;&#123;slack_send.message.ts&#125;&#125; from a previous Slack message node

This is useful for updating the same thread:

Trigger → Slack (post alert to #channel) → ... process ... →
  Slack (reply in thread with results, Thread TS: {{slack_send.message.ts}})

Channel selection

Static channel

Select a channel from the dropdown. The list shows all channels the bot has access to.

Dynamic channel

Use an FX variable for the channel:

{{trigger.body.department}}_alerts

If the incoming data has department: "engineering", this posts to #engineering_alerts.

Direct messages

Send a DM to a specific user by providing their Slack user ID:

Channel: {{trigger.body.slack_user_id}}

Output variables

{{slack_send.message.ts}}          → message timestamp (use for thread replies)
{{slack_send.channel}}             → channel ID
{{slack_send.ok}}                  → true if message sent successfully

Common patterns

Error alert

Any node → Error branch → Slack (#alerts: ":rotating_light: Workflow failed: {{error.message}}")

Approval request

Trigger → Slack (post approval request) → Wait for Webhook →
  If-Else (approved?) → Continue or stop

Daily digest

Schedule (daily 9am) → Find All (today's metrics) → Transformer (format) →
  Slack (#daily-standup: formatted report)

Multi-channel alert

Add multiple Slack nodes to post the same event to different channels:

Trigger → [parallel]:
  Slack (#general: brief summary)
  Slack (#engineering: detailed technical info)
  Slack (DM to project owner)
Tip

Use thread replies to keep channels clean. Post the initial alert as a top-level message, then post all follow-ups (status updates, resolution notes) as thread replies to that message.

Warning

The Slack bot must be invited to a channel before it can post there. If you get a "channel_not_found" error, go to the target Slack channel and type /invite @TinyCommand to add the bot.