メッセージングプラットフォーム

Twitch

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

必要なプラグイン

Twitchはプラグインとして提供されており、コアインストールにはバンドルされていません。CLI(npmレジストリ)経由でインストールします:

openclaw plugins install @openclaw/twitch

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

openclaw plugins install ./extensions/twitch

詳細:プラグイン

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

  1. ボット用の専用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. ゲートウェイを起動します。

⚠️ 重要: 未承認ユーザーによるボットのトリガーを防ぐため、アクセス制御(allowFromまたはallowedRoles)を追加してください。requireMentionはデフォルトでtrueです。最小限の設定:

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

概要

  • ゲートウェイが所有するTwitchチャンネル。
  • 決定論的なルーティング:返信は常にTwitchに戻ります。
  • 各アカウントは独立したセッションキーagent:<agentId>:twitch:<accountName>にマッピングされます。
  • usernameはボットのアカウント(認証する側)、channelは参加するチャットルームです。

セットアップ(詳細)

認証情報の生成

Twitch Token Generatorを使用:

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

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

ボットの設定

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

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ユーザー名をIDに変換)

トークン更新(オプション)

Twitch Token Generatorからのトークンは自動更新できません - 期限切れになったら再生成してください。自動トークン更新のためには、Twitch Developer Consoleで独自のTwitchアプリケーションを作成し、設定に追加します:

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

ボットは期限切れ前にトークンを自動更新し、更新イベントをログに記録します。

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

アカウントごとのトークンでchannels.twitch.accountsを使用します。共有パターンについてはgateway/configurationを参照してください。例(1つのボットアカウントで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

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

アクセス制御を確認: あなたのユーザーIDがallowFromに含まれていることを確認するか、一時的にallowFromを削除し、allowedRoles: ["all"]を設定してテストします。ボットがチャンネルに参加しているか確認: ボットはchannelで指定されたチャンネルに参加している必要があります。

トークンの問題

「接続に失敗しました」または認証エラー:

  • accessTokenがOAuthアクセストークンの値であることを確認(通常は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 - ボットのユーザー名
  • accessToken - chat:readchat:writeを持つOAuthアクセストークン
  • clientId - Twitchクライアント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 - ボットユーザー名(簡易単一アカウント設定)
  • channels.twitch.accessToken - OAuthアクセストークン(簡易単一アカウント設定)
  • channels.twitch.clientId - Twitchクライアント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"],
        },
      },
    },
  },
}

ツールアクション

エージェントはtwitchアクションを呼び出せます:

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

例:

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

安全性と運用

  • トークンはパスワードのように扱う - トークンをgitにコミットしない
  • 長時間実行するボットには自動トークン更新を使用
  • アクセス制御にはユーザー名ではなくユーザーID許可リストを使用
  • トークン更新イベントと接続ステータスのログを監視
  • トークンのスコープは最小限に - chat:readchat:writeのみをリクエスト
  • 問題が解決しない場合: 他のプロセスがセッションを所有していないことを確認した後、ゲートウェイを再起動

制限

  • メッセージあたり500文字(単語境界で自動分割)
  • マークダウンは分割前に除去
  • レート制限なし(Twitchの組み込みレート制限を使用)

TlonWhatsApp