Skip to content

Slack

Send and manage Slack messages, channels, reactions, users and files, pause a workflow until someone clicks a button, and start workflows from Slack in real time.

Nodes Slack (actions), Slack Trigger (real-time triggers)
Auth Flero-managed sign-in, your company's own Slack app, or a bot token
Availability Slack: all workspaces. Slack Trigger: limited release

Connecting

Flero-managed sign-in

Click Sign in with Slack in a Slack node and approve the app in your Slack workspace. Flero's app asks for these bot scopes:

chat:write, chat:write.public, channels:read, groups:read, im:read, mpim:read, channels:history, groups:history, im:history, mpim:history, channels:manage, groups:write, users:read, usergroups:read, reactions:read, reactions:write, files:read, files:write

This is enough for every Slack action. It does not support the real-time triggers.

Your company's own Slack app

Real-time triggers need a Slack app that belongs to your Slack workspace, because Slack sends every event for an app to one URL, and that URL must point at your Flero instance. Flero creates the app for you from a template.

An organization admin does this once:

  1. Open a Slack Trigger node and click Add Flero to Slack.
  2. At api.slack.com/apps, under "Your App Configuration Tokens", create a configuration token and paste it. Optionally paste the refresh token too, so Flero can keep the token fresh. Choose the app name.
  3. Review the permissions. The recommended ones are ticked. Untick any the app should not have. Flero drops the Slack events and the slash command that the remaining permissions no longer cover.
  4. Click Create app, then Install to Slack, and allow the requested scopes.
  5. Wait for Slack to verify the events URL. If it stays pending, open the app's Event Subscriptions page from the link and click Verify.

Besides the managed app's scopes, the template can request commands, im:write, users:read.email, app_mentions:read, metadata.message:read and channels:join.

The configuration token is used once and not stored. The new credential works for both the Slack node and the Slack Trigger. Other users see the button greyed out with a note about who can complete the step. Once the app exists, everyone sees "Flero is connected to Slack".

Your Flero address must be reachable from the internet for Slack to deliver events.

To change the app's permissions later, run Set up again. This creates a second Slack app.

Bot token

You can also paste a bot token (xoxb-…) from a Slack app you manage yourself. It works for actions only.


Operations

Resource Operations
Message Send, Update, Get, Delete
Channel Create, Archive, Get, List
Reaction Add, Remove, Get
User Get, List
File Get, List

Channel and user fields are dropdowns filled from your Slack workspace. The posted message's timestamp is on {{ $node["Post summary"].output.data.ts }}.


Message layout

Send and Update have a Message layout field: an ordered list of blocks that Flero renders as Slack Block Kit. The Text field stays required. Slack shows it in notifications and wherever blocks cannot render.

Item Notes
Header Up to 150 characters
Text Markdown. Above 12,000 characters it is truncated; on Send, the full text is also attached as message.md
Table Rows from a list of objects, a list of lists, or an expression. Up to 100 rows and 20 columns
Image URL plus alt text
Divider A horizontal rule
Small print Grey text under the message
Label / value pairs Shown in columns, ten per section
Buttons Up to 25. Each has an id, label, style, optional link, optional confirmation, and what it collects

Add items from the menu and reorder them with the arrows. The editor checks the layout as you go. A layout that is invalid at run time fails the node.

Button ids use a-z, 0-9, _ and -, up to 32 characters, unique within the message. They cannot be output, error or timeout. The Approve / Reject preset adds an approved and a rejected button, with the reject button collecting a comment.


Wait for response

Turn on Wait for response on Send or Update to pause the run until someone clicks a button, like an Approval in Slack. The Approve / Reject preset turns it on for you. The layout needs at least one button.

Setting Notes
Time out after (minutes) Default 1440 (24 hours). When it passes, the run continues on the Timed out port.
Who can respond Only these people may decide. Slack member IDs or emails. Leave empty for anyone who can see the message.
Who counts as allowed Anyone, People in this workspace, or Full members of this workspace. Full members turns guests away, and anyone Slack does not report as a member.

Both rules are checked. Neither needs a Flero account.

What happens:

  • The node gets one output port per button, plus Timed out.
  • A button that collects a comment, a person or a short form opens a Slack modal first. The decision is recorded when the person submits it. A picked person arrives as values.user, their Slack user ID.
  • After a decision, the message is rewritten without buttons and with a line saying who decided and when. A later click gets a private "This request is no longer waiting for a response." note.
  • The output on the chosen port has decision, label, timedOut, comment, values, actor, respondedAt, channel, ts, threadTs, text and responseUrl. For example, {{ $node["Ask for approval"].output.comment }}.

Turning the wait off does not delete connections from the old button ports. Remove them yourself.

Update the previous message

A toggle on Send. When the incoming data carries a Slack message ts (and a channel, if the node names none), Send edits that message instead of posting a new one. A review loop stays one message: draft, "Adjust by …", revised draft, approved text.

Reply privately, in place

A toggle on Send. The reply goes through the response URL from the slash command or button click that started the run. Only that person sees it, and each reply replaces the previous one. The node fails if the incoming data has no response URL. Slack limits how often a response URL can be used, so keep such loops short.


Triggers

All three Slack triggers are real-time and need your company's own Slack app. The trigger panel shows the events URL, whether the app is installed and verified, and the setup button when the credential is not a company app.

Public channels you pick are joined when the workflow is activated. Invite the app to private channels with /invite @<app name>.

Trigger Fires when Settings Output
New message A message is posted in a channel, private channel, group DM or DM the app is in. Edits and deletions are ignored. Channels, From users, Text starts with, Text matches (regex), Include messages from bots (off), Include thread replies (off) text, channel, user, ts, threadTs, teamId, eventId, eventTime, subtype, raw
Slash command Someone types /flero <route> [arguments] Route, Channels, Acknowledgement command, route, text, argv, userId, userName, channelId, channelName, teamId, responseUrl, triggerId, raw
Button clicked Someone clicks a button in a message the app posted without Wait for response Button ids (comma-separated, optional) buttonId, actionId, value, channelId, messageTs, threadTs, userId, userName, teamId, responseUrl, triggerId, metadata, raw
  • The app's own messages never trigger New message.
  • Acknowledgement is the private reply Slack shows straight away. Unset, it reads "Flero is running /flero <text>". Set it to empty for silence.
  • A slash command that no active workflow answers gets a private reply saying so, or saying the workflow is turned off.
  • Read trigger fields from the node, for example {{ $node["Slack Trigger"].output.text }}. The person behind the event is on {{ $trigger.actor }}.

Known issue: the triggers show Who can start this and Who counts as allowed, but these are not enforced on triggers yet. They are enforced on Wait for response.


Limits

  • Slack expects an answer within 3 seconds. Flero acknowledges first and works after. Slack's retries of the same event within 15 minutes are dropped.
  • 50 blocks per message, 25 buttons, 3,000 characters per section, 12,000 per Markdown block. Flero enforces these and notes what it dropped.

Common errors

Symptom Check
Events URL stays "waiting for verification" Open the app's Event Subscriptions page and click Verify. Your Flero address must be reachable from the internet.
Trigger never fires Is the app in the channel? Is the credential the company app? Is the workflow active?
"This request is no longer waiting for a response." Someone else decided, or the wait timed out.
"Only certain people can respond to this request." Who can respond does not include the person.
"Only full members of this workspace can respond to this request." Who counts as allowed is Full members, and the person is a guest or Slack did not report them as a member.
"No workflow answers /flero <route>" Check the route's spelling. "… is turned off" means the workflow exists but is inactive.
not_in_channel on Send Invite the app to the channel, or pick a public channel.


Found something out of date? This page lives in the Flero docs content set.