Twitch(プラグイン)

IRC接続によるTwitchチャットサポートです。OpenClawはTwitchユーザー(Botアカウント)としてチャンネルに接続し、メッセージの受信と送信を行います。

プラグインが必要です

Twitchはプラグインとして提供されており、コアインストールにはバンドルされていません。

CLI経由でインストール(npmレジストリ):

openclaw plugins install @openclaw/twitch

ローカルチェックアウト(gitリポジトリから実行する場合):

openclaw plugins install ./extensions/twitch

詳細:プラグイン

クイックセットアップ(初心者向け)

  1. Bot用の専用Twitchアカウントを作成します(または既存のアカウントを使用)。
  2. 認証情報を生成します:Twitch Token Generator
    • Bot Tokenを選択
    • chat:readchat:writeのスコープが選択されていることを確認
    • Client IDAccess Tokenをコピー
  3. TwitchユーザーIDを確認します:https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
  4. トークンを設定します:
    • 環境変数:OPENCLAW_TWITCH_ACCESS_TOKEN=...(デフォルトアカウントのみ)
    • または設定:channels.twitch.accessToken
    • 両方設定されている場合、設定が優先されます(環境変数はデフォルトアカウントのフォールバックのみ)。
  5. Gatewayを起動します。

警告: アクセス制御(allowFromまたはallowedRoles)を追加して、未認可ユーザーによるBotのトリガーを防止してください。requireMentionのデフォルトはtrueです。

最小設定:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw", // BotのTwitchアカウント
      accessToken: "oauth:abc123...", // OAuth Access Token(またはOPENCLAW_TWITCH_ACCESS_TOKEN環境変数を使用)
      clientId: "xyz789...", // Token GeneratorのClient ID
      channel: "vevisk", // 参加するTwitchチャンネルのチャットルーム(必須)
      allowFrom: ["123456789"], // (推奨)あなたのTwitchユーザーIDのみ - https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ で取得
    },
  },
}

機能説明

  • Gatewayが所有するTwitchチャンネル接続です。
  • 決定的ルーティング:返信は常にTwitchに戻ります。
  • 各アカウントは隔離されたセッションキーagent:<agentId>:twitch:<accountName>にマッピングされます。
  • usernameはBotのアカウント(認証用)、channelは参加するチャットルームです。

詳細セットアップ

認証情報の生成

Twitch Token Generatorを使用します:

  • Bot Tokenを選択
  • chat:readchat:writeのスコープが選択されていることを確認
  • Client IDAccess Tokenをコピー

手動のアプリ登録は不要です。トークンは数時間後に期限切れになります。

Botの設定

環境変数(デフォルトアカウントのみ):

OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...

または設定:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw",
      accessToken: "oauth:abc123...",
      clientId: "xyz789...",
      channel: "vevisk",
    },
  },
}

環境変数と設定の両方が設定されている場合、設定が優先されます。

アクセス制御(推奨)

{
  channels: {
    twitch: {
      allowFrom: ["123456789"], // (推奨)あなたのTwitchユーザーIDのみ
    },
  },
}

ハードな許可リストとしてallowFromの使用を推奨します。ロールベースのアクセスが必要な場合はallowedRolesを使用してください。

利用可能なロール: "moderator""owner""vip""subscriber""all"

なぜユーザーIDを使うのか: ユーザー名は変更可能であり、なりすましのリスクがあります。ユーザーIDは永続的です。

TwitchユーザーIDの確認:https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/

トークンリフレッシュ(オプション)

Twitch Token Generatorで生成されたトークンは自動リフレッシュできません。期限切れ後に再生成が必要です。

自動トークンリフレッシュを行うには、Twitch Developer Consoleで独自のTwitchアプリケーションを作成し、設定に追加してください:

{
  channels: {
    twitch: {
      clientSecret: "your_client_secret",
      refreshToken: "your_refresh_token",
    },
  },
}

Botは期限切れ前にトークンを自動リフレッシュし、リフレッシュイベントをログに記録します。

マルチアカウントサポート

channels.twitch.accountsでアカウントごとのトークンを設定します。共有パターンについてはgateway/configurationを参照してください。

設定例(1つのBotアカウントで2つのチャンネルに参加):

{
  channels: {
    twitch: {
      accounts: {
        channel1: {
          username: "openclaw",
          accessToken: "oauth:abc123...",
          clientId: "xyz789...",
          channel: "vevisk",
        },
        channel2: {
          username: "openclaw",
          accessToken: "oauth:def456...",
          clientId: "uvw012...",
          channel: "secondchannel",
        },
      },
    },
  },
}

注意: 各アカウントには独自のトークンが必要です(チャンネルごとに1つのトークン)。

アクセス制御

ロールベースの制限

