Twitch (plugin)
Suporte a chat da Twitch via conexão IRC. O OpenClaw conecta como um usuário da Twitch (conta de bot) para receber e enviar mensagens em canais.
Plugin necessário
O Twitch é distribuído como plugin e não vem incluso na instalação padrão.
Instale via CLI (registro npm):
openclaw plugins install @openclaw/twitch
Checkout local (ao rodar a partir de um repositório git):
openclaw plugins install ./extensions/twitch
Detalhes: Plugins
Configuração rápida (iniciante)
- Crie uma conta dedicada na Twitch para o bot (ou use uma conta existente).
- Gere as credenciais: Twitch Token Generator
- Selecione Bot Token
- Verifique se os escopos
chat:readechat:writeestão selecionados - Copie o Client ID e o Access Token
- Encontre seu user ID da Twitch: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- Configure o token:
- Env:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(apenas conta padrão) - Ou config:
channels.twitch.accessToken - Se ambos estiverem definidos, a config tem precedência (o env é fallback apenas para a conta padrão).
- Env:
- Inicie o gateway.
Aviso: Adicione controle de acesso (
allowFromouallowedRoles) para impedir que usuários não autorizados acionem o bot.requireMentionétruepor padrão.
Configuração mínima:
{
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/
},
},
}
O que é
- Um canal da Twitch gerenciado pelo Gateway.
- Roteamento determinístico: respostas sempre retornam para a Twitch.
- Cada conta é mapeada a uma chave de sessão isolada
agent:<agentId>:twitch:<accountName>. usernameé a conta do bot (quem se autentica);channelé qual sala de chat participar.
Setup (detalhado)
Gerar credenciais
Use o Twitch Token Generator:
- Selecione Bot Token
- Verifique se os escopos
chat:readechat:writeestão selecionados - Copie o Client ID e o Access Token
Não é necessário registrar um app manualmente. Os tokens expiram após algumas horas.
Configurar o bot
Variável de ambiente (apenas conta padrão):
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
Ou config:
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
},
}
Se ambos (env e config) estiverem definidos, a config tem precedência.
Controle de acesso (recomendado)
{
channels: {
twitch: {
allowFrom: ["123456789"], // (recommended) Your Twitch user ID only
},
},
}
Prefira allowFrom para uma lista de permitidos rígida. Use allowedRoles caso prefira controle baseado em cargo.
Cargos disponíveis: "moderator", "owner", "vip", "subscriber", "all".
Por que user IDs? Nomes de usuário podem ser alterados, permitindo personificação. User IDs são permanentes.
Encontre seu user ID da Twitch: https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/ (Converta seu nome de usuário da Twitch em ID)
Renovação de token (opcional)
Tokens do Twitch Token Generator não podem ser renovados automaticamente — gere novos quando expirarem.
Para renovação automática de tokens, crie seu próprio aplicativo na Twitch pelo Twitch Developer Console e adicione à config:
{
channels: {
twitch: {
clientSecret: "your_client_secret",
refreshToken: "your_refresh_token",
},
},
}
O bot renova os tokens automaticamente antes da expiração e registra eventos de renovação nos logs.
Suporte a múltiplas contas
Use channels.twitch.accounts com tokens por conta. Consulte gateway/configuration para o padrão compartilhado.
Exemplo (uma conta de bot em dois canais):
{
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 conta precisa do seu próprio token (um token por canal).
Controle de acesso
Restrições baseadas em cargo
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator", "vip"],
},
},
},
},
}
Lista de permitidos por User ID (mais seguro)
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789", "987654321"],
},
},
},
},
}
Acesso baseado em cargo (alternativa)
allowFrom é uma lista de permitidos rígida. Quando definida, apenas esses user IDs têm acesso.
Se você quer controle baseado em cargo, deixe allowFrom vazio e configure allowedRoles:
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator"],
},
},
},
},
}
Desabilitar requisito de @menção
Por padrão, requireMention é true. Para desabilitar e responder a todas as mensagens:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false,
},
},
},
},
}
Solução de problemas
Primeiro, execute os comandos de diagnóstico:
openclaw doctor
openclaw channels status --probe
Bot não responde às mensagens
Verifique o controle de acesso: Certifique-se de que seu user ID está em allowFrom, ou remova temporariamente allowFrom e defina allowedRoles: ["all"] para testar.
Verifique se o bot está no canal: O bot precisa entrar no canal especificado em channel.
Problemas com token
“Failed to connect” ou erros de autenticação:
- Verifique se
accessTokené o valor do token OAuth (normalmente começa com o prefixooauth:) - Confirme que o token possui os escopos
chat:readechat:write - Se estiver usando renovação de token, verifique se
clientSecreterefreshTokenestão definidos
Renovação de token não funciona
Verifique os logs para eventos de renovação:
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
Se você vir “token refresh disabled (no refresh token)”:
- Certifique-se de que
clientSecretestá configurado - Certifique-se de que
refreshTokenestá configurado
Config
Configuração da conta:
username- Nome de usuário do botaccessToken- Token de acesso OAuth comchat:readechat:writeclientId- Client ID da Twitch (do Token Generator ou do seu app)channel- Canal para entrar (obrigatório)enabled- Habilitar esta conta (padrão:true)clientSecret- Opcional: para renovação automática de tokenrefreshToken- Opcional: para renovação automática de tokenexpiresIn- Expiração do token em segundosobtainmentTimestamp- Timestamp de obtenção do tokenallowFrom- Lista de permitidos por user IDallowedRoles- Controle de acesso baseado em cargo ("moderator" | "owner" | "vip" | "subscriber" | "all")requireMention- Exigir @menção (padrão:true)
Opções do provedor:
channels.twitch.enabled- Habilitar/desabilitar inicialização do canalchannels.twitch.username- Nome de usuário do bot (config simplificada de conta única)channels.twitch.accessToken- Token de acesso OAuth (config simplificada de conta única)channels.twitch.clientId- Client ID da Twitch (config simplificada de conta única)channels.twitch.channel- Canal para entrar (config simplificada de conta única)channels.twitch.accounts.<accountName>- Config de múltiplas contas (todos os campos de conta acima)
Exemplo 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"],
},
},
},
},
}
Ações de ferramenta
O agente pode chamar twitch com ação:
send- Enviar uma mensagem para um canal
Exemplo:
{
action: "twitch",
params: {
message: "Hello Twitch!",
to: "#mychannel",
},
}
Segurança e operações
- Trate tokens como senhas — nunca faça commit de tokens no git
- Use renovação automática de token para bots de longa duração
- Use listas de permitidos por user ID em vez de nomes de usuário para controle de acesso
- Monitore os logs para eventos de renovação de token e status de conexão
- Limite os escopos do token — solicite apenas
chat:readechat:write - Se travar: reinicie o gateway após confirmar que nenhum outro processo possui a sessão
Limites
- 500 caracteres por mensagem (fragmentação automática em limites de palavra)
- Markdown é removido antes da fragmentação
- Sem rate limiting próprio (usa os limites nativos da Twitch)