Twitch (Plugin)
Twitch-Chat-Unterstützung über IRC-Verbindung. OpenClaw verbindet sich als Twitch-Benutzer (Bot-Konto), um Nachrichten in Kanälen zu empfangen und zu senden.
Plugin erforderlich
Twitch wird als Plugin ausgeliefert und ist nicht im Core-Install enthalten. Installation über CLI (npm-Registry):
openclaw plugins install @openclaw/twitchLokaler Checkout (bei Ausführung aus einem Git-Repo):
openclaw plugins install ./extensions/twitchDetails: Plugins
Schnelleinrichtung (Anfänger)
- Dediziertes Twitch-Konto für den Bot erstellen (oder bestehendes Konto nutzen).
- Anmeldedaten erzeugen: Twitch Token Generator
- Bot Token wählen
- Sicherstellen, dass die Scopes
chat:readundchat:writeausgewählt sind - Client ID und Access Token kopieren
- Twitch-Benutzer-ID ermitteln: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- Token konfigurieren:
- Umgebung:
CLAWDBOT_TWITCH_ACCESS_TOKEN=...(nur Standardkonto) - Oder Konfig:
channels.twitch.accessToken - Wenn beide gesetzt sind, hat die Konfiguration Vorrang (Umgebungs-Fallback nur Standardkonto).
- Umgebung:
- Gateway starten.
⚠️ Wichtig: Zugriffskontrolle hinzufügen (allowFrom oder allowedRoles), um unbefugte Nutzer vom Auslösen des Bots abzuhalten. requireMention ist standardmäßig true. Minimale Konfiguration:
{
channels: {
twitch: {
enabled: true,
username: "openclaw", // Bot's Twitch account
accessToken: "oauth:abc123...", // OAuth Access Token (or use CLAWDBOT_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/
}
}
}Ziele
- Ein Twitch-Kanal, der dem Gateway gehört.
- Deterministisches Routing: Antworten gehen immer zurück zu Twitch.
- Jedes Konto wird einem isolierten Sitzungsschlüssel
agent:<agentId>:twitch:<accountName>zugeordnet. usernameist das Bot-Konto (wer sich anmeldet),channelist der Chatraum, dem beigetreten wird.
Einrichtung (detailliert)
Anmeldedaten erzeugen
Twitch Token Generator nutzen:
- Bot Token wählen
- Sicherstellen, dass die Scopes
chat:readundchat:writeausgewählt sind - Client ID und Access Token kopieren
Keine manuelle App-Registrierung nötig. Tokens laufen nach einigen Stunden ab.
Bot konfigurieren
Umgebungsvariable (nur Standardkonto):
CLAWDBOT_TWITCH_ACCESS_TOKEN=oauth:abc123...Oder Konfiguration:
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk"
}
}
}Wenn sowohl Umgebung als auch Konfiguration gesetzt sind, hat die Konfiguration Vorrang.
Zugriffskontrolle (empfohlen)
{
channels: {
twitch: {
allowFrom: ["123456789"], // (recommended) Your Twitch user ID only
allowedRoles: ["moderator"] // Or restrict to roles
}
}
}Verfügbare Rollen: "moderator", "owner", "vip", "subscriber", "all". Warum Benutzer-IDs? Benutzernamen können sich ändern und ermöglichen Identitätswechsel. Benutzer-IDs sind dauerhaft. Twitch-Benutzer-ID ermitteln: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ (Convert your Twitch username to ID)
Token-Aktualisierung (optional)
Tokens von Twitch Token Generator können nicht automatisch aktualisiert werden – bei Ablauf neu erzeugen. Für automatische Token-Aktualisierung eigene Twitch-Anwendung unter Twitch Developer Console erstellen und zur Konfiguration hinzufügen:
{
channels: {
twitch: {
clientSecret: "your_client_secret",
refreshToken: "your_refresh_token"
}
}
}Der Bot aktualisiert Tokens vor Ablauf automatisch und protokolliert Refresh-Events.
Mehrkonten-Unterstützung
Nutzen Sie channels.twitch.accounts mit Token pro Konto. Siehe gateway/configuration für das gemeinsame Muster. Beispiel (ein Bot-Konto in zwei Kanälen):
{
channels: {
twitch: {
accounts: {
channel1: {
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk"
},
channel2: {
username: "openclaw",
accessToken: "oauth:def456...",
clientId: "uvw012...",
channel: "secondchannel"
}
}
}
}
}Hinweis: Jedes Konto benötigt einen eigenen Token (ein Token pro Kanal).
Zugriffskontrolle
Rollenbasierte Einschränkungen
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator", "vip"]
}
}
}
}
}Zulassen-Liste nach Benutzer-ID (am sichersten)
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789", "987654321"]
}
}
}
}
}Kombinierte Zulassen-Liste + Rollen
Benutzer in allowFrom umgehen Rollenprüfungen:
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789"],
allowedRoles: ["moderator"]
}
}
}
}
}@Erwähnungspflicht deaktivieren
Standardmäßig ist requireMention true. Zum Deaktivieren und Antworten auf alle Nachrichten:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false
}
}
}
}
}Fehlerbehebung
Zuerst Diagnosebefehle ausführen:
openclaw doctor
openclaw channels status --probeBot antwortet nicht auf Nachrichten
Zugriffskontrolle prüfen: Vorübergehend allowedRoles: ["all"] setzen zum Testen. Prüfen, ob der Bot im Kanal ist: Der Bot muss dem in channel angegebenen Kanal beitreten.
Token-Probleme
„Failed to connect“ oder Authentifizierungsfehler:
- Prüfen, ob
accessTokender OAuth-Access-Token-Wert ist (beginnt typischerweise mitoauth:) - Prüfen, ob der Token die Scopes
chat:readundchat:writehat - Bei Token-Refresh prüfen, ob
clientSecretundrefreshTokengesetzt sind
Token-Refresh funktioniert nicht
Logs auf Refresh-Events prüfen:
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)Wenn „token refresh disabled (no refresh token)“ erscheint:
- Sicherstellen, dass
clientSecretgesetzt ist - Sicherstellen, dass
refreshTokengesetzt ist
Konfiguration
Konto-Konfiguration:
username- Bot-BenutzernameaccessToken- OAuth-Access-Token mitchat:readundchat:writeclientId- Twitch Client ID (vom Token Generator oder Ihrer App)channel- Kanal, dem beigetreten wird (erforderlich)enabled- Dieses Konto aktivieren (Standard:true)clientSecret- Optional: Für automatischen Token-RefreshrefreshToken- Optional: Für automatischen Token-RefreshexpiresIn- Token-Ablauf in SekundenobtainmentTimestamp- Zeitstempel der Token-ErstellungallowFrom- Benutzer-ID-Zulassen-ListeallowedRoles- Rollenbasierte Zugriffskontrolle ("moderator" | "owner" | "vip" | "subscriber" | "all")requireMention- @Erwähnung erforderlich (Standard:true)
Provider-Optionen:
channels.twitch.enabled- Kanalstart aktivieren/deaktivierenchannels.twitch.username- Bot-Benutzername (vereinfachte Einzelkonto-Konfiguration)channels.twitch.accessToken- OAuth-Access-Token (vereinfachte Einzelkonto-Konfiguration)channels.twitch.clientId- Twitch Client ID (vereinfachte Einzelkonto-Konfiguration)channels.twitch.channel- Kanal, dem beigetreten wird (vereinfachte Einzelkonto-Konfiguration)channels.twitch.accounts.<accountName>- Mehrkonten-Konfiguration (alle obigen Kontofelder)
Vollständiges Beispiel:
{
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-Aktionen
Der Agent kann twitch mit Aktion aufrufen:
send- Nachricht an einen Kanal senden
Beispiel:
{
"action": "twitch",
"params": {
"message": "Hello Twitch!",
"to": "#mychannel"
}
}Sicherheit & Betrieb
- Tokens wie Passwörter behandeln - Tokens niemals in Git committen
- Automatischen Token-Refresh für dauerhaft laufende Bots nutzen
- Benutzer-ID-Zulassen-Listen statt Benutzernamen für Zugriffskontrolle nutzen
- Logs überwachen auf Token-Refresh-Events und Verbindungsstatus
- Tokens minimal scopen - Nur
chat:readundchat:writeanfordern - Bei Hänger: Gateway neu starten, nachdem bestätigt wurde, dass kein anderer Prozess die Sitzung besitzt
Limits
- 500 Zeichen pro Nachricht (automatisch an Wortgrenzen gechunkt)
- Markdown wird vor dem Chunking entfernt
- Keine Ratenbegrenzung (nutzt Twitchs eingebaute Ratenlimits)