Regional platforms
QQ-Bot
QQ Bot verbindet sich über die offizielle QQ Bot API (WebSocket-Gateway) mit OpenClaw.
Private C2C-Chats und @-Erwähnungen in Gruppen sind die primären Chattypen und unterstützen
Rich Media (Bilder, Sprachnachrichten, Videos und Dateien). Nachrichten in Guild-Kanälen unterstützen
nur Text und Bilder über Remote-URLs; Sprachnachrichten, Videos, Datei-Uploads und lokale/Base64-
Bilder sind in Guild-Kanälen nicht verfügbar. Reaktionen und Threads werden nirgends unterstützt.
Status: offizielles herunterladbares Plugin.
Installation
openclaw plugins install @openclaw/qqbotEinrichtung
- Rufen Sie die QQ Open Platform auf und scannen Sie den QR-Code mit QQ auf Ihrem Mobiltelefon, um sich zu registrieren bzw. anzumelden.
- Klicken Sie auf Create Bot, um einen neuen QQ-Bot zu erstellen.
- Suchen Sie auf der Einstellungsseite des Bots nach AppID und AppSecret und kopieren Sie beide Werte.
- Fügen Sie den Kanal hinzu:
openclaw channels add --channel qqbot --token "AppID:AppSecret"- Starten Sie den Gateway neu.
Interaktive Einrichtung:
openclaw channels addDer Assistent bietet alternativ zur manuellen Eingabe von AppID/AppSecret auch eine QR-Code-Verknüpfung an: Scannen Sie den Code mit der Mobiltelefon-App, die mit dem gewünschten QQ Bot verknüpft ist, um die Verknüpfung abzuschließen. OpenClaw speichert die zurückgegebenen Anmeldedaten im Konfigurationsbereich des Kontos.
Konfiguration
Minimale Konfiguration:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecret: "YOUR_APP_SECRET", }, },}Umgebungsvariablen für das Standardkonto (nur Konto auf oberster Ebene):
QQBOT_APP_IDQQBOT_CLIENT_SECRET
Dateibasiertes AppSecret:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecretFile: "/path/to/qqbot-secret.txt", }, },}AppSecret als SecretRef aus einer Umgebungsvariable:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecret: { source: "env", provider: "default", id: "QQBOT_CLIENT_SECRET" }, }, },}Hinweise:
openclaw channels add --channel qqbot --token-file ...setzt nur das AppSecret;appIdmuss bereits in der Konfiguration oder inQQBOT_APP_IDfestgelegt sein.clientSecretakzeptiert eine Klartextzeichenfolge, einen Dateipfad (clientSecretFile) oder ein strukturiertes SecretRef-Objekt.- Veraltete Markierungszeichenfolgen vom Typ
secretref:.../secretref-env:...werden fürclientSecretabgelehnt; verwenden Sie stattdessen ein strukturiertes SecretRef-Objekt.
Zugriffsrichtlinie
allowFrom/groupAllowFrombestimmen, wer in C2C- bzw. Gruppenkontexten mit dem Bot chatten darf.dmPolicy/groupPolicy(open|allowlist|disabled) steuern den Durchsetzungsmodus.dmPolicyverwendet standardmäßigallowlist, sobaldallowFromeinen konkreten Eintrag ohne Platzhalter enthält, andernfallsopen.groupPolicyverwendet standardmäßigallowlist, sobald entwedergroupAllowFromoderallowFromeinen konkreten Eintrag enthält, andernfallsopen.- Slash-Befehle mit „Authentifizierung: Zulassungsliste“ erfordern unabhängig von
dmPolicy/groupPolicyeinen expliziten Eintrag ohne Platzhalter inallowFrom(bzw. ingroupAllowFrombei Aufrufen aus Gruppen) – siehe Slash-Befehle.
Einrichtung mehrerer Konten
Führen Sie mehrere QQ-Bots in einer einzigen OpenClaw-Instanz aus:
{ channels: { qqbot: { enabled: true, appId: "111111111", clientSecret: "secret-of-bot-1", accounts: { bot2: { enabled: true, appId: "222222222", clientSecret: "secret-of-bot-2", }, }, }, },}Jedes Konto besitzt eine isolierte WebSocket-Verbindung, einen eigenen API-Client und
einen eigenen Token-Cache, jeweils nach appId indiziert. Protokollzeilen werden mit
der ID des zugehörigen Kontos gekennzeichnet, damit die Diagnose beim Betrieb mehrerer
Bots über einen Gateway getrennt bleibt.
Fügen Sie über die CLI einen zweiten Bot hinzu:
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"Gruppenchats
Die Gruppenunterstützung verwendet QQ-Gruppen-OpenIDs, nicht die Anzeigenamen. Fügen Sie den Bot einer Gruppe hinzu und erwähnen Sie ihn anschließend oder konfigurieren Sie die Gruppe für den Betrieb ohne Erwähnung.
{ channels: { qqbot: { groupPolicy: "allowlist", groupAllowFrom: ["member_openid"], groups: { "*": { requireMention: true, commandLevel: "all", historyLimit: 50, tools: { deny: ["exec", "read", "write"] }, }, GROUP_OPENID: { name: "Release room", requireMention: false, ignoreOtherMentions: true, commandLevel: "safety", historyLimit: 20, prompt: "Keep replies short and operational.", }, }, }, },}groups["*"] legt Standardwerte für alle Gruppen fest; ein konkreter Eintrag
groups.GROUP_OPENID überschreibt diese Standardwerte für eine einzelne Gruppe.
Gruppeneinstellungen:
| Feld | Standardwert | Beschreibung |
|---|---|---|
requireMention |
true |
Erfordert eine @-Erwähnung, bevor der Bot antwortet. |
commandLevel |
all |
Legt fest, welche integrierten Slash-Befehle in der Gruppe ausgeführt werden können (siehe unten). |
ignoreOtherMentions |
false |
Verwirft Nachrichten, in denen eine andere Person, aber nicht der Bot erwähnt wird. |
historyLimit |
50 |
Behält aktuelle Nachrichten ohne Erwähnung als Kontext für den nächsten Turn mit Erwähnung bei. 0 deaktiviert den Verlauf. |
tools |
— | Erlaubt oder verweigert Tools für die gesamte Gruppe. |
toolsBySender |
— | Senderspezifische Tool-Überschreibungen; siehe Gruppen. |
name |
OpenID-Präfix | Benutzerfreundliche Bezeichnung für Protokolle und Gruppenkontext. |
prompt |
integrierter Standardwert | Gruppenspezifischer Verhaltens-Prompt, der an den Agentenkontext angehängt wird. |
commandLevel akzeptiert:
| Stufe | Verhalten |
|---|---|
all |
Vorhandene integrierte Befehle bleiben verfügbar. Einige bleiben in Menüs ausgeblendet, autorisierte Benutzer können sie jedoch weiterhin in der Gruppe ausführen. |
safety |
/help, /btw, /stop bleiben in der Gruppe sichtbar; sensible Befehle (/config, /tools, /bash usw.) müssen im privaten Chat ausgeführt werden. |
strict |
Nur die für den strikten Betrieb erforderlichen Steuerbefehle der Gruppensitzung sind zulässig. /stop funktioniert weiterhin, damit ein autorisierter Absender eine aktive Ausführung unterbrechen kann. |
Alte QQBot-Einträge für toolPolicy werden nicht mehr verwendet. Führen Sie openclaw doctor --fix aus, um sie zu tools zu migrieren.
Die Aktivierungsmodi sind mention und always. requireMention: true entspricht
mention; requireMention: false entspricht always. Eine Aktivierungsüberschreibung
auf Sitzungsebene hat, sofern vorhanden, Vorrang vor der Konfiguration.
Die Eingangswarteschlange wird pro Kommunikationspartner verwaltet. Gruppenpartner erhalten eine größere Warteschlangenkapazität (50 gegenüber 20 bei direkten Partnern). Bei voller Warteschlange werden vom Bot verfasste Nachrichten vor menschlichen Nachrichten entfernt, und Serien normaler Gruppennachrichten werden zu einem zugeordneten Turn zusammengeführt. Slash-Befehle werden unabhängig von zusammengeführten Stapeln einzeln nacheinander ausgeführt.
Sprache (STT / TTS)
STT und TTS unterstützen eine zweistufige Konfiguration mit priorisiertem Rückgriff:
| Einstellung | Plugin-spezifisch | Framework-Rückgriff |
|---|---|---|
| STT | channels.qqbot.stt |
tools.media.audio.models[0] |
| TTS | channels.qqbot.tts, channels.qqbot.accounts.<id>.tts |
messages.tts |
{ channels: { qqbot: { stt: { provider: "your-provider", model: "your-stt-model", }, tts: { provider: "your-provider", model: "your-tts-model", voice: "your-voice", }, accounts: { "qq-main": { tts: { providers: { openai: { voice: "shimmer" }, }, }, }, }, }, },}Setzen Sie jeweils enabled: false, um die Funktion zu deaktivieren. TTS-Überschreibungen
auf Kontoebene verwenden dieselbe Struktur wie messages.tts und werden rekursiv mit der
kanalweiten/globalen TTS-Konfiguration zusammengeführt, wobei sie deren Werte überschreiben.
STT-Anfragen haben standardmäßig nach 60 Sekunden ein Zeitlimit. Plugin-spezifisches STT
verwendet die ausgewählte Überschreibung models.providers.<id>.timeoutSeconds. Das
Audio-STT des Frameworks verwendet zunächst tools.media.audio.models[0].timeoutSeconds,
dann tools.media.audio.timeoutSeconds und anschließend die Überschreibung des ausgewählten
Providers.
Eingehende QQ-Sprachanhänge werden Agenten als Metadaten für Audiomedien bereitgestellt,
während die unverarbeiteten Sprachdateien aus den generischen MediaPaths herausgehalten
werden. [[audio_as_voice]] in einer Klartextantwort synthetisiert TTS und sendet eine
native QQ-Sprachnachricht, wenn TTS konfiguriert ist.
Das Verhalten beim Hochladen und Transkodieren ausgehender Audiodaten kann außerdem mit
channels.qqbot.audioFormatPolicy angepasst werden:
sttDirectFormatsuploadDirectFormatstranscodeEnabled
Zielformate
| Format | Beschreibung |
|---|---|
qqbot:c2c:OPENID |
Privater Chat (C2C) |
qqbot:group:GROUP_OPENID |
Gruppenchat |
qqbot:channel:CHANNEL_ID |
Guild-Kanal |
Slash-Befehle
Integrierte Befehle, die vor der KI-Warteschlange abgefangen werden:
| Befehl | Authentifizierung | Geltungsbereich | Beschreibung |
|---|---|---|---|
/bot-ping |
— | überall | Latenztest |
/bot-help |
— | überall | Alle Befehle auflisten |
/bot-me |
— | nur privat | QQ-Benutzer-ID (OpenID) des Absenders für die Einrichtung von allowFrom / groupAllowFrom anzeigen |
/bot-version |
— | nur privat | Version des OpenClaw-Frameworks und des Plugins anzeigen |
/bot-upgrade |
— | nur privat | Link zur QQBot-Aktualisierungsanleitung anzeigen |
/bot-approve |
Zulassungsliste | nur privat | Genehmigungskonfiguration für die Befehlsausführung verwalten (ein / aus / immer / zurücksetzen / Status) |
/bot-logs |
Zulassungsliste | nur privat | Aktuelle Gateway-Protokolle als Datei exportieren |
/bot-clear-storage |
Zulassungsliste | nur privat | Zwischengespeicherte Downloads im QQBot-Medienverzeichnis löschen |
/bot-streaming |
Zulassungsliste | nur privat | Streaming-Antworten für C2C umschalten |
/bot-group-allways |
Zulassungsliste | nur privat | Standardmäßigen Gruppenaktivierungsmodus umschalten (Erwähnung erforderlich oder immer aktiv) |
Hängen Sie für Verwendungshinweise ? an einen beliebigen Befehl an (zum Beispiel /bot-upgrade ?).
Befehle mit „Authentifizierung: Zulassungsliste“ erfordern zusätzlich die OpenID des
Absenders in einer expliziten allowFrom-Liste ohne Platzhalter (groupAllowFrom hat
bei aus Gruppen ausgeführten Befehlen Vorrang; andernfalls wird auf allowFrom
zurückgegriffen). Der Platzhalter allowFrom: ["*"] erlaubt Chats, jedoch nicht diese
Befehle. Wird einer dieser Befehle außerhalb eines privaten Chats oder ohne Autorisierung
ausgeführt, wird ein Hinweis zurückgegeben, anstatt die Nachricht stillschweigend zu
verwerfen.
/bot-me, /bot-version und /bot-upgrade sind ausschließlich für private Chats vorgesehen, erfordern jedoch
keine Zulassungsliste – jeder C2C-Absender kann sie ausführen.
Wenn Ausführungsgenehmigungen für QQ Bot den standardmäßigen Rückgriff auf denselben Chat verwenden, unterliegen Klicks
auf native Genehmigungsschaltflächen derselben expliziten Befehlszulassungsliste ohne Platzhalter. Um
ausschließlich Zugriff auf Genehmigungen ohne weitergehenden Befehlszugriff zu gewähren, konfigurieren Sie
channels.qqbot.execApprovals.approvers. Native Ausführungsgenehmigungen sind standardmäßig
aktiviert.
Medien und Speicher
- Eingehende und ausgehende Medien sowie Medien der Gateway-Bridge verwenden gemeinsam ein Nutzdaten-Stammverzeichnis unter
~/.openclaw/media/qqbot(OPENCLAW_HOMEwird berücksichtigt, wenn es gesetzt ist), sodass Uploads, Downloads und Transcodierungs-Caches in einem einzigen geschützten Verzeichnis verbleiben. - Die Übermittlung von Rich Media an C2C- und Gruppenziele erfolgt über einen gemeinsamen
sendMedia-Pfad. Lokale Dateien und speicherinterne Puffer ab 5 MiB verwenden die Endpunkte von QQ für segmentierte Uploads; kleinere Nutzdaten sowie Remote-URL-/Base64-Quellen verwenden die API für einmalige Uploads. - Wenn ein Hot-Upgrade das Gateway unterbricht, bevor das Schreiben von
openclaw.jsonabgeschlossen ist, stellt das Plugin beim nächsten Start die zuletzt bekannten Werte fürappId/clientSecretdieses Kontos aus einem internen Snapshot wieder her (ohne jemals eine beabsichtigte Konfigurationsänderung zu überschreiben), sodass der QR-Code nicht erneut gescannt werden muss.
Fehlerbehebung
- Gateway startet nicht / keine eingehenden Nachrichten: Überprüfen Sie, ob
appIdundclientSecretkorrekt sind und der Bot auf der QQ Open Platform aktiviert ist. Fehlende Anmeldedaten werden als „QQBot nicht konfiguriert (appId oder clientSecret fehlt)“ angezeigt. - Einrichtung mit
--token-filewird weiterhin als nicht konfiguriert angezeigt:--token-filelegt nur das AppSecret fest.appIdmuss weiterhin in der Konfiguration oder überQQBOT_APP_IDfestgelegt werden. - Antwortserien in Gruppen kollidieren: Wenn sich die Warteschlange eines Kommunikationspartners füllt, entfernt die Warteschlange für eingehende Nachrichten von Bots verfasste Nachrichten vor menschlichen Nachrichten und führt Serien normaler Gruppennachrichten (keine Befehle) zu einem einzelnen, zugeordneten Durchlauf zusammen, sodass eine Flut von Bot-Nachrichten menschliche Nachrichten nicht verdrängen sollte.
- Proaktive Nachrichten kommen nicht an: QQ kann vom Bot initiierte Nachrichten blockieren, wenn der Benutzer in letzter Zeit nicht interagiert hat.
- Sprachnachricht wird nicht transkribiert: Stellen Sie sicher, dass STT konfiguriert und der Provider erreichbar ist.