Используйте IRC, когда хотите подключить OpenClaw к классическим каналам (#room) и личным сообщениям. IRC поставляется как плагин-расширение, но настраивается в основном конфиге в разделе channels.irc.

Быстрый старт

  1. Включите конфигурацию IRC в ~/.openclaw/openclaw.json.
  2. Задайте как минимум:
{
  "channels": {
    "irc": {
      "enabled": true,
      "host": "irc.libera.chat",
      "port": 6697,
      "tls": true,
      "nick": "openclaw-bot",
      "channels": ["#openclaw"]
    }
  }
}
  1. Запустите/перезапустите шлюз:
openclaw gateway run

Настройки безопасности по умолчанию

  • channels.irc.dmPolicy по умолчанию "pairing".
  • channels.irc.groupPolicy по умолчанию "allowlist".
  • При groupPolicy="allowlist" задайте channels.irc.groups для определения разрешённых каналов.
  • Используйте TLS (channels.irc.tls=true), если только вы осознанно не допускаете передачу в открытом виде.

Контроль доступа

Для IRC-каналов существуют два отдельных «шлюза»:

  1. Доступ к каналу (groupPolicy + groups): принимает ли бот вообще сообщения из канала.
  2. Доступ отправителя (groupAllowFrom / per-channel groups["#channel"].allowFrom): кто может активировать бота внутри канала.

Ключи конфигурации:

  • Список доступа для ЛС (доступ отправителя ЛС): channels.irc.allowFrom
  • Список доступа для групповых отправителей: channels.irc.groupAllowFrom
  • Настройки по каналам (канал + отправитель + правила упоминаний): channels.irc.groups["#channel"]
  • channels.irc.groupPolicy="open" разрешает ненастроенные каналы (по-прежнему с требованием упоминания по умолчанию)

В списках доступа следует использовать стабильные идентификаторы отправителей (nick!user@host). Сопоставление по голому нику изменчиво и включается только при channels.irc.dangerouslyAllowNameMatching: true.

Частая ошибка: allowFrom — для ЛС, не для каналов

Если в логах вы видите:

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

…это означает, что отправитель не разрешён для групповых/канальных сообщений. Исправьте одним из способов:

  • задайте channels.irc.groupAllowFrom (глобально для всех каналов), или
  • задайте списки доступа для отправителей по каналам: channels.irc.groups["#channel"].allowFrom

Пример (разрешить всем в #tuirc-dev общаться с ботом):

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

Условие ответа (упоминания)

Даже если канал разрешён (через groupPolicy + groups) и отправитель разрешён, OpenClaw по умолчанию требует упоминания в групповых контекстах.

Это означает, что в логах могут появляться записи drop channel … (missing-mention), если сообщение не содержит шаблон упоминания, соответствующий боту.

Чтобы бот отвечал в IRC-канале без необходимости упоминания, отключите требование упоминания для этого канала:

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

Или чтобы разрешить все IRC-каналы (без списка по каналам) и отвечать без упоминаний:

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

Заметка по безопасности (рекомендуется для публичных каналов)

Если вы разрешаете allowFrom: ["*"] в публичном канале, любой может отправлять промпты боту. Для снижения рисков ограничьте инструменты для этого канала.

Одинаковые инструменты для всех в канале

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

Различные инструменты по отправителю (владелец получает больше прав)

Используйте toolsBySender для применения более строгой политики к "*" и более мягкой к вашему нику:

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

Примечания:

  • Ключи toolsBySender должны использовать префикс id: для идентификаторов отправителей IRC: id:eigen или id:[email protected] для более строгого сопоставления.
  • Устаревшие ключи без префикса по-прежнему принимаются и сопоставляются как id:.
  • Первая совпавшая политика отправителя побеждает; "*" — wildcard-fallback.

Подробнее о доступе к группам и требовании упоминания (и их взаимодействии) см.: /channels/groups.

NickServ

Для идентификации через NickServ после подключения:

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

Опциональная одноразовая регистрация при подключении:

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

Отключите register после регистрации ника, чтобы избежать повторных попыток REGISTER.

Переменные окружения

Аккаунт по умолчанию поддерживает:

  • IRC_HOST
  • IRC_PORT
  • IRC_TLS
  • IRC_NICK
  • IRC_USERNAME
  • IRC_REALNAME
  • IRC_PASSWORD
  • IRC_CHANNELS (через запятую)
  • IRC_NICKSERV_PASSWORD
  • IRC_NICKSERV_REGISTER_EMAIL

Устранение неполадок

  • Если бот подключается, но не отвечает в каналах, проверьте channels.irc.groups и не блокируется ли сообщение требованием упоминания (missing-mention). Если хотите, чтобы бот отвечал без пингов, задайте requireMention:false для канала.
  • Если логин не удаётся, проверьте доступность ника и пароль сервера.
  • Если TLS не работает в пользовательской сети, проверьте хост/порт и настройку сертификата.