Aller au contenu

Twitch

Prise en charge du chat Twitch via une connexion IRC. OpenClaw se connecte en tant qu’utilisateur Twitch (compte bot) pour recevoir et envoyer des messages dans les channels.

Si vous utilisez une version ancienne ou une installation personnalisée qui exclut Twitch, installez directement le package npm :

bash openclaw plugins install @openclaw/twitch

Utilisez le package nu pour suivre le tag de version officiel actuel. Ne figez une version exacte que si vous avez besoin d’une installation reproductible.

Détails : Plugins

  1. S'assurer que le plugin est disponible

    Les versions packagées actuelles de OpenClaw l’incluent déjà. Les installations anciennes/personnalisées peuvent l’ajouter manuellement avec les commandes ci-dessus.

  2. Créer un compte bot Twitch

    Créez un compte Twitch dédié pour le bot (ou utilisez un compte existant).

  3. Générer les identifiants

    Utilisez Twitch Token Generator :

    • Sélectionnez Bot Token
    • Vérifiez que les portées chat:read et chat:write sont sélectionnées
    • Copiez le Client ID et le Access Token
  4. Trouver votre ID utilisateur Twitch

    Utilisez https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ pour convertir un nom d’utilisateur en ID utilisateur Twitch.

  5. Configurer le jeton

    • Env : OPENCLAW_TWITCH_ACCESS_TOKEN=... (compte par défaut uniquement)
    • Ou config : channels.twitch.accessToken

    Si les deux sont définis, la configuration prévaut (le repli de l’environnement est pour le compte par défaut uniquement).

  6. Démarrer la passerelle

    Démarrez la passerelle avec le channel configuré.

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/
},
},
}
  • Un channel Twitch appartenant au Gateway.
  • Routage déterministe : les réponses vont toujours vers Twitch.
  • Chaque compte correspond à une clé de session isolée agent:<agentId>:twitch:<accountName>.
  • username est le compte du bot (celui qui s’authentifie), channel est le salon de chat à rejoindre.

Utilisez le Générateur de jetons Twitch :

  • Sélectionnez Jeton de bot (Bot Token)
  • Vérifiez que les portées chat:read et chat:write sont sélectionnées
  • Copiez l’ID Client (Client ID) et le Jeton d’accès (Access Token)

Fenêtre de terminal
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...

Si l’environnement et la configuration sont définis, la configuration prévaut.

{
channels: {
twitch: {
allowFrom: ["123456789"], // (recommended) Your Twitch user ID only
},
},
}

Privilégiez allowFrom pour une liste d’autorisation stricte. Utilisez allowedRoles à la place si vous souhaitez un contrôle basé sur les rôles.

Rôles disponibles : "moderator", "owner", "vip", "subscriber", "all".

Les jetons du Générateur de jetons Twitch ne peuvent pas être actualisés automatiquement - régénérez-los lorsqu’ils expirent.

Pour une actualisation automatique des jetons, créez votre propre application Twitch sur la Console développeur Twitch et ajoutez-les à la configuration :

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

Le bot actualise automatiquement les jetons avant leur expiration et enregistre les événements d’actualisation.

Utilisez channels.twitch.accounts avec des jetons par compte. Consultez la Configuration pour le modèle partagé.

Exemple (un compte bot dans deux salons) :

{
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: {
allowFrom: ["123456789", "987654321"],
},
},
},
},
}

Tout d’abord, exécutez les commandes de diagnostic :

Fenêtre de terminal
openclaw doctor
openclaw channels status --probe
Le bot ne répond pas aux messages
  • Vérifiez le contrôle d’accès : Assurez-vous que votre ID utilisateur est dans allowFrom, ou supprimez temporairement allowFrom et définissez allowedRoles: ["all"] pour tester.
  • Vérifiez que le bot est dans le channel : Le bot doit rejoindre le channel spécifié dans channel.
Problèmes de jeton

“Échec de la connexion” ou erreurs d’authentification :

  • Vérifiez que accessToken est la valeur du jeton d’accès OAuth (commence généralement par le préfixe oauth:)
  • Vérifiez que le jeton dispose des portées chat:read et chat:write
  • Si vous utilisez l’actualisation du jeton, vérifiez que clientSecret et refreshToken sont définis
L'actualisation du jeton ne fonctionne pas

Vérifiez 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 clientSecret est fourni
  • Assurez-vous que refreshToken est fourni
Nom d'utilisateur du bot. Jeton d'accès OAuth avec `chat:read` et `chat:write`. ID Client Twitch (issu du Générateur de jeton ou de votre application). Channel à rejoindre. Activer ce compte. Optionnel : pour le rafraîchissement automatique du jeton. Optionnel : pour le rafraîchissement automatique du jeton. Expiration du jeton en secondes. Horodatage d'obtention du jeton. Liste blanche des ID utilisateur. Contrôle d'accès basé sur les rôles. Exiger @mention.
  • channels.twitch.enabled - Activer/désactiver le démarrage du channel
  • channels.twitch.username - Nom d’utilisateur du bot (configuration simplifiée à compte unique)
  • channels.twitch.accessTokenOAuth - Jeton d’accès OAuth (configuration simplifiée à compte unique)
  • channels.twitch.clientIdTwitch - ID Client Twitch (configuration simplifiée à compte unique)
  • channels.twitch.channel - Channel à rejoindre (configuration simplifiée à compte unique)
  • channels.twitch.accounts.<accountName> - Configuration multi-compte (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"],
},
},
},
},
}

L’agent peut appeler twitch avec l’action :

  • send - Envoyer un message à un channel

Exemple :

{
action: "twitch",
params: {
message: "Hello Twitch!",
to: "#mychannel",
},
}
  • Traitez les jetons comme des mots de passe — Ne commettez jamais de jetons dans git.
  • Utilisez le rafraîchissement automatique des jetons pour les bots de longue durée.
  • Utilisez les listes d’autorisation par ID utilisateur au lieu des noms d’utilisateur pour le contrôle d’accès.
  • Surveillez les journaux pour les événements de rafraîchissement de jeton et le statut de connexion.
  • Limitez l’étendue des jetons au minimum — Ne demandez que chat:read et chat:write.
  • En cas de blocage : Redémarrez la passerelle après avoir confirmé qu’aucun autre processus ne possède la session.
  • 500 caractères par message (découpés automatiquement aux limites des mots).
  • Le Markdown est supprimé avant le découpage.
  • Aucune limitation de débit (utilise les limitations de débit intégrées de Twitch).