群組
OpenClaw 在各表面一致對待群組聊天:WhatsApp、Telegram、Discord、Slack、Signal、iMessage、Microsoft Teams、Zalo。初學者介紹(2 分鐘)
OpenClaw「住」在你自己的通訊帳戶中。沒有單獨的 WhatsApp bot 使用者。 如果你在群組中,OpenClaw 可看到該群組並在那裡回覆。 預設行為:- 群組受限制(
groupPolicy: "allowlist")。 - 回覆需要提及,除非你明確停用提及閘門。
TL;DR快速流程(群組訊息發生什麼):
- DM 存取由
*.allowFrom控制。- 群組存取由
*.groupPolicy+ 允許清單(*.groups、*.groupAllowFrom)控制。- 回覆觸發由提及閘門(
requireMention、/activation)控制。
| 目標 | 設定什麼 |
|---|---|
| 允許所有群組但只在 @mentions 回覆 | groups: { "*": { requireMention: true } } |
| 停用所有群組回覆 | groupPolicy: "disabled" |
| 僅特定群組 | groups: { "<group-id>": { ... } }(無 "*" 鍵) |
| 僅你可在群組中觸發 | groupPolicy: "allowlist"、groupAllowFrom: ["+1555..."] |
工作階段鍵
- 群組工作階段使用
agent:<agentId>:<channel>:group:<id>工作階段鍵(房間/頻道使用agent:<agentId>:<channel>:channel:<id>)。 - Telegram forum topics 新增
:topic:<threadId>至群組 id,所以每個主題有自己的工作階段。 - 直接聊天使用主工作階段(或按寄件者若已配置)。
- 群組工作階段跳過心跳。
模式:個人 DM + 公開群組(單代理)
是的 — 這在你的「個人」流量是 DM 且「公開」流量是群組時運作良好。 為什麼:在單代理模式,DM 通常登陸在主工作階段鍵(agent:main:main),而群組總使用非主工作階段鍵(agent:main:<channel>:group:<id>)。如果啟用沙箱,設置 mode: "non-main",那些群組工作階段在 Docker 中運行,而主 DM 工作階段保留在主機上。
這給你一個代理「大腦」(共享工作區 + 記憶),但兩個執行姿態:
- DM:完整工具(主機)
- 群組:沙箱 + 受限工具(Docker)
如果你需要真正單獨的工作區/人格(「個人」和「公開」永遠不可混淆),使用第二個代理 + 綁定。見多代理路由。示例(DM 在主機上,群組沙箱 + 僅訊息工具):
workspaceAccess: "none" 並僅將允許清單路徑掛載到沙箱中:
- 配置鍵和預設值:Gateway 配置
- 調試工具為何被阻止:沙箱 vs 工具原則 vs 提升
- 綁定掛載詳情:沙箱化
顯示標籤
- UI 標籤在可用時使用
displayName,格式為<channel>:<token>。 #room為房間/頻道保留;群組聊天使用g-<slug>(小寫、空格 ->-、保持#@+._-)。
群組原則
控制如何處理每個頻道的群組/房間訊息:| 原則 | 行為 |
|---|---|
"open" | 群組略過允許清單;提及閘門仍適用。 |
"disabled" | 完全阻止所有群組訊息。 |
"allowlist" | 僅允許符合已配置允許清單的群組/房間。 |
groupPolicy獨立於提及閘門(需要 @mentions)。- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo:使用
groupAllowFrom(回退:明確allowFrom)。 - DM 配對核准(
*-allowFrom存儲條目)僅套用於 DM 存取;群組寄件者授權保持明確到群組允許清單。 - Discord:允許清單使用
channels.discord.guilds.<id>.channels。 - Slack:允許清單使用
channels.slack.channels。 - Matrix:允許清單使用
channels.matrix.groups(房間 ID、別名或名稱)。使用channels.matrix.groupAllowFrom限制寄件者;每房間users允許清單也支援。 - 群組 DM 單獨控制(
channels.discord.dm.*、channels.slack.dm.*)。 - Telegram 允許清單可符合使用者 ID(
"123456789"、"telegram:123456789"、"tg:123456789")或使用者名稱("@alice"或"alice");前綴不分大小寫。 - 預設是
groupPolicy: "allowlist";如果群組允許清單為空,群組訊息被阻止。 - 執行時安全:當提供者區塊完全缺失(
channels.<provider>不存在),群組原則回退到失敗關閉模式(通常allowlist)而非繼承channels.defaults.groupPolicy。
groupPolicy(open/disabled/allowlist)- 群組允許清單(
*.groups、*.groupAllowFrom、頻道特定允許清單) - 提及閘門(
requireMention、/activation)
提及閘門(預設)
群組訊息需要提及,除非按群組覆蓋。預設位於每子系統*.groups."*" 下。
回覆 bot 訊息計為隱含提及(當頻道支援回覆中繼資料時)。這套用於 Telegram、WhatsApp、Slack、Discord 和 Microsoft Teams。
mentionPatterns是不分大小寫的安全正則表達式模式;無效模式和不安全的嵌套重複形式被忽略。- 提供明確提及的表面仍通過;模式是回退。
- 按代理覆蓋:
agents.list[].groupChat.mentionPatterns(當多個代理共享群組時有用)。 - 提及閘門僅在提及偵測可能時執行(原生提及或
mentionPatterns已配置)。 - Discord 預設位在
channels.discord.guilds."*"(按公會/頻道可覆蓋)。 - 群組歷史上下文統一包裝在各頻道且是待決專用(提及閘門跳過的訊息);使用
messages.groupChat.historyLimit為全域預設,使用channels.<channel>.historyLimit(或channels.<channel>.accounts.*.historyLimit)進行覆蓋。設定0停用。
群組/頻道工具限制(選擇性)
某些頻道配置支援限制在特定群組/房間/頻道內可用的工具。tools:允許/拒絕整個群組的工具。toolsBySender:群組內的按寄件者覆蓋。 使用明確鍵前綴:id:<senderId>、e164:<phone>、username:<handle>、name:<displayName>和"*"萬用字元。 舊版未前綴鍵仍被接受並符合id:僅。
- 群組/頻道
toolsBySender符合 - 群組/頻道
tools - 預設 (
"*")toolsBySender符合 - 預設 (
"*")tools
- 群組/頻道工具限制除全域/代理工具原則外套用(拒絕仍勝利)。
- 某些頻道對房間/頻道使用不同嵌套(例如 Discord
guilds.*.channels.*、Slackchannels.*、Microsoft Teamsteams.*.channels.*)。
群組允許清單
當channels.whatsapp.groups、channels.telegram.groups 或 channels.imessage.groups 已配置時,鍵充當群組允許清單。使用 "*" 允許所有群組,同時仍設定預設提及行為。
常見意圖(複製/貼上):
- 停用所有群組回覆
- 允許特定群組(WhatsApp)
- 允許所有群組但需要提及(明確)
- 僅擁有者可在群組中觸發(WhatsApp)
啟用(擁有者專用)
群組擁有者可按群組切換啟用:/activation mention/activation always
channels.whatsapp.allowFrom 決定(或 bot 自身 E.164 未設定時)。以獨立訊息傳送命令。其他表面目前忽略 /activation。
上下文欄位
群組傳入酬載設定:ChatType=groupGroupSubject(若已知)GroupMembers(若已知)WasMentioned(提及閘門結果)- Telegram forum topics 也包括
MessageThreadId和IsForum。
\n 序列。
iMessage 具體情況
- 路由或允許清單時偏好
chat_id:<id>。 - 列出聊天:
imsg chats --limit 20。 - 群組回覆總回到相同
chat_id。