Ir al contenido

IRC

Use IRC cuando quiera tener OpenClaw en canales clásicos (#room) y mensajes directos. IRC se distribuye como un complemento incluido, pero se configura en la configuración principal bajo channels.irc.

  1. Habilite la configuración de IRC en ~/.openclaw/openclaw.json.
  2. Establezca al menos:
{
channels: {
irc: {
enabled: true,
host: "irc.example.com",
port: 6697,
tls: true,
nick: "openclaw-bot",
channels: ["#openclaw"],
},
},
}

Prefiera un servidor IRC privado para la coordinación de bots. Si usa intencionalmente una red IRC pública, las opciones comunes incluyen Libera.Chat, OFTC y Snoonet. Evite canales públicos predecibles para el tráfico de bots o canales de retroalimentación de enjambres.

  1. Inicia/reinicia el gateway:
Ventana de terminal
openclaw gateway run
  • IRC utiliza sockets TCP/TLS sin procesar fuera del enrutamiento del proxy de reenvío gestionado por el operador de OpenClaw. En los despliegues que requieren que todo el tráfico de salida pase a través de ese proxy de reenvío, establezca channels.irc.enabled=false a menos que se apruebe explícitamente el tráfico de salida directo de IRC.
  • channels.irc.dmPolicy se establece de forma predeterminada en "pairing".
  • channels.irc.groupPolicy se establece de forma predeterminada en "allowlist".
  • Con groupPolicy="allowlist", establezca channels.irc.groups para definir los canales permitidos.
  • Utilice TLS (channels.irc.tls=true) a menos que acepte intencionalmente el transporte en texto sin formato.

Existen dos “puertas” separadas para los canales IRC:

  1. Acceso al canal (groupPolicy + groups): si el bot acepta mensajes de un canal o no.
  2. Acceso del remitente (groupAllowFrom / por canal groups["#channel"].allowFrom): quién tiene permiso para activar el bot dentro de ese canal.

Claves de configuración:

  • Lista de permitidos de DM (acceso de remitente de DM): channels.irc.allowFrom
  • Lista de permitidos de remitentes de grupo (acceso de remitente de 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 (todavía restringidos por mención de forma predeterminada)

Las entradas de la lista de permitidos deben usar identidades de remitente estables (nick!user@host). La coincidencia de nick simple es mutable y solo se habilita cuando channels.irc.dangerouslyAllowNameMatching: true.

Error común: allowFrom es para MD, no para canales

Sección titulada «Error común: allowFrom es para MD, no para canales»

Si ve registros como:

  • irc: drop group sender alice!ident@host (policy=allowlist)

…significa que el remitente no tenía permiso para mensajes de grupo/canal. Soluciónelo mediante:

  • establecer channels.irc.groupAllowFrom (global para todos los canales), o
  • establecer listas de permitidos de remitentes por canal: channels.irc.groups["#channel"].allowFrom

Ejemplo (permitir a cualquiera en #tuirc-dev hablar con el bot):

{
channels: {
irc: {
groupPolicy: "allowlist",
groups: {
"#tuirc-dev": { allowFrom: ["*"] },
},
},
},
}

Incluso si se permite un canal (vía groupPolicy + groups) y se permite el remitente, OpenClaw tiene como valor predeterminado el control por mención en contextos de grupo.

Eso significa que puede ver registros como drop channel … (missing-mention) a menos que el mensaje incluya un patrón de mención que coincida con el bot.

Para hacer que el bot responda en un canal IRC sin necesidad de una mención, desactiva el filtrado por 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 permitidos por canal) y seguir respondiendo sin menciones:

{
channels: {
irc: {
groupPolicy: "open",
groups: {
"*": { requireMention: false, allowFrom: ["*"] },
},
},
},
}

Nota de seguridad (recomendado para canales públicos)

Sección titulada «Nota de seguridad (recomendado para canales públicos)»

Si permites allowFrom: ["*"] en un canal público, cualquiera puede hacer solicitudes al bot. Para reducir el riesgo, restringe las herramientas para ese canal.

{
channels: {
irc: {
groups: {
"#tuirc-dev": {
allowFrom: ["*"],
tools: {
deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],
},
},
},
},
},
}

Diferentes herramientas por remitente (el propietario obtiene más poder)

Sección titulada «Diferentes herramientas por remitente (el propietario obtiene más poder)»

Usa toolsBySender para aplicar una política más estricta a "*" y una más relajada 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 toolsBySender deben usar id: para los valores de identidad del remitente de IRC: id:eigen o id:[email protected] para una coincidencia más fuerte.
  • Las claves heredadas sin prefijo todavía se aceptan y coinciden solo como id:.
  • Gana la primera política de remitente que coincida; "*" es el respaldo comodín.

Para obtener más información sobre el acceso de grupos frente a las menciones (y cómo interactúan), consulta: /channels/groups.

Para identificarse con NickServ después de conectarse:

{
channels: {
irc: {
nickserv: {
enabled: true,
service: "NickServ",
password: "your-nickserv-password",
},
},
},
}

Registro opcional de una vez al conectarse:

{
channels: {
irc: {
nickserv: {
register: true,
registerEmail: "[email protected]",
},
},
},
}

Deshabilita register después de que el nick esté registrado para evitar intentos repetidos de REGISTER.

La cuenta predeterminada soporta:

  • IRC_HOST
  • IRC_PORT
  • IRC_TLS
  • IRC_NICK
  • IRC_USERNAME
  • IRC_REALNAME
  • IRC_PASSWORD
  • IRC_CHANNELS (separados por comas)
  • IRC_NICKSERV_PASSWORD
  • IRC_NICKSERV_REGISTER_EMAIL

IRC_HOST no se puede establecer desde un .env del espacio de trabajo; consulta Archivos .env del espacio de trabajo.

  • Si el bot se conecta pero nunca responde en los canales, verifica channels.irc.groups y si el filtrado por menciones está descartando mensajes (missing-mention). Si quieres que responda sin pings, establece requireMention:false para el canal.
  • Si falla el inicio de sesión, verifica la disponibilidad del nick y la contraseña del servidor.
  • Si falla TLS en una red personalizada, verifica el host/puerto y la configuración del certificado.