2026-01-02 01:19:22 +01:00
|
|
|
|
---
|
|
|
|
|
|
summary: "Group chat behavior across surfaces (WhatsApp/Telegram/Discord/iMessage)"
|
|
|
|
|
|
read_when:
|
|
|
|
|
|
- Changing group chat behavior or mention gating
|
|
|
|
|
|
---
|
|
|
|
|
|
# Groups
|
|
|
|
|
|
|
2026-01-04 14:32:47 +00:00
|
|
|
|
Clawdbot treats group chats consistently across surfaces: WhatsApp, Telegram, Discord, iMessage.
|
2026-01-02 01:19:22 +01:00
|
|
|
|
|
|
|
|
|
|
## Session keys
|
2026-01-02 10:14:58 +01:00
|
|
|
|
- Group sessions use `surface:group:<id>` session keys (rooms/channels use `surface:channel:<id>`).
|
2026-01-02 01:19:22 +01:00
|
|
|
|
- Direct chats use the main session (or per-sender if configured).
|
|
|
|
|
|
- Heartbeats are skipped for group sessions.
|
|
|
|
|
|
|
2026-01-02 10:14:58 +01:00
|
|
|
|
## Display labels
|
|
|
|
|
|
- UI labels use `displayName` when available, formatted as `surface:<token>`.
|
|
|
|
|
|
- `#room` is reserved for rooms/channels; group chats use `g-<slug>` (lowercase, spaces -> `-`, keep `#@+._-`).
|
|
|
|
|
|
|
2026-01-02 01:19:22 +01:00
|
|
|
|
## Mention gating (default)
|
2026-01-02 22:23:00 +01:00
|
|
|
|
Group messages require a mention unless overridden per group. Defaults live per subsystem under `*.groups."*"`.
|
2026-01-02 01:19:22 +01:00
|
|
|
|
|
|
|
|
|
|
```json5
|
|
|
|
|
|
{
|
2026-01-02 22:23:00 +01:00
|
|
|
|
whatsapp: {
|
|
|
|
|
|
groups: {
|
|
|
|
|
|
"*": { requireMention: true },
|
|
|
|
|
|
"123@g.us": { requireMention: false }
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
telegram: {
|
|
|
|
|
|
groups: {
|
|
|
|
|
|
"*": { requireMention: true },
|
|
|
|
|
|
"123456789": { requireMention: false }
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
imessage: {
|
|
|
|
|
|
groups: {
|
|
|
|
|
|
"*": { requireMention: true },
|
|
|
|
|
|
"123": { requireMention: false }
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2026-01-02 01:19:22 +01:00
|
|
|
|
routing: {
|
|
|
|
|
|
groupChat: {
|
|
|
|
|
|
mentionPatterns: ["@clawd", "clawdbot", "\\+15555550123"],
|
|
|
|
|
|
historyLimit: 50
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Notes:
|
|
|
|
|
|
- `mentionPatterns` are case-insensitive regexes.
|
|
|
|
|
|
- Surfaces that provide explicit mentions still pass; patterns are a fallback.
|
2026-01-02 22:33:26 +01:00
|
|
|
|
- Discord defaults live in `discord.guilds."*"` (overridable per guild/channel).
|
2026-01-02 01:19:22 +01:00
|
|
|
|
|
|
|
|
|
|
## Activation (owner-only)
|
|
|
|
|
|
Group owners can toggle per-group activation:
|
|
|
|
|
|
- `/activation mention`
|
|
|
|
|
|
- `/activation always`
|
|
|
|
|
|
|
2026-01-02 12:59:47 +01:00
|
|
|
|
Owner is determined by `whatsapp.allowFrom` (or the bot’s self E.164 when unset). Other surfaces currently ignore `/activation`.
|
2026-01-02 01:19:22 +01:00
|
|
|
|
|
|
|
|
|
|
## Context fields
|
|
|
|
|
|
Group inbound payloads set:
|
|
|
|
|
|
- `ChatType=group`
|
|
|
|
|
|
- `GroupSubject` (if known)
|
|
|
|
|
|
- `GroupMembers` (if known)
|
|
|
|
|
|
- `WasMentioned` (mention gating result)
|
|
|
|
|
|
|
|
|
|
|
|
The agent system prompt includes a group intro on the first turn of a new group session.
|
|
|
|
|
|
|
|
|
|
|
|
## iMessage specifics
|
|
|
|
|
|
- Prefer `chat_id:<id>` when routing or allowlisting.
|
|
|
|
|
|
- List chats: `imsg chats --limit 20`.
|
|
|
|
|
|
- Group replies always go back to the same `chat_id`.
|
|
|
|
|
|
|
|
|
|
|
|
## WhatsApp specifics
|
|
|
|
|
|
See `docs/group-messages.md` for WhatsApp-only behavior (history injection, mention handling details).
|