Twitch (плагин)
Поддержка чата Twitch через IRC-соединение. OpenClaw подключается как пользователь Twitch (аккаунт бота) для приёма и отправки сообщений в каналах.
Требуется плагин
Twitch поставляется как плагин и не входит в базовую установку.
Установка через CLI (реестр npm):
openclaw plugins install @openclaw/twitch
Локальная установка (при работе из git-репозитория):
openclaw plugins install ./extensions/twitch
Подробности: Plugins
Быстрая настройка (для начинающих)
- Создайте отдельный аккаунт 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/
- Настройте токен:
- Переменная окружения: OPENCLAW_TWITCH_ACCESS_TOKEN=... (только для аккаунта по умолчанию)
- Или в конфигурации: channels.twitch.accessToken
- Если заданы оба варианта, приоритет имеет конфигурация (переменная окружения используется только для аккаунта по умолчанию).
- Запустите шлюз.
⚠️ Важно: Добавьте контроль доступа (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
allowedRoles: ["moderator"] // Или ограничение по ролям
}
}
}
Доступные роли: "moderator", "owner", "vip", "subscriber", "all".
Почему user ID? Имена пользователей можно изменить, что позволяет выдавать себя за другого. User ID постоянные.
Найдите свой Twitch user ID: https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/ (Конвертируйте ваше имя пользователя Twitch в 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 обходят проверку ролей:
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789"],
allowedRoles: ["moderator"]
}
}
}
}
}
Отключение требования @упоминания
По умолчанию requireMention установлен в true. Чтобы отключить и отвечать на все сообщения:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false
}
}
}
}
}
Устранение неполадок
Сначала выполните диагностические команды:
openclaw doctor
openclaw channels status --probe
Бот не отвечает на сообщения
Проверьте контроль доступа: Временно установите 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:write
- clientId - Twitch Client ID (из Token Generator или вашего приложения)
- channel - Канал для присоединения (обязательно)
- enabled - Включить этот аккаунт (по умолчанию: true)
- clientSecret - Опционально: Для автоматического обновления токена
- refreshToken - Опционально: Для автоматического обновления токена
- expiresIn - Срок действия токена в секундах
- obtainmentTimestamp - Временная метка получения токена
- allowFrom - Белый список user ID
- allowedRoles - Контроль доступа по ролям ("moderator" | "owner" | "vip" | "subscriber" | "all")
- requireMention - Требовать @упоминание (по умолчанию: 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)