docs

Slack Notification Node

The Slack Notification node sends messages to Slack channels, DMs, or threads directly from your workflow. Use it to deliver trading alerts, portfolio summaries, or any real-time notification to your team's Slack workspace.

Trading Alert
#trading-signals

Configuration

FieldDescription
Bot Token CredentialYour Slack bot token (xoxb-...). Select an existing credential or create one. See Setup below.
ChannelWhere to send the message. Accepts a channel name (#general), channel ID (C1234567890), or user ID for DMs (@username). Supports interpolation.
Message TextThe message body. Supports Slack mrkdwn formatting (*bold*, _italic_, `code`, >blockquote). Supports interpolation.
Blocks (JSON)Optional. A JSON array of Block Kit elements for rich layouts (sections, buttons, dividers). Supports interpolation.
Attachments (JSON)Optional. Legacy attachments as a JSON array. Deprecated — use Blocks instead.
Username OverrideOptional. Override the bot's display name for this message.
Icon EmojiOptional. Emoji to use as the bot icon (e.g., :chart_with_upwards_trend:).
Icon URLOptional. URL to an image to use as the bot icon. Overrides Icon Emoji if both are set.
Thread TimestampOptional. A Slack message timestamp (ts) to reply in a thread instead of posting a new message.
Unfurl LinksEnable link previews in the message. Default: on.
Unfurl MediaEnable media previews in the message. Default: on.

Setup

You need a Slack app with a bot token to use this node. Follow these steps:

1. Create a Slack App

  1. Go to https://api.slack.com/apps and click Create New App.
  2. Choose From scratch.
  3. Give it a name (e.g., "NickAI Trading Bot") and select the workspace you want to send messages to.
  4. Click Create App.

2. Add Bot Permissions

  1. In the left sidebar, click OAuth & Permissions.
  2. Scroll down to Scopes and find the Bot Token Scopes section.
  3. Click Add an OAuth Scope and add these scopes:
    • chat:write — required. Lets the bot send messages.
    • chat:write.customize — optional. Lets the bot override its username and icon per message.
    • channels:join — optional. Lets the bot auto-join public channels it's not a member of.

3. Install to Workspace

  1. Scroll back up to the top of the OAuth & Permissions page.
  2. Click Install to Workspace (or Reinstall to Workspace if you added scopes after the first install).
  3. Review the permissions and click Allow.
  4. Copy the Bot User OAuth Token — it starts with xoxb-.

4. Add the Token to NickAI

  1. In NickAI, open the Slack Notification node's properties panel.
  2. Under Bot Token Credential, click Create new.
  3. Paste the xoxb-... token and save.

5. Invite the Bot to Your Channel

The bot can only post to channels it has been added to. In Slack:

  1. Open the channel where you want alerts (e.g., #trading-signals).
  2. Type /invite @YourBotName or click the channel name, go to Integrations, and add the bot.

Template Interpolation

Use curly braces to inject live data from upstream nodes into the channel, message text, or Block Kit JSON.

ExpressionWhat it resolves to
{price_data.data.prices[0].current}Current price from a Price Data node
{llm.output}Text output from an LLM node
{portfolio.positions}Positions array from a Portfolio node
{my_function.signal}A custom field from a Function node

Example: Trading Alert Message

:rotating_light: *Trading Signal*

*Symbol:* {price_data.data.prices[0].symbol}
*Price:* ${price_data.data.prices[0].current}
*24h Change:* {price_data.data.prices[0].changePercent24h}%
*RSI:* {price_data.data.prices[0].indicators.rsi}

*Recommendation:* {llm.output}

Example: Block Kit with Dynamic Data

[
  {
    "type": "header",
    "text": { "type": "plain_text", "text": "Trading Alert" }
  },
  {
    "type": "section",
    "fields": [
      { "type": "mrkdwn", "text": "*Symbol:*\n{price_data.data.prices[0].symbol}" },
      { "type": "mrkdwn", "text": "*Price:*\n${price_data.data.prices[0].current}" },
      { "type": "mrkdwn", "text": "*RSI:*\n{price_data.data.prices[0].indicators.rsi}" },
      { "type": "mrkdwn", "text": "*Signal:*\n{llm.output}" }
    ]
  },
  { "type": "divider" }
]

Workflow Example

A common pattern: fetch price data, analyze it with an LLM, check if there's a signal, and send a Slack alert.

BTC Price
BINANCE:BTCUSDT
Analyze Market
Claude Sonnet 4.6
Buy Signal?
signal = buy
Alert Team
#trading-signals

In this workflow:

  1. Price Data fetches the latest BTC market data and indicators.
  2. LLM analyzes the data and outputs a trading recommendation.
  3. Conditional checks if the LLM recommended a buy.
  4. Slack Notification sends the alert to #trading-signals only when the condition is true.

Output

PathDescription
{slack.success}true if the message was sent, false if it failed
{slack.message}"Slack message sent successfully" or an error description
{slack.ts}Slack message timestamp (e.g., 1710835200.000100). Use this as Thread Timestamp in a downstream Slack node to reply in the same thread.
{slack.channel}Channel ID where the message was sent (e.g., C1234567890)

Troubleshooting

ErrorCauseFix
not_in_channelBot is not a member of the target channelInvite the bot to the channel with /invite @BotName, or add the channels:join scope for auto-join on public channels
channel_not_foundChannel name or ID is incorrectDouble-check the channel name (include the #) or use the channel ID from Slack's channel settings
invalid_authBot token is missing or expiredRe-copy the token from api.slack.com/apps and update the credential in NickAI
missing_scopeBot token doesn't have chat:writeGo to OAuth & Permissions in your Slack app, add the chat:write scope, and reinstall the app

Next Steps