Portal Community

reaction/add

Add an emoji reaction to a specific Slack message. Used to signal status, acknowledgement, or intent programmatically without posting a visible message reply.

When to Use

Emoji Name Format: Provide the emoji name without colons. Use thumbsup, not :thumbsup:. For custom workspace emojis, use their registered name exactly as it appears in your Slack workspace emoji list.

Configuration

Connection

FieldRequiredDescription
botTokenRequiredSlack Bot Token starting with xoxb-. Must have the reactions:write OAuth scope.

Operation Fields

FieldRequiredDescription
channelRequiredSlack channel ID (e.g. C08ABCDEFGH) where the target message was posted.
messageTsRequiredThe timestamp of the message to react to, in Slack format (e.g. 1748221200.000100). Acts as the unique message identifier within a channel.
emojiNameRequiredEmoji name without surrounding colons (e.g. thumbsup, white_check_mark, eyes). Must be a valid standard or workspace custom emoji.

Sample Configuration

{
  "operation": "reaction/add",
  "connection": {
    "botToken": "{{ $credentials.slackBot.token }}"
  },
  "channel": "{{ $trigger.slackEvent.channel }}",
  "messageTs": "{{ $trigger.slackEvent.ts }}",
  "emojiName": "eyes"
}

Validation Errors

Error CodeCauseResolution
already_reactedThe bot has already added this emoji to the specified message.Check reaction state first using reaction/get if idempotency is required, or ignore this error in the error port handler.
invalid_nameThe emoji name is not recognized (invalid standard emoji or typo in custom emoji name).Verify the emoji name in Slack — open emoji picker and copy the exact name shown.
message_not_foundNo message exists at the given messageTs in the specified channel.Confirm the timestamp and channel ID are correct. Timestamps are channel-scoped.
too_many_emojiThe message already has the maximum number of emoji reactions (23 unique emojis per message).Remove an existing reaction first, or use a different status signaling approach.
missing_scopeBot token lacks reactions:write scope.Add reactions:write under OAuth & Permissions and reinstall the Slack App.

Output

Success Port

FieldTypeDescription
channelstringChannel ID where the reaction was applied.
messageTsstringTimestamp of the message that received the reaction.
emojiNamestringEmoji name that was added (without colons).
statusstring"success" when the reaction was successfully added.
errorCodestringEmpty on success. Contains the Slack API error code on failure.
payloadobjectRaw Slack API response.

Error Port

Activated on any API error. The already_reacted error is common in at-least-once workflows — consider treating it as a non-fatal condition in your error port handler.

Sample Output

{
  "channel": "C08INBOX001",
  "messageTs": "1748221200.000100",
  "emojiName": "eyes",
  "status": "success",
  "errorCode": "",
  "payload": {
    "ok": true
  }
}

Expression Reference

ExpressionResult
{{ $output.addReaction.channel }}Channel ID where the reaction was applied.
{{ $output.addReaction.messageTs }}Message timestamp — pass to reaction/remove to undo.
{{ $output.addReaction.emojiName }}Confirmed emoji name that was added.
{{ $output.addReaction.status }}"success" or error status string.

Node Policies & GuardRails

Policy AreaRecommendation
IdempotencyThe already_reacted error indicates the bot already added this emoji. Wire the error port to log and continue rather than failing the workflow — reactions are naturally idempotent in effect.
Emoji NamingAlways strip colons from emoji names before passing to emojiName. Colons are a display convention, not part of the API name.
Custom Emoji ConsistencyCustom workspace emojis may be deleted or renamed. Build a fallback to a standard emoji if your workflow relies on custom emoji for status signaling.
Rate LimitsSlack's reactions.add is Tier 2 (20+ requests/min). For high-volume message processing, batch reaction adds or throttle to stay within limits.
Reaction LifecyclePlan a corresponding reaction/remove step to clean up status reactions after the workflow completes. Leaving stale reactions misleads users about message processing state.

Examples

Acknowledge Incoming Request with Eyes Emoji

When a new message arrives in #support-requests, immediately add :eyes: to signal the workflow has picked it up.

{
  "operation": "reaction/add",
  "channel": "{{ $trigger.slackEvent.channel }}",
  "messageTs": "{{ $trigger.slackEvent.ts }}",
  "emojiName": "eyes"
}

Mark Completed Task with Check Mark

After completing a task referenced in a Slack message, add a :white_check_mark: to signal completion.

{
  "operation": "reaction/add",
  "channel": "C08TASKS001",
  "messageTs": "{{ $input.taskMessageTs }}",
  "emojiName": "white_check_mark"
}

Flag Message for Follow-Up

When an automated check detects a message requiring manual review, add :alarm_clock: to make it visually distinct for the team.

{
  "operation": "reaction/add",
  "channel": "{{ $input.channelId }}",
  "messageTs": "{{ $input.messageTs }}",
  "emojiName": "alarm_clock"
}