Twitch(プラグイン)
IRC接続によるTwitchチャットサポートです。OpenClawはTwitchユーザー(Botアカウント)としてチャンネルに接続し、メッセージの受信と送信を行います。
プラグインが必要です
Twitchはプラグインとして提供されており、コアインストールにはバンドルされていません。
CLI経由でインストール(npmレジストリ):
openclaw plugins install @openclaw/twitch
ローカルチェックアウト(gitリポジトリから実行する場合):
openclaw plugins install ./extensions/twitch
詳細:プラグイン
クイックセットアップ(初心者向け)
- Bot用の専用Twitchアカウントを作成します(または既存のアカウントを使用)。
- 認証情報を生成します:Twitch Token Generator
- Bot Tokenを選択
chat:readとchat:writeのスコープが選択されていることを確認- Client IDとAccess Tokenをコピー
- TwitchユーザーIDを確認します:https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- トークンを設定します:
- 環境変数:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(デフォルトアカウントのみ) - または設定:
channels.twitch.accessToken - 両方設定されている場合、設定が優先されます(環境変数はデフォルトアカウントのフォールバックのみ)。
- 環境変数:
- 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:readとchat:writeのスコープが選択されていることを確認- Client IDとAccess 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"],
},
},
},
},
}
@メンション要件の無効化
デフォルトでrequireMentionはtrueです。すべてのメッセージに応答するには:
{
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:readとchat:writeのスコープがあるか確認 - トークンリフレッシュを使用する場合、
clientSecretとrefreshTokenが設定されているか確認
トークンリフレッシュが動作しない
ログのリフレッシュイベントを確認:
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:readとchat:writeスコープを持つOAuth access tokenclientId- 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:readとchat:writeのみをリクエスト - 問題が発生した場合:他のプロセスがセッションを占有していないことを確認してからGatewayを再起動
制限事項
- メッセージあたり500文字(ワード境界で自動チャンク分割)
- 送信前にMarkdownは除去されます
- レート制限なし(Twitch組み込みのレート制限を使用)