Twitch (plugin)
Supporto chat Twitch tramite connessione IRC. OpenClaw si connette come utente Twitch (account bot) per ricevere e inviare messaggi nei canali.
Plugin necessario
Twitch e distribuito come plugin e non e incluso nell’installazione core.
Installa da CLI (registro npm):
openclaw plugins install @openclaw/twitch
Da checkout locale (se stai lavorando da un repo git):
openclaw plugins install ./extensions/twitch
Dettagli: Plugin
Setup rapido (principianti)
- Crea un account Twitch dedicato per il bot (o usa un account esistente).
- Genera le credenziali: Twitch Token Generator
- Seleziona Bot Token
- Verifica che gli scope
chat:readechat:writesiano selezionati - Copia il Client ID e l’Access Token
- Trova il tuo Twitch user ID: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- Configura il token:
- Env:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(solo account predefinito) - Oppure config:
channels.twitch.accessToken - Se entrambi sono impostati, il config ha la precedenza (env fallback solo per l’account predefinito).
- Env:
- Avvia il gateway.
Attenzione: Aggiungi il controllo degli accessi (
allowFromoallowedRoles) per impedire a utenti non autorizzati di attivare il bot.requireMentionetrueper impostazione predefinita.
Configurazione minimale:
{
channels: {
twitch: {
enabled: true,
username: "openclaw", // Account Twitch del bot
accessToken: "oauth:abc123...", // OAuth Access Token (o usa la variabile env OPENCLAW_TWITCH_ACCESS_TOKEN)
clientId: "xyz789...", // Client ID dal Token Generator
channel: "vevisk", // Chat del canale Twitch da unirsi (obbligatorio)
allowFrom: ["123456789"], // (consigliato) Solo il tuo Twitch user ID - ottienilo da https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
},
},
}
Cos’e
- Un canale Twitch gestito dal Gateway.
- Routing deterministico: le risposte tornano sempre a Twitch.
- Ogni account mappa a una chiave di sessione isolata
agent:<agentId>:twitch:<accountName>. usernamee l’account del bot (chi si autentica),channele la chat room a cui unirsi.
Setup (dettagliato)
Generare le credenziali
- Seleziona Bot Token
- Verifica che gli scope
chat:readechat:writesiano selezionati - Copia il Client ID e l’Access Token
Non serve registrare manualmente un’app. I token scadono dopo diverse ore.
Configurare il bot
Variabile env (solo account predefinito):
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
Oppure config:
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
},
}
Se entrambi env e config sono impostati, il config ha la precedenza.
Controllo degli accessi (consigliato)
{
channels: {
twitch: {
allowFrom: ["123456789"], // (consigliato) Solo il tuo Twitch user ID
},
},
}
Preferisci allowFrom per un’allowlist rigida. Usa allowedRoles in alternativa se vuoi accesso basato sui ruoli.
Ruoli disponibili: "moderator", "owner", "vip", "subscriber", "all".
Perche gli user ID? Gli username possono cambiare, consentendo impersonificazione. Gli user ID sono permanenti.
Trova il tuo Twitch user ID: https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/ (Converti il tuo username Twitch in ID)
Rinnovo token (opzionale)
I token da Twitch Token Generator non possono essere rinnovati automaticamente — rigenerali quando scadono.
Per il rinnovo automatico dei token, crea la tua applicazione Twitch su Twitch Developer Console e aggiungi al config:
{
channels: {
twitch: {
clientSecret: "your_client_secret",
refreshToken: "your_refresh_token",
},
},
}
Il bot rinnova automaticamente i token prima della scadenza e registra gli eventi di rinnovo.
Supporto multi-account
Usa channels.twitch.accounts con token per account. Vedi gateway/configuration per il pattern condiviso.
Esempio (un account bot in due canali):
{
channels: {
twitch: {
accounts: {
channel1: {
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
channel2: {
username: "openclaw",
accessToken: "oauth:def456...",
clientId: "uvw012...",
channel: "secondchannel",
},
},
},
},
}
Nota: Ogni account necessita del proprio token (un token per canale).
Controllo degli accessi
Restrizioni basate sui ruoli
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator", "vip"],
},
},
},
},
}
Allowlist per User ID (piu sicuro)
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789", "987654321"],
},
},
},
},
}
Accesso basato sui ruoli (alternativa)
allowFrom e un’allowlist rigida. Quando impostata, solo quegli user ID sono consentiti.
Se vuoi accesso basato sui ruoli, lascia allowFrom non impostato e configura allowedRoles invece:
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator"],
},
},
},
},
}
Disabilitare il requisito @menzione
Per impostazione predefinita, requireMention e true. Per disabilitare e rispondere a tutti i messaggi:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false,
},
},
},
},
}
Risoluzione problemi
Prima, esegui i comandi diagnostici:
openclaw doctor
openclaw channels status --probe
Il bot non risponde ai messaggi
Controlla il controllo degli accessi: Assicurati che il tuo user ID sia in allowFrom, o rimuovi temporaneamente allowFrom e imposta allowedRoles: ["all"] per testare.
Controlla che il bot sia nel canale: Il bot deve unirsi al canale specificato in channel.
Problemi con i token
“Failed to connect” o errori di autenticazione:
- Verifica che
accessTokensia il valore del token OAuth access (tipicamente inizia con il prefissooauth:) - Controlla che il token abbia gli scope
chat:readechat:write - Se usi il rinnovo token, verifica che
clientSecreterefreshTokensiano impostati
Rinnovo token non funzionante
Controlla i log per eventi di rinnovo:
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
Se vedi “token refresh disabled (no refresh token)”:
- Assicurati che
clientSecretsia fornito - Assicurati che
refreshTokensia fornito
Configurazione
Config account:
username- Username del botaccessToken- Token OAuth access conchat:readechat:writeclientId- Twitch Client ID (dal Token Generator o dalla tua app)channel- Canale da unirsi (obbligatorio)enabled- Abilita questo account (predefinito:true)clientSecret- Opzionale: per il rinnovo automatico dei tokenrefreshToken- Opzionale: per il rinnovo automatico dei tokenexpiresIn- Scadenza token in secondiobtainmentTimestamp- Timestamp di ottenimento del tokenallowFrom- Allowlist user IDallowedRoles- Controllo accessi basato sui ruoli ("moderator" | "owner" | "vip" | "subscriber" | "all")requireMention- Richiedi @menzione (predefinito:true)
Opzioni del provider:
channels.twitch.enabled- Abilita/disabilita l’avvio del canalechannels.twitch.username- Username del bot (config account singolo semplificato)channels.twitch.accessToken- Token OAuth access (config account singolo semplificato)channels.twitch.clientId- Twitch Client ID (config account singolo semplificato)channels.twitch.channel- Canale da unirsi (config account singolo semplificato)channels.twitch.accounts.<accountName>- Config multi-account (tutti i campi account sopra)
Esempio completo:
{
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"],
},
},
},
},
}
Azioni strumento
L’agent puo chiamare twitch con azione:
send- Invia un messaggio a un canale
Esempio:
{
action: "twitch",
params: {
message: "Hello Twitch!",
to: "#mychannel",
},
}
Sicurezza e operazioni
- Tratta i token come password — Non fare mai il commit dei token su git
- Usa il rinnovo automatico dei token per bot a lunga esecuzione
- Usa allowlist di user ID invece degli username per il controllo degli accessi
- Monitora i log per eventi di rinnovo token e stato della connessione
- Riduci gli scope dei token al minimo — Richiedi solo
chat:readechat:write - Se sei bloccato: Riavvia il gateway dopo aver confermato che nessun altro processo possiede la sessione
Limiti
- 500 caratteri per messaggio (segmentazione automatica ai confini di parola)
- Il Markdown viene rimosso prima della segmentazione
- Nessun rate limiting (usa i rate limit integrati di Twitch)