Groups
crocbot treats group chats consistently for Telegram.Beginner intro (2 minutes)
crocbot “lives” on your own messaging accounts via the Telegram Bot API. If your bot is in a group, crocbot can see that group and respond there. Default behavior:- Groups are restricted (
groupPolicy: "allowlist"). - Replies require a mention unless you explicitly disable mention gating.
TL;DRQuick flow (what happens to a group message):
- DM access is controlled by
*.allowFrom.- Group access is controlled by
*.groupPolicy+ allowlists (*.groups,*.groupAllowFrom).- Reply triggering is controlled by mention gating (
requireMention,/activation).
| Goal | What to set |
|---|---|
| Allow all groups but only reply on @mentions | groups: { "*": { requireMention: true } } |
| Disable all group replies | groupPolicy: "disabled" |
| Only specific groups | groups: { "<group-id>": { ... } } (no "*" key) |
| Only you can trigger in groups | groupPolicy: "allowlist", groupAllowFrom: ["123456789"] |
Session keys
- Group sessions use
agent:<agentId>:telegram:group:<id>session keys. - 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.
Pattern: personal DMs + public groups (single agent)
Yes — this works well if your “personal” traffic is DMs and your “public” traffic is groups. Why: in single-agent mode, DMs typically land in the main session key (agent:main:main), while groups always use non-main session keys (agent:main:telegram:group:<id>). If you enable sandboxing with mode: "non-main", those group sessions run in Docker while your main DM session stays on-host.
This gives you one agent “brain” (shared workspace + memory), but two execution postures:
- DMs: full tools (host)
- Groups: sandbox + restricted tools (Docker)
If you need truly separate workspaces/personas (“personal” and “public” must never mix), use a second agent + bindings. See Multi-Agent Routing.Example (DMs on host, groups sandboxed + messaging-only tools):
workspaceAccess: "none" and mount only allowlisted paths into the sandbox:
- Configuration keys and defaults: Gateway configuration
- Debugging why a tool is blocked: Sandbox vs Tool Policy vs Elevated
- Bind mounts details: Sandboxing
Display labels
- UI labels use
displayNamewhen available, formatted as<channel>:<token>. #roomis reserved for rooms/channels; group chats useg-<slug>(lowercase, spaces ->-, keep#@+._-).
Group policy
Control how group/room messages are handled:| Policy | Behavior |
|---|---|
"open" | 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).- Telegram: use
groupAllowFromto restrict senders. - Telegram allowlist can match user IDs (
"123456789","telegram:123456789","tg:123456789") or usernames ("@alice"or"alice"); prefixes are case-insensitive. - Default is
groupPolicy: "allowlist"; if your group allowlist is empty, group messages are blocked.
groupPolicy(open/disabled/allowlist)- group allowlists (
*.groups,*.groupAllowFrom) - mention gating (
requireMention,/activation)
Mention gating (default)
Group messages require a mention unless overridden per group. Defaults live per subsystem under*.groups."*".
Replying to a bot message counts as an implicit mention (when the channel supports reply metadata).
mentionPatternsare case-insensitive regexes.- Surfaces that provide explicit mentions still pass; patterns are a fallback.
- Per-agent override:
agents.list[].groupChat.mentionPatterns(useful when multiple agents share a group). - Mention gating is only enforced when mention detection is possible (native mentions or
mentionPatternsare configured). - Group history context is wrapped uniformly and is pending-only (messages skipped due to mention gating); use
messages.groupChat.historyLimitfor the global default andchannels.telegram.historyLimit(orchannels.telegram.accounts.*.historyLimit) for overrides. Set0to disable.
Group/channel tool restrictions (optional)
Channel configs support restricting which tools are available inside a specific group/room/channel.tools: allow/deny tools for the whole group.toolsBySender: per-sender overrides within the group (keys are sender IDs/usernames). Use"*"as a wildcard.
- group/channel
toolsBySendermatch - group/channel
tools - default (
"*")toolsBySendermatch - default (
"*")tools
- Group/channel tool restrictions are applied in addition to global/agent tool policy (deny still wins).
Group allowlists
Whenchannels.telegram.groups is configured, the keys act as a group allowlist. Use "*" to allow all groups while still setting default mention behavior.
Common intents (copy/paste):
- Disable all group replies
- Allow only specific groups (Telegram)
- Allow all groups but require mention (explicit)
- Only the owner can trigger in groups (Telegram)
Activation (owner-only)
Group owners can toggle per-group activation:/activation mention/activation always
channels.telegram.allowFrom. Send the command as a standalone message.
Context fields
Group inbound payloads set:ChatType=groupGroupSubject(if known)GroupMembers(if known)WasMentioned(mention gating result)- Telegram forum topics also include
MessageThreadIdandIsForum.
\n sequences.
