Files
openclaw/docs/tools/reactions.md
Josh Avant fbd330b7aa fix(channels): honor configured read target policies (#99905)
* fix(channels): enforce configured read targets

* test(channels): align policy checks with boundaries

* fix: bind channel reads to trusted turn context

* test: satisfy gateway lint

* fix: narrow message action channel imports

* fix(feishu): authorize message reads before provider access

* fix(slack): await reaction clear authorization

* fix(channels): align provider action contracts

* fix(matrix): read direct-room account data before sync

* fix(channels): reject unsupported attachment actions early

* fix: restore trusted operator conversation reads

* fix(matrix): authorize pin actions before provider reads

* fix: preserve trusted channel read workflows

* fix(discord): resolve current channel ids consistently

* fix(agents): preserve message action turn capability

* fix(plugins): enforce host-owned read provenance

* fix(channels): harden Teams and Discord read policy

* fix(channels): preserve exact-current action compatibility

* fix(imessage): authorize trusted current chat aliases

* fix(channels): preserve normalized current aliases

* fix(channels): preserve external current target aliases

* fix: reconcile channel policy with current main

* fix(discord): isolate DM read policy

* fix(channels): enforce provider read gates

* fix(gateway): await serialized message action identity tokens

* fix(ci): refresh channel protocol contracts
2026-07-10 22:29:37 -05:00

3.9 KiB

summary, read_when, title
summary read_when title
Reaction tool semantics across all supported channels
Working on reactions in any channel
Understanding how emoji reactions differ across platforms
Reactions

The agent adds and removes emoji reactions with the message tool's react action. Behavior varies by channel.

How it works

{
  "action": "react",
  "messageId": "msg-123",
  "emoji": "thumbsup"
}
  • emoji is required when adding a reaction.
  • Set emoji to an empty string ("") to remove the bot's reaction(s) on channels that support it.
  • Set remove: true to remove one specific emoji (requires non-empty emoji).
  • On channels with status reactions, trackToolCalls: true on a reaction lets the runtime reuse that reacted message for subsequent tool-progress reactions during the same turn.

Channel behavior

- Empty `emoji` removes all of the bot's reactions on the message. - `remove: true` removes just the specified emoji. - Adding reactions only: `emoji` is required and must be non-empty. - Reaction removal is not wired to a delete call yet; `remove: true` is rejected with an explicit error instead of silently no-oping. - Requires the Talk bot registered with the `reaction` feature (see [Nextcloud Talk channel docs](/channels/nextcloud-talk)). - Empty `emoji` removes the bot's reactions. - `remove: true` also removes reactions but still requires a non-empty `emoji` for tool validation. - Empty `emoji` removes the bot reaction. - `remove: true` maps to empty emoji internally (still requires `emoji` in the tool call). - WhatsApp has one bot reaction slot per message; sending a new reaction replaces it rather than stacking multiple emoji. - Requires non-empty `emoji` for both add and remove. - `remove: true` removes that specific emoji reaction. - Uses the same `react` action as other channels (add/remove/list via message reaction IDs), not a separate tool. - Adding requires non-empty `emoji` (mapped to a Feishu `emoji_type`, e.g. `SMILE`, `THUMBSUP`, `HEART`). - `remove: true` requires non-empty `emoji` and removes the bot's own reaction matching that emoji type. - Empty `emoji` with `clearAll: true` removes all of the bot's reactions on the message. - Inbound reaction notifications are controlled by `channels.signal.reactionNotifications`: `"off"` disables them, `"own"` (default) emits events when users react to bot messages, `"all"` emits events for all reactions, and `"allowlist"` emits events only for senders in `channels.signal.reactionAllowlist`. - Outbound reactions are iMessage tapbacks (`love`, `like`, `dislike`, `laugh`, `emphasize`, and `question`); `emoji` must map to one of these kinds to add a reaction. - `remove: true` without a recognized tapback kind removes all tapback kinds; with a recognized kind it removes just that one.

Reaction level

Per-channel reactionLevel throttles how often the agent sends its own reactions. Values: off, ack, minimal, or extensive.

  • Agent Send - the message tool that includes react
  • Channels - channel-specific configuration