Developer and self-hosted

IRC

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

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

  1. Установите плагин:
bash
openclaw plugins install @openclaw/irc
  1. Укажите как минимум хост, псевдоним и каналы для подключения в ~/.openclaw/openclaw.json:
json5
{  channels: {    irc: {      enabled: true,      host: "irc.example.com",      port: 6697,      tls: true,      nick: "openclaw-bot",      channels: ["#openclaw"],    },  },}
  1. Запустите или перезапустите Gateway:
bash
openclaw gateway run

Для координации ботов рекомендуется использовать частный IRC-сервер. Если вы намеренно используете публичную IRC-сеть, распространённые варианты включают Libera.Chat, OFTC и Snoonet. Не используйте предсказуемые публичные каналы для служебного обмена данными между ботами или роем.

Настройки подключения

Ключ По умолчанию Примечания
host нет (обязательно) Имя хоста IRC-сервера
port 6697 с TLS, 6667 без шифрования 1-65535
tls true Устанавливайте false только при намеренном использовании незашифрованного соединения
nick нет (обязательно) Псевдоним бота
username псевдоним, иначе openclaw Имя пользователя IRC
realname OpenClaw Поле настоящего имени/GECOS
password / passwordFile нет Пароль сервера; файл должен быть обычным файлом
channels нет Каналы для подключения (["#openclaw"])
accounts / defaultAccount нет Настройка нескольких учётных записей; переменные среды заполняют только учётную запись по умолчанию

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

  • IRC использует необработанные сокеты TCP/TLS вне маршрутизации через прямой прокси-сервер, управляемый оператором OpenClaw. В развёртываниях, где весь исходящий трафик должен проходить через этот прямой прокси-сервер, установите channels.irc.enabled=false, если прямой исходящий трафик IRC не разрешён явно.
  • По умолчанию channels.irc.dmPolicy имеет значение "pairing": неизвестные отправители личных сообщений получают код сопряжения, который вы подтверждаете с помощью openclaw pairing approve irc <code>.
  • По умолчанию channels.irc.groupPolicy имеет значение "allowlist".
  • При использовании groupPolicy="allowlist" задайте channels.irc.groups, чтобы определить разрешённые каналы.
  • Используйте TLS (channels.irc.tls=true), если только вы намеренно не допускаете передачу данных без шифрования.

Управление доступом

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

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

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

  • Список разрешённых отправителей личных сообщений: channels.irc.allowFrom
  • Список разрешённых отправителей группы (доступ отправителей канала): channels.irc.groupAllowFrom
  • Настройки отдельных каналов (правила канала, отправителей и упоминаний): channels.irc.groups["#channel"] с requireMention, allowFrom, enabled, tools, toolsBySender, skills и systemPrompt
  • 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

Пример (разрешить любому пользователю в #openclaw обращаться к боту):

json5
{  channels: {    irc: {      groupPolicy: "allowlist",      groups: {        "#openclaw": { allowFrom: ["*"] },      },    },  },}

Активация ответов (упоминания)

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

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

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

json5
{  channels: {    irc: {      groupPolicy: "allowlist",      groups: {        "#openclaw": {          requireMention: false,          allowFrom: ["*"],        },      },    },  },}

Либо, чтобы разрешить все каналы IRC (без списка разрешённых для отдельных каналов) и при этом отвечать без упоминаний:

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

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

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

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

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

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

Используйте toolsBySender, чтобы применить более строгую политику к "*" и менее строгую — к своему псевдониму:

json5
{  channels: {    irc: {      groups: {        "#openclaw": {          allowFrom: ["*"],          toolsBySender: {            "*": {              deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],            },            "id:alice": {              deny: ["gateway", "nodes", "cron"],            },          },        },      },    },  },}

Примечания:

  • В ключах toolsBySender следует использовать явные префиксы (channel:, id:, e164:, username:, name:). Для IRC используйте id: со значением идентификатора отправителя: id:alice или id:alice!~alice@203.0.113.7 для более надёжного сопоставления.
  • Устаревшие ключи без префиксов по-прежнему принимаются, сопоставляются только как id: и вызывают предупреждение об устаревании.
  • Применяется первая соответствующая политика отправителя; "*" служит универсальным резервным вариантом.

Дополнительные сведения о различиях между групповым доступом и требованием упоминания, а также об их взаимодействии см. в разделе /channels/groups.

NickServ

Чтобы пройти идентификацию в NickServ после подключения:

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

По умолчанию идентификация NickServ выполняется при каждом подключении, если задан пароль (enabled нужно установить в false только для отказа от неё). По умолчанию service имеет значение NickServ; passwordFile можно использовать вместо встроенного password.

Необязательная однократная регистрация при подключении (register: true требует registerEmail):

json5
{  channels: {    irc: {      nickserv: {        register: true,        registerEmail: "bot@example.com",      },    },  },}

После регистрации псевдонима отключите 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

IRC_HOST нельзя задать из файла .env рабочей области; см. Файлы .env рабочей области.

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

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

Связанные разделы

Was this useful?
On this page

On this page