Skip to content

OpenClaw 通过 IRC 连接让机器人账号加入 Twitch 直播频道收发消息。快速配置使用 Twitch Token Generator 获取 chat:read/chat:write 权限的 token,设置 username(机器人账号)和 channel(目标频道),推荐用 allowFrom 按用户 ID 限制触发者。内建插件在正式包中已包含,旧版本需手动安装。单条消息限 500 字符,支持角色访问控制(moderator/owner/vip/subscriber),可通过 clientSecret + refreshToken 启用自动 token 刷新。

OpenClaw 接入 Twitch 直播聊天机器人配置指南

Twitch 聊天支持通过 IRC 连接实现。OpenClaw 以 Twitch 用户(机器人账号)身份连接,在直播频道中接收和发送消息。

内建插件说明

INFO

Twitch 作为内建插件随当前 OpenClaw 正式版本发布,通常无需额外安装。

如果你使用的是旧版本或移除了 Twitch 的自定义构建,可以通过 npm 包手动安装:

npm 仓库

```bash
openclaw plugins install @openclaw/twitch
```

本地 checkout

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

建议使用裸包(bare package)跟随最新正式发布标签。仅在需要可复现安装时才固定版本。

详情:插件系统

快速设置(新手)

确认插件可用

当前正式包已内建 Twitch,旧版/自定义安装可参考上方手动安装命令。

创建 Twitch 机器人账号

为机器人创建专用 Twitch 账号(也可使用现有账号)。

生成凭证

使用 [Twitch Token Generator](https://twitchtokengenerator.com/):
- 选择 **Bot Token**
- 确认已勾选 `chat:read` 和 `chat:write` 权限范围
- 复制 **Client ID** 和 **Access Token**

查找你的 Twitch 用户 ID

使用 [https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/](https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/) 将用户名转换为用户 ID。

配置 token

- 环境变量:`OPENCLAW_TWITCH_ACCESS_TOKEN=...`(仅默认账号)
- 或配置项:`channels.twitch.accessToken`
两者同时设置时,配置项优先(环境变量仅作为默认账号的回退)。

启动网关

启动配置了该渠道的网关。

WARNING

务必添加访问控制(allowFromallowedRoles)防止未授权用户触发机器人。requireMention 默认为 true

最小配置示例:

json5
{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw", // 机器人 Twitch 账号
      accessToken: "oauth:abc123...", // OAuth Access Token(也可用 OPENCLAW_TWITCH_ACCESS_TOKEN 环境变量)
      clientId: "xyz789...", // Token Generator 提供的 Client ID
      channel: "vevisk", // 需要加入的 Twitch 频道名称(必填)
      allowFrom: ["123456789"], // (推荐)仅允许你的 Twitch 用户 ID
    },
  },
}

功能说明

  • Gateway 拥有一个 Twitch 频道。
  • 确定性路由:回复始终发回 Twitch。
  • 每个账号映射为独立会话键 agent:<agentId>:twitch:<accountName>
  • username 是机器人账号(认证方),channel 是要加入的聊天室。

详细设置

生成凭证

使用 Twitch Token Generator

  • 选择 Bot Token
  • 确认已勾选 chat:readchat:write
  • 复制 Client IDAccess Token

INFO

无需手动注册应用。Token 会在几小时后过期。

配置机器人

环境变量(仅默认账号)

```bash
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
```

配置文件

```json5
{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw",
      accessToken: "oauth:abc123...",
      clientId: "xyz789...",
      channel: "vevisk",
    },
  },
}
```

环境变量与配置同时存在时,配置优先。

访问控制(推荐)

json5
{
  channels: {
    twitch: {
      allowFrom: ["123456789"], // (推荐)仅允许你的用户 ID
    },
  },
}

优先使用 allowFrom 作为硬白名单。如需基于角色访问,改用 allowedRoles

可用角色: "moderator""owner""vip""subscriber""all"

INFO

为什么用用户 ID? 用户名可修改,存在冒充风险;用户 ID 永久不变。

查找你的 Twitch 用户 ID:https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/

Token 刷新(可选)

Twitch Token Generator 获取的 Token 无法自动刷新——过期后需重新生成。

如需自动刷新,在 Twitch Developer Console 创建你自己的 Twitch 应用,并在配置中添加:

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

