Usa IRC cuando quieras tener OpenClaw en canales clásicos (#sala) y mensajes directos.
IRC se distribuye como un plugin de extensión, pero se configura en la configuración principal bajo channels.irc.
Inicio rápido
- Habilita la configuración de IRC en
~/.openclaw/openclaw.json. - Configura al menos:
{
"channels": {
"irc": {
"enabled": true,
"host": "irc.libera.chat",
"port": 6697,
"tls": true,
"nick": "openclaw-bot",
"channels": ["#openclaw"]
}
}
}
- Inicia/reinicia el gateway:
openclaw gateway run
Valores predeterminados de seguridad
channels.irc.dmPolicyes"pairing"de forma predeterminada.channels.irc.groupPolicyes"allowlist"de forma predeterminada.- Con
groupPolicy="allowlist", configurachannels.irc.groupspara definir los canales permitidos. - Usa TLS (
channels.irc.tls=true) a menos que aceptes intencionalmente transporte en texto plano.
Control de acceso
Hay dos “puertas” separadas para los canales IRC:
- Acceso al canal (
groupPolicy+groups): si el bot acepta mensajes de un canal. - Acceso del remitente (
groupAllowFrom/ por canalgroups["#channel"].allowFrom): quién puede activar al bot dentro de ese canal.
Claves de configuración:
- Lista de acceso DM (acceso de remitente DM):
channels.irc.allowFrom - Lista de acceso de remitentes de grupo (acceso de remitente en canal):
channels.irc.groupAllowFrom - Controles por canal (canal + remitente + reglas de mención):
channels.irc.groups["#channel"] channels.irc.groupPolicy="open"permite canales no configurados (aún con restricción de mención por defecto)
Las entradas de la lista de acceso deben usar identidades estables del remitente (nick!user@host).
La coincidencia por nick simple es mutable y solo se habilita cuando channels.irc.dangerouslyAllowNameMatching: true.
Error común: allowFrom es para DMs, no para canales
Si ves logs como:
irc: drop group sender alice!ident@host (policy=allowlist)
…significa que el remitente no estaba permitido para mensajes de grupo/canal. Corrígelo:
- configurando
channels.irc.groupAllowFrom(global para todos los canales), o - configurando listas de acceso de remitente por canal:
channels.irc.groups["#channel"].allowFrom
Ejemplo (permitir que cualquiera en #tuirc-dev hable con el bot):
{
channels: {
irc: {
groupPolicy: "allowlist",
groups: {
"#tuirc-dev": { allowFrom: ["*"] },
},
},
},
}
Activación de respuestas (menciones)
Incluso si un canal está permitido (vía groupPolicy + groups) y el remitente está permitido, OpenClaw por defecto aplica restricción por mención en contextos de grupo.
Esto significa que podrías ver logs como drop channel … (missing-mention) a menos que el mensaje incluya un patrón de mención que coincida con el bot.
Para que el bot responda en un canal IRC sin necesitar una mención, desactiva la restricción de mención para ese canal:
{
channels: {
irc: {
groupPolicy: "allowlist",
groups: {
"#tuirc-dev": {
requireMention: false,
allowFrom: ["*"],
},
},
},
},
}
O para permitir todos los canales IRC (sin lista de acceso por canal) y aún responder sin menciones:
{
channels: {
irc: {
groupPolicy: "open",
groups: {
"*": { requireMention: false, allowFrom: ["*"] },
},
},
},
}
Nota de seguridad (recomendado para canales públicos)
Si permites allowFrom: ["*"] en un canal público, cualquiera puede interactuar con el bot.
Para reducir el riesgo, restringe las herramientas para ese canal.
Mismas herramientas para todos en el canal
{
channels: {
irc: {
groups: {
"#tuirc-dev": {
allowFrom: ["*"],
tools: {
deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],
},
},
},
},
},
}
Herramientas diferentes por remitente (el propietario tiene más poder)
Usa toolsBySender para aplicar una política más estricta a "*" y una más permisiva a tu nick:
{
channels: {
irc: {
groups: {
"#tuirc-dev": {
allowFrom: ["*"],
toolsBySender: {
"*": {
deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],
},
"id:eigen": {
deny: ["gateway", "nodes", "cron"],
},
},
},
},
},
},
}
Notas:
- Las claves de
toolsBySenderdeben usarid:para valores de identidad de remitente IRC:id:eigenoid:[email protected]para una coincidencia más estricta. - Las claves legacy sin prefijo se siguen aceptando y se comparan solo como
id:. - La primera política de remitente coincidente gana;
"*"es el respaldo comodín.
Para más información sobre acceso a grupos vs restricción por mención (y cómo interactúan), consulta: /channels/groups.
NickServ
Para identificarse con NickServ tras la conexión:
{
"channels": {
"irc": {
"nickserv": {
"enabled": true,
"service": "NickServ",
"password": "tu-contraseña-nickserv"
}
}
}
}
Registro opcional de una sola vez al conectar:
{
"channels": {
"irc": {
"nickserv": {
"register": true,
"registerEmail": "[email protected]"
}
}
}
}
Desactiva register después de registrar el nick para evitar intentos repetidos de REGISTER.
Variables de entorno
La cuenta predeterminada soporta:
IRC_HOSTIRC_PORTIRC_TLSIRC_NICKIRC_USERNAMEIRC_REALNAMEIRC_PASSWORDIRC_CHANNELS(separados por coma)IRC_NICKSERV_PASSWORDIRC_NICKSERV_REGISTER_EMAIL
Resolución de problemas
- Si el bot se conecta pero nunca responde en canales, verifica
channels.irc.groupsy si la restricción de mención está descartando mensajes (missing-mention). Si quieres que responda sin pings, configurarequireMention:falsepara el canal. - Si el inicio de sesión falla, verifica la disponibilidad del nick y la contraseña del servidor.
- Si TLS falla en una red personalizada, verifica el host/puerto y la configuración de certificados.