Developer and self-hosted
Twitch
Prise en charge du chat Twitch via une connexion IRC. OpenClaw se connecte en tant qu’utilisateur Twitch (compte de bot) pour recevoir et envoyer des messages dans les chaînes.
Plugin intégré
Si vous utilisez un build plus ancien ou une installation personnalisée qui exclut Twitch, installez directement le paquet npm :
npm registry
openclaw plugins install @openclaw/twitch
Local checkout
openclaw plugins install ./path/to/local/twitch-plugin
Utilisez le paquet nu pour suivre l’étiquette de version officielle actuelle. N’épinglez une version exacte que lorsque vous avez besoin d’une installation reproductible.
Détails : Plugins
Configuration rapide (débutant)
Ensure plugin is available
Les versions empaquetées actuelles d’OpenClaw l’intègrent déjà. Les installations plus anciennes/personnalisées peuvent l’ajouter manuellement avec les commandes ci-dessus.
Create a Twitch bot account
Créez un compte Twitch dédié pour le bot (ou utilisez un compte existant).
Generate credentials
Utilisez Twitch Token Generator :
- Sélectionnez Bot Token
- Vérifiez que les portées
chat:readetchat:writesont sélectionnées - Copiez le Client ID et l’Access Token
Find your Twitch user ID
Utilisez https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ pour convertir un nom d’utilisateur en ID utilisateur Twitch.
Configure the token
- Env :
OPENCLAW_TWITCH_ACCESS_TOKEN=...(compte par défaut uniquement) - Ou config :
channels.twitch.accessToken
Si les deux sont définis, la configuration est prioritaire (le repli sur l’env concerne uniquement le compte par défaut).
Start the gateway
Démarrez le Gateway avec la chaîne configurée.
Configuration minimale :
{
channels: {
twitch: {
enabled: true,
username: "openclaw", // Bot's Twitch account
accessToken: "oauth:abc123...", // OAuth Access Token (or use OPENCLAW_TWITCH_ACCESS_TOKEN env var)
clientId: "xyz789...", // Client ID from Token Generator
channel: "vevisk", // Which Twitch channel's chat to join (required)
allowFrom: ["123456789"], // (recommended) Your Twitch user ID only - get it from https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
},
},
}
Ce que c’est
- Une chaîne Twitch détenue par le Gateway.
- Routage déterministe : les réponses retournent toujours vers Twitch.
- Chaque compte correspond à une clé de session isolée
agent:<agentId>:twitch:<accountName>. usernameest le compte du bot (celui qui s’authentifie),channelest le salon de chat à rejoindre.
Configuration (détaillée)
Générer les identifiants
Utilisez Twitch Token Generator :
- Sélectionnez Bot Token
- Vérifiez que les portées
chat:readetchat:writesont sélectionnées - Copiez le Client ID et l’Access Token
Configurer le bot
Env var (default account only)
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
Config
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
},
}
Si l’env et la configuration sont tous deux définis, la configuration est prioritaire.
Contrôle d’accès (recommandé)
{
channels: {
twitch: {
allowFrom: ["123456789"], // (recommended) Your Twitch user ID only
},
},
}
Préférez allowFrom pour une liste d’autorisation stricte. Utilisez plutôt allowedRoles si vous souhaitez un accès basé sur les rôles.
Rôles disponibles : "moderator", "owner", "vip", "subscriber", "all".
Actualisation du jeton (facultatif)
Les jetons de Twitch Token Generator ne peuvent pas être actualisés automatiquement ; régénérez-les lorsqu’ils expirent.
Pour l’actualisation automatique du jeton, créez votre propre application Twitch dans la Twitch Developer Console et ajoutez ceci à la configuration :
{
channels: {
twitch: {
clientSecret: "your_client_secret",
refreshToken: "your_refresh_token",
},
},
}
Le bot actualise automatiquement les jetons avant expiration et journalise les événements d’actualisation.
Prise en charge multi-comptes
Utilisez channels.twitch.accounts avec des jetons propres à chaque compte. Consultez Configuration pour le modèle partagé.
Exemple (un compte de bot dans deux chaînes) :
{
channels: {
twitch: {
accounts: {
channel1: {
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
channel2: {
username: "openclaw",
accessToken: "oauth:def456...",
clientId: "uvw012...",
channel: "secondchannel",
},
},
},
},
}
Contrôle d’accès
User ID allowlist (most secure)
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789", "987654321"],
},
},
},
},
}
Role-based
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator", "vip"],
},
},
},
},
}
allowFrom est une liste d’autorisation stricte. Lorsqu’elle est définie, seuls ces ID utilisateur sont autorisés. Si vous souhaitez un accès basé sur les rôles, laissez allowFrom non défini et configurez plutôt allowedRoles.
Disable @mention requirement
Par défaut, requireMention vaut true. Pour le désactiver et répondre à tous les messages :
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false,
},
},
},
},
}
Dépannage
Commencez par exécuter les commandes de diagnostic :
openclaw doctor
openclaw channels status --probe
Bot does not respond to messages
- Vérifiez le contrôle d’accès : Assurez-vous que votre ID utilisateur figure dans
allowFrom, ou supprimez temporairementallowFromet définissezallowedRoles: ["all"]pour tester. - Vérifiez que le bot est dans la chaîne : Le bot doit rejoindre la chaîne spécifiée dans
channel.
Token issues
« Échec de la connexion » ou erreurs d’authentification :
- Vérifiez que
accessTokenest la valeur du jeton d’accès OAuth (elle commence généralement par le préfixeoauth:) - Vérifiez que le jeton possède les portées
chat:readetchat:write - Si vous utilisez l’actualisation du jeton, vérifiez que
clientSecretetrefreshTokensont définis
Token refresh not working
Consultez les journaux pour les événements d’actualisation :
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
Si vous voyez « token refresh disabled (no refresh token) » :
- Assurez-vous que
clientSecretest fourni - Assurez-vous que
refreshTokenest fourni
Configuration
Configuration du compte
usernamestringNom d’utilisateur du bot.
accessTokenstringJeton d’accès OAuth avec chat:read et chat:write.
clientIdstringTwitch Client ID (depuis Token Generator ou votre application).
channelstringrequiredChaîne à rejoindre.
enabledbooleanActiver ce compte.
clientSecretstringFacultatif : pour l’actualisation automatique du jeton.
refreshTokenstringFacultatif : pour l’actualisation automatique du jeton.
expiresInnumberExpiration du jeton en secondes.
obtainmentTimestampnumberHorodatage d’obtention du jeton.
allowFromstring[]Liste d’autorisation des ID utilisateur.
allowedRoles'Array<"moderator"requireMentionbooleanExiger une @mention.
Options du fournisseur
channels.twitch.enabled- Activer/désactiver le démarrage de la chaînechannels.twitch.username- Nom d’utilisateur du bot (configuration simplifiée à compte unique)channels.twitch.accessToken- Jeton d’accès OAuth (configuration simplifiée à compte unique)channels.twitch.clientId- Twitch Client ID (configuration simplifiée à compte unique)channels.twitch.channel- Chaîne à rejoindre (configuration simplifiée à compte unique)channels.twitch.accounts.<accountName>- Configuration multi-comptes (tous les champs de compte ci-dessus)
Exemple complet :
{
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"],
},
},
},
},
}
Actions d’outil
L’agent peut appeler twitch avec l’action :
send- Envoyer un message à une chaîne
Exemple :
{
action: "twitch",
params: {
message: "Hello Twitch!",
to: "#mychannel",
},
}
Sécurité et opérations
- Traitez les jetons comme des mots de passe — Ne validez jamais de jetons dans git.
- Utilisez l’actualisation automatique des jetons pour les bots de longue durée.
- Utilisez des listes d’autorisation d’ID utilisateur plutôt que des noms d’utilisateur pour le contrôle d’accès.
- Surveillez les journaux pour les événements d’actualisation des jetons et l’état de connexion.
- Limitez les portées des jetons au minimum — Ne demandez que
chat:readetchat:write. - Si vous êtes bloqué : Redémarrez le Gateway après avoir confirmé qu’aucun autre processus ne possède la session.
Limites
- 500 caractères par message (découpage automatique aux limites de mots).
- Le Markdown est supprimé avant le découpage.
- Aucune limitation de débit (utilise les limites de débit intégrées de Twitch).
Connexe
- Routage des chaînes — routage de session pour les messages
- Vue d’ensemble des chaînes — toutes les chaînes prises en charge
- Groupes — comportement des chats de groupe et filtrage par mention
- Appairage — authentification en DM et flux d’appairage
- Sécurité — modèle d’accès et durcissement