Twitch (плагин)
Поддержка чата Twitch через IRC-соединение. OpenClaw подключается как пользователь Twitch (аккаунт бота) для приёма и отправки сообщений в каналах.
Требуется плагин
Twitch поставляется как плагин и не входит в базовую установку.
Установка через CLI (npm-реестр):
openclaw plugins install @openclaw/twitch
Из локальной копии (при работе из git-репозитория):
openclaw plugins install ./extensions/twitch
Подробнее: Плагины
Быстрая настройка (для начинающих)
- Создайте выделенный аккаунт Twitch для бота (или используйте существующий).
- Сгенерируйте учётные данные: Twitch Token Generator
- Выберите Bot Token
- Убедитесь, что выбраны права
chat:readиchat:write - Скопируйте Client ID и Access Token
- Найдите ваш Twitch user ID: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- Настройте токен:
- Env:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(только аккаунт по умолчанию) - Или конфиг:
channels.twitch.accessToken - При наличии обоих конфиг имеет приоритет (env fallback только для аккаунта по умолчанию).
- Env:
- Запустите шлюз.
Предупреждение: Добавьте контроль доступа (
allowFromилиallowedRoles), чтобы неавторизованные пользователи не могли активировать бота.requireMentionпо умолчаниюtrue.
Минимальная конфигурация:
{
channels: {
twitch: {
enabled: true,
username: "openclaw", // Аккаунт бота в Twitch
accessToken: "oauth:abc123...", // OAuth Access Token (или используйте OPENCLAW_TWITCH_ACCESS_TOKEN)
clientId: "xyz789...", // Client ID из Token Generator
channel: "vevisk", // Чат какого канала Twitch присоединиться (обязательно)
allowFrom: ["123456789"], // (рекомендуется) Ваш Twitch user ID — получите на https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
},
},
}
Что это
- Канал Twitch, принадлежащий шлюзу.
- Детерминированная маршрутизация: ответы всегда возвращаются в Twitch.
- Каждый аккаунт привязан к изолированному ключу сессии
agent:<agentId>:twitch:<accountName>. username— аккаунт бота (кто аутентифицируется),channel— в какой чат присоединиться.
Настройка (подробная)
Генерация учётных данных
Используйте Twitch Token Generator:
- Выберите Bot Token
- Убедитесь, что выбраны права
chat:readиchat:write - Скопируйте Client ID и Access Token
Ручная регистрация приложения не требуется. Токены истекают через несколько часов.
Настройка бота
Переменная окружения (только аккаунт по умолчанию):
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
Или конфиг:
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
},
}
При наличии обоих конфиг имеет приоритет.
Контроль доступа (рекомендуется)
{
channels: {
twitch: {
allowFrom: ["123456789"], // (рекомендуется) Ваш Twitch user ID
},
},
}
Предпочтительнее allowFrom для жёсткого списка доступа. Используйте allowedRoles для доступа по ролям.
Доступные роли: "moderator", "owner", "vip", "subscriber", "all".
Почему user ID? Имена пользователей могут меняться, допуская имитацию. User ID постоянны.
Найдите ваш Twitch user ID: https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/
Обновление токена (опционально)
Токены из Twitch Token Generator не могут быть обновлены автоматически — перегенерируйте при истечении.
Для автоматического обновления создайте собственное приложение Twitch в Twitch Developer Console и добавьте в конфиг:
{
channels: {
twitch: {
clientSecret: "your_client_secret",
refreshToken: "your_refresh_token",
},
},
}
Бот автоматически обновляет токены перед истечением и логирует события обновления.
Мульти-аккаунт
Используйте channels.twitch.accounts с токенами для каждого аккаунта. Подробнее: gateway/configuration.
Пример (один бот-аккаунт в двух каналах):
{
channels: {
twitch: {
accounts: {
channel1: {
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
channel2: {
username: "openclaw",
accessToken: "oauth:def456...",
clientId: "uvw012...",
channel: "secondchannel",
},
},
},
},
}
Примечание: Каждому аккаунту нужен свой токен (один токен на канал).
Контроль доступа
Ограничение по ролям
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator", "vip"],
},
},
},
},
}
Список доступа по User ID (наиболее безопасный)
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789", "987654321"],
},
},
},
},
}
Доступ по ролям (альтернатива)
allowFrom — жёсткий список доступа. При наличии допускаются только указанные user ID.
Если нужен доступ по ролям, оставьте allowFrom пустым и настройте allowedRoles:
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator"],
},
},
},
},
}
Отключение требования @mention
По умолчанию requireMention равно true. Для ответа на все сообщения:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false,
},
},
},
},
}
Устранение неполадок
Сначала выполните диагностические команды:
openclaw doctor
openclaw channels status --probe
Бот не отвечает на сообщения
Проверьте контроль доступа: Убедитесь, что ваш user ID в allowFrom, или временно удалите allowFrom и задайте allowedRoles: ["all"] для теста.
Проверьте, что бот в канале: Бот должен присоединиться к каналу, указанному в channel.
Проблемы с токеном
«Failed to connect» или ошибки аутентификации:
- Убедитесь, что
accessToken— это значение OAuth access token (обычно начинается сoauth:) - Проверьте, что токен имеет права
chat:readиchat:write - При использовании обновления токена проверьте, что заданы
clientSecretиrefreshToken
Обновление токена не работает
Проверьте логи на события обновления:
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
Если видите «token refresh disabled (no refresh token)»:
- Убедитесь, что задан
clientSecret - Убедитесь, что задан
refreshToken
Конфигурация
Конфигурация аккаунта:
username- Имя пользователя ботаaccessToken- OAuth access token сchat:readиchat:writeclientId- Twitch Client ID (из Token Generator или вашего приложения)channel- Канал для присоединения (обязательно)enabled- Включить этот аккаунт (по умолчанию:true)clientSecret- Необязательно: для автоматического обновления токенаrefreshToken- Необязательно: для автоматического обновления токенаexpiresIn- Срок действия токена в секундахobtainmentTimestamp- Временная метка получения токенаallowFrom- Список доступа по user IDallowedRoles- Контроль доступа по ролям ("moderator" | "owner" | "vip" | "subscriber" | "all")requireMention- Требовать @mention (по умолчанию:true)
Опции провайдера:
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>- Мульти-аккаунтная конфигурация (все поля аккаунта выше)
Полный пример:
{
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"],
},
},
},
},
}
Действия инструментов
Агент может вызывать twitch с действием:
send- Отправить сообщение в канал
Пример:
{
action: "twitch",
params: {
message: "Hello Twitch!",
to: "#mychannel",
},
}
Безопасность и эксплуатация
- Обращайтесь с токенами как с паролями — никогда не коммитьте токены в git
- Используйте автоматическое обновление токена для долго работающих ботов
- Используйте списки доступа по user ID вместо имён пользователей для контроля доступа
- Отслеживайте логи на предмет событий обновления токенов и состояния подключения
- Минимизируйте права токенов — запрашивайте только
chat:readиchat:write - При зависании: перезапустите шлюз, убедившись, что другой процесс не владеет сессией
Ограничения
- 500 символов на сообщение (автоматическая разбивка по границам слов)
- Markdown удаляется перед разбивкой
- Ограничение частоты отсутствует (используются встроенные лимиты Twitch)