show_widget en de handler voor de startknop alleen wanneer channels.discord.activities aanwezig is en een clientgeheim kan worden gevonden. De verouderde alias discord_widget blijft nog één release beschikbaar.
Vereisten
- een bestaande OpenClaw Discord-bot
- een openbare HTTPS-hostnaam die de OpenClaw Gateway bereikt
- toestemming om Activities en OAuth2 te configureren voor de Discord-applicatie van de bot
Configuratie
1
Stel de gateway beschikbaar via HTTPS
Start je tunnel of reverseproxy en controleer of
https://openclaw.example.com/discord/activity/ de Gateway bereikt nadat de Activities-configuratie is toegevoegd. Vervang de voorbeeldhostnaam door je eigen hostnaam.2
Schakel Activities in Discord in
Open de bestaande botapplicatie in de Discord Developer Portal. Open Activities, schakel Activities in en maak een URL-toewijzing:
- voorvoegsel:
ROOT(/) - doel:
openclaw.example.com/discord/activity
/discord/activity, zonder afsluitende slash.3
Kopieer het OAuth2-clientgeheim
Open OAuth2 in de Developer Portal. Discord vereist minstens één omleidings-URI. Voeg daarom een lokale tijdelijke aanduiding toe, zoals het loopbackadres, als de applicatie er nog geen heeft; de Embedded App SDK verwerkt de retourstroom van de Activity. Kopieer of herstel het clientgeheim van de applicatie. Behandel dit als een aanmeldgegeven: plak het niet in chats, logboeken of een vastgelegd configuratiebestand.
4
Configureer OpenClaw
Voeg één blok toe aan het Discord-account dat widgets moet aanbieden:Je mag
clientSecret uit het blok weglaten wanneer DISCORD_CLIENT_SECRET is ingesteld. Het blok zelf moet aanwezig blijven om deze functie in te schakelen.De normale instellingen voor Discord-toegang blijven afzonderlijk. allowFrom bepaalt bijvoorbeeld nog steeds wie de agent een DM kan sturen; deze instelling bepaalt niet wie een widget kan openen die al in een kanaal is geplaatst.5
Start opnieuw en test
Start de Gateway opnieuw. Vraag de agent in een Discord-gesprek om een interactieve widget weer te geven. De agent roept
show_widget aan; klik op Open widget in het geplaatste bericht.Beveiligingsmodel
- OAuth identificeert de Discord-gebruiker voordat widgetmetadata worden geretourneerd.
- De Get Activity Instance-API van Discord moet bevestigen dat de OAuth-gebruiker aanwezig is in de huidige Activity-instantie. Het kanaal van de instantie moet overeenkomen met het kanaal waarin de widget is geplaatst.
- Iedereen die van Discord toegang tot dat kanaal krijgt, kan de bijbehorende widgets openen. Gebruik Discord-kanaalmachtigingen om de doelgroep te beperken. Toelatingslijsten voor OpenClaw-opdrachten en DM’s verlenen of verwijderen geen toegang tot kanaalinhoud die al is geplaatst.
- OAuth-sessies verlopen na 15 minuten. Documentmogelijkheden van widgets verlopen na 60 seconden en werken één keer.
- Widgets verlopen na zeven dagen, waarbij per Discord-plugininstantie maximaal 64 widgets worden bewaard.
- De HTML van widgets wordt door je agent geschreven en moet als vertrouwde inhoud worden behandeld. Neem geen geheimen op die een widget met fouten niet zou mogen blootstellen.
- De widget kan binnen het eigen geneste frame navigeren. Het iframe
sandbox="allow-scripts"blokkeert navigatie op het hoogste niveau, pop-ups en toegang tot dezelfde oorsprong, terwijl het Content Security Policy ervan netwerkverbindingen en externe bronnen blokkeert. Deze maatregelen bieden gelaagde beveiliging, maar vormen geen beveiligingsgrens tegen de agent die de widget heeft geschreven. - Wanneer Activities is uitgeschakeld, wordt
/discord/activityhelemaal niet geregistreerd.
Problemen oplossen
De Activity meldt “Gateway offline”
- controleer of de tunnel actief is en doorstuurt naar de daadwerkelijke bindpoort van de Gateway
- controleer of het doel in de Developer Portal
/discord/activitybevat - start de Gateway opnieuw nadat je de configuratie van Discord of OpenClaw hebt gewijzigd
- controleer de Gateway-logboeken op de waarschuwing van één regel over een ontbrekend Activities-clientgeheim
Discord opent een lege pagina of meldt blocked:csp
- controleer of de URL-toewijzing
ROOTgebruikt en geen tweede/discord/activity-segment toevoegt - controleer of de shell,
shell.jsen de SDK-module allemaal via de Discord-proxy worden geretourneerd - controleer de Gateway-logboeken op verzoeken onder
/discord/activity/