Tools
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"}emojiis required when adding a reaction.- Set
emojito an empty string ("") to remove the bot's reaction(s) on channels that support it. - Set
remove: trueto remove one specific emoji (requires non-emptyemoji). clearAll: trueis a Feishu/Lark-only flag that removes every reaction the bot placed on the message. It is paired with an emptyemoji.emoji-listis a separatemessagetool action, not areactparameter. It reports the emoji a channel will accept. What it returns and which per-channel action toggle enables it both vary by channel. See the channel pages under Channels.- On channels with status reactions,
trackToolCalls: trueon 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.
Channel behavior
Discord and Slack
- Empty
emojiremoves all of the bot's reactions on the message. remove: trueremoves just the specified emoji.
Nextcloud Talk
- Adding reactions only:
emojiis required and must be non-empty. - Reaction removal is not wired to a delete call yet.
remove: trueis rejected with an explicit error instead of silently no-oping. - Requires the Talk bot registered with the
reactionfeature (see Nextcloud Talk channel docs).
Telegram
- Use
emoji-listto find allowed standard reactions and numeric custom emoji identifiers. On Telegram,channels.telegram.actions.reactionsgates bothreactandemoji-list, andemoji-listreturns the reactions allowed in the current chat. - Empty
emojiremoves the bot's reactions. remove: truealso removes reactions but still requires a non-emptyemojifor tool validation.
- Empty
emojiremoves the bot reaction. remove: truemaps to empty emoji internally (still requiresemojiin the tool call).- WhatsApp has one bot reaction slot per message. Sending a new reaction replaces it rather than stacking multiple emoji.
Zalo Personal (zalouser)
- Requires non-empty
emojifor both add and remove. remove: trueremoves that specific emoji reaction.
Feishu/Lark
- Uses the same
reactaction as other channels (add/remove/list via message reaction IDs), not a separate tool. - Adding requires non-empty
emoji(mapped to a Feishuemoji_type, e.g.SMILE,THUMBSUP,HEART). remove: truerequires non-emptyemojiand removes the bot's own reaction matching that emoji type.- Empty
emojiwithclearAll: trueremoves all of the bot's reactions on the message.
Signal
channels.signal.reactionNotificationscontrols inbound reaction notifications."off"disables them."own"(default) emits events when users react to bot messages."all"emits events for all reactions."allowlist"emits events only for senders inchannels.signal.reactionAllowlist.
iMessage
- Outbound reactions are iMessage tapbacks (
love,like,dislike,laugh,emphasize, andquestion).emojimust map to one of these kinds to add a reaction. remove: truewithout 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.
- Telegram reaction level -
channels.telegram.reactionLevel(defaultminimal) - WhatsApp reaction level -
channels.whatsapp.reactionLevel(defaultminimal) - Signal reactions -
channels.signal.reactionLevel(defaultminimal)
Related
- Agent Send - the
messagetool that includesreact - Channels - channel-specific configuration
Was this useful?