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
| Field | Description |
|---|---|
| Bot Token Credential | Your Slack bot token (xoxb-...). Select an existing credential or create one. See Setup below. |
| Channel | Where to send the message. Accepts a channel name (#general), channel ID (C1234567890), or user ID for DMs (@username). Supports interpolation. |
| Message Text | The 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 Override | Optional. Override the bot's display name for this message. |
| Icon Emoji | Optional. Emoji to use as the bot icon (e.g., :chart_with_upwards_trend:). |
| Icon URL | Optional. URL to an image to use as the bot icon. Overrides Icon Emoji if both are set. |
| Thread Timestamp | Optional. A Slack message timestamp (ts) to reply in a thread instead of posting a new message. |
| Unfurl Links | Enable link previews in the message. Default: on. |
| Unfurl Media | Enable media previews in the message. Default: on. |
Either Message Text or Blocks must be provided. If you only provide Blocks, Slack still recommends including text as a fallback for notifications and accessibility.
Setup
You need a Slack app with a bot token to use this node. Follow these steps:
1. Create a Slack App
- Go to https://api.slack.com/apps ↗ and click Create New App.
- Choose From scratch.
- Give it a name (e.g., "NickAI Trading Bot") and select the workspace you want to send messages to.
- Click Create App.
2. Add Bot Permissions
- In the left sidebar, click OAuth & Permissions.
- Scroll down to Scopes and find the Bot Token Scopes section.
- 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
- Scroll back up to the top of the OAuth & Permissions page.
- Click Install to Workspace (or Reinstall to Workspace if you added scopes after the first install).
- Review the permissions and click Allow.
- Copy the Bot User OAuth Token — it starts with
xoxb-.
4. Add the Token to NickAI
- In NickAI, open the Slack Notification node's properties panel.
- Under Bot Token Credential, click Create new.
- 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:
- Open the channel where you want alerts (e.g.,
#trading-signals). - Type
/invite @YourBotNameor click the channel name, go to Integrations, and add the bot.
If you added the
channels:join scope, the bot will automatically attempt to join public channels when it first tries to send a message. For private channels, you must always invite the bot manually.Template Interpolation
Use curly braces to inject live data from upstream nodes into the channel, message text, or Block Kit JSON.
| Expression | What 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" }
]
The editor provides autocomplete inside {} braces — it shows all available edge labels and their fields so you don't need to memorize the data structure.
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:
- Price Data fetches the latest BTC market data and indicators.
- LLM analyzes the data and outputs a trading recommendation.
- Conditional checks if the LLM recommended a buy.
- Slack Notification sends the alert to
#trading-signalsonly when the condition is true.
Output
| Path | Description |
|---|---|
| {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) |
Replace
slack with the edge label connecting this node to the next one. If the edge is labeled alert, use {alert.success}, {alert.ts}, etc.Troubleshooting
| Error | Cause | Fix |
|---|---|---|
not_in_channel | Bot is not a member of the target channel | Invite the bot to the channel with /invite @BotName, or add the channels:join scope for auto-join on public channels |
channel_not_found | Channel name or ID is incorrect | Double-check the channel name (include the #) or use the channel ID from Slack's channel settings |
invalid_auth | Bot token is missing or expired | Re-copy the token from api.slack.com/apps ↗ and update the credential in NickAI |
missing_scope | Bot token doesn't have chat:write | Go to OAuth & Permissions in your Slack app, add the chat:write scope, and reinstall the app |
Next Steps
- Conditional Node — Route alerts based on signal strength or confidence levels.
- LLM Node — Generate analysis summaries to include in your Slack messages.
- Email Notification Node — Send email alerts alongside Slack notifications.
- Discord Notification Node — Send the same alerts to Discord.
- Credentials — Manage your Slack bot tokens.