Portal Community

reaction/remove

Remove an emoji reaction previously added by the bot from a specific Slack message. Used to clean up workflow status indicators once a process step completes or is resolved.

When to Use

Note: A bot can only remove reactions that it added. Attempting to remove a reaction added by a human user or a different bot will return a no_reaction error. Always track which reactions your bot added to avoid spurious errors.

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 from which to remove the reaction (e.g. 1748221200.000100).
emojiNameRequiredEmoji name to remove, without colons (e.g. eyes, alarm_clock, x). Must exactly match the name used when the reaction was added.

Sample Configuration

{
  "operation": "reaction/remove",
  "connection": {
    "botToken": "{{ $credentials.slackBot.token }}"
  },
  "channel": "{{ $input.channel }}",
  "messageTs": "{{ $input.messageTs }}",
  "emojiName": "eyes"
}

Validation Errors

Error CodeCauseResolution
no_reactionThe bot did not previously add this emoji reaction to the message, or it was already removed.Treat as non-fatal — log and continue. Use reaction/get before removing if you need strict verification.
message_not_foundNo message exists at the given timestamp in the specified channel.Verify the channel ID and message timestamp are correct and have not changed.
invalid_nameThe emoji name is not recognized.Confirm the exact emoji name used when the reaction was originally added.
missing_scopeBot token lacks the reactions:write scope.Add reactions:write to your Slack App's OAuth scopes and reinstall.
invalid_authToken is invalid or revoked.Regenerate the bot token and update the credential store.

Output

Success Port

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

Error Port

Activated when the reaction does not exist, the message is not found, or the token lacks permissions. The no_reaction error should typically be handled as non-fatal in cleanup workflows.

Sample Output

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

Expression Reference

ExpressionResult
{{ $output.removeReaction.channel }}Channel where the reaction was removed — for logging.
{{ $output.removeReaction.messageTs }}Message timestamp — pass to subsequent nodes if further actions are needed.
{{ $output.removeReaction.emojiName }}Confirmed emoji name that was removed.
{{ $output.removeReaction.status }}Status string for conditional branching.

Node Policies & GuardRails

Policy AreaRecommendation
Non-Fatal ErrorsThe no_reaction error should be treated as non-fatal in cleanup workflows. The desired end state (reaction absent) is already achieved — log it and continue.
Reaction OwnershipBots can only remove reactions they added. Track bot-added reactions in workflow state if you need deterministic cleanup across multiple workflow runs.
Pairing with reaction/addAlways pair reaction/remove with the corresponding reaction/add node earlier in the workflow. Orphaned reactions mislead users about the processing state of messages.
Rate LimitsSlack's reactions.remove is Tier 2 (20+ requests/min). In high-volume message processing workflows, throttle removal calls appropriately.
Emoji Name ConsistencyUse a constant or shared variable for emoji names rather than hardcoding the same string in both add and remove nodes. This prevents drift if the emoji name changes.

Examples

Remove Eyes After Processing Completes

At the end of a message processing workflow, remove the :eyes: acknowledgement reaction to signal the message has been fully handled.

{
  "operation": "reaction/remove",
  "channel": "{{ $input.channel }}",
  "messageTs": "{{ $input.messageTs }}",
  "emojiName": "eyes"
}

Clear Error Reaction After Resolution

Once an automated error has been resolved, remove the :x: reaction that was added during the error state so the channel shows a clean status.

{
  "operation": "reaction/remove",
  "channel": "C08INCIDENTS",
  "messageTs": "{{ $input.incidentMessageTs }}",
  "emojiName": "x"
}

Swap Reactions to Reflect State Transition

Remove :hourglass: and add :white_check_mark: when a task transitions from in-progress to complete.

// Step 1 — Remove in-progress indicator
{
  "operation": "reaction/remove",
  "channel": "{{ $input.channel }}",
  "messageTs": "{{ $input.ts }}",
  "emojiName": "hourglass"
}
// Step 2 — Add completion indicator
{
  "operation": "reaction/add",
  "channel": "{{ $input.channel }}",
  "messageTs": "{{ $input.ts }}",
  "emojiName": "white_check_mark"
}