Mensajes de grupo (canal web de WhatsApp)
Objetivo: permitir que Clawd permanezca en grupos de WhatsApp, se active solo cuando lo mencionen y mantenga ese hilo separado de la sesión personal por DM. Nota:agents.list[].groupChat.mentionPatterns ahora también se usa en Telegram/Discord/Slack/iMessage; esta documentación se centra en el comportamiento específico de WhatsApp. Para configuraciones con varios agentes, establece agents.list[].groupChat.mentionPatterns por agente (o usa messages.groupChat.mentionPatterns como respaldo global).
Implementación actual (2025-12-03)
- Modos de activación:
mention(predeterminado) oalways.mentionrequiere una mención (menciones reales de WhatsApp con @ a través dementionedJids, patrones regex seguros o el E.164 del bot en cualquier parte del texto).alwaysactiva al agente con cada mensaje, pero debería responder solo cuando pueda aportar un valor significativo; de lo contrario devuelve el token silencioso exactoNO_REPLY/no_reply. Los valores predeterminados pueden establecerse en la configuración (channels.whatsapp.groups) y sobrescribirse por grupo mediante/activation. Cuando se establecechannels.whatsapp.groups, también actúa como una lista de permitidos de grupos (incluye"*"para permitir todos). - Política de grupos:
channels.whatsapp.groupPolicycontrola si se aceptan mensajes de grupo (open|disabled|allowlist).allowlistusachannels.whatsapp.groupAllowFrom(respaldo:channels.whatsapp.allowFromexplícito). El valor predeterminado esallowlist(bloqueado hasta que agregues remitentes). - Sesiones por grupo: las claves de sesión tienen el formato
agent:<agentId>:whatsapp:group:<jid>, por lo que comandos como/verbose on,/trace ono/think high(enviados como mensajes independientes) se limitan a ese grupo; el estado de DM personal no se toca. Los Heartbeat se omiten para los hilos de grupo. - Inyección de contexto: los mensajes de grupo solo pendientes (predeterminado: 50) que no activaron una ejecución se anteponen bajo
[Mensajes del chat desde tu última respuesta - para contexto], con la línea que activó la ejecución bajo[Mensaje actual - responde a esto]. Los mensajes que ya están en la sesión no se vuelven a inyectar. - Presentación del remitente: cada lote de grupo ahora termina con
[from: Nombre del remitente (+E164)]para que Pi sepa quién está hablando. - Efímeros/view-once: los desenvolvemos antes de extraer texto/menciones, así que las menciones dentro de ellos igualmente activan.
- Prompt del sistema para grupos: en el primer turno de una sesión de grupo (y cada vez que
/activationcambia el modo) inyectamos una breve nota en el prompt del sistema comoYou are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), … Activation: trigger-only … Address the specific sender noted in the message context.Si los metadatos no están disponibles, igualmente le indicamos al agente que es un chat grupal.
Ejemplo de configuración (WhatsApp)
Agrega un bloquegroupChat a ~/.openclaw/openclaw.json para que las menciones por nombre visible funcionen incluso cuando WhatsApp quita la @ visual en el cuerpo del texto:
- Las regex no distinguen entre mayúsculas y minúsculas y usan las mismas protecciones de regex segura que otras superficies regex de configuración; los patrones no válidos y las repeticiones anidadas inseguras se ignoran.
- WhatsApp sigue enviando menciones canónicas mediante
mentionedJidscuando alguien toca el contacto, así que el respaldo con el número rara vez es necesario, pero es una red de seguridad útil.
Comando de activación (solo propietario)
Usa el comando del chat grupal:/activation mention/activation always
channels.whatsapp.allowFrom, o el propio E.164 del bot cuando no está configurado) puede cambiar esto. Envía /status como mensaje independiente en el grupo para ver el modo de activación actual.
Cómo usarlo
- Agrega tu cuenta de WhatsApp (la que ejecuta OpenClaw) al grupo.
- Di
@openclaw …(o incluye el número). Solo los remitentes en la lista de permitidos pueden activarlo a menos que establezcasgroupPolicy: "open". - El prompt del agente incluirá el contexto reciente del grupo más el marcador final
[from: …]para que pueda dirigirse a la persona correcta. - Las directivas a nivel de sesión (
/verbose on,/trace on,/think high,/newo/reset,/compact) se aplican solo a la sesión de ese grupo; envíalas como mensajes independientes para que se registren. Tu sesión personal por DM permanece independiente.
Pruebas / verificación
- Prueba manual rápida:
- Envía una mención
@openclawen el grupo y confirma una respuesta que haga referencia al nombre del remitente. - Envía una segunda mención y verifica que el bloque de historial se incluya y luego se borre en el siguiente turno.
- Envía una mención
- Revisa los logs del gateway (ejecuta con
--verbose) para ver entradasinbound web messageque muestrenfrom: <groupJid>y el sufijo[from: …].
Consideraciones conocidas
- Los Heartbeat se omiten intencionalmente en grupos para evitar difusiones ruidosas.
- La supresión de eco usa la cadena combinada del lote; si envías el mismo texto dos veces sin menciones, solo la primera recibirá respuesta.
- Las entradas del almacén de sesiones aparecerán como
agent:<agentId>:whatsapp:group:<jid>en el almacén de sesiones (~/.openclaw/agents/<agentId>/sessions/sessions.jsonde forma predeterminada); una entrada faltante solo significa que el grupo aún no ha activado una ejecución. - Los indicadores de escritura en grupos siguen
agents.defaults.typingMode(predeterminado:messagecuando no hay mención).