Developer and self-hosted

Twitch

Twitch のチャット(IRC)インターフェースを Twurple クライアント経由で利用する Twitch チャット対応です。OpenClaw は Twitch ボットアカウントとしてサインインし、設定されたアカウントごとに 1 つのチャンネルへ参加し、そのチャンネルで返信します。

インストール

Twitch は公式 Plugin として提供され、コアインストールには含まれません。

npm レジストリ

bash
openclaw plugins install @openclaw/twitch

ローカルチェックアウト

bash
openclaw plugins install ./path/to/local/twitch-plugin

plugins install は Plugin を登録して有効にします。openclaw onboard または openclaw channels add で Twitch を選択すると、必要に応じてインストールされます。現在のリリースを追従するにはバージョンなしのパッケージ名を使用し、再現可能なインストールが必要な場合にのみ正確なバージョンを固定してください。OpenClaw 2026.4.10 以降が必要です。

詳細:Plugin

クイックセットアップ

  • Plugin をインストールする

    上記のインストールを参照してください。

  • Twitch ボットアカウントを作成する

    ボット専用の Twitch アカウントを作成します(既存のアカウントを使用することもできます)。

  • 認証情報を生成する

    Twitch Token Generator を使用します。

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

    https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ を使用して、ユーザー名を Twitch ユーザー ID に変換します。

  • トークンを設定する

    • 環境変数:OPENCLAW_TWITCH_ACCESS_TOKEN=...(デフォルトアカウントのみ)
    • または設定:channels.twitch.accessToken

    両方が設定されている場合は設定が優先されます(環境変数はデフォルトアカウントのフォールバックとしてのみ使用されます)。

  • Gateway を起動する

    bash
    openclaw gateway run
  • 最小設定:

    json5
    {  channels: {    twitch: {      enabled: true,      username: "openclaw", // ボットの Twitch アカウント(認証に使用)      accessToken: "oauth:abc123...", // OAuth アクセストークン(または OPENCLAW_TWITCH_ACCESS_TOKEN 環境変数を使用)      clientId: "xyz789...", // Token Generator から取得したクライアント ID      channel: "yourchannel", // 参加する Twitch チャンネルのチャット(必須)      allowFrom: ["123456789"], // (推奨)自分の Twitch ユーザー ID のみ    },  },}

    概要

    • Gateway が所有する Twitch チャンネルです。
    • 決定的なルーティング:返信は常に、メッセージの送信元である Twitch チャンネルへ返されます。
    • 参加した各チャンネルは、分離されたグループセッションキー agent:<agentId>:twitch:group:<channel> に対応します。
    • username はボットのアカウント(認証するアカウント)、channel は参加するチャットルームです。各アカウントエントリは正確に 1 つのチャンネルへ参加します。
    • トークンは oauth: プレフィックスの有無にかかわらず使用できます。OpenClaw はどちらの形式も正規化します(セットアップウィザードでは oauth: 形式を使用します)。

    トークンの更新(任意)

    Twitch Token Generator のトークンは OpenClaw では更新できません。期限が切れたら再生成してください(有効期間は数時間で、アプリの登録は不要です)。

    自動更新を使用するには、Twitch Developer Console で独自のアプリを作成し、以下を追加します。

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

    両方を設定すると、Plugin は期限切れ前にトークンを更新する認証プロバイダーを使用し、更新のたびにログを記録します。refreshToken がない場合は token refresh disabled (no refresh token) とログに記録され、clientSecret がない場合は静的な(更新されない)トークンへフォールバックします。

    複数アカウント対応

    アカウントごとの認証情報を含む channels.twitch.accounts を使用します。共通パターンについては設定を参照してください。

    例(2 つのチャンネルで 1 つのボットアカウントを使用):

    json5
    {  channels: {    twitch: {      accounts: {        channel1: {          username: "openclaw",          accessToken: "oauth:abc123...",          clientId: "xyz789...",          channel: "yourchannel",        },        channel2: {          username: "openclaw",          accessToken: "oauth:def456...",          clientId: "uvw012...",          channel: "secondchannel",        },      },    },  },}

    アクセス制御

    allowFrom は Twitch ユーザー ID の厳格な許可リストです。これを設定すると allowedRoles は無視されます。代わりにロールベースのアクセスを使用する場合は、allowFrom を設定しないでください。

    利用可能なロール: "moderator""owner""vip""subscriber""all"

    ユーザー ID 許可リスト(最も安全)

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

    ロールベース

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

    @メンション要件を無効にする

    デフォルトでは requireMentiontrue です。許可されたすべてのメッセージに応答するには、次のように設定します。

    json5
    {  channels: {    twitch: {      accounts: {        default: {          requireMention: false,        },      },    },  },}

    トラブルシューティング

    最初に、診断コマンドを実行します。

    bash
    openclaw doctoropenclaw channels status --probe
    ボットがメッセージに応答しない
    • アクセス制御を確認する: 自分のユーザー ID が allowFrom に含まれていることを確認するか、テストのため一時的に allowFrom を削除して allowedRoles: ["all"] を設定します。
    • メンションゲートを確認する: requireMention: true(デフォルト)の場合、メッセージでボットのユーザー名を @メンションする必要があります。
    • ボットがチャンネルに参加していることを確認する: ボットは channel で指定されたチャンネルにのみ参加します。
    トークンの問題

    「接続に失敗しました」または認証エラーが発生する場合:

    • accessToken が OAuth アクセストークンの値であることを確認する(oauth: プレフィックスは任意)
    • トークンに chat:readchat:write のスコープがあることを確認する
    • トークン更新を使用している場合は、clientSecretrefreshToken が設定されていることを確認する
    トークン更新が機能しない

    ログで更新イベントを確認します。

    text
    mybot に環境変数のトークンソースを使用ユーザー 123456 のアクセストークンを更新しました(14400 秒後に期限切れ)

    token refresh disabled (no refresh token) が表示される場合:

    • clientSecret が指定されていることを確認する
    • refreshToken が指定されていることを確認する

    設定

    アカウント設定

    usernamestringrequired

    ボットのユーザー名(認証するアカウント)。

    accessTokenstringrequired

    chat:readchat:write を持つ OAuth アクセストークン(デフォルトアカウントでは設定または環境変数)。

    clientIdstringrequired

    Twitch クライアント ID(Token Generator または独自のアプリから取得)。スキーマ上は任意ですが、接続には必須です。

    channelstringrequired

    参加するチャンネル。

    enabledbooleandefault: true

    このアカウントを有効にします。

    clientSecretstring

    任意:トークンの自動更新に使用します。

    refreshTokenstring

    任意:トークンの自動更新に使用します。

    expiresInnumber

    トークンの有効期限(秒単位、更新の追跡用)。

    obtainmentTimestampnumber

    トークンを取得した時点のタイムスタンプ(更新の追跡用)。

    allowFromstring[]

    ユーザー ID の許可リスト。設定するとロールは無視されます。

    allowedRoles'Array<"moderator"
    requireMentionbooleandefault: true

    ボットを起動するために @メンションを必須にします。

    responsePrefixstring

    このアカウントの送信応答プレフィックスを上書きします。

    プロバイダーオプション

    • channels.twitch.enabled - チャンネルの起動を有効化または無効化
    • channels.twitch.username / accessToken / clientId / channel - 簡略化された単一アカウント設定(暗黙の default アカウント。accounts.default より優先)
    • channels.twitch.accounts.<accountName> - 複数アカウント設定(上記のすべてのアカウントフィールド)
    • channels.twitch.defaultAccount - デフォルトにするアカウント名
    • channels.twitch.markdown.tables - Markdown テーブルのレンダリングモード(off | bullets | code | block

    完全な例:

    json5
    {  channels: {    twitch: {      enabled: true,      username: "openclaw",      accessToken: "oauth:abc123...",      clientId: "xyz789...",      channel: "yourchannel",      clientSecret: "secret123...",      refreshToken: "refresh456...",      allowFrom: ["123456789"],      accounts: {        second: {          username: "mybot",          accessToken: "oauth:def456...",          clientId: "uvw012...",          channel: "your_channel",          enabled: true,          expiresIn: 14400,          obtainmentTimestamp: 1706092800000,          allowedRoles: ["moderator"],        },      },    },  },}

    ツールアクション

    エージェントは、メッセージツールの send アクションを通じて Twitch メッセージを送信できます。

    json5
    {  channel: "twitch",  action: "send",  to: "#mychannel",  message: "Hello Twitch!",}

    to は任意で、デフォルトではアカウントに設定された channel が使用されます。

    安全性と運用

    • トークンをパスワードと同様に扱う - トークンを Git にコミットしないでください。
    • 長時間稼働するボットではトークンの自動更新を使用する
    • アクセス制御には、ユーザー名ではなくユーザー ID の許可リストを使用する
    • トークン更新イベントと接続状態を確認するためにログを監視する
    • トークンのスコープを最小限にする - chat:readchat:write のみを要求してください。
    • 問題が解決しない場合:ほかのプロセスがセッションを所有していないことを確認してから、Gateway を再起動します。

    制限

    • 1 メッセージあたり 500 文字。長い返信は単語の境界で分割されます。
    • 送信前に Markdown は除去されます(Twitch チャットはプレーンテキストで、改行はスペースになります)。
    • OpenClaw 自体はレート制限を追加しません。Twurple チャットクライアントが Twitch のレート制限を処理します。

    関連項目

    Was this useful?
    On this page

    On this page