クラシックなチャンネル(#room)やダイレクトメッセージでOpenClawを使いたい場合に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. Gatewayを起動/再起動:
openclaw gateway run

セキュリティのデフォルト

  • channels.irc.dmPolicyのデフォルトは"pairing"
  • channels.irc.groupPolicyのデフォルトは"allowlist"
  • groupPolicy="allowlist"の場合、channels.irc.groupsで許可するチャンネルを定義。
  • 平文トランスポートを意図的に許容する場合を除き、TLS(channels.irc.tls=true)を使用。

アクセス制御

IRCチャンネルには2つの「ゲート」があります:

  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:eigenid:[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に失敗する場合は、ホスト/ポートと証明書の設定を確認。