Twitch
IRC接続によるTwitchチャットサポート。OpenClawはTwitchユーザー(ボットアカウント)として接続し、チャンネル内でメッセージの送受信を行います。
必要なプラグイン
Twitchはプラグインとして提供されており、コアインストールにはバンドルされていません。CLI(npmレジストリ)経由でインストールします:
openclaw plugins install @openclaw/twitch
ローカルチェックアウト(gitリポジトリから実行する場合):
openclaw plugins install ./extensions/twitch
詳細:プラグイン
クイックセットアップ(初心者向け)
- ボット用の専用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 - 両方が設定されている場合、設定ファイルが優先されます(環境変数はデフォルトアカウントのみのフォールバック)。
- 環境変数:
- ゲートウェイを起動します。
⚠️ 重要: 未承認ユーザーによるボットのトリガーを防ぐため、アクセス制御(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は参加するチャットルームです。
セットアップ(詳細)
認証情報の生成
- Bot Tokenを選択
- スコープ
chat:readとchat:writeが選択されていることを確認 - Client IDとAccess 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"],
},
},
},
},
}
@メンション要件の無効化
デフォルトでは、requireMentionはtrueです。無効にしてすべてのメッセージに応答するには:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false,
},
},
},
},
}
トラブルシューティング
まず、診断コマンドを実行します:
openclaw doctor
openclaw channels status --probe
ボットがメッセージに応答しない
アクセス制御を確認: あなたのユーザーIDがallowFromに含まれていることを確認するか、一時的にallowFromを削除し、allowedRoles: ["all"]を設定してテストします。ボットがチャンネルに参加しているか確認: ボットはchannelで指定されたチャンネルに参加している必要があります。
トークンの問題
「接続に失敗しました」または認証エラー:
accessTokenがOAuthアクセストークンの値であることを確認(通常は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- ボットのユーザー名accessToken-chat:readとchat: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:readとchat:writeのみをリクエスト - 問題が解決しない場合: 他のプロセスがセッションを所有していないことを確認した後、ゲートウェイを再起動
制限
- メッセージあたり500文字(単語境界で自動分割)
- マークダウンは分割前に除去
- レート制限なし(Twitchの組み込みレート制限を使用)