Используйте IRC, когда хотите подключить OpenClaw к классическим каналам (#room) и личным сообщениям.
IRC поставляется как плагин-расширение, но настраивается в основном конфиге в разделе channels.irc.
Быстрый старт
- Включите конфигурацию IRC в
~/.openclaw/openclaw.json. - Задайте как минимум:
{
"channels": {
"irc": {
"enabled": true,
"host": "irc.libera.chat",
"port": 6697,
"tls": true,
"nick": "openclaw-bot",
"channels": ["#openclaw"]
}
}
}
- Запустите/перезапустите шлюз:
openclaw gateway run
Настройки безопасности по умолчанию
channels.irc.dmPolicyпо умолчанию"pairing".channels.irc.groupPolicyпо умолчанию"allowlist".- При
groupPolicy="allowlist"задайтеchannels.irc.groupsдля определения разрешённых каналов. - Используйте TLS (
channels.irc.tls=true), если только вы осознанно не допускаете передачу в открытом виде.
Контроль доступа
Для IRC-каналов существуют два отдельных «шлюза»:
- Доступ к каналу (
groupPolicy+groups): принимает ли бот вообще сообщения из канала. - Доступ отправителя (
groupAllowFrom/ per-channelgroups["#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_HOSTIRC_PORTIRC_TLSIRC_NICKIRC_USERNAMEIRC_REALNAMEIRC_PASSWORDIRC_CHANNELS(через запятую)IRC_NICKSERV_PASSWORDIRC_NICKSERV_REGISTER_EMAIL
Устранение неполадок
- Если бот подключается, но не отвечает в каналах, проверьте
channels.irc.groupsи не блокируется ли сообщение требованием упоминания (missing-mention). Если хотите, чтобы бот отвечал без пингов, задайтеrequireMention:falseдля канала. - Если логин не удаётся, проверьте доступность ника и пароль сервера.
- Если TLS не работает в пользовательской сети, проверьте хост/порт и настройку сертификата.