Files
openclaw/docs/tools/reactions.md
nitinjwadhawan 9995e1b4d5 fix(nextcloud-talk): dispatch react action so agents can send reactions (#70110) (#72348)
Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed842.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed842
Review: https://github.com/openclaw/openclaw/pull/72348#issuecomment-4323046928

Co-authored-by: NW <nitinwadhawan66@gmail.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
2026-05-18 18:54:44 +00:00

3.8 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 can add and remove emoji reactions on messages using the message tool with the react action. Reaction behavior varies by channel and transport.

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).
  • Set remove: true to remove a specific emoji (requires non-empty emoji).
  • On channels that support status reactions, trackToolCalls: true on a reaction lets the runtime use 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. - Empty `emoji` removes the app'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 supported yet; calls with `remove: true` (or empty `emoji`) are rejected with a clear error rather than silently no-oping. - Requires the Talk bot to be 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; status reaction updates replace that slot rather than stacking multiple emoji. - Requires non-empty `emoji`. - `remove: true` removes that specific emoji reaction. - Use the `feishu_reaction` tool with actions `add`, `remove`, and `list`. - Add/remove requires `emoji_type`; remove also requires `reaction_id`. - Inbound reaction notifications are controlled by `channels.signal.reactionNotifications`: `"off"` disables them, `"own"` (default) emits events when users react to bot messages, and `"all"` emits events for all reactions. - Outbound reactions are iMessage tapbacks (`love`, `like`, `dislike`, `laugh`, `emphasize`, and `question`). - Inbound tapback notifications are controlled by `channels.imessage.reactionNotifications`: `"off"` disables them, `"own"` (default) emits events when users react to bot-authored messages, and `"all"` emits events for all tapbacks from authorized senders.

Reaction level

Per-channel reactionLevel config controls how broadly the agent uses reactions. Values are typically off, ack, minimal, or extensive.

Set reactionLevel on individual channels to tune how actively the agent reacts to messages on each platform.

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