Developer and self-hosted

IRC

Використовуйте IRC, коли хочете працювати з OpenClaw у класичних каналах (#room) і приватних повідомленнях. Установіть офіційний Plugin IRC, а потім налаштуйте його в channels.irc.

Швидкий початок

  1. Установіть Plugin:
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 лише для відмови від неї). Типове значення serviceNickServ; 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