Groups
Clawdbot treats group chats consistently across surfaces: WhatsApp, Telegram, Discord, Slack, Signal, iMessage.Session keys
- Group sessions use
agent:<agentId>:<provider>:group:<id>session keys (rooms/channels useagent:<agentId>:<provider>:channel:<id>). - Telegram forum topics add
:topic:<threadId>to the group id so each topic has its own session. - Direct chats use the main session (or per-sender if configured).
- Heartbeats are skipped for group sessions.
Display labels
- UI labels use
displayNamewhen available, formatted as<provider>:<token>. #roomis reserved for rooms/channels; group chats useg-<slug>(lowercase, spaces ->-, keep#@+._-).
Group policy
Control how group/room messages are handled per provider:| Policy | Behavior |
|---|---|
"open" | Default. Groups bypass allowlists; mention-gating still applies. |
"disabled" | Block all group messages entirely. |
"allowlist" | Only allow groups/rooms that match the configured allowlist. |
groupPolicyis separate from mention-gating (which requires @mentions).- WhatsApp/Telegram/Signal/iMessage: use
groupAllowFrom(fallback: explicitallowFrom). - Discord: allowlist uses
discord.guilds.<id>.channels. - Slack: allowlist uses
slack.channels. - Group DMs are controlled separately (
discord.dm.*,slack.dm.*). - Telegram allowlist can match user IDs (
"123456789","telegram:123456789","tg:123456789") or usernames ("@alice"or"alice"); prefixes are case-insensitive.
Mention gating (default)
Group messages require a mention unless overridden per group. Defaults live per subsystem under*.groups."*".
mentionPatternsare case-insensitive regexes.- Surfaces that provide explicit mentions still pass; patterns are a fallback.
- Per-agent override:
routing.agents.<agentId>.mentionPatterns(useful when multiple agents share a group). - Mention gating is only enforced when mention detection is possible (native mentions or
mentionPatternsare configured). - Discord defaults live in
discord.guilds."*"(overridable per guild/channel).
Group allowlists
Whenwhatsapp.groups, telegram.groups, or imessage.groups is configured, the keys act as a group allowlist. Use "*" to allow all groups while still setting default mention behavior.
Activation (owner-only)
Group owners can toggle per-group activation:/activation mention/activation always
whatsapp.allowFrom (or the bot’s self E.164 when unset). Send the command as a standalone message. Other surfaces currently ignore /activation.
Context fields
Group inbound payloads set:ChatType=groupGroupSubject(if known)GroupMembers(if known)WasMentioned(mention gating result)- Telegram forum topics also include
MessageThreadIdandIsForum.
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
Seedocs/group-messages.md for WhatsApp-only behavior (history injection, mention handling details).