Appearance
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
务必添加访问控制(allowFrom 或 allowedRoles)防止未授权用户触发机器人。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是要加入的聊天室。
详细设置
生成凭证
- 选择 Bot Token
- 确认已勾选
chat:read和chat:write - 复制 Client ID 和 Access 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:read和chat:write。 - 卡住时:确认没有其他进程占用会话后重启网关。
限制
- 每条消息 500 个字符(按词边界自动分块)。
- 分块前会去除 Markdown 格式。
- 无额外限速(使用 Twitch 内置速率限制)。
常见问题
Twitch token 过期后如何更新?机器人会自动刷新吗?
如果使用 Twitch Token Generator 生成的 token,无法自动刷新,需要在过期后手动重新生成。如果配置了 clientSecret 和 refreshToken(来自 Twitch Developer Console 注册的应用),机器人会自动刷新并在日志中记录事件。
为什么机器人不响应我发的消息,即使 @ 了它?
最常见的原因是访问控制配置不当。检查 allowFrom 是否包含你的 Twitch 用户 ID(不是用户名),或者尝试临时设置 allowedRoles: ["all"] 并移除 allowFrom 测试。另外确认机器人已加入 channel 指定的频道,且 token 未过期。
如何让机器人响应频道内所有消息(不 @ 也触发)?
将 requireMention 设为 false(默认是 true)。同时注意访问控制(allowFrom/allowedRoles)依然生效,建议结合角色或用户 ID 限制触发源。