{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowedRoles: ["moderator", "vip"],
        },
      },
    },
  },
}

ユーザーID許可リスト(最も安全)

{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowFrom: ["123456789", "987654321"],
        },
      },
    },
  },
}

ロールベースアクセス(代替)

allowFromはハードな許可リストです。設定するとそのユーザーIDのみ許可されます。 ロールベースのアクセスが必要な場合は、allowFromを設定せず代わりにallowedRolesを設定してください:

{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowedRoles: ["moderator"],
        },
      },
    },
  },
}

@メンション要件の無効化

デフォルトでrequireMentiontrueです。すべてのメッセージに応答するには:

{
  channels: {
    twitch: {
      accounts: {
        default: {
          requireMention: false,
        },
      },
    },
  },
}

トラブルシューティング

まず診断コマンドを実行してください:

openclaw doctor
openclaw channels status --probe

Botがメッセージに応答しない

アクセス制御の確認: ユーザーIDがallowFromに含まれているか確認するか、テスト目的で一時的にallowFromを削除してallowedRoles: ["all"]を設定してください。

Botがチャンネルにいるか確認: Botはchannelで指定されたチャンネルに参加している必要があります。

トークンの問題

「Failed to connect」や認証エラー:

  • accessTokenがOAuth access tokenの値であることを確認(通常はoauth:プレフィックスで始まる)
  • トークンにchat:readchat:writeのスコープがあるか確認
  • トークンリフレッシュを使用する場合、clientSecretrefreshTokenが設定されているか確認

トークンリフレッシュが動作しない

ログのリフレッシュイベントを確認:

Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)

「token refresh disabled (no refresh token)」と表示される場合:

  • clientSecretが設定されていることを確認
  • refreshTokenが設定されていることを確認

設定

アカウント設定:

  • username - Botユーザー名
  • accessToken - chat:readchat:writeスコープを持つOAuth access token
  • clientId - Twitch Client ID(Token Generatorまたは自作アプリから)
  • channel - 参加するチャンネル(必須)
  • enabled - このアカウントを有効化(デフォルト:true
  • clientSecret - オプション:自動トークンリフレッシュ用
  • refreshToken - オプション:自動トークンリフレッシュ用
  • expiresIn - トークンの有効期限(秒)
  • obtainmentTimestamp - トークン取得時のタイムスタンプ
  • allowFrom - ユーザーID許可リスト
  • allowedRoles - ロールベースのアクセス制御("moderator" | "owner" | "vip" | "subscriber" | "all"
  • requireMention - @メンション必須(デフォルト:true

プロバイダーオプション:

  • channels.twitch.enabled - チャンネル起動の有効/無効
  • channels.twitch.username - Botユーザー名(単一アカウントの簡略設定)
  • channels.twitch.accessToken - OAuth access token(単一アカウントの簡略設定)
  • channels.twitch.clientId - Twitch Client ID(単一アカウントの簡略設定)
  • channels.twitch.channel - 参加するチャンネル(単一アカウントの簡略設定)
  • channels.twitch.accounts.<accountName> - マルチアカウント設定(上記すべてのアカウントフィールド)

完全な設定例:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw",
      accessToken: "oauth:abc123...",
      clientId: "xyz789...",
      channel: "vevisk",
      clientSecret: "secret123...",
      refreshToken: "refresh456...",
      allowFrom: ["123456789"],
      allowedRoles: ["moderator", "vip"],
      accounts: {
        default: {
          username: "mybot",
          accessToken: "oauth:abc123...",
          clientId: "xyz789...",
          channel: "your_channel",
          enabled: true,
          clientSecret: "secret123...",
          refreshToken: "refresh456...",
          expiresIn: 14400,
          obtainmentTimestamp: 1706092800000,
          allowFrom: ["123456789", "987654321"],
          allowedRoles: ["moderator"],
        },
      },
    },
  },
}

ツールアクション

Agentはtwitchを呼び出してアクションを実行できます:

  • send - チャンネルにメッセージを送信

使用例:

{
  action: "twitch",
  params: {
    message: "Hello Twitch!",
    to: "#mychannel",
  },
}

セキュリティと運用

  • トークンはパスワードと同様に扱ってください — gitにコミットしないでください
  • 長時間稼働するBotには自動トークンリフレッシュを使用
  • アクセス制御にはユーザー名ではなくユーザーID許可リストを使用
  • ログを監視してトークンリフレッシュイベントと接続状態を確認
  • トークンの権限を最小限にchat:readchat:writeのみをリクエスト
  • 問題が発生した場合:他のプロセスがセッションを占有していないことを確認してからGatewayを再起動

制限事項

  • メッセージあたり500文字(ワード境界で自動チャンク分割)
  • 送信前にMarkdownは除去されます
  • レート制限なし(Twitch組み込みのレート制限を使用)