机器人会在过期前自动刷新 Token 并记录刷新事件。

多账号支持

使用 channels.twitch.accounts 为每个账号配置独立 Token。参见 配置 中的通用多账号模式。

示例(同一机器人账号加入两个频道):

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

INFO

每个账号需要自己的 Token(每个频道一个 Token)。

访问控制

用户 ID 白名单(最安全)

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

基于角色

```json5
{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowedRoles: ["moderator", "vip"],
        },
      },
    },
  },
}
```
`allowFrom` 是硬白名单。设置后只允许那些用户 ID。如需基于角色的访问,不设 `allowFrom`,仅配置 `allowedRoles`。

禁用 @mention 要求

默认 `requireMention` 为 `true`。要响应所有消息(不 @ 机器人也触发):
```json5
{
  channels: {
    twitch: {
      accounts: {
        default: {
          requireMention: false,
        },
      },
    },
  },
}
```

故障排查

先运行诊断命令:

bash
openclaw doctor
openclaw channels status --probe

机器人不响应消息

- **检查访问控制:** 确认你的用户 ID 在 `allowFrom` 中,或临时移除 `allowFrom` 并设置 `allowedRoles: ["all"]` 测试。
- **检查机器人是否在频道中:** 机器人必须已加入 `channel` 指定的频道。

Token 问题(连接失败/认证错误)

- 确认 `accessToken` 是 OAuth access token 值(通常以 `oauth:` 开头)
- 检查 Token 包含 `chat:read` 和 `chat:write` 权限范围
- 如果使用 token 刷新,确认已设置 `clientSecret` 和 `refreshToken`

Token 刷新不工作

检查日志中的刷新事件:
```
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
```
如果看到 "token refresh disabled (no refresh token)":
- 确保提供了 `clientSecret`
- 确保提供了 `refreshToken`

配置参数

账号配置

username string

accessToken string

clientId string

channel string (必填)

enabled boolean

clientSecret string

refreshToken string

expiresIn number

obtainmentTimestamp number

allowFrom string[]

allowedRoles

requireMention boolean

Provider 配置项

  • channels.twitch.enabled - 启用/禁用渠道启动
  • channels.twitch.username - 机器人用户名(简化单账号配置)
  • channels.twitch.accessToken - OAuth Access Token(简化单账号配置)
  • channels.twitch.clientId - Twitch Client ID(简化单账号配置)
  • channels.twitch.channel - 要加入的频道(简化单账号配置)
  • channels.twitch.accounts.<accountName> - 多账号配置(包含所有账号字段)

完整示例:

json5
{
  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 动作

Agent 可调用 twitch 执行以下动作:

  • send - 向频道发送消息

示例:

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

安全与运维

  • 像密码一样保管 Token — 不要提交到 git。
  • 对长期运行的机器人启用自动 Token 刷新
  • 使用用户 ID 白名单 而非用户名进行访问控制。
  • 监控日志 中的 Token 刷新事件和连接状态。
  • 最小化 Token 权限 — 只申请 chat:readchat:write
  • 卡住时:确认没有其他进程占用会话后重启网关。

限制

  • 每条消息 500 个字符(按词边界自动分块)。
  • 分块前会去除 Markdown 格式。
  • 无额外限速(使用 Twitch 内置速率限制)。

常见问题

Twitch token 过期后如何更新?机器人会自动刷新吗?

如果使用 Twitch Token Generator 生成的 token,无法自动刷新,需要在过期后手动重新生成。如果配置了 clientSecretrefreshToken(来自 Twitch Developer Console 注册的应用),机器人会自动刷新并在日志中记录事件。

为什么机器人不响应我发的消息,即使 @ 了它?

最常见的原因是访问控制配置不当。检查 allowFrom 是否包含你的 Twitch 用户 ID(不是用户名),或者尝试临时设置 allowedRoles: ["all"] 并移除 allowFrom 测试。另外确认机器人已加入 channel 指定的频道,且 token 未过期。

如何让机器人响应频道内所有消息(不 @ 也触发)?

requireMention 设为 false(默认是 true)。同时注意访问控制(allowFrom/allowedRoles)依然生效,建议结合角色或用户 ID 限制触发源。

相关链接