OpenClaw를 클래식 채널 (#room)과 다이렉트 메시지에서 사용하려면 IRC를 사용하세요. IRC는 확장 플러그인으로 제공되지만 메인 설정의 channels.irc에서 구성됩니다.

빠른 시작

  1. ~/.openclaw/openclaw.json에서 IRC 설정을 활성화합니다.
  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 / 채널별 groups["#channel"].allowFrom): 해당 채널에서 봇을 트리거할 수 있는 사람.

설정 키:

  • DM 허용 목록 (DM 발신자 접근): channels.irc.allowFrom
  • 그룹 발신자 허용 목록 (채널 발신자 접근): channels.irc.groupAllowFrom
  • 채널별 제어 (채널 + 발신자 + 멘션 규칙): channels.irc.groups["#channel"]
  • channels.irc.groupPolicy="open"은 설정되지 않은 채널을 허용합니다 (기본적으로 멘션 게이팅 적용)

허용 목록 항목은 안정적인 발신자 ID (nick!user@host)를 사용해야 합니다. 닉네임만으로 매칭하는 것은 변경 가능하므로 channels.irc.dangerouslyAllowNameMatching: true일 때만 활성화됩니다.

일반적인 실수: allowFrom은 DM용이지 채널용이 아닙니다

다음과 같은 로그가 보이면:

  • 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 키는 IRC 발신자 ID 값에 id: 접두사를 사용해야 합니다: id:eigen 또는 더 강력한 매칭을 위해 id:[email protected].
  • 레거시 접두사 없는 키도 허용되며 id:로만 매칭됩니다.
  • 첫 번째 매칭되는 발신자 정책이 적용됩니다. "*"는 와일드카드 폴백입니다.

그룹 접근과 멘션 게이팅 (그리고 상호작용 방식)에 대한 자세한 내용: /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 실패 시 호스트/포트와 인증서 설정을 확인하세요.