OpenClaw reactions
One react action, how each channel adds, replaces and removes emoji, the status-reaction handoff, and the reaction level
A thumbs-up on the right message is often the whole reply. OpenClaw lets the agent add and remove emoji reactions through the message tool’s react action, and because every platform models reactions differently, the docs spell out the behaviour channel by channel. Here are the parameters, what an empty emoji means, the separate emoji-list action, the handoff to the status-reaction lifecycle, the per-channel rules, and the reaction level that throttles how often the agent reacts on its own.
The action
- A react call names the message id and an emoji; the emoji is required when adding a reaction.
- An empty emoji removes the bot’s reactions on channels that support it, a remove flag removes one specific emoji and requires a non-empty emoji, and a clear-all flag, Feishu and Lark only, removes every reaction the bot placed, paired with an empty emoji.
- Emoji-list is a separate message-tool action, not a react parameter: it reports which emoji a channel will accept, and both what it returns and which per-channel toggle enables it vary by channel.
- On channels with status reactions, a track-tool-calls flag on a reaction lets the runtime reuse that reacted message for the same turn’s status lifecycle; Discord keeps the chosen reaction stable during work and signals actual failures rather than cycling through tool-specific emoji.
The agent adds and removes emoji reactions with the message tool’s react action. Behavior varies by channel.
Channel by channel
On Discord and Slack an empty emoji removes all of the bot’s reactions on the message and the remove flag removes just the specified one. On Telegram the emoji-list action finds the allowed standard reactions and numeric custom emoji identifiers for the current chat, one channel setting gates both actions, an empty emoji removes the bot’s reactions, and the remove flag also removes them but still needs a non-empty emoji for validation. On WhatsApp there is one bot reaction slot per message, so a new reaction replaces the previous one rather than stacking, an empty emoji removes it, and the remove flag maps to an empty emoji internally. Zalo Personal requires a non-empty emoji for both add and remove. Feishu and Lark use the same action with emoji mapped to an emoji type such as smile, thumbs-up or heart, remove requires the matching type, and empty plus clear-all wipes the bot’s reactions. iMessage outbound reactions are tapbacks, love, like, dislike, laugh, emphasize and question, so the emoji must map to one of them, and remove without a recognised kind clears all tapbacks. Nextcloud Talk is add-only for now: removal is not wired to a delete call yet and the remove flag is rejected with an explicit error rather than silently doing nothing, and the Talk bot must be registered with the reaction feature.
Inbound and throttling
- Signal has a separate inbound side: a reaction-notifications setting can be off, own, the default, which emits events when users react to bot messages, all, or an allowlist of senders.
- A per-channel reaction level throttles how often the agent sends its own reactions, with off, ack, minimal and extensive values; Telegram, WhatsApp and Signal default to minimal.
- Retries treat a reaction like any other single request, so a failed reaction is retried on its own without replaying the message it followed.
OpenClaw streaming and chunking covers the outbound path reactions ride beside, and OpenClaw on Feishu and Lark the channel with the clear-all flag.
Two edge cases
The two channels that trip people are the ones where removal is not symmetrical with adding. OpenClaw on Nextcloud Talk explains the add-only bot feature, and OpenClaw on Signal the notification setting that decides which inbound reactions become events at all.
On Diali
On Diali reactions exist on the chat channels the assistant connects: WhatsApp with its single slot, Telegram with the per-chat allowed list, Discord and Slack with remove-all behaviour; SMS and voice have no reactions, and the reaction level starts at minimal. Hosted OpenClaw on Diali is the assistant.
- One action, an emoji, and an empty emoji to remove.
- WhatsApp replaces; Discord and Slack stack; iMessage tapbacks.
- Reaction level minimal by default.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
