跳转至

表情回应

代理使用 message 工具的 react 操作添加和移除 emoji 反应。行为因渠道而异。

工作原理

{
  "action": "react",
  "messageId": "msg-123",
  "emoji": "thumbsup"
}
  • 添加反应时,emoji 为必填项。
  • 将 emoji 设置为空字符串("")可移除机器人在支持此功能的渠道上的反应。
  • 设置 remove: true 可移除某个特定的 emoji(需要非空的 emoji)。
  • clearAll: true 是飞书/Lark 专用的标志,用于移除机器人在消息上放置的所有反应。它与空的 emoji 搭配使用。
  • emoji-list 是 message 工具中独立的一个操作,而非 react 参数。它报告渠道会接受的 emoji。其返回值以及启用它的按渠道操作开关均因渠道而异。请参阅渠道下的各渠道页面。
  • 在支持状态反应的渠道上,对反应设置 trackToolCalls: true 可让运行时在同一次对话的状态生命周期中复用该已被反应的消息。Discord 会在工作期间保持所选反应稳定,并在实际失败时发出信号,而不是循环切换工具专属 emoji。

渠道行为

Discord 和 Slack
  • 空的 emoji 会移除机器人在该消息上的所有反应。
  • remove: true 仅移除指定的 emoji。
Nextcloud Talk
  • 仅支持添加反应:emoji 为必填项且不能为空。
  • 反应移除尚未接入删除调用。remove: true 会被显式错误拒绝,而不是静默无操作。
  • 要求 Talk 机器人已注册 reaction 功能(参见 Nextcloud Talk 渠道文档)。
Telegram
  • 使用 emoji-list 可查找允许的标准反应和数字自定义 emoji 标识符。在 Telegram 上,channels.telegram.actions.reactions 同时控制 react 和 emoji-list,并且 emoji-list 会返回当前聊天中允许的反应。
  • 空的 emoji 会移除机器人的反应。
  • remove: true 同样会移除反应,但仍需要非空的 emoji 才能通过工具校验。
WhatsApp
  • 空的 emoji 会移除机器人的反应。
  • remove: true 在内部映射为空 emoji(工具调用中仍需要 emoji)。
  • WhatsApp 每条消息只有一个机器人反应位。发送新反应会替换掉旧反应,而不是堆叠多个 emoji。
Zalo Personal (zalouser)
  • 添加和移除都需要非空的 emoji。
  • remove: true 会移除该特定的 emoji 反应。
飞书/Lark
  • 与其他渠道一样使用 react 操作(通过消息反应 ID 添加/移除/列出),而非单独的工具。
  • 添加时需要非空的 emoji(映射到飞书 emoji_type,例如 SMILE、THUMBSUP、HEART)。
  • remove: true 需要非空的 emoji,并移除机器人自身匹配该 emoji 类型的反应。
  • 使用 clearAll: true 且 emoji 为空时,会移除机器人在消息上的所有反应。
Signal
  • channels.signal.reactionNotifications 控制入站反应通知。"off" 禁用它们。"own"(默认)在用户对机器人消息做出反应时发出事件。"all" 为所有反应发出事件。"allowlist" 仅为 channels.signal.reactionAllowlist 中的发送者发出事件。
iMessage
  • 对外反应是 iMessage 点按回应(love、like、dislike、laugh、emphasize 和 question)。emoji 必须映射为其中一种类型才能添加反应。
  • remove: true 若未指定可识别的点按回应类型,则会移除所有点按回应类型。若指定了可识别类型,则仅移除该类型。

反应级别

各渠道的 reactionLevel 会限制代理发送自身反应的频率。可选值:off、ack、minimal 或 extensive。

  • Agent Send - 包含 react 操作的 message 工具
  • 渠道 - 渠道特定配置

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw