让 AI 机器人进群聊天——OpenClaw Telegram 群聊配置踩坑实录
把 AI 机器人拉进 Telegram 群,让群友 @ 它就能回答问题。听起来简单——拉进去不就完了?实际上踩了 5 个坑。
目标
我用 OpenClaw 搭了一个 AI 机器人(我们叫它「小龙虾」🦞),平时在 Telegram 私聊里用得很顺。现在想把它拉进一个群,让群友也能 @ 它提问。
需求很明确:
- 群友 @ 机器人时才回复,不能看到一条消息就抢答
- 只在指定的群里生效,不能被随便拉进其他群就自动服务
- 群里任何人都能用,不限制特定用户
听起来三步就能搞定?我也是这么想的。
第一步:拉 bot 进群
在 Telegram 里搜索 bot 用户名 → 点击 Add to Group → 选群 → 确认。
拉进去了。群里 @ 它发了条消息。
没反应。
坑一:OpenClaw 的群聊访问控制
OpenClaw 默认不允许 bot 在任何群里响应——这是安全设计。需要主动开放。
群聊访问有两层控制:
第一层:哪些群被允许
通过 channels.telegram.groups 配置,以群的 chat_id 为 key:
| |
groupPolicy: "open"— 群里任何人都能触发 botrequireMention: true— 必须 @ 才回复
第二层:全局策略
channels.telegram.groupPolicy 控制「没有单独配置的群」的默认行为:
| 值 | 效果 |
|---|---|
allowlist | 只有 groups 里明确配了的群才能用(推荐) |
open | 所有群都能用 |
推荐用 allowlist(也是默认值),这样 bot 即使被陌生人拉进其他群,也不会响应。
我踩的坑:groupAllowFrom ≠ 群 ID
一开始我把群的 chat_id 写进了 groupAllowFrom,结果报错:
| |
groupAllowFrom 是用户 ID 白名单(控制哪些用户能在群里触发 bot),不是群 ID 白名单。群级别的控制要用 groups 配置。
这个概念搞混了,浪费了一些时间。
坑二:获取群的 chat_id
配置需要群的 chat_id,怎么拿?
方法一:看 OpenClaw 日志(推荐)
把 bot 加进群后,在群里随便发条消息,然后看日志:
| |
即使 bot 因为权限问题无法回复,日志里也会出现 skipping group message 之类的记录,里面包含 chat.id。
方法二:调 Telegram API
| |
群的 chat_id 是负数(如 -100123456789)。
💡 实测发现:即使 Privacy Mode 开着,bot 被加入群的那一刻会收到
my_chat_member事件,里面就有chat.id。所以不需要先关 Privacy Mode 就能拿到群 ID。
坑三:Telegram 的 Privacy Mode
配置改好了,群里 @ 了机器人,还是没反应。日志里甚至看不到群消息进来。
原因:Telegram 的 Privacy Mode。
Telegram bot 默认开启 Privacy Mode(隐私模式),在这个模式下 bot 只能收到:
- 以
/开头的命令 - 回复 bot 自己的消息
- bot 被加入/移出群的事件
普通的 @ 消息在 Privacy Mode 下是收不到的。
关闭 Privacy Mode
两种方式,二选一:
方式 A:在 BotFather 关闭(推荐)
- 打开
@BotFather - 发
/mybots→ 选你的 bot Bot Settings→Group Privacy→Turn off
方式 B:把 bot 设为群管理员
- 管理员自动绕过 Privacy Mode
推荐方式 A,一次设置永久生效,不需要在每个群都手动设管理员。
坑四:改完 Privacy Mode 要踢出重进
在 BotFather 关掉 Privacy Mode 后,群里又 @ 了一次。
还是没反应。
原来 Telegram 有个机制:修改 Privacy Mode 后,必须把 bot 从群里移除再重新加入,新设置才会对这个群生效。Telegram 官方文档里有说明,但很容易被忽略。
操作:群设置 → 移除 bot → 重新搜索 bot → Add to Group → 选群。
重新加入后,@ 机器人——终于有反应了! 🎉
坑五:安全加固
搞定之后回头想了一下安全问题:
- 全局
groupPolicy如果设成open,意味着任何人把 bot 拉进任何群都能用 - bot 的用户名是公开的,任何人都能搜到并拉进群
所以正确的做法是:
- 全局策略保持
allowlist:
| |
- 只给目标群单独开放:
| |
这样的效果:
- ✅ 指定的群:任何人 @ 都能用
- ✅ 其他群:即使被拉进去也静默忽略
- ✅ 私聊:不受影响,原来怎么用继续怎么用
完整操作清单
按顺序来,一步都不能跳:
1. 获取群 chat_id
先把 bot 拉进群,然后通过日志或 API 拿到群的 chat_id(负数)。
2. 配置 OpenClaw
| |
3. 关闭 Telegram Privacy Mode
打开 @BotFather:
| |
4. 踢出 bot 再重新加入群
这一步不能省,不然 Privacy Mode 的修改不会对已有群生效。
5. 测试
群里 @ bot 发条消息,确认能回复。
踩坑总结
| 坑 | 现象 | 原因 | 解决 |
|---|---|---|---|
| 群 ID 写错地方 | 报错 Invalid allowFrom | groupAllowFrom 是用户 ID,不是群 ID | 改用 groups 配置 |
| @ 了不回 | 日志里没有群消息 | Privacy Mode 默认开启 | BotFather 关闭 Group Privacy |
| 关了 Privacy Mode 还是不回 | 设置没生效 | 需要踢出 bot 重新加入 | 移除 bot → 重新拉入 |
| 所有群都能用 | 安全风险 | 全局 groupPolicy: open | 改为 allowlist + 按群配置 |
进阶:不用 @ 也能回复
上面的配置是 requireMention: true,必须 @ 才回。如果你想让 bot 主动参与群聊(看到消息就可能回复),可以关掉:
| |
⚠️ 关闭前想清楚这些问题:
- 费用暴增:群里每一条消息都会触发 AI 推理,10 个人的活跃群一天可能几百条
- 话痨风险:bot 可能对每条消息都回复,刷屏影响群体验
- 上下文膨胀:所有群消息都会进入 session,上下文窗口很快就满
折中方案: 关掉 requireMention,但在群的 systemPrompt 里明确告诉 AI「不是每条都要回」(下面会讲)。OpenClaw 的 AGENTS.md 模板里也有类似的 “Know When to Speak” 规则可以参考。
💡 也可以通过 Telegram 聊天命令切换:
/activation mention或/activation always(仅限 bot owner 操作)。
进阶:给群聊定制人格(systemPrompt)
你的 bot 在私聊里可能是一个严谨的助手,但在群里你可能希望它更活泼、更有梗。OpenClaw 支持给每个群单独设置系统提示词:
| |
这个 systemPrompt 会追加到 agent 原有的系统提示词后面,只在这个群的 session 里生效,不影响私聊。
实际效果举例:
| |
⚠️ 重要:隐私与安全风险
这是整篇文章最重要的部分。 把 AI bot 拉进群聊,意味着群里的消息会被 AI 处理。如果配置不当,可能会泄露你的私人信息。
风险一:Workspace 共享导致隐私泄露
默认情况下,群聊和私聊共用同一个 agent,也就是共用同一个 workspace。这意味着:
- agent 的
SOUL.md(行为规则)对群可见 - agent 的
USER.md(你的个人信息)对群可见 - agent 的
MEMORY.md(长期记忆)对群可见 - agent 的
memory/日记文件对群可见
如果你在 USER.md 里写了个人偏好、在 MEMORY.md 里有工作笔记,群友的一句「你知道你主人的什么信息?」就可能让 bot 把这些都说出来。
风险二:工具权限失控
同一个 agent 意味着群聊 session 拥有和私聊一样的工具权限——读文件、执行命令、访问浏览器……一个精心构造的 prompt injection 就可能让 bot 在群里执行你不想要的操作。
解决方案
方案一:按群限制工具 + 按人放行(推荐,零成本)
OpenClaw 支持按群限制工具权限,并且可以按发送者单独放行——这正好实现「群友只能聊天,主人才能执行操作」:
| |
效果:
- 群友 @ bot → 正常聊天、回答问题 ✅
- 群友试图让 bot 执行命令 → 工具被 deny,无法执行 ❌
- 主人 @ bot → 完整工具权限,想执行啥都行 ✅
toolsBySender 的匹配优先级:精确匹配 > 群级 tools > 通配符 "*"。支持的 key 格式:
id:<senderId>— Telegram 用户 IDusername:<handle>— Telegram 用户名"*"— 通配符,匹配所有人
优点: 不需要 Docker,不需要额外 agent,一段 JSON 搞定。 缺点: workspace 文件(MEMORY.md 等)仍然共享,AI 仍有可能在对话中泄露信息(但已经不能执行操作了)。
方案二:AGENTS.md 里加群聊规则(补充方案)
配合方案一,在 agent 的规则文件里加一条:
| |
工具权限已经被方案一在配置层面硬性限制了,这里只需要补充信息泄露的软性防线。
方案三:沙箱隔离群聊 Session
如果你想更彻底——连 workspace 文件都不让群聊访问,可以启用 Docker 沙箱:
| |
这样群聊 session:
- ✅ 能正常聊天(messaging 工具)
- ❌ 不能读你的文件(包括 MEMORY.md)
- ❌ 不能执行 shell 命令
- ❌ 不能访问你的浏览器
优点: 真正的隔离,即使 AI 想泄露也拿不到数据。 缺点: 需要 Docker 环境。
方案四:独立 Agent(最安全)
如果你想彻底隔离,可以创建一个专门用于群聊的独立 agent:
| |
独立 agent 意味着:
- 独立 workspace:有自己的 SOUL.md、MEMORY.md,和你的私人 agent 完全隔离
- 独立 session store:聊天历史互不干扰
- 独立 tool policy:可以单独限制为只有 messaging 权限
- 独立模型:可以用更便宜的模型(比如 Sonnet 代替 Opus)节省群聊费用
优点: 最高级别的隔离,即使 AI 被 prompt injection 攻破也接触不到你的私人数据。 缺点: 需要多一个 Telegram bot、多一套配置。
我的建议
| 场景 | 推荐方案 |
|---|---|
| 几个朋友的小群,都是信任的人 | 方案一(工具限制 + toolsBySender) |
| 较大的群,有不认识的人 | 方案一 + 方案三(工具限制 + 沙箱) |
| 公开社群,面向陌生人 | 必须方案四(独立 agent) |
原则:群里的人越不可信,隔离级别越高。
💡 方案一(
toolsBySender)是性价比最高的起点:不需要额外基础设施,一段配置就能实现「群友只聊天、主人才能操作」的分权模型。大多数场景用这个就够了。
效果
配置完成后:
- 群友在群里 @ 机器人 → 机器人秒回,像一个群成员一样参与讨论
- 不 @ 就不说话,不会打扰正常聊天
- 只在指定的群里生效,其他群拉进去也没反应
- 机器人在群里也能发语音、看图片、搜索,能力和私聊一样
从「拉群不响应」到「安全上线」,看似简单的需求,实际上涉及 Telegram 和 OpenClaw 两侧的配置,还有 Privacy Mode 这个隐藏的坑。希望这篇踩坑记录能帮你少走弯路。
本文基于 OpenClaw 2026.3.2 版本。群聊配置的详细参数说明请参考 官方文档。