Search documentation

Search for pages in the documentation

Slack Post

Send messages to Slack channels

The Slack Post node sends messages to Slack channels. Use it for notifications, alerts, summaries, and any communication that should reach your team in Slack.

Overview

PropertyValue
CategoryAction
Node IDsds.slackPost.perItem.in1.success1.error1 (per-item)
ds.slackPost.batch.in1.success1.error1 (batch)
Input Ports1
Success Outputs1
Error Outputs1
Execution ModePer-item or Batch
Timeout30 seconds
Retry StrategyExponential, 3 attempts
Side-EffectingYes

Prerequisites

  • Slack integration connected (Setup Guide)
  • Agents bot invited to target channel(s)

Configuration

ParameterTypeRequiredDescription
channelCEL ExpressionYesChannel ID or name
textLiquid TemplateYesMessage content

Channel Parameter

Specify the channel using:

Channel ID (recommended):

cel
"C0123456789"

Channel name:

cel
"#sales-updates"

Dynamic from data:

cel
json.slackChannel

How to find Channel ID:

  1. Right-click channel name in Slack
  2. Select "View channel details"
  3. Scroll to bottom, copy the Channel ID

Text Parameter

Message content using Liquid templates:

liquid
šŸ“‹ *Meeting Summary*

*{{ json.meeting.title }}*

{{ json.summary }}

_Posted by Agents_

Input Schema

Accepts any data from upstream. Access it via json in templates.

Output Schema

Success Output

json
{
  "success": true,
  "messageId": "1234567890.123456",
  "channel": "C0123456789",
  "timestamp": "2024-01-15T14:30:00Z"
}
FieldTypeDescription
successbooleanAlways true on success output
messageIdstringSlack's message identifier
channelstringChannel where message was posted
timestampstringWhen the message was sent

Error Output

json
{
  "error": "channel_not_found",
  "message": "Channel C0123456789 not found or bot not invited",
  "channel": "C0123456789"
}

Examples

Basic Example: Simple Notification

Send a simple notification when a meeting ends.

Configuration:

Channel: "#sales-updates"

Text:

liquid
Meeting "{{ json.meeting.title }}" has ended.

Example: Formatted Summary

Send a well-formatted meeting summary.

Configuration:

Channel: "C0123456789" (using channel ID)

Text:

liquid
šŸ“‹ *Meeting Recap: {{ json.meeting.title }}*

*Date:* {{ json.meeting.startTime | date: "%B %d, %Y at %I:%M %p" }}

*Attendees:*
{% for attendee in json.meeting.attendees %}
• {{ attendee.name }}
{% endfor %}

*Summary:*
{{ json.summary }}

{% if json.actionItems.size > 0 %}
*Action Items:*
{% for item in json.actionItems %}
• {{ item }}
{% endfor %}
{% endif %}

Example: Conditional Formatting

Different formatting based on sentiment.

Text:

liquid
{% if json.sentiment == "positive" %}
āœ… *Positive Meeting: {{ json.meeting.title }}*
{% elsif json.sentiment == "negative" %}
āš ļø *Needs Attention: {{ json.meeting.title }}*
{% else %}
šŸ“‹ *Meeting Update: {{ json.meeting.title }}*
{% endif %}

{{ json.summary }}

Example: Mention Users

Include Slack mentions in messages.

Text:

liquid
Hey <@U0123456789>, the meeting with {{ json.contact.name }} just ended.

Key takeaway: {{ json.keyTakeaway }}

Note: Use Slack user IDs for mentions, not names. Format: <@USERID>

Include clickable links.

Text:

liquid
*{{ json.meeting.title }}*

{{ json.summary }}

<{{ json.meetingUrl }}|View Meeting Details>

Slack Formatting Reference

Slack uses a specific formatting syntax:

FormatSyntaxResult
Bold*text*text
Italic_text_text
Strikethrough~text~text
Code`code`code
Code block```code```Code block
Link<url|text>text
User mention<@USERID>@username
Channel mention<#CHANNELID>#channel

Emojis

Use standard emoji shortcodes:

  • :white_check_mark: → āœ…
  • :warning: → āš ļø
  • :memo: → šŸ“
  • :calendar: → šŸ“…

Best Practices

1. Use Channel IDs

Channel IDs are more reliable than names:

  • Names can change
  • IDs are permanent
  • Avoids confusion with similar names

2. Keep Messages Scannable

liquid
šŸ“‹ *{{ json.meeting.title }}*

*TL;DR:* {{ json.oneSentenceSummary }}

<{{ json.detailsUrl }}|See full details>

3. Include Context

Always include enough context for readers:

  • What meeting/deal this relates to
  • When it happened
  • Why they're receiving this

4. Use Appropriate Channels

  • High-volume alerts → dedicated alert channel
  • Deal updates → deal-specific or team channel
  • Urgent items → consider DM or SMS instead

5. Don't Over-Notify

  • Batch related updates when possible
  • Use conditional logic to filter noise
  • Respect team's attention

Common Issues

"Channel not found" error

Causes:

  • Invalid channel ID
  • Bot not invited to private channel
  • Channel was deleted

Solutions:

  1. Verify channel ID is correct
  2. Invite bot: /invite @Meetingflow Bot
  3. Check channel still exists

Bot can post to some channels but not others

Cause: Bot not invited to private channels

Solution:

text
/invite @Meetingflow Bot

Message not appearing

Causes:

  • Workflow succeeded but wrong channel
  • Message in thread (not main channel)
  • Slack API delay

Solutions:

  1. Check output for actual channel posted to
  2. Verify channel configuration
  3. Wait a moment and refresh Slack

Formatting looks wrong

Cause: Mixing markdown and Slack syntax

Solution: Use Slack's formatting syntax (*bold* not **bold**)

  • If - Conditionally send messages
  • AI Prompt - Generate message content
  • Email Send - Alternative communication

Technical Details

Rate Limits

Slack has API rate limits:

  • ~1 message per second per channel
  • Higher limits for paid workspaces

The retry mechanism handles temporary rate limits automatically.

Message Size Limits

  • Maximum message length: ~40,000 characters
  • Recommended: Keep under 4,000 characters for readability

Bot Permissions

The Slack bot requires these scopes:

  • chat:write - Post messages
  • chat:write.public - Post to public channels without joining

For private channels, the bot must be explicitly invited.