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 Redirect-URI. Fügen Sie daher einen lokalen Platzhalter wie die Loopback-Adresse hinzu, falls die Anwendung noch keinen besitzt; das Embedded App SDK übernimmt den Activity-Rückleitungsablauf. Kopieren Sie das Client-Secret der Anwendung oder setzen Sie es zurück. Behandeln Sie es wie Anmeldedaten: Fügen Sie es nicht in Chats, Protokolle oder 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 gesetzt ist. Der Block selbst muss vorhanden bleiben, um die Funktion zu aktivieren.Die normalen Discord-Zugriffseinstellungen bleiben davon getrennt. Beispielsweise steuert allowFrom weiterhin, wer dem Agenten Direktnachrichten senden kann; diese Einstellung steuert nicht, wer ein bereits in einem Kanal gepostetes Widget öffnen kann.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 geposteten Nachricht auf Widget öffnen.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 gepostet wurde.
- Jeder, dem Discord den Zugriff auf diesen Kanal erlaubt, kann dessen Widgets öffnen. Verwenden Sie Discord-Kanalberechtigungen, um den Benutzerkreis einzuschränken. OpenClaw-Befehls- und Direktnachrichten-Zulassungslisten gewähren oder entziehen keinen Zugriff auf bereits gepostete 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; pro Discord-Plugin-Instanz werden höchstens 64 aufbewahrt.
- 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 die 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 stellen keine Sicherheitsgrenze gegenüber dem Agenten dar, der das Widget erstellt hat. - Wenn Activities deaktiviert ist, wird
/discord/activityüberhaupt nicht registriert.
Fehlerbehebung
Die Activity meldet „Gateway offline“
- Bestätigen Sie, dass der Tunnel läuft und Anfragen an den tatsächlichen Bind-Port des Gateways weiterleitet
- Bestätigen Sie, 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 über ein fehlendes 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 - Bestätigen Sie, dass die Shell,
shell.jsund das SDK-Modul vollständig über den Discord-Proxy zurückgegeben werden - Prüfen Sie die Gateway-Protokolle auf Anfragen unter
/discord/activity/