Twitch (plugin)
Soporte de chat de Twitch vía conexión IRC. OpenClaw se conecta como un usuario de Twitch (cuenta de bot) para recibir y enviar mensajes en canales.
Plugin requerido
Twitch se distribuye como plugin y no viene incluido en la instalación base.
Instalar vía CLI (registro npm):
openclaw plugins install @openclaw/twitch
Checkout local (cuando se ejecuta desde un repositorio git):
openclaw plugins install ./extensions/twitch
Detalles: Plugins
Configuración rápida (principiante)
- Crea una cuenta dedicada de Twitch para el bot (o usa una cuenta existente).
- Genera credenciales: Twitch Token Generator
- Selecciona Bot Token
- Verifica que los scopes
chat:readychat:writeestén seleccionados - Copia el Client ID y el Access Token
- Encuentra tu ID de usuario de Twitch: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- Configura el token:
- Variable de entorno:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(solo cuenta predeterminada) - O en configuración:
channels.twitch.accessToken - Si ambos están configurados, la configuración tiene prioridad (la variable de entorno es solo respaldo para la cuenta predeterminada).
- Variable de entorno:
- Inicia el gateway.
Advertencia: Añade control de acceso (
allowFromoallowedRoles) para evitar que usuarios no autorizados activen el bot.requireMentionestruede forma predeterminada.
Configuración mínima:
{
channels: {
twitch: {
enabled: true,
username: "openclaw", // Cuenta de Twitch del bot
accessToken: "oauth:abc123...", // Token de acceso OAuth (o usa la variable OPENCLAW_TWITCH_ACCESS_TOKEN)
clientId: "xyz789...", // Client ID del Token Generator
channel: "vevisk", // Chat del canal de Twitch al que unirse (requerido)
allowFrom: ["123456789"], // (recomendado) Solo tu ID de usuario de Twitch
},
},
}
Qué es
- Un canal de Twitch propiedad del Gateway.
- Enrutamiento determinista: las respuestas siempre van de vuelta a Twitch.
- Cada cuenta se mapea a una clave de sesión aislada
agent:<agentId>:twitch:<accountName>. usernamees la cuenta del bot (quien se autentica),channeles a qué sala de chat unirse.
Configuración (detallada)
Generar credenciales
- Selecciona Bot Token
- Verifica que los scopes
chat:readychat:writeestén seleccionados - Copia el Client ID y el Access Token
No se necesita registro manual de la app. Los tokens expiran después de varias horas.
Configurar el bot
Variable de entorno (solo cuenta predeterminada):
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
O configuración:
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
},
}
Si ambos están configurados, la configuración tiene prioridad.
Control de acceso (recomendado)
{
channels: {
twitch: {
allowFrom: ["123456789"], // (recomendado) Solo tu ID de usuario de Twitch
},
},
}
Prefiere allowFrom para una lista de acceso estricta. Usa allowedRoles en su lugar si quieres acceso basado en roles.
Roles disponibles: "moderator", "owner", "vip", "subscriber", "all".
¿Por qué IDs de usuario? Los nombres de usuario pueden cambiar, permitiendo suplantación. Los IDs de usuario son permanentes.
Encuentra tu ID de usuario de Twitch: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
Renovación de token (opcional)
Los tokens de Twitch Token Generator no se pueden renovar automáticamente - regenera cuando expiren.
Para renovación automática de tokens, crea tu propia aplicación de Twitch en la Consola de Desarrollo de Twitch y añade a la configuración:
{
channels: {
twitch: {
clientSecret: "tu_client_secret",
refreshToken: "tu_refresh_token",
},
},
}
El bot renueva automáticamente los tokens antes de que expiren y registra los eventos de renovación.
Soporte multi-cuenta
Usa channels.twitch.accounts con tokens por cuenta. Consulta gateway/configuration para el patrón compartido.
Ejemplo (una cuenta de bot en dos canales):
{
channels: {
twitch: {
accounts: {
channel1: {
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
channel2: {
username: "openclaw",
accessToken: "oauth:def456...",
clientId: "uvw012...",
channel: "secondchannel",
},
},
},
},
}
Nota: Cada cuenta necesita su propio token (un token por canal).
Control de acceso
Restricciones basadas en roles
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator", "vip"],
},
},
},
},
}
Lista de acceso por ID de usuario (más seguro)
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789", "987654321"],
},
},
},
},
}
Acceso basado en roles (alternativa)
allowFrom es una lista de acceso estricta. Cuando está configurada, solo esos IDs de usuario están permitidos.
Si quieres acceso basado en roles, deja allowFrom sin configurar y configura allowedRoles en su lugar:
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator"],
},
},
},
},
}
Desactivar requisito de @mención
De forma predeterminada, requireMention es true. Para desactivar y responder a todos los mensajes:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false,
},
},
},
},
}
Resolución de problemas
Primero, ejecuta los comandos de diagnóstico:
openclaw doctor
openclaw channels status --probe
El bot no responde a los mensajes
Verifica el control de acceso: Asegúrate de que tu ID de usuario esté en allowFrom, o temporalmente elimina
allowFrom y configura allowedRoles: ["all"] para probar.
Verifica que el bot esté en el canal: El bot debe unirse al canal especificado en channel.
Problemas de token
“Failed to connect” o errores de autenticación:
- Verifica que
accessTokensea el valor del token de acceso OAuth (normalmente comienza con el prefijooauth:) - Verifica que el token tenga los scopes
chat:readychat:write - Si usas renovación de token, verifica que
clientSecretyrefreshTokenestén configurados
La renovación de token no funciona
Verifica los logs por eventos de renovación:
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
Si ves “token refresh disabled (no refresh token)”:
- Asegúrate de que
clientSecretesté proporcionado - Asegúrate de que
refreshTokenesté proporcionado
Configuración
Configuración de cuenta:
username- Nombre de usuario del botaccessToken- Token de acceso OAuth conchat:readychat:writeclientId- Client ID de Twitch (del Token Generator o tu app)channel- Canal al que unirse (requerido)enabled- Habilitar esta cuenta (predeterminado:true)clientSecret- Opcional: Para renovación automática de tokenrefreshToken- Opcional: Para renovación automática de tokenexpiresIn- Expiración del token en segundosobtainmentTimestamp- Marca de tiempo de obtención del tokenallowFrom- Lista de acceso de IDs de usuarioallowedRoles- Control de acceso basado en roles ("moderator" | "owner" | "vip" | "subscriber" | "all")requireMention- Requerir @mención (predeterminado:true)
Opciones del proveedor:
channels.twitch.enabled- Habilitar/deshabilitar inicio del canalchannels.twitch.username- Nombre de usuario del bot (configuración simplificada de cuenta única)channels.twitch.accessToken- Token de acceso OAuth (configuración simplificada de cuenta única)channels.twitch.clientId- Client ID de Twitch (configuración simplificada de cuenta única)channels.twitch.channel- Canal al que unirse (configuración simplificada de cuenta única)channels.twitch.accounts.<accountName>- Configuración multi-cuenta (todos los campos de cuenta arriba)
Ejemplo 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"],
},
},
},
},
}
Acciones de herramientas
El agente puede llamar a twitch con la acción:
send- Enviar un mensaje a un canal
Ejemplo:
{
action: "twitch",
params: {
message: "¡Hola Twitch!",
to: "#mychannel",
},
}
Seguridad y operaciones
- Trata los tokens como contraseñas - Nunca hagas commit de tokens en git
- Usa renovación automática de tokens para bots de larga duración
- Usa listas de acceso por ID de usuario en lugar de nombres de usuario para control de acceso
- Monitoriza los logs por eventos de renovación de token y estado de conexión
- Limita los scopes de los tokens - Solo solicita
chat:readychat:write - Si te atascas: Reinicia el gateway después de confirmar que ningún otro proceso posee la sesión
Límites
- 500 caracteres por mensaje (auto-fragmentado en límites de palabras)
- El Markdown se elimina antes de la fragmentación
- Sin límite de velocidad propio (usa los límites de velocidad integrados de Twitch)