首页 资讯 下载 教程 Skills 社群

OpenClaw 消息队列与批量合并配置

问题场景

用户在聊天中经常会连续发多条消息:

用户:帮我查一下
用户:上海明天的天气
用户:还有后天的

如果不做合并处理,OpenClaw 会对每条消息分别调用模型,造成不必要的 token 消耗和重复回复。

消息队列配置

openclaw.json 中通过 routing.queue 配置消息合并策略:

{
  routing: {
    queue: {
      mode: "collect",       // 队列模式
      debounceMs: 1000,      // 等待窗口(毫秒)
      cap: 20,               // 单次最大合并条数
      drop: "summarize",     // 超出上限的处理方式
      byChannel: {
        whatsapp: "collect",
        discord: "collect",
        slack: "collect",
        webchat: "collect",
      }
    }
  }
}

参数说明

  • mode:队列模式

    • collect:收集同一发送者的连续纯文本消息,合并为一条发给模型(推荐)
    • steer:将消息分流到不同的 agent
    • interrupt:新消息打断正在进行的回复
  • debounceMs:等待窗口时间。收到一条消息后等待该时间,如果期间有新消息则继续等待,直到超时后统一发给模型。默认 1000(1 秒)。

  • cap:单次合并的最大消息条数。默认 20

  • drop:超过 cap 后的处理方式。summarize 表示对溢出消息做摘要。

  • byChannel:可以对每个频道单独设置队列模式。

注意:媒体附件(图片、语音、文件)会立即刷新队列,不参与合并等待。

确认回执

配置 ackReaction 可以让 OpenClaw 在收到消息时立即回一个表情,告知用户"消息已收到,正在处理":

{
  messages: {
    ackReaction: "👀",
    ackReactionScope: "group-mentions"  // 仅在群聊被 @mention 时显示
  }
}

回复前缀

给 AI 的每条回复加上标识前缀:

{
  messages: {
    responsePrefix: ">"
  }
}

按频道微调

不同频道的使用习惯不同,可以分别配置:

{
  routing: {
    queue: {
      mode: "collect",
      debounceMs: 1000,
      byChannel: {
        whatsapp: "collect",   // 微信/WhatsApp 用户习惯连续发短消息
        slack: "collect",      // Slack 也常见连续消息
        webchat: "interrupt",  // 网页聊天更适合打断模式
      }
    }
  }
}