Les Activités Discord d’OpenClaw
Des widgets HTML autonomes lancés dans Discord, la configuration du tunnel et du portail développeur, les contrôles OAuth et d’instance, les règles d’expiration, et la liste de dépannage
Parfois un graphique ou un petit formulaire interactif en dit plus qu’un paragraphe dans Discord. Les Activités Discord d’OpenClaw laissent un agent publier dans le canal courant un widget HTML interactif et autonome ; le message porte un bouton d’ouverture, et le cliquer lance le widget dans Discord. La fonction est désactivée par défaut : l’outil de widget reste possédé par le cœur, et ce n’est que quand un bloc d’activités est présent et qu’un secret client se résout que les routes d’Activité, le gestionnaire de lancement et le présentateur du canal courant deviennent disponibles derrière lui. Voici les prérequis, la configuration, ce que le cœur fait du widget, le modèle de sécurité, et la liste de dépannage.
Prérequis et configuration
- Il vous faut un bot Discord existant, un nom d’hôte HTTPS public qui atteint la passerelle, et la permission de configurer les Activités et OAuth2 pour l’application du bot ; tout proxy inverse ou tunnel HTTPS convient, et la documentation utilise un tunnel Cloudflare nommé qui donne un nom d’hôte stable sans exposer le port de la passerelle, l’authentification normale de la passerelle restant activée parce que seul le préfixe d’Activité est public.
- Exposez la passerelle en HTTPS et vérifiez que le chemin d’Activité l’atteint une fois la configuration ajoutée ; puis, dans le portail développeur, activez les Activités et créez une correspondance d’URL avec le préfixe racine et le nom d’hôte public plus le chemin d’activité comme cible, sans barre oblique finale.
- Copiez le secret client OAuth2, en ajoutant une URI de redirection de substitution en boucle locale si l’application n’en a aucune puisque Discord en exige une tandis que le SDK embarqué gère le flux de retour, et traitez le secret comme un identifiant : jamais dans le chat, les journaux ni un fichier de configuration validé.
- Ajoutez un bloc d’activités au compte Discord avec le secret client et un identifiant d’application facultatif qui vaut par défaut l’application du bot apprise au démarrage ; le secret peut venir d’une variable d’environnement mais le bloc doit rester présent pour adhérer, et les réglages d’accès normaux restent séparés, si bien que la liste des messages privés contrôle qui peut écrire à l’agent, pas qui peut ouvrir un widget déjà publié dans un canal. Les changements de configuration se rechargent à chaud ; un changement d’environnement du service exige un redémarrage.
Le HTML du widget est rédigé par votre agent et doit être traité comme du contenu de confiance. N’y intégrez pas de secrets que vous ne voudriez pas voir exposés par un widget bogué.
Ce que le cœur fait d’un widget
Le cœur valide et enveloppe le document du widget avant de le confier à Discord : le présentateur accepte une source HTML jusqu’à 48 kibioctets, stocke le document composé canonique, et étiquette toujours le bouton ouvrir le widget ; les champs standard de widget pour l’épinglage, le nom, l’onglet, la taille, le cadre, l’ordre et les capacités restent disponibles parce que l’état du tableau de bord reste possédé par le cœur, et les genres de widgets non HTML enregistrés ne sont pas proposés quand Discord est la seule route de présentation. Les requêtes réseau des widgets sont volontairement bloquées, donc tout CSS, JavaScript, image et donnée doit être inclus en ligne.
Le modèle de sécurité
- OAuth identifie l’utilisateur Discord avant que les métadonnées du widget soient renvoyées, l’API d’instance d’activité de Discord doit confirmer que l’utilisateur est présent dans l’instance courante et le canal de l’instance doit correspondre au canal où le widget a été publié, et tous ceux que Discord admet dans ce canal peuvent ouvrir ses widgets, donc restreindre l’audience se fait par les permissions de canal Discord plutôt que par les listes d’OpenClaw.
- Les sessions OAuth expirent après quinze minutes, les capacités de document de widget après soixante secondes et ne servent qu’une fois, les widgets expirent après sept jours avec au plus soixante-quatre retenus par instance d’extension, et l’iframe en bac à sable avec un bac à sable limité aux scripts et une politique de sécurité du contenu qui bloque le réseau est une défense en profondeur plutôt qu’une frontière contre l’agent qui a rédigé le widget.
- Quand les Activités sont désactivées ou que les identifiants manquent, la route reste enregistrée en interne mais les requêtes publiques sous le préfixe d’activité renvoient le 404 normal, et l’enveloppe publique et la route d’échange de jetons n’exposent jamais le HTML du widget sans session OAuth valide et capacité à usage unique.
OpenClaw sur Discord est le canal auquel ce présentateur appartient, et OpenClaw derrière Cloudflare le schéma de tunnel que la documentation utilise pour publier le seul préfixe public.
Dépannage
Un message de passerelle hors ligne signifie que le tunnel ne route pas vers le vrai port de liaison, que la cible du portail manque le chemin d’activité, que la configuration n’a pas été rechargée, ou que le jeton et le secret ne se résolvent pas tous les deux. Une page blanche ou un blocage CSP signifie que la correspondance a ajouté un second segment d’activité ou que l’enveloppe, son script et le module SDK ne reviennent pas tous par le proxy Discord. Widget indisponible signifie que le bouton a été lancé hors du canal où il a été publié, bien que les enregistrements de lancement côté serveur résolvent généralement le widget exact même quand Discord altère l’identifiant du bouton. Et Discord ne lance pas d’Activités depuis les canaux de type forum, donc OpenClaw y refuse le composant plutôt que de publier un bouton mort. L’accès distant à OpenClaw couvre les règles générales d’exposition d’un chemin de passerelle, et La passerelle OpenClaw expliquée le processus dans lequel vit la route d’Activité.
Sur Diali
Sur Diali, le bot Discord se connecte depuis le tableau de bord, et la route d’Activité aurait besoin d’un nom d’hôte HTTPS public sur la passerelle de l’assistant, qui n’est pas exposée aujourd’hui, donc la fonction reste autogérée pour l’instant. OpenClaw hébergé sur Diali est l’assistant et La sécurité chez Diali décrit ce que la passerelle expose et n’expose pas.
- Un bloc, un secret, un préfixe public.
- OAuth, appartenance à l’instance, correspondance du canal, capacité à usage unique.
- Quinze minutes, soixante secondes, sept jours.
Arrêtez de lire, construisez le vôtre
Configurez un agent, choisissez un canal, et faites-le travailler dans l’application que vous gardez déjà ouverte.
