Grupos
OpenClaw trata los chats grupales de forma coherente en todas las superficies: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.Introducción para principiantes (2 minutos)
OpenClaw “vive” en tus propias cuentas de mensajería. No hay un usuario bot de WhatsApp independiente. Si tú estás en un grupo, OpenClaw puede ver ese grupo y responder allí. Comportamiento predeterminado:- Los grupos están restringidos (
groupPolicy: "allowlist"). - Las respuestas requieren una mención, a menos que desactives explícitamente la restricción por mención.
TL;DRFlujo rápido (qué ocurre con un mensaje de grupo):
- El acceso por DM se controla con
*.allowFrom.- El acceso a grupos se controla con
*.groupPolicy+ listas de permitidos (*.groups,*.groupAllowFrom).- La activación de respuestas se controla con la restricción por mención (
requireMention,/activation).
Visibilidad del contexto y listas de permitidos
Hay dos controles distintos implicados en la seguridad de los grupos:- Autorización de activación: quién puede activar al agente (
groupPolicy,groups,groupAllowFrom, listas de permitidos específicas del canal). - Visibilidad del contexto: qué contexto complementario se inyecta en el modelo (texto de respuesta, citas, historial del hilo, metadatos reenviados).
- Algunos canales ya aplican filtrado basado en el remitente para el contexto complementario en rutas específicas (por ejemplo, inicialización de hilos en Slack, búsquedas de respuestas/hilos en Matrix).
- Otros canales siguen pasando el contexto de cita/respuesta/reenvío tal como se recibe.
contextVisibility: "all"(predeterminado) mantiene el comportamiento actual tal como se recibe.contextVisibility: "allowlist"filtra el contexto complementario a remitentes incluidos en la lista de permitidos.contextVisibility: "allowlist_quote"esallowlistmás una excepción explícita para una cita/respuesta.
| Objetivo | Qué configurar |
|---|---|
| Permitir todos los grupos pero responder solo a @mentions | groups: { "*": { requireMention: true } } |
| Desactivar todas las respuestas en grupos | groupPolicy: "disabled" |
| Solo grupos específicos | groups: { "<group-id>": { ... } } (sin clave "*") |
| Solo tú puedes activar en grupos | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
Claves de sesión
- Las sesiones de grupo usan claves de sesión
agent:<agentId>:<channel>:group:<id>(las salas/canales usanagent:<agentId>:<channel>:channel:<id>). - Los temas de foros de Telegram añaden
:topic:<threadId>al id del grupo para que cada tema tenga su propia sesión. - Los chats directos usan la sesión principal (o por remitente, si está configurado).
- Los heartbeats se omiten para las sesiones de grupo.
Patrón: DMs personales + grupos públicos (agente único)
Sí: esto funciona bien si tu tráfico “personal” son DMs y tu tráfico “público” son grupos. Por qué: en modo de agente único, los DMs normalmente llegan a la clave de sesión principal (agent:main:main), mientras que los grupos siempre usan claves de sesión no principales (agent:main:<channel>:group:<id>). Si habilitas el sandbox con mode: "non-main", esas sesiones de grupo se ejecutan en Docker mientras tu sesión principal de DM permanece en el host.
Esto te da un “cerebro” de agente (espacio de trabajo + memoria compartidos), pero dos posturas de ejecución:
- DMs: herramientas completas (host)
- Grupos: sandbox + herramientas restringidas (Docker)
Si necesitas espacios de trabajo/personas realmente separados (“personal” y “público” nunca deben mezclarse), usa un segundo agente + bindings. Consulta Enrutamiento multiagente.Ejemplo (DMs en host, grupos en sandbox + herramientas solo de mensajería):
workspaceAccess: "none" y monta solo rutas incluidas en la lista de permitidos dentro del sandbox:
- Claves de configuración y valores predeterminados: Configuración del Gateway
- Depurar por qué una herramienta está bloqueada: Sandbox vs política de herramientas vs Elevated
- Detalles de bind mounts: Sandboxing
Etiquetas de visualización
- Las etiquetas de la UI usan
displayNamecuando está disponible, con formato<channel>:<token>. #roomestá reservado para salas/canales; los chats grupales usang-<slug>(minúsculas, espacios ->-, conservar#@+._-).
Política de grupos
Controla cómo se manejan los mensajes de grupo/sala por canal:| Política | Comportamiento |
|---|---|
"open" | Los grupos omiten las listas de permitidos; la restricción por mención sigue aplicándose. |
"disabled" | Bloquea por completo todos los mensajes de grupo. |
"allowlist" | Solo permite grupos/salas que coincidan con la lista de permitidos configurada. |
groupPolicyes independiente de la restricción por mención (que requiere @mentions).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: usa
groupAllowFrom(alternativa:allowFromexplícito). - Las aprobaciones de emparejamiento por DM (entradas almacenadas en
*-allowFrom) se aplican solo al acceso por DM; la autorización de remitentes en grupos sigue siendo explícita mediante listas de permitidos de grupo. - Discord: la lista de permitidos usa
channels.discord.guilds.<id>.channels. - Slack: la lista de permitidos usa
channels.slack.channels. - Matrix: la lista de permitidos usa
channels.matrix.groups. Prefiere IDs o alias de sala; la búsqueda por nombre de sala unida es best-effort, y los nombres no resueltos se ignoran en tiempo de ejecución. Usachannels.matrix.groupAllowFrompara restringir remitentes; también se admiten listas de permitidosuserspor sala. - Los DMs de grupo se controlan por separado (
channels.discord.dm.*,channels.slack.dm.*). - La lista de permitidos de Telegram puede coincidir con IDs de usuario (
"123456789","telegram:123456789","tg:123456789") o nombres de usuario ("@alice"o"alice"); los prefijos no distinguen mayúsculas de minúsculas. - El valor predeterminado es
groupPolicy: "allowlist"; si tu lista de permitidos de grupo está vacía, los mensajes de grupo se bloquean. - Seguridad en tiempo de ejecución: cuando falta por completo un bloque de proveedor (
channels.<provider>ausente), la política de grupos vuelve a un modo fail-closed (normalmenteallowlist) en lugar de heredarchannels.defaults.groupPolicy.
groupPolicy(open/disabled/allowlist)- listas de permitidos de grupo (
*.groups,*.groupAllowFrom, lista de permitidos específica del canal) - restricción por mención (
requireMention,/activation)
Restricción por mención (predeterminada)
Los mensajes de grupo requieren una mención, salvo que se sobrescriba por grupo. Los valores predeterminados viven por subsistema en*.groups."*".
Responder a un mensaje del bot cuenta como una mención implícita cuando el canal
admite metadatos de respuesta. Citar un mensaje del bot también puede contar como una mención implícita en canales que exponen metadatos de cita. Los casos integrados actuales incluyen
Telegram, WhatsApp, Slack, Discord, Microsoft Teams y ZaloUser.
mentionPatternsson patrones regex seguros e insensibles a mayúsculas/minúsculas; los patrones no válidos y las formas inseguras de repetición anidada se ignoran.- Las superficies que proporcionan menciones explícitas siguen funcionando; los patrones son una alternativa.
- Sobrescritura por agente:
agents.list[].groupChat.mentionPatterns(útil cuando varios agentes comparten un grupo). - La restricción por mención solo se aplica cuando la detección de mención es posible (menciones nativas o
mentionPatternsconfigurados). - Los valores predeterminados de Discord viven en
channels.discord.guilds."*"(sobrescribibles por guild/canal). - El contexto del historial de grupo se envuelve de manera uniforme entre canales y es solo pendiente (mensajes omitidos debido a la restricción por mención); usa
messages.groupChat.historyLimitpara el valor predeterminado global ychannels.<channel>.historyLimit(ochannels.<channel>.accounts.*.historyLimit) para sobrescrituras. Establece0para desactivar.
Restricciones de herramientas por grupo/canal (opcional)
Algunas configuraciones de canal permiten restringir qué herramientas están disponibles dentro de un grupo/sala/canal específico.tools: permitir/negar herramientas para todo el grupo.toolsBySender: sobrescrituras por remitente dentro del grupo. Usa prefijos explícitos en las claves:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>y comodín"*". Las claves heredadas sin prefijo todavía se aceptan y coinciden solo comoid:.
- coincidencia de
toolsBySenderdel grupo/canal toolsdel grupo/canal- coincidencia de
toolsBySenderpredeterminada ("*") toolspredeterminadas ("*")
- Las restricciones de herramientas por grupo/canal se aplican además de la política global/de agente de herramientas (
denysigue prevaleciendo). - Algunos canales usan un anidamiento diferente para salas/canales (por ejemplo, Discord
guilds.*.channels.*, Slackchannels.*, Microsoft Teamsteams.*.channels.*).
Listas de permitidos de grupo
Cuando se configurachannels.whatsapp.groups, channels.telegram.groups o channels.imessage.groups, las claves actúan como una lista de permitidos de grupo. Usa "*" para permitir todos los grupos mientras sigues configurando el comportamiento predeterminado de mención.
Confusión habitual: la aprobación de emparejamiento por DM no es lo mismo que la autorización de grupo.
Para los canales que admiten emparejamiento por DM, el almacén de emparejamientos desbloquea solo los DMs. Los comandos de grupo siguen requiriendo autorización explícita del remitente del grupo desde listas de permitidos de configuración como groupAllowFrom o la alternativa de configuración documentada para ese canal.
Intenciones habituales (copiar/pegar):
- Desactivar todas las respuestas en grupos
- Permitir solo grupos específicos (WhatsApp)
- Permitir todos los grupos pero requerir mención (explícito)
- Solo el propietario puede activar en grupos (WhatsApp)
Activación (solo propietario)
Los propietarios de grupos pueden alternar la activación por grupo:/activation mention/activation always
channels.whatsapp.allowFrom (o la E.164 del propio bot cuando no está configurado). Envía el comando como un mensaje independiente. Actualmente, otras superficies ignoran /activation.
Campos de contexto
Las cargas útiles entrantes de grupo establecen:ChatType=groupGroupSubject(si se conoce)GroupMembers(si se conoce)WasMentioned(resultado de la restricción por mención)- Los temas de foros de Telegram también incluyen
MessageThreadIdeIsForum.
- BlueBubbles puede enriquecer opcionalmente a los participantes sin nombre de grupos de macOS desde la base de datos local de Contactos antes de rellenar
GroupMembers. Esto está desactivado de forma predeterminada y solo se ejecuta después de que se supere la restricción normal de grupo.
\n.
Detalles específicos de iMessage
- Prefiere
chat_id:<id>al enrutar o incluir en listas de permitidos. - Listar chats:
imsg chats --limit 20. - Las respuestas en grupos siempre vuelven al mismo
chat_id.