メインコンテンツへスキップ

Twitch

IRC接続によるTwitch chatサポート。OpenClawはTwitchユーザー(bot account)として接続し、channelsでメッセージを受信・送信します。

同梱plugin

Twitchは現在のOpenClawリリースでは同梱pluginとして提供されるため、通常の パッケージ済みビルドでは別途インストールは不要です。 古いビルド、またはTwitchを除外したカスタムインストールを使っている場合は、 手動でインストールしてください。 CLI経由でインストール(npm registry):
openclaw plugins install @openclaw/twitch
ローカルcheckout(git repoから実行している場合):
openclaw plugins install ./path/to/local/twitch-plugin
詳細: Plugins

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

  1. Twitch pluginが利用可能であることを確認します。
    • 現在のパッケージ版OpenClawリリースにはすでに同梱されています。
    • 古い/カスタムインストールでは、上記コマンドで手動追加できます。
  2. bot専用のTwitch accountを作成します(または既存のaccountを使います)。
  3. 認証情報を生成します: Twitch Token Generator
    • Bot Tokenを選択
    • chat:readchat:writeのscopeが選択されていることを確認
    • Client IDAccess Tokenをコピー
  4. Twitch user IDを調べます: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
  5. tokenを設定します:
    • Env: OPENCLAW_TWITCH_ACCESS_TOKEN=...(default accountのみ)
    • またはconfig: channels.twitch.accessToken
    • 両方設定されている場合は、configが優先されます(envフォールバックはdefault accountのみ)。
  6. Gatewayを起動します。
⚠️ 重要: 未承認ユーザーがbotをトリガーできないように、アクセス制御(allowFromまたはallowedRoles)を追加してください。requireMentionのデフォルトはtrueです。 最小構成:
{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw", // BotのTwitch account
      accessToken: "oauth:abc123...", // OAuth Access Token(または OPENCLAW_TWITCH_ACCESS_TOKEN env var を使用)
      clientId: "xyz789...", // Token GeneratorのClient ID
      channel: "vevisk", // 参加するTwitch channelのchat(必須)
      allowFrom: ["123456789"], // (推奨)自分のTwitch user IDのみ - https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ で取得
    },
  },
}

概要

  • Gatewayが所有するTwitch channelです。
  • 決定的ルーティング: 返信は常にTwitchへ戻ります。
  • 各accountは独立したsession key agent:<agentId>:twitch:<accountName> に対応します。
  • usernameはbotのaccount(認証する主体)、channelは参加するchat roomです。

セットアップ(詳細)

認証情報を生成する

Twitch Token Generatorを使用します。
  • Bot Tokenを選択
  • chat:readchat:writeのscopeが選択されていることを確認
  • Client IDAccess Tokenをコピー
手動のapp登録は不要です。tokenは数時間後に期限切れになります。

botを設定する

Env var(default accountのみ):
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
またはconfig:
{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw",
      accessToken: "oauth:abc123...",
      clientId: "xyz789...",
      channel: "vevisk",
    },
  },
}
envとconfigの両方が設定されている場合は、configが優先されます。

アクセス制御(推奨)

{
  channels: {
    twitch: {
      allowFrom: ["123456789"], // (推奨)自分のTwitch user IDのみ
    },
  },
}
厳格なallowlistにはallowFromを推奨します。roleベースのアクセスにしたい場合は、代わりにallowedRolesを使ってください。 利用可能なroles: "moderator""owner""vip""subscriber""all" なぜuser IDなのか? usernameは変更できるため、なりすましが可能になります。user IDは恒久的です。 Twitch user IDを調べる: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/(Twitch usernameをIDに変換)

token更新(任意)

Twitch Token Generatorのtokenは自動更新できません。期限切れになったら再生成してください。 tokenを自動更新したい場合は、Twitch Developer Consoleで独自のTwitch applicationを作成し、configに次を追加します。
{
  channels: {
    twitch: {
      clientSecret: "your_client_secret",
      refreshToken: "your_refresh_token",
    },
  },
}
botは有効期限前に自動でtokenを更新し、更新イベントをログに記録します。

マルチaccountサポート

accountごとのtokenにはchannels.twitch.accountsを使用します。共有パターンについてはgateway/configurationを参照してください。 例(1つのbot accountを2つのchannelsで使用):
{
  channels: {
    twitch: {
      accounts: {
        channel1: {
          username: "openclaw",
          accessToken: "oauth:abc123...",
          clientId: "xyz789...",
          channel: "vevisk",
        },
        channel2: {
          username: "openclaw",
          accessToken: "oauth:def456...",
          clientId: "uvw012...",
          channel: "secondchannel",
        },
      },
    },
  },
}
注: 各accountには独自のtokenが必要です(channelごとに1つのtoken)。

アクセス制御

roleベースの制限

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

User IDによるallowlist(最も安全)

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

roleベースのアクセス(代替)

allowFromは厳格なallowlistです。設定されている場合、それらのuser IDのみが許可されます。 roleベースのアクセスにしたい場合は、allowFromを未設定のままにして、代わりにallowedRolesを設定してください。
{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowedRoles: ["moderator"],
        },
      },
    },
  },
}

@mention必須を無効にする

デフォルトではrequireMentiontrueです。無効にしてすべてのメッセージに応答するには:
{
  channels: {
    twitch: {
      accounts: {
        default: {
          requireMention: false,
        },
      },
    },
  },
}

トラブルシューティング

まず、診断コマンドを実行します。
openclaw doctor
openclaw channels status --probe

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

アクセス制御を確認: 自分のuser IDがallowFromに含まれていることを確認するか、テストのために一時的に allowFromを外してallowedRoles: ["all"]を設定してください。 botがchannelに入っていることを確認: botはchannelで指定されたchannelに参加している必要があります。

tokenの問題

「Failed to connect」または認証エラー:
  • accessTokenがOAuth access tokenの値であることを確認してください(通常はoauth:プレフィックスで始まります)
  • tokenにchat:readchat:writeのscopeがあることを確認してください
  • token更新を使っている場合は、clientSecretrefreshTokenが設定されていることを確認してください

token更新が機能しない

更新イベントのログを確認:
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
「token refresh disabled (no refresh token)」と表示される場合:
  • clientSecretが提供されていることを確認してください
  • refreshTokenが提供されていることを確認してください

Config

Account config:
  • username - Bot username
  • accessToken - chat:readchat:writeを持つOAuth access token
  • clientId - Twitch Client ID(Token Generatorまたは独自appから)
  • channel - 参加するchannel(必須)
  • enabled - このaccountを有効化(デフォルト: true
  • clientSecret - 任意: token自動更新用
  • refreshToken - 任意: token自動更新用
  • expiresIn - tokenの有効期限(秒)
  • obtainmentTimestamp - token取得タイムスタンプ
  • allowFrom - user ID allowlist
  • allowedRoles - roleベースのアクセス制御("moderator" | "owner" | "vip" | "subscriber" | "all"
  • requireMention - @mention必須(デフォルト: true
Provider options:
  • channels.twitch.enabled - channel起動の有効/無効
  • channels.twitch.username - Bot username(簡略化された単一account config)
  • channels.twitch.accessToken - OAuth access token(簡略化された単一account config)
  • channels.twitch.clientId - Twitch Client ID(簡略化された単一account config)
  • channels.twitch.channel - 参加するchannel(簡略化された単一account config)
  • channels.twitch.accounts.<accountName> - マルチaccount config(上記のすべてのaccountフィールド)
完全な例:
{
  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"],
        },
      },
    },
  },
}

Tool actions

agentは次のactionでtwitchを呼び出せます。
  • send - channelにメッセージを送信
例:
{
  action: "twitch",
  params: {
    message: "Hello Twitch!",
    to: "#mychannel",
  },
}

安全性と運用

  • tokenはパスワードとして扱う - tokenをgitにコミットしないでください
  • 長時間動作するbotには自動token更新を使う
  • アクセス制御にはusernameではなくuser ID allowlistを使う
  • ログを監視する - token更新イベントと接続状態を確認してください
  • tokenのscopeは最小限にする - chat:readchat:writeのみを要求してください
  • 行き詰まった場合: 他のプロセスがsessionを所有していないことを確認してからGatewayを再起動してください

制限

  • 1メッセージあたり500文字(単語境界で自動分割)
  • chunking前にMarkdownは除去されます
  • レート制限なし(Twitch組み込みのレート制限を使用)

関連

  • Channels Overview — サポートされているすべてのchannels
  • Pairing — DM認証とペアリングフロー
  • Groups — グループchatの挙動とmentionゲート
  • Channel Routing — メッセージのsessionルーティング
  • Security — アクセスモデルとハードニング