The agent can add and remove emoji reactions on messages using the message tool with the react action. Reaction 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).
  • Set remove: true to remove a specific emoji (requires non-empty emoji).

Channel behavior

Discord and Slack

- Empty `emoji` removes all of the bot's reactions on the message.
- `remove: true` removes just the specified emoji.

Google Chat

- Empty `emoji` removes the app's reactions on the message.
- `remove: true` removes just the specified emoji.

Telegram

- Empty `emoji` removes the bot's reactions.
- `remove: true` also removes reactions but still requires a non-empty `emoji` for tool validation.

WhatsApp

- Empty `emoji` removes the bot reaction.
- `remove: true` maps to empty emoji internally (still requires `emoji` in the tool call).

Zalo Personal (zalouser)

- Requires non-empty `emoji`.
- `remove: true` removes that specific emoji reaction.

Feishu/Lark

- Use the `feishu_reaction` tool with actions `add`, `remove`, and `list`.
- Add/remove requires `emoji_type`; remove also requires `reaction_id`.

Signal

- 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.

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.

Related

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