Skip to main content

Slack integration

Post and manage Slack messages, work with channels and users, and start workflows from Slack events.

What it does

The Slack integration connects a Slack workspace so your workflows can post and manage messages, create and manage channels, look up users and files, add reactions, and start a run when Slack delivers an event. Connect a workspace once and reuse the connection across any workflow.

Slack is in beta

Every Slack action and the Slack trigger are marked beta. They work, but expect rough edges, and read the Known limitations before you build a production workflow on top of them.

Connect a Slack account

  1. Open Connections in your workspace

    Open your workspace in TaskJuice and go to Connections.

  2. Choose Slack and connect

    Choose Slack and click Connect. TaskJuice sends you to Slack to authorize the workspace.

  3. Authorize as the workspace owner

    Sign in to Slack as your client, or have them complete the authorization in their own workspace. Slack asks them to approve the permissions TaskJuice requests to post messages, read and manage channels, look up users, read files, and add reactions.

  4. Return to TaskJuice

    Slack returns you to the workspace with the connection ready to use in any workflow.

For the full connect flow, including how connections are scoped and reused, see Connect an account.

Add your signing secret for triggers

If you plan to start workflows from Slack events, you also need to paste your Slack signing secret into TaskJuice. TaskJuice verifies each incoming event with that secret so it only acts on deliveries that genuinely came from Slack.

Copy the value from your Slack app settings under Basic Information, Signing Secret, then paste it into the trigger configuration in TaskJuice. Deliveries with a timestamp older than 5 minutes are rejected.

Triggers

Slack has one trigger.

Trigger keyDisplay nameFires on
slack/event-callbackSlack EventAny event Slack delivers to the Events API endpoint: messages, mentions, channel changes, reactions, and so on

This is a single generic trigger that receives every event your Slack app subscribes to, in real time. There are no separate "new message" or "reaction added" triggers. To act on one specific event type, read event.type in the trigger output and route with a downstream Branch or Switch node.

Each delivery is one event, so every activation processes exactly one Slack event. There is no batched array to loop over.

Trigger output

The trigger output is the Slack Events API envelope. These top-level fields are always present.

FieldTypeDescription
team_idstringThe Slack workspace (team) ID the event came from
api_app_idstringThe Slack app ID that received the event
eventobjectThe event payload. Its shape varies by event type and contains nested type, event_ts, and user fields
event.typestringThe specific Slack event type, for example message, app_mention, or reaction_added
event.event_tsstringEvent timestamp in seconds.microseconds format
event.userstringThe Slack user ID that triggered the event, when applicable
typestringThe outer envelope type, always event_callback
event_idstringA unique delivery ID that is stable across Slack retries, useful for deduplication
event_timeintegerEpoch seconds for when Slack dispatched the event

Actions

Slack provides 16 actions. All are HTTP-based and run on a connected Slack workspace.

Action keyDisplay nameWhat it doesRequired inputsOptional inputs and defaults
slack/send-messageSend MessageSends a message to a channel or DMchannelId, textthread_ts to reply in a thread
slack/list-channelsList ChannelsLists channels in the workspacenonetypes (default public_channel), limit (default 200), exclude_archived (default true)
slack/create-channelCreate ChannelCreates a public or private channelnameis_private (default false)
slack/get-channelGet ChannelReturns info about a channelchannelnone
slack/list-usersList UsersLists users in the workspacenonelimit (default 200)
slack/get-userGet UserReturns info about a userusernone
slack/update-messageUpdate MessageUpdates an existing messagechannel, ts, textnone
slack/delete-messageDelete MessageDeletes a messagechannel, tsnone
slack/add-reactionAdd ReactionAdds an emoji reaction to a messagechannel, timestamp, namenone
slack/get-channel-historyGet Channel HistoryLists messages and events from a channelchannellimit (default 100), cursor for pagination
slack/get-thread-repliesGet Thread RepliesLists replies in a threadchannel, channel_tsnone
slack/archive-channelArchive ChannelArchives a channelchannelnone
slack/invite-to-channelInvite to ChannelInvites users to a channelchannel, users (comma-separated user IDs)none
slack/search-messagesSearch MessagesSearches for messages matching a queryquerynone
slack/create-reminderCreate ReminderCreates a remindertext, timenone
slack/get-file-infoGet File InfoReturns information about a filefilenone

Field notes

  • slack/send-message: channelId is a channel dropdown that lists public, non-archived channels in the workspace. text is a free-text field. To post to a private channel, type the channel ID directly instead of picking from the dropdown.
  • slack/list-channels: types accepts a comma-separated list of public_channel, private_channel, mpim, im.
  • slack/add-reaction: name is an emoji name without colons, for example thumbsup or smile.
  • slack/add-reaction: timestamp is the target message timestamp. slack/update-message and slack/delete-message use ts for the same purpose, and slack/get-thread-replies uses channel_ts for the parent message.
  • User-ID fields such as user, users, and channel are plain text. You enter the IDs directly; there is no user picker dropdown.
Four actions may need extra Slack scopes

Get Channel History, Get Thread Replies, Search Messages, and Create Reminder need Slack permissions that the standard connect flow does not request. On a default connection they can fail with a missing-scope error from Slack. Search Messages and Create Reminder also require user-token permissions that a standard workspace install does not grant, so treat those two as the most likely to fail.

Errors

Every Slack action and the channel dropdown map the provider's HTTP status to the same TaskJuice error codes. The default failure code is UPSTREAM_REQUEST_FAILED.

Provider HTTP statusError codeRetryableWhen you see it
401AUTH_EXPIREDNoThe connection's token is no longer valid. Reconnect the Slack account.
404NOT_FOUNDNoThe requested channel, user, or message does not exist. Returned by actions that read a single resource, such as Get Channel, Get User, Update Message, and Delete Message.
429RATE_LIMITEDYesSlack is throttling the request. TaskJuice retries it.
500PROVIDER_ERRORYesSlack returned a server error. TaskJuice retries it.
any other failureUPSTREAM_REQUEST_FAILEDNoAn unmapped failure from Slack.
Some failures return success

Slack returns HTTP 200 even when a call fails logically, for example on a missing scope or an invalid channel. TaskJuice only maps the HTTP status, so these surface as a successful step with ok: false in the output rather than as an error code. When an action seems to do nothing, check the ok field in the action output.

Known limitations

  • The Send Message channel dropdown lists public, non-archived channels only, up to 200. To post to a private channel, supply its channel ID directly in the channelId field.
  • There is one generic event trigger. It receives every event your Slack app is subscribed to. Narrow to a specific event by branching on event.type downstream. There are no per-event-type triggers.
  • The trigger requires your Slack signing secret. TaskJuice rejects any delivery whose timestamp is older than 5 minutes.
  • Rate limits surface as retryable RATE_LIMITED errors. Slack enforces its own per-method rate limits, including a posting limit of roughly one message per second per channel for sending messages. These are Slack's limits, not TaskJuice's.
  • Get Channel History, Get Thread Replies, Search Messages, and Create Reminder need Slack scopes the standard connection does not request, so they may return a missing-scope failure on a default connection.
  • Get File Info returns a file's metadata only. There is no file upload action and no action that downloads file contents, and no standalone send-direct-message action. To send a DM, use Send Message with a direct-message channel ID.
Was this helpful?