show_widget und den Handler für die Startschaltfläche nur, wenn channels.discord.activities vorhanden ist und ein Client-Secret aufgelöst werden kann. Der veraltete Alias discord_widget bleibt für eine Version verfügbar.
Voraussetzungen
- ein vorhandener OpenClaw-Discord-Bot
- ein öffentlicher HTTPS-Hostname, über den das OpenClaw-Gateway erreichbar ist
- die Berechtigung, Activities und OAuth2 für die Discord-Anwendung des Bots zu konfigurieren
Einrichtung
1
Gateway über HTTPS verfügbar machen
Starten Sie Ihren Tunnel oder Reverse-Proxy und überprüfen Sie nach dem Hinzufügen der Activities-Konfiguration, ob
https://openclaw.example.com/discord/activity/ das Gateway erreicht. Ersetzen Sie den Beispiel-Hostnamen durch Ihren eigenen.2
Activities in Discord aktivieren
Öffnen Sie die vorhandene Bot-Anwendung im Discord Developer Portal. Öffnen Sie Activities, aktivieren Sie Activities und erstellen Sie eine URL-Zuordnung:
- Präfix:
ROOT(/) - Ziel:
openclaw.example.com/discord/activity
/discord/activity, ohne abschließenden Schrägstrich.3
OAuth2-Client-Secret kopieren
Öffnen Sie OAuth2 im Developer Portal. Discord erfordert mindestens einen Weiterleitungs-URI. Fügen Sie daher einen lokalen Platzhalter wie die Loopback-Adresse hinzu, falls für die Anwendung noch keiner vorhanden ist; das Embedded App SDK übernimmt den Activity-Rückgabeablauf. Kopieren Sie das Client-Secret der Anwendung oder setzen Sie es zurück. Behandeln Sie es als Zugangsdaten: Fügen Sie es weder in Chats oder Protokolle noch in eine eingecheckte Konfigurationsdatei ein.
4
OpenClaw konfigurieren
Fügen Sie dem Discord-Konto, das Widgets anbieten soll, einen Block hinzu:Sie können
clientSecret aus dem Block weglassen, wenn DISCORD_CLIENT_SECRET festgelegt ist. Der Block selbst muss vorhanden bleiben, damit die Funktion aktiviert wird.Die normalen Discord-Zugriffseinstellungen bleiben davon unabhängig. Beispielsweise steuert allowFrom weiterhin, wer dem Agenten Direktnachrichten senden darf; die Einstellung steuert nicht, wer ein bereits in einem Kanal veröffentlichtes Widget öffnen darf.5
Neu starten und testen
Starten Sie das Gateway neu. Bitten Sie den Agenten in einer Discord-Unterhaltung, ein interaktives Widget anzuzeigen. Der Agent ruft
show_widget auf; klicken Sie in der veröffentlichten Nachricht auf Open widget.Sicherheitsmodell
- OAuth identifiziert den Discord-Benutzer, bevor Widget-Metadaten zurückgegeben werden.
- Die Get Activity Instance API von Discord muss bestätigen, dass der OAuth-Benutzer in der aktuellen Activity-Instanz anwesend ist. Der Kanal der Instanz muss mit dem Kanal übereinstimmen, in dem das Widget veröffentlicht wurde.
- Jeder, dem Discord den Zugriff auf diesen Kanal erlaubt, kann dessen Widgets öffnen. Um den Personenkreis einzuschränken, verwenden Sie die Discord-Kanalberechtigungen. OpenClaw-Befehls- und Direktnachrichten-Zulassungslisten gewähren oder entziehen keinen Zugriff auf bereits veröffentlichte Kanalinhalte.
- OAuth-Sitzungen laufen nach 15 Minuten ab. Widget-Dokumentberechtigungen laufen nach 60 Sekunden ab und können einmal verwendet werden.
- Widgets laufen nach sieben Tagen ab, wobei höchstens 64 pro Discord-Plugin-Instanz aufbewahrt werden.
- Das Widget-HTML wird von Ihrem Agenten erstellt und sollte als vertrauenswürdiger Inhalt behandelt werden. Betten Sie keine Geheimnisse ein, die ein fehlerhaftes Widget nicht offenlegen soll.
- Das Widget kann innerhalb seines eigenen verschachtelten Frames navigieren. Der
sandbox="allow-scripts"-iframe blockiert Navigation auf oberster Ebene, Pop-ups und Same-Origin-Zugriff, während seine Content Security Policy Netzwerkverbindungen und externe Ressourcen blockiert. Diese Kontrollen dienen der mehrschichtigen Absicherung und bilden keine Sicherheitsgrenze gegenüber dem Agenten, der das Widget erstellt hat. - Wenn Activities deaktiviert ist, wird
/discord/activityüberhaupt nicht registriert.
Fehlerbehebung
Die Activity meldet „Gateway offline“
- Stellen Sie sicher, dass der Tunnel ausgeführt wird und zum tatsächlich gebundenen Port des Gateways weiterleitet.
- Stellen Sie sicher, dass das Ziel im Developer Portal
/discord/activityenthält. - Starten Sie das Gateway nach Änderungen an der Discord- oder OpenClaw-Konfiguration neu.
- Prüfen Sie die Gateway-Protokolle auf die einzeilige Warnung zu einem fehlenden Activities-Client-Secret.
Discord öffnet eine leere Seite oder meldet blocked:csp
- Überprüfen Sie, ob die URL-Zuordnung
ROOTverwendet und kein zweites/discord/activity-Segment hinzufügt. - Stellen Sie sicher, dass die Shell,
shell.jsund das SDK-Modul vollständig über den Discord-Proxy zurückgegeben werden. - Untersuchen Sie die Gateway-Protokolle auf Anfragen unter
/discord/activity/.