Twitch
IRC接続によるTwitch chatサポート。OpenClawはTwitchユーザー(bot account)として接続し、channelsでメッセージを受信・送信します。同梱plugin
Twitchは現在のOpenClawリリースでは同梱pluginとして提供されるため、通常の パッケージ済みビルドでは別途インストールは不要です。 古いビルド、またはTwitchを除外したカスタムインストールを使っている場合は、 手動でインストールしてください。 CLI経由でインストール(npm registry):クイックセットアップ(初心者向け)
- Twitch pluginが利用可能であることを確認します。
- 現在のパッケージ版OpenClawリリースにはすでに同梱されています。
- 古い/カスタムインストールでは、上記コマンドで手動追加できます。
- bot専用のTwitch accountを作成します(または既存のaccountを使います)。
- 認証情報を生成します: Twitch Token Generator
- Bot Tokenを選択
chat:readとchat:writeのscopeが選択されていることを確認- Client IDとAccess Tokenをコピー
- Twitch user IDを調べます: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- tokenを設定します:
- Env:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(default accountのみ) - またはconfig:
channels.twitch.accessToken - 両方設定されている場合は、configが優先されます(envフォールバックはdefault accountのみ)。
- Env:
- Gatewayを起動します。
allowFromまたはallowedRoles)を追加してください。requireMentionのデフォルトはtrueです。
最小構成:
概要
- Gatewayが所有するTwitch channelです。
- 決定的ルーティング: 返信は常にTwitchへ戻ります。
- 各accountは独立したsession key
agent:<agentId>:twitch:<accountName>に対応します。 usernameはbotのaccount(認証する主体)、channelは参加するchat roomです。
セットアップ(詳細)
認証情報を生成する
Twitch Token Generatorを使用します。- Bot Tokenを選択
chat:readとchat:writeのscopeが選択されていることを確認- Client IDとAccess Tokenをコピー
botを設定する
Env var(default accountのみ):アクセス制御(推奨)
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に次を追加します。マルチaccountサポート
accountごとのtokenにはchannels.twitch.accountsを使用します。共有パターンについてはgateway/configurationを参照してください。
例(1つのbot accountを2つのchannelsで使用):
アクセス制御
roleベースの制限
User IDによるallowlist(最も安全)
roleベースのアクセス(代替)
allowFromは厳格なallowlistです。設定されている場合、それらのuser IDのみが許可されます。
roleベースのアクセスにしたい場合は、allowFromを未設定のままにして、代わりにallowedRolesを設定してください。
@mention必須を無効にする
デフォルトではrequireMentionはtrueです。無効にしてすべてのメッセージに応答するには:
トラブルシューティング
まず、診断コマンドを実行します。botがメッセージに応答しない
アクセス制御を確認: 自分のuser IDがallowFromに含まれていることを確認するか、テストのために一時的に
allowFromを外してallowedRoles: ["all"]を設定してください。
botがchannelに入っていることを確認: botはchannelで指定されたchannelに参加している必要があります。
tokenの問題
「Failed to connect」または認証エラー:accessTokenがOAuth access tokenの値であることを確認してください(通常はoauth:プレフィックスで始まります)- tokenに
chat:readとchat:writeのscopeがあることを確認してください - token更新を使っている場合は、
clientSecretとrefreshTokenが設定されていることを確認してください
token更新が機能しない
更新イベントのログを確認:clientSecretが提供されていることを確認してくださいrefreshTokenが提供されていることを確認してください
Config
Account config:username- Bot usernameaccessToken-chat:readとchat:writeを持つOAuth access tokenclientId- Twitch Client ID(Token Generatorまたは独自appから)channel- 参加するchannel(必須)enabled- このaccountを有効化(デフォルト:true)clientSecret- 任意: token自動更新用refreshToken- 任意: token自動更新用expiresIn- tokenの有効期限(秒)obtainmentTimestamp- token取得タイムスタンプallowFrom- user ID allowlistallowedRoles- roleベースのアクセス制御("moderator" | "owner" | "vip" | "subscriber" | "all")requireMention- @mention必須(デフォルト:true)
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フィールド)
Tool actions
agentは次のactionでtwitchを呼び出せます。
send- channelにメッセージを送信
安全性と運用
- tokenはパスワードとして扱う - tokenをgitにコミットしないでください
- 長時間動作するbotには自動token更新を使う
- アクセス制御にはusernameではなくuser ID allowlistを使う
- ログを監視する - token更新イベントと接続状態を確認してください
- tokenのscopeは最小限にする -
chat:readとchat:writeのみを要求してください - 行き詰まった場合: 他のプロセスがsessionを所有していないことを確認してからGatewayを再起動してください
制限
- 1メッセージあたり500文字(単語境界で自動分割)
- chunking前にMarkdownは除去されます
- レート制限なし(Twitch組み込みのレート制限を使用)
関連
- Channels Overview — サポートされているすべてのchannels
- Pairing — DM認証とペアリングフロー
- Groups — グループchatの挙動とmentionゲート
- Channel Routing — メッセージのsessionルーティング
- Security — アクセスモデルとハードニング