@ em grupos são os principais tipos de chat, com mídia
avançada (imagens, voz, vídeo, arquivos). Mensagens em canais de guilda são compatíveis apenas com
texto e imagens de URL remota; voz, vídeo, uploads de arquivos e imagens locais/Base64
não estão disponíveis em canais de guilda. Reações e threads não são
compatíveis em nenhum lugar.
Status: plugin oficial disponível para download.
Instalação
Configuração inicial
- Acesse a Plataforma Aberta do QQ e escaneie o código QR com o QQ do celular para se cadastrar / entrar.
- Clique em Create Bot para criar um novo bot do QQ.
- Encontre AppID e AppSecret na página de configurações do bot e copie-os.
O AppSecret não é armazenado como texto simples. Se você sair da página sem salvá-lo, terá que gerar um novo.
- Adicione o canal:
- Reinicie o Gateway.
Configuração
Configuração mínima:QQBOT_APP_IDQQBOT_CLIENT_SECRET
openclaw channels add --channel qqbot --token-file ...define apenas o AppSecret;appIdjá deve estar definido na configuração ou emQQBOT_APP_ID.clientSecretaceita uma string de texto simples, um caminho de arquivo (clientSecretFile) ou um objeto SecretRef estruturado.- Strings de marcador legadas
secretref:.../secretref-env:...são rejeitadas paraclientSecret; use um objeto SecretRef estruturado.
Transmissão
streaming.mode: "off"desativa a transmissão em blocos para a conta.streaming.nativeTransport: truetransmite respostas C2C (mensagens diretas) pela API oficialstream_messagesdo QQ; destinos de grupo/canal não são afetados.- Valores escalares legados
streaming: true|falsee a chavestreaming.c2cStreamApimigram para esse formato por meio deopenclaw doctor --fix. /bot-streaming on|offalterna a mesma configuração a partir de uma mensagem direta.
Política de acesso
allowFrom/groupAllowFromcontrolam quem pode conversar com o bot nos contextos C2C / de grupo.dmPolicy/groupPolicy(open|allowlist|disabled) controlam o modo de aplicação.dmPolicyassumeallowlistpor padrão quandoallowFromtem uma entrada concreta (sem curinga); caso contrário,open.groupPolicyassumeallowlistpor padrão quandogroupAllowFromouallowFromtem uma entrada concreta; caso contrário,open.- Os comandos de barra “Auth: allowlist” exigem uma entrada explícita sem curinga em
allowFrom(ougroupAllowFrompara invocações em grupo), independentemente dedmPolicy/groupPolicy— consulte Comandos de barra.
Configuração de várias contas
Execute vários bots do QQ em uma única instância do OpenClaw:appId. As linhas de log são marcadas com o ID da conta proprietária para que
os diagnósticos permaneçam separados ao executar vários bots em um único Gateway.
Adicione um segundo bot pela CLI:
Chats em grupo
O suporte a grupos usa OpenIDs de grupo do QQ, não nomes de exibição. Adicione o bot a um grupo e depois mencione-o ou configure o grupo para funcionar sem menção.groups["*"] define os padrões para todos os grupos; uma entrada concreta groups.GROUP_OPENID
substitui esses padrões para um grupo. Configurações de grupo:
commandLevel aceita:
As entradas antigas
toolPolicy do QQBot foram descontinuadas. Execute openclaw doctor --fix para migrá-las para tools.
Os modos de ativação são mention e always. requireMention: true corresponde a
mention; requireMention: false corresponde a always. Uma substituição de ativação
no nível da sessão, quando presente, tem precedência sobre a configuração.
A fila de entrada é individual por par. Pares de grupo recebem um limite de fila maior (50 contra 20
para pares diretos), removem mensagens criadas pelo bot antes das mensagens humanas quando a fila está cheia
e combinam sequências de mensagens normais do grupo em um único turno atribuído. Os comandos de barra
são executados um de cada vez, independentemente de qualquer lote combinado.
Voz (STT / TTS)
O suporte a STT e TTS oferece configuração em dois níveis com fallback por prioridade:enabled: false em qualquer um deles para desativá-lo. As substituições de TTS no nível da conta usam o
mesmo formato que messages.tts e são mescladas recursivamente sobre a configuração de TTS do canal/global.
As solicitações de STT atingem o tempo limite após 60 segundos por padrão. O STT específico do plugin usa a
substituição models.providers.<id>.timeoutSeconds selecionada. O STT de áudio do framework
usa tools.media.audio.models[0].timeoutSeconds, depois
tools.media.audio.timeoutSeconds e, por fim, a substituição do provedor selecionado.
Os anexos de voz recebidos do QQ são disponibilizados aos agentes como metadados de mídia de áudio,
enquanto os arquivos de voz brutos são mantidos fora do MediaPaths genérico. [[audio_as_voice]]
em uma resposta de texto simples sintetiza TTS e envia uma mensagem de voz nativa do QQ quando
o TTS está configurado.
O comportamento de upload/transcodificação de áudio de saída também pode ser ajustado com
channels.qqbot.audioFormatPolicy:
sttDirectFormatsuploadDirectFormatstranscodeEnabled
Formatos de destino
Cada bot tem seu próprio conjunto de OpenIDs de usuário. Um OpenID recebido pelo Bot A não pode ser usado para enviar mensagens pelo Bot B.
Comandos de barra
Comandos integrados interceptados antes da fila de IA:
Acrescente
? a qualquer comando para obter ajuda de uso (por exemplo, /bot-upgrade ?).
Os comandos com “Autenticação: lista de permissões” também exigem que o openid do remetente esteja em uma
lista allowFrom explícita e sem curinga (groupAllowFrom tem precedência para
comandos emitidos em grupos, com fallback para allowFrom). Um curinga
allowFrom: ["*"] permite conversar, mas não executar esses comandos. A execução de um deles
fora de uma conversa privada ou sem autorização retorna uma orientação, em vez de
descartar silenciosamente a mensagem.
/bot-me, /bot-version e /bot-upgrade são exclusivos de conversas privadas, mas não
exigem a lista de permissões — qualquer remetente C2C pode executá-los.
Quando as aprovações de execução do QQ Bot usam o fallback padrão para a mesma conversa, os cliques nos
botões nativos de aprovação seguem a mesma lista explícita e sem curinga de permissões de comandos. Para
conceder acesso somente a aprovações sem oferecer acesso mais amplo aos comandos, configure
channels.qqbot.execApprovals.approvers. As aprovações nativas de execução são habilitadas por
padrão.
Mídia e armazenamento
- As mídias de entrada, saída e da ponte do Gateway compartilham uma única raiz de payload em
~/.openclaw/media/qqbot(respeitandoOPENCLAW_HOMEquando definido), portanto uploads, downloads e caches de transcodificação permanecem em um único diretório protegido. - A entrega de mídia avançada para destinos C2C e de grupo passa por um único caminho
sendMedia. Arquivos locais e buffers em memória de 5 MiB ou mais usam os endpoints de upload em partes do QQ; payloads menores e fontes de URL remota/Base64 usam a API de upload em uma única operação. - Se uma atualização a quente interromper o Gateway antes que ele termine de gravar
openclaw.json, o plugin restaurará os últimosappId/clientSecretconhecidos dessa conta a partir de um snapshot interno na próxima inicialização (sem nunca sobrescrever uma alteração intencional da configuração), portanto não será necessário escanear novamente o código QR.
Solução de problemas
- O Gateway não inicia / não há mensagens de entrada: verifique se
appIdeclientSecretestão corretos e se o bot está habilitado na QQ Open Platform. A ausência de uma credencial é indicada como “QQBot não configurado (appId ou clientSecret ausente)”. - A configuração com
--token-fileainda aparece como não configurada:--token-fileapenas define o AppSecret.appIdainda precisa ser definido na configuração ou emQQBOT_APP_ID. - Respostas em rajadas no grupo entram em conflito: quando a fila de um par fica cheia, a fila de entrada descarta mensagens criadas por bots antes das mensagens de pessoas e combina rajadas de mensagens normais (que não sejam comandos) do grupo em um único turno atribuído; assim, uma enxurrada de mensagens de bots não deve impedir o processamento das mensagens de pessoas.
- Mensagens proativas não chegam: o QQ pode bloquear mensagens iniciadas pelo bot se o usuário não tiver interagido recentemente.
- A voz não é transcrita: verifique se o STT está configurado e se o provedor está acessível.