Chats Grupales
Comportamiento de chat grupal: gateo por mención, inyección de contexto grupal, listas permitidas y enrutamiento.
El modelo de chat grupal de OpenClaw es: no estar "siempre activo" en salas públicas por defecto. La mayoría de los canales por defecto requieren @mención (o patrones de mención coincidentes) para activar una respuesta, y las conversaciones grupales usan claves de sesión independientes para evitar contaminar la sesión DM principal.
Esto reduce significativamente:
- Ruido (bots interrumpiendo)
- Superficie de ataque de inyección de prompt (extraños pueden usar el bot como herramienta)
- Confusión de contexto en conversaciones multi-persona
Aislamiento de Sesión
Los chats grupales usan claves de sesión independientes, por ejemplo:
- WhatsApp: ''agent:<agentId>:whatsapp:group:<jid>''
- Telegram: ''agent:<agentId>:telegram:group:<chatId>'' (los temas añaden '':topic:<threadId>'')
- Discord: ''agent:<agentId>:discord:channel:<channelId>'' (los hilos añaden '':thread:<threadId>'')
- Slack: ''agent:<agentId>:slack:channel:<channelId>''
Los DMs por defecto se pliegan en la sesión principal del agente (ver ''/concepts/session'').
Gateo por Mención
Estrategia predeterminada: OpenClaw solo activa una ejecución de agente cuando se le menciona en un grupo.
Fuentes de activación (varían según capacidades del canal):
- Menciones nativas (Telegram/Discord/Slack/WhatsApp en algunos escenarios)
- ''messages.groupChat.mentionPatterns'' (global)
- ''agents.list[].groupChat.mentionPatterns'' (anulación por agente)
Cuando el gateo por mención bloquea un mensaje en un grupo, OpenClaw lo coloca en un búfer de historial pendiente (ver abajo) para que los mensajes recientes se inyecten como contexto en la próxima activación.
Puedes deshabilitar requireMention por grupo (haciendo ese grupo siempre activo):
- Telegram: ''channels.telegram.groups.<chatId>.requireMention=false''
- WhatsApp: ''channels.whatsapp.groups.<jid>.requireMention=false''
- Discord: ''channels.discord.guilds.<guildId>.channels.<channel>.requireMention=false''
- Slack: ''channels.slack.channels.<channel>.requireMention=false''
Consejo de seguridad: Para cualquier sala que "pueda tener extraños", mantén ''requireMention=true''.
Listas Permitidas de Grupos
Los formularios de lista permitida varían por canal, pero el principio es consistente: cuando empiezas a configurar explícitamente ''groups/guilds/channels'', típicamente se convierte en una lista permitida.
- Telegram:
- No escribas ''channels.telegram.groups'': permitir todos los grupos (luego el gateo por mención decide si activar).
- Escribe ''channels.telegram.groups'': solo permitir grupos listados o ''"*"''.
- WhatsApp:
- ''channels.whatsapp.groups'' es la lista permitida de grupos (usa ''"*"'' para permitir todos los grupos).
- Discord:
- ''channels.discord.guilds'' es la lista permitida de guilds; si ''channels'' está definido en un guild, solo los canales listados están permitidos.
- Slack:
- ''channels.slack.groupPolicy'' + ''channels.slack.channels'' controlan la lista permitida de canales.
Quién Puede Activar en Grupos
Muchos canales tienen dos capas de control de acceso grupal:
- Qué grupos/canales están permitidos (la lista permitida arriba)
- ''En grupos permitidos, qué remitentes pueden activar'' (''groupPolicy'' + ''groupAllowFrom'' o ''users'' por sala)
Ejemplo para Telegram:
{
channels: {
telegram: {
groupPolicy: "allowlist",
groupAllowFrom: ["123456789"],
groups: {
"-1001234567890": { requireMention: true }
}
}
}
}Cuando ''groupPolicy="allowlist"'' y no hay ''groupAllowFrom'', por defecto bloquea (fail-closed).
Inyección de Contexto de Historial Grupal
Cuando un mensaje grupal no activa una respuesta (sin mención / bloqueado por lista permitida), OpenClaw almacena estos mensajes como pendientes y los inyecta en el prompt en la próxima activación:
[Chat messages since your last reply - for context] ... [/Chat messages since your last reply - for context] [Current message - respond to this] ... [/Current message - respond to this]
Características importantes:
- solo pendientes: solo inyecta mensajes "después de tu última respuesta pero no procesados".
- No reinyecta mensajes ya escritos en la transcripción.
- El mensaje actual undergoes stripping de directivas; el bloque de historial permanece sin cambios.
Límites:
- Global: ''messages.groupChat.historyLimit''
- Anulación de canal: ''channels.telegram.historyLimit'' / ''channels.slack.historyLimit'' / ''channels.whatsapp.historyLimit'', etc.
- Establecer en ''0'' para deshabilitar.
Activación
Algunos canales soportan el comando ''/activation'' (afecta solo la sesión actual):
- ''/activation mention'': requiere mención (predeterminado)
- ''/activation always'': responder a todos los mensajes
Notas:
- Este comando usualmente solo funciona para remitentes autorizados (propietario/lista permitida).
Enrutamiento Grupal Multi-Agente
Los mensajes grupales no dejan que el modelo "decida quién debería responder"; en su lugar, el enrutamiento determinista se hace a través de ''bindings''.
Estrategias comunes:
- "Un grupo, un agente": En ''bindings'', coincide por ''peer.kind="group"'' + ''peer.id'' para apuntar a un agente específico.
- "Asignar agente por cuenta de canal": coincide por ''accountId''.
- "Grupos de difusión": el mismo mensaje de activación ejecuta múltiples agentes (ver ''/broadcast-groups'').
Errores Comunes
- Estableces ''requireMention=false'' pero aún no hay respuesta: lo más probable es ''groupPolicy="allowlist"'' y no hay ''groupAllowFrom'' / lista permitida de grupo configurada.
- Discord: ''requireMention'' debe escribirse bajo ''channels.discord.guilds'' o un canal específico; ''channels.discord.requireMention'' de nivel superior se ignora.
- Telegram: Después de deshabilitar el modo de privacidad de BotFather, necesitas eliminar y volver a añadir el bot al grupo para que los ajustes surtan efecto.