Developer and self-hosted

Twitch

Suporte ao chat da Twitch pela interface de chat (IRC) da Twitch usando o cliente Twurple. O OpenClaw entra com uma conta de bot da Twitch, participa de um canal por conta configurada e responde nesse canal.

Instalação

A Twitch é distribuída como um plugin oficial; ela não faz parte da instalação principal.

Registro npm

bash
openclaw plugins install @openclaw/twitch

Checkout local

bash
openclaw plugins install ./path/to/local/twitch-plugin

plugins install registra e ativa o plugin. Selecionar Twitch durante openclaw onboard ou openclaw channels add instala o plugin sob demanda. Use apenas o nome do pacote para acompanhar a versão atual; fixe uma versão exata somente para instalações reproduzíveis. Requer o OpenClaw 2026.4.10 ou mais recente.

Detalhes: Plugins

Configuração rápida

  • Instale o plugin

    Consulte Instalação acima.

  • Crie uma conta de bot da Twitch

    Crie uma conta dedicada da Twitch para o bot (ou use uma conta existente).

  • Gere as credenciais

    Use o Twitch Token Generator:

    • Selecione Bot Token
    • Verifique se os escopos chat:read e chat:write estão selecionados
    • Copie o Client ID e o Access Token
  • Encontre seu ID de usuário da Twitch

    Use https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ para converter um nome de usuário em um ID de usuário da Twitch.

  • Configure o token

    • Variável de ambiente: OPENCLAW_TWITCH_ACCESS_TOKEN=... (somente para a conta padrão)
    • Ou configuração: channels.twitch.accessToken

    Se ambos estiverem definidos, a configuração terá precedência (a variável de ambiente será apenas uma alternativa para a conta padrão).

  • Inicie o Gateway

    bash
    openclaw gateway run
  • Configuração mínima:

    json5
    {  channels: {    twitch: {      enabled: true,      username: "openclaw", // Conta da Twitch do bot (faz a autenticação)      accessToken: "oauth:abc123...", // Token de acesso OAuth (ou use a variável de ambiente OPENCLAW_TWITCH_ACCESS_TOKEN)      clientId: "xyz789...", // ID do cliente fornecido pelo Token Generator      channel: "yourchannel", // Chat de qual canal da Twitch participar (obrigatório)      allowFrom: ["123456789"], // (recomendado) Somente seu ID de usuário da Twitch    },  },}

    O que é

    • Um canal da Twitch gerenciado pelo Gateway.
    • Roteamento determinístico: as respostas sempre retornam ao canal da Twitch de onde veio a mensagem.
    • Cada canal do qual o bot participa é associado a uma chave de sessão de grupo isolada: agent:<agentId>:twitch:group:<channel>.
    • username é a conta do bot (que faz a autenticação), enquanto channel é a sala de chat da qual ele participará. Cada entrada de conta participa de exatamente um canal.
    • Os tokens funcionam com ou sem o prefixo oauth:; o OpenClaw normaliza os dois formatos (o assistente de configuração espera o formato com oauth:).

    Renovação de token (opcional)

    Os tokens do Twitch Token Generator não podem ser renovados pelo OpenClaw — gere outro quando o token expirar (eles duram algumas horas; não é necessário registrar um aplicativo).

    Para a renovação automática, crie seu próprio aplicativo no Twitch Developer Console e adicione:

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

    Com ambos definidos, o plugin usa um provedor de autenticação com renovação que renova os tokens antes da expiração e registra cada renovação. Sem refreshToken, ele registra token refresh disabled (no refresh token); sem clientSecret, ele usa como alternativa um token estático (sem renovação).

    Suporte a várias contas

    Use channels.twitch.accounts com credenciais específicas para cada conta. Consulte Configuração para conhecer o padrão compartilhado.

    Exemplo (uma conta de bot em dois canais):

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

    Controle de acesso

    allowFrom é uma lista rígida de IDs de usuário da Twitch permitidos. Quando ela está definida, allowedRoles é ignorado; deixe allowFrom sem definição para usar o acesso baseado em funções.

    Funções disponíveis: "moderator", "owner", "vip", "subscriber", "all".

    Lista de IDs de usuário permitidos (mais segura)

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

    Baseado em funções

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

    Desativar a exigência de @menção

    Por padrão, requireMention é true. Para responder a todas as mensagens permitidas:

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

    Solução de problemas

    Primeiro, execute os comandos de diagnóstico:

    bash
    openclaw doctoropenclaw channels status --probe
    O bot não responde às mensagens
    • Verifique o controle de acesso: certifique-se de que seu ID de usuário esteja em allowFrom ou remova temporariamente allowFrom e defina allowedRoles: ["all"] para testar.
    • Verifique a exigência de menção: com requireMention: true (padrão), as mensagens devem usar @menção ao nome de usuário do bot.
    • Verifique se o bot está no canal: o bot participa somente do canal indicado em channel.
    Problemas com o token

    Erros de autenticação ou "Failed to connect":

    • Verifique se accessToken contém o valor do token de acesso OAuth (o prefixo oauth: é opcional)
    • Verifique se o token tem os escopos chat:read e chat:write
    • Se estiver usando renovação de token, verifique se clientSecret e refreshToken estão definidos
    A renovação do token não funciona

    Verifique os registros em busca de eventos de renovação:

    text
    Using env token source for mybotAccess token refreshed for user 123456 (expires in 14400s)

    Se você vir token refresh disabled (no refresh token):

    • Verifique se clientSecret foi fornecido
    • Verifique se refreshToken foi fornecido

    Configuração

    Configuração da conta

    usernamestringrequired

    Nome de usuário do bot (a conta que faz a autenticação).

    accessTokenstringrequired

    Token de acesso OAuth com chat:read e chat:write (configuração ou variável de ambiente para a conta padrão).

    clientIdstringrequired

    ID do cliente da Twitch (do Token Generator ou do seu aplicativo). Opcional no esquema, mas obrigatório para estabelecer conexão.

    channelstringrequired

    Canal do qual participar.

    enabledbooleandefault: true

    Ativa esta conta.

    clientSecretstring

    Opcional: usado para a renovação automática do token.

    refreshTokenstring

    Opcional: usado para a renovação automática do token.

    expiresInnumber

    Expiração do token em segundos (acompanhamento da renovação).

    obtainmentTimestampnumber

    Carimbo de data e hora em que o token foi obtido (acompanhamento da renovação).

    allowFromstring[]

    Lista de IDs de usuário permitidos. Quando definida, as funções são ignoradas.

    allowedRoles'Array<"moderator"
    requireMentionbooleandefault: true

    Exige @menção para acionar o bot.

    responsePrefixstring

    Substituição do prefixo das respostas enviadas por esta conta.

    Opções do provedor

    • channels.twitch.enabled - Ativa/desativa a inicialização do canal
    • channels.twitch.username / accessToken / clientId / channel - Configuração simplificada de uma única conta (conta default implícita; tem precedência sobre accounts.default)
    • channels.twitch.accounts.<accountName> - Configuração de várias contas (todos os campos de conta acima)
    • channels.twitch.defaultAccount - Nome da conta que será a padrão
    • channels.twitch.markdown.tables - Modo de renderização de tabelas Markdown (off | bullets | code | block)

    Exemplo completo:

    json5
    {  channels: {    twitch: {      enabled: true,      username: "openclaw",      accessToken: "oauth:abc123...",      clientId: "xyz789...",      channel: "yourchannel",      clientSecret: "secret123...",      refreshToken: "refresh456...",      allowFrom: ["123456789"],      accounts: {        second: {          username: "mybot",          accessToken: "oauth:def456...",          clientId: "uvw012...",          channel: "your_channel",          enabled: true,          expiresIn: 14400,          obtainmentTimestamp: 1706092800000,          allowedRoles: ["moderator"],        },      },    },  },}

    Ações da ferramenta

    O agente pode enviar mensagens da Twitch por meio da ação send da ferramenta de mensagens:

    json5
    {  channel: "twitch",  action: "send",  to: "#mychannel",  message: "Hello Twitch!",}

    to é opcional e usa como padrão o channel configurado da conta.

    Segurança e operações

    • Trate os tokens como senhas — nunca faça commit de tokens no Git.
    • Use a renovação automática de tokens para bots executados por longos períodos.
    • Use listas de IDs de usuário permitidos em vez de nomes de usuário para controle de acesso.
    • Monitore os registros para acompanhar eventos de renovação de token e o status da conexão.
    • Restrinja os escopos dos tokens ao mínimo — solicite somente chat:read e chat:write.
    • Se estiver com dificuldades: reinicie o Gateway depois de confirmar que nenhum outro processo é proprietário da sessão.

    Limites

    • 500 caracteres por mensagem; respostas mais longas são divididas nos limites entre palavras.
    • O Markdown é removido antes do envio (o chat da Twitch usa texto simples; quebras de linha tornam-se espaços).
    • O OpenClaw não adiciona limitação de taxa própria; o cliente de chat Twurple gerencia os limites de taxa da Twitch.

    Conteúdo relacionado

    Was this useful?
    On this page

    On this page