@ dans les groupes sont les principaux types de conversation, avec des
médias enrichis (images, messages vocaux, vidéos, fichiers). Les messages des canaux de guilde prennent uniquement en charge
le texte et les images accessibles par URL distante ; les messages vocaux, les vidéos, les téléversements de fichiers et les images
locales/Base64 ne sont pas disponibles dans les canaux de guilde. Les réactions et les fils de discussion ne sont pris en charge
nulle part.
Statut : plugin officiel téléchargeable.
Installation
Configuration initiale
- Accédez à la plateforme ouverte QQ et scannez le code QR avec QQ sur votre téléphone pour vous inscrire ou vous connecter.
- Cliquez sur Create Bot pour créer un nouveau bot QQ.
- Repérez AppID et AppSecret sur la page des paramètres du bot, puis copiez-les.
AppSecret n’est pas stocké en texte brut. Si vous quittez la page sans l’enregistrer, vous devrez en générer un nouveau.
- Ajoutez le canal :
- Redémarrez le Gateway.
Configuration
Configuration minimale :QQBOT_APP_IDQQBOT_CLIENT_SECRET
openclaw channels add --channel qqbot --token-file ...définit uniquement l’AppSecret ;appIddoit déjà être défini dans la configuration ou dansQQBOT_APP_ID.clientSecretaccepte une chaîne en texte brut, un chemin de fichier (clientSecretFile) ou un objet SecretRef structuré.- Les anciennes chaînes de marqueur
secretref:.../secretref-env:...sont refusées pourclientSecret; utilisez plutôt un objet SecretRef structuré.
Diffusion en continu
streaming.mode: "off"désactive la diffusion par blocs pour le compte.streaming.nativeTransport: truediffuse les réponses C2C (messages privés) via l’API officiellestream_messagesde QQ ; les cibles de groupe et de canal ne sont pas affectées.- Les anciennes valeurs scalaires
streaming: true|falseet la cléstreaming.c2cStreamApisont migrées vers cette structure viaopenclaw doctor --fix. /bot-streaming on|offactive ou désactive la même configuration depuis un message privé.
Politique d’accès
allowFrom/groupAllowFromdéterminent qui peut converser avec le bot dans les contextes C2C / de groupe.dmPolicy/groupPolicy(open|allowlist|disabled) contrôlent le mode d’application.dmPolicyprend par défaut la valeurallowlistdès queallowFromcontient une entrée concrète (sans caractère générique), sinonopen.groupPolicyprend par défaut la valeurallowlistdès quegroupAllowFromouallowFromcontient une entrée concrète, sinonopen.- Les commandes slash « Auth: allowlist » exigent une entrée explicite sans caractère générique dans
allowFrom(ougroupAllowFrompour les appels depuis un groupe), indépendamment dedmPolicy/groupPolicy— consultez Commandes slash.
Configuration multicomptes
Exécutez plusieurs bots QQ dans une même instance OpenClaw :appId. Les lignes de journal portent l’identifiant du compte propriétaire afin que
les diagnostics restent distincts lorsque plusieurs bots s’exécutent sous un même Gateway.
Ajoutez un deuxième bot via la CLI :
Conversations de groupe
La prise en charge des groupes utilise les OpenID de groupe QQ, et non les noms d’affichage. Ajoutez le bot à un groupe, puis mentionnez-le ou configurez le groupe pour fonctionner sans mention.groups["*"] définit les valeurs par défaut de chaque groupe ; une entrée groups.GROUP_OPENID
concrète remplace ces valeurs par défaut pour un groupe. Paramètres des groupes :
commandLevel accepte :
Les anciennes entrées QQBot
toolPolicy sont retirées. Exécutez openclaw doctor --fix pour les migrer vers tools.
Les modes d’activation sont mention et always. requireMention: true correspond à
mention ; requireMention: false correspond à always. Lorsqu’un remplacement d’activation
au niveau de la session est présent, il prévaut sur la configuration.
La file d’attente entrante est propre à chaque correspondant. Les correspondants de groupe bénéficient d’une capacité de file supérieure (50 contre 20
pour les correspondants directs) ; lorsqu’elle est pleine, les messages rédigés par le bot sont évincés avant ceux des humains,
et les rafales de messages de groupe ordinaires sont fusionnées en un seul tour attribué. Les commandes slash
s’exécutent l’une après l’autre, indépendamment de tout lot de fusion.
Voix (STT / TTS)
STT et TTS prennent en charge une configuration à deux niveaux avec repli prioritaire :enabled: false sur l’un ou l’autre pour le désactiver. Les remplacements TTS au niveau du compte utilisent la
même structure que messages.tts et sont fusionnés en profondeur avec la configuration TTS du canal/globale.
Les requêtes STT expirent par défaut après 60 secondes. Le STT propre au plugin utilise le remplacement
models.providers.<id>.timeoutSeconds sélectionné. Le STT audio du framework
utilise tools.media.audio.models[0].timeoutSeconds, puis
tools.media.audio.timeoutSeconds, puis le remplacement du fournisseur sélectionné.
Les pièces jointes vocales QQ entrantes sont présentées aux agents comme des métadonnées de média audio,
tout en excluant les fichiers vocaux bruts de la valeur générique MediaPaths. La présence de [[audio_as_voice]]
dans une réponse en texte brut déclenche la synthèse TTS et l’envoi d’un message vocal QQ natif lorsque
TTS est configuré.
Le comportement de téléversement/transcodage de l’audio sortant peut également être ajusté avec
channels.qqbot.audioFormatPolicy :
sttDirectFormatsuploadDirectFormatstranscodeEnabled
Formats des cibles
Chaque bot possède son propre ensemble d’OpenID utilisateur. Un OpenID reçu par le bot A ne peut pas être utilisé pour envoyer des messages via le bot B.
Commandes slash
Commandes intégrées interceptées avant la file d’attente de l’IA :
Ajoutez
? à toute commande pour obtenir de l’aide sur son utilisation (par exemple /bot-upgrade ?).
Les commandes avec « Authentification : liste d’autorisation » exigent également que l’openid de l’expéditeur figure dans une
liste allowFrom explicite sans caractère générique (groupAllowFrom est prioritaire pour les
commandes émises depuis un groupe, avec repli sur allowFrom). Le caractère générique
allowFrom: ["*"] autorise la discussion, mais pas ces commandes. L’exécution de l’une d’elles
hors d’une discussion privée ou sans autorisation renvoie une indication au lieu
d’ignorer silencieusement le message.
/bot-me, /bot-version et /bot-upgrade sont réservées aux discussions privées, mais ne
nécessitent pas la liste d’autorisation : tout expéditeur C2C peut les exécuter.
Lorsque les approbations d’exécution de QQ Bot utilisent le repli par défaut vers la même discussion, les clics sur les boutons
d’approbation natifs suivent la même liste d’autorisation explicite sans caractère générique pour les commandes. Pour
accorder uniquement l’accès aux approbations sans élargir l’accès aux commandes, configurez
channels.qqbot.execApprovals.approvers. Les approbations d’exécution natives sont activées par
défaut.
Médias et stockage
- Les médias entrants, sortants et transmis par le pont du Gateway partagent une même racine de charge utile sous
~/.openclaw/media/qqbot(en respectantOPENCLAW_HOMElorsqu’elle est définie), afin que les téléversements, téléchargements et caches de transcodage restent dans un même répertoire protégé. - La livraison de médias enrichis vers les cibles C2C et de groupe passe par un même chemin
sendMedia. Les fichiers locaux et les tampons en mémoire de 5 MiB ou plus utilisent les points de terminaison de téléversement segmenté de QQ ; les charges utiles plus petites et les sources par URL distante/Base64 utilisent l’API de téléversement en une seule opération. - Si une mise à niveau à chaud interrompt le Gateway avant la fin de l’écriture de
openclaw.json, le Plugin restaure les dernières valeurs connues deappId/clientSecretpour ce compte à partir d’un instantané interne au prochain démarrage (sans jamais écraser une modification intentionnelle de la configuration), de sorte qu’il n’est pas nécessaire de rescanner le code QR.
Dépannage
- Le Gateway ne démarre pas / aucun message entrant : vérifiez que
appIdetclientSecretsont corrects et que le bot est activé sur QQ Open Platform. L’absence d’un identifiant d’authentification produit le message « QQBot non configuré (appId ou clientSecret manquant) ». - La configuration avec
--token-fileapparaît toujours comme non configurée :--token-filedéfinit uniquement l’AppSecret.appIddoit toujours être défini dans la configuration ou dansQQBOT_APP_ID. - Les réponses groupées en rafale entrent en collision : lorsque la file d’attente d’un pair est pleine, la file entrante évince les messages rédigés par des bots avant ceux des humains, et fusionne les rafales de messages de groupe normaux (hors commandes) en un seul tour attribué, afin qu’un flot de bavardages de bots ne prive pas les messages humains de traitement.
- Les messages proactifs n’arrivent pas : QQ peut bloquer les messages initiés par le bot si l’utilisateur n’a pas interagi récemment.
- La voix n’est pas transcrite : assurez-vous que la STT est configurée et que le fournisseur est accessible.