Twitch (plugin)

Twitch-chatondersteuning via IRC-verbinding. OpenClaw maakt als Twitch-gebruiker (botaccount) verbinding om berichten te ontvangen en te versturen in kanalen.

Plugin vereist

Twitch wordt als plugin geleverd en is niet gebundeld met de kerninstallatie.

Installeren via CLI (npm-register):

openclaw plugins install @openclaw/twitch

Lokale checkout (vanuit een git-repo):

openclaw plugins install ./extensions/twitch

Details: Plugins

Snelle installatie (beginner)

  1. Maak een apart Twitch-account aan voor de bot (of gebruik een bestaand account).
  2. Genereer credentials: Twitch Token Generator
    • Selecteer Bot Token
    • Verifieer dat scopes chat:read en chat:write zijn geselecteerd
    • Kopieer de Client ID en Access Token
  3. Zoek je Twitch-gebruikers-ID op: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
  4. Configureer het token:
    • Omgevingsvariabele: OPENCLAW_TWITCH_ACCESS_TOKEN=... (alleen standaardaccount)
    • Of config: channels.twitch.accessToken
    • Als beide zijn ingesteld, heeft config voorrang (omgevingsvariabele is alleen terugval voor standaardaccount).
  5. Start de gateway.

Waarschuwing: Voeg toegangscontrole toe (allowFrom of allowedRoles) om te voorkomen dat ongeautoriseerde gebruikers de bot triggeren. requireMention staat standaard op true.

Minimale configuratie:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw", // Bot's Twitch account
      accessToken: "oauth:abc123...", // OAuth Access Token (or use OPENCLAW_TWITCH_ACCESS_TOKEN env var)
      clientId: "xyz789...", // Client ID from Token Generator
      channel: "vevisk", // Which Twitch channel's chat to join (required)
      allowFrom: ["123456789"], // (recommended) Your Twitch user ID only - get it from https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
    },
  },
}

Wat het is

  • Een Twitch-kanaal beheerd door de Gateway.
  • Deterministische routering: antwoorden gaan altijd terug naar Twitch.
  • Elk account wordt gekoppeld aan een geïsoleerde sessiesleutel agent:<agentId>:twitch:<accountName>.
  • username is het botaccount (wie zich authenticeert), channel is de chatroom om toe te treden.

Installatie (gedetailleerd)

Credentials genereren

Gebruik Twitch Token Generator:

  • Selecteer Bot Token
  • Verifieer dat scopes chat:read en chat:write zijn geselecteerd
  • Kopieer de Client ID en Access Token

Handmatige app-registratie is niet nodig. Tokens verlopen na enkele uren.

De bot configureren

Omgevingsvariabele (alleen standaardaccount):

OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...

Of config:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw",
      accessToken: "oauth:abc123...",
      clientId: "xyz789...",
      channel: "vevisk",
    },
  },
}

Als zowel omgevingsvariabele als config zijn ingesteld, heeft config voorrang.

Toegangscontrole (aanbevolen)

{
  channels: {
    twitch: {
      allowFrom: ["123456789"], // (recommended) Your Twitch user ID only
    },
  },
}

Gebruik bij voorkeur allowFrom voor een strikte allowlist. Gebruik allowedRoles als je rolgebaseerde toegang wilt.

Beschikbare rollen: "moderator", "owner", "vip", "subscriber", "all".

Waarom gebruikers-ID’s? Gebruikersnamen kunnen worden gewijzigd, wat imitatie mogelijk maakt. Gebruikers-ID’s zijn permanent.

Zoek je Twitch-gebruikers-ID op: https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/ (Converteer je Twitch-gebruikersnaam naar ID)

Token vernieuwen (optioneel)

Tokens van Twitch Token Generator kunnen niet automatisch worden vernieuwd — genereer opnieuw wanneer verlopen.

Voor automatische tokenvernieuwing maak je een eigen Twitch-applicatie aan via de Twitch Developer Console en voeg je toe aan de config:

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

De bot vernieuwt tokens automatisch voor het verlopen en logt vernieuwingsevents.

Multi-account-ondersteuning

Gebruik channels.twitch.accounts met per-account tokens. Zie gateway/configuration voor het gedeelde patroon.

Voorbeeld (een botaccount in twee kanalen):

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

Opmerking: Elk account heeft een eigen token nodig (een token per kanaal).

Toegangscontrole

Rolgebaseerde beperkingen

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

Allowlist op gebruikers-ID (meest veilig)

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

Rolgebaseerde toegang (alternatief)

allowFrom is een strikte allowlist. Wanneer ingesteld, worden alleen die gebruikers-ID’s toegestaan. Als je rolgebaseerde toegang wilt, laat allowFrom leeg en configureer in plaats daarvan allowedRoles:

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

@mention-vereiste uitschakelen

Standaard is requireMention true. Om uit te schakelen en op alle berichten te reageren:

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

Probleemoplossing

Voer eerst de diagnostische commando’s uit:

openclaw doctor
openclaw channels status --probe

Bot reageert niet op berichten

Controleer de toegangscontrole: Zorg ervoor dat je gebruikers-ID in allowFrom staat, of verwijder tijdelijk allowFrom en stel allowedRoles: ["all"] in om te testen.

Controleer of de bot in het kanaal zit: De bot moet toetreden tot het kanaal dat is opgegeven in channel.

Tokenproblemen

“Failed to connect” of authenticatiefouten:

  • Verifieer dat accessToken de OAuth access token-waarde is (begint meestal met het oauth:-prefix)
  • Controleer of het token de scopes chat:read en chat:write heeft
  • Als je tokenvernieuwing gebruikt, verifieer dan dat clientSecret en refreshToken zijn ingesteld

Tokenvernieuwing werkt niet

Controleer logs op vernieuwingsevents:

Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)

Als je “token refresh disabled (no refresh token)” ziet:

  • Zorg ervoor dat clientSecret is opgegeven
  • Zorg ervoor dat refreshToken is opgegeven

Config

Accountconfiguratie:

  • username - Botgebruikersnaam
  • accessToken - OAuth access token met chat:read en chat:write
  • clientId - Twitch Client ID (van Token Generator of je app)
  • channel - Kanaal om toe te treden (vereist)
  • enabled - Dit account inschakelen (standaard: true)
  • clientSecret - Optioneel: voor automatische tokenvernieuwing
  • refreshToken - Optioneel: voor automatische tokenvernieuwing
  • expiresIn - Tokenvervaltijd in seconden
  • obtainmentTimestamp - Tijdstempel tokenverkrijging
  • allowFrom - Gebruikers-ID-allowlist
  • allowedRoles - Rolgebaseerde toegangscontrole ("moderator" | "owner" | "vip" | "subscriber" | "all")
  • requireMention - @mention vereisen (standaard: true)

Provideropties:

  • channels.twitch.enabled - Kanaal in-/uitschakelen bij opstart
  • channels.twitch.username - Botgebruikersnaam (vereenvoudigde single-account-config)
  • channels.twitch.accessToken - OAuth access token (vereenvoudigde single-account-config)
  • channels.twitch.clientId - Twitch Client ID (vereenvoudigde single-account-config)
  • channels.twitch.channel - Kanaal om toe te treden (vereenvoudigde single-account-config)
  • channels.twitch.accounts.<accountName> - Multi-account-config (alle bovenstaande accountvelden)

Volledig voorbeeld:

{
  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"],
        },
      },
    },
  },
}

Tool-acties

De agent kan twitch aanroepen met actie:

  • send - Een bericht naar een kanaal sturen

Voorbeeld:

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

Veiligheid en beheer

  • Behandel tokens als wachtwoorden - Commit nooit tokens naar git
  • Gebruik automatische tokenvernieuwing voor langdraaiende bots
  • Gebruik gebruikers-ID-allowlists in plaats van gebruikersnamen voor toegangscontrole
  • Monitor logs op tokenvernieuwingsevents en verbindingsstatus
  • Beperk tokenscopes - Vraag alleen chat:read en chat:write aan
  • Vastgelopen?: Herstart de gateway nadat je hebt bevestigd dat geen ander proces de sessie bezit

Limieten

  • 500 tekens per bericht (automatisch opgesplitst bij woordgrenzen)
  • Markdown wordt verwijderd voor het opsplitsen
  • Geen snelheidsbeperking (gebruikt Twitch’s ingebouwde snelheidslimieten)