Modules
Les modules font le lien entre Rawtoh et le monde extérieur — découvrez comment ils fonctionnent.
Les modules font le lien entre Rawtoh et le monde extérieur. Ils se connectent à des services externes et permettent à vos automatisations d’interagir avec eux.
Module (définition)
Un module (aussi appelé définition de module ou groupe de modules) décrit une intégration. Il définit :
- Un slug — un identifiant unique comme
twitch,obsouspotify - Un nom — un libellé lisible par un humain
- Un manifeste — un document OpenRPC décrivant ce que le module sait faire
Modules privés et modules publics
Une définition de module peut être :
- Publique — visible par toutes les organisations. Ce sont les intégrations partagées (par ex. Twitch, OBS).
- Privée — limitée à une seule organisation. Seuls les membres de cette organisation peuvent l’utiliser.
Le manifeste
Le manifeste est le contrat d’API du module, rédigé sous la forme d’un document OpenRPC. Il répertorie :
- Les événements que le module peut émettre — par ex.
chat.message,eventsub.stream_online. Ce sont les événements que vos déclencheurs peuvent surveiller. - Les méthodes que le module expose — par ex.
chat.say,scene.set_current. Ce sont les fonctions que vos actions peuvent appeler.
Le manifeste est fourni par l’auteur du module et renseigné sur la définition de module. Il alimente l’autocomplétion de l’éditeur de scripts et vous permet de voir ce qui est disponible. Tous les noms utilisent la notation pointée — par ex. chat.message, chat.say.
Instance de module
Une instance de module est une connexion réelle et active. Là où un module est une définition, une instance est un déploiement.
Exemple :
- Définition de module :
twitch - Instances :
main-bot— votre bot Twitch principalalerts-bot— un bot secondaire pour les alertes
Chaque instance est authentifiée par sa propre paire de clés Ed25519, que le module génère lui-même — Rawtoh n’en conserve jamais que la partie publique. La paire est liée à l’instance une seule fois, en consommant un jeton d’enrôlement. Après cela, il n’y a plus aucun secret à copier, à renouveler ou à laisser fuiter : à chaque connexion, le module prouve qu’il détient la clé privée en signant un défi émis par le serveur.
Jeton d’enrôlement
Le jeton (rth_e_…) est la seule chose qu’un humain ait jamais à copier. Il est :
- Affiché une seule fois — à la création de l’instance, ou plus tard via Réenrôler
- À usage unique — l’utiliser le consomme ; après un enrôlement raté, il faut un nouveau jeton, pas une nouvelle tentative
- De courte durée — il expire au bout de 15 minutes
- Opaque — il ne contient ni adresse de hub ni organisation ; le hub auquel le module s’adresse fait partie de la configuration du module
Tant qu’aucun jeton n’a été consommé, l’instance apparaît comme Non enrôlée et ne peut pas se connecter. Consommer un jeton pour une instance déjà enrôlée remplace sa clé : c’est ainsi que vous récupérez une clé privée perdue ou déplacez un module vers une autre machine, et tout processus encore connecté avec l’ancienne clé est déconnecté. Supprimer l’instance révoque la clé et ferme aussitôt la connexion.
Pourquoi des instances ?
Vous pouvez avoir besoin de plusieurs connexions au même service. Par exemple deux bots Twitch, ou plusieurs instances d’OBS sur des machines différentes. Chaque instance fonctionne indépendamment et peut émettre ses propres événements.
Comment les modules se connectent
Les modules se connectent à Rawtoh par une connexion WebSocket. Une fois connecté, un module peut :
- S’enregistrer — signer avec sa clé privée un défi émis par le serveur
- Émettre des événements — envoyer à Rawtoh des données auxquelles les déclencheurs peuvent réagir
- Recevoir des appels de méthode — Rawtoh envoie des requêtes au module lorsqu’une action appelle l’une de ses méthodes
Rawtoh gère automatiquement les abonnements — lorsque vous créez, modifiez ou supprimez des déclencheurs, les modules connectés restent synchronisés sans aucune intervention manuelle.
Appeler des modules depuis les scripts
Dans le code de votre action, utilisez la fonction module() pour appeler des méthodes sur les modules connectés :
import { module } from "rawtoh"
// By group only (picks the most recently connected instance)
await module("twitch").request("chat.say", { message: "Hello!" })
// By group and instance name (targets a specific instance)
await module("twitch", "main-bot").request("chat.say", { message: "Hello!" })
// Fire-and-forget (doesn't wait for the module's response)
await module("obs").notify("scene.set_current", { sceneName: "BRB" })Modes de communication
| Mode | Description |
|---|---|
.request(method, params) | Attend la réponse du module avant de continuer |
.notify(method, params) | Envoi sans attente de réponse — continue immédiatement |
Configurer un module
Modules hébergés : Installer avec Rawtoh
Les modules officiels (Twitch, OBS, Tableau) sont des applications web hébergées sur le domaine de Rawtoh. Connectez-vous-y avec votre compte Rawtoh et cliquez sur Installer avec Rawtoh : le module crée l’instance dans votre organisation, enrôle sa paire de clés et se connecte — aucun jeton à copier. Vous devez avoir le rôle propriétaire dans l’organisation. Chaque module accepte aussi un jeton d’enrôlement collé à la main, sous Jeton d’enrôlement (avancé), si vous préférez créer l’instance vous-même.
Tout autre module : jeton d’enrôlement
- Allez dans Module → Définitions et vérifiez que la définition du module existe (ou créez-en une)
- Allez dans Module → Instances, cliquez sur Ajouter une instance, choisissez la définition et donnez un nom à l’instance
- Copiez le jeton d’enrôlement — il n’est affiché qu’une seule fois et expire au bout de 15 minutes
- Collez-le dans votre module (pour les modules sans interface, il s’agit en général de la variable
RAWTOH_ENROLL_TOKENou d’une option--enrollau premier lancement). Le module génère sa paire de clés et consomme le jeton - L’instance passe de Non enrôlée à « en ligne » dès que le module établit sa connexion WebSocket
Clé privée perdue, ou réinstallation sur une autre machine ? Choisissez Réenrôler sur l’instance pour obtenir un nouveau jeton. Le module en cours d’exécution continue de fonctionner tant que le nouveau jeton n’a pas été réellement consommé.