Skip to main content

QQ Bot (plugin)

QQ Bot connects to OpenClaw via the official QQ Bot API (WebSocket gateway). The plugin supports C2C private chat, group @messages, and guild channel messages with rich media (images, voice, video, files). Status: supported via plugin. Direct messages, group chats, guild channels, and media are supported. Reactions and threads are not supported.

Plugin required

Install the QQ Bot plugin:
openclaw plugins install @openclaw/qqbot
Local checkout (when running from a git repo):
openclaw plugins install ./extensions/qqbot

Setup

  1. Go to the QQ Open Platform and scan the QR code with your phone QQ to register / log in.
  2. Click Create Bot to create a new QQ bot.
  3. Find AppID and AppSecret on the bot’s settings page and copy them.
AppSecret is not stored in plaintext — if you leave the page without saving it, you’ll have to regenerate a new one.
  1. Add the channel:
openclaw channels add --channel qqbot --token "AppID:AppSecret"
  1. Restart the Gateway.

Configure

Minimal config:
{
  channels: {
    qqbot: {
      enabled: true,
      appId: "YOUR_APP_ID",
      clientSecret: "YOUR_APP_SECRET",
    },
  },
}

Multi-account setup

Run multiple QQ bots under a single OpenClaw instance:
{
  channels: {
    qqbot: {
      enabled: true,
      appId: "111111111",
      clientSecret: "secret-of-bot-1",
      accounts: {
        bot2: {
          enabled: true,
          appId: "222222222",
          clientSecret: "secret-of-bot-2",
        },
      },
    },
  },
}
Each account launches its own WebSocket connection and maintains an independent token cache (isolated by appId). Add a second bot via CLI:
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"

Voice (STT / TTS)

STT and TTS support two-level configuration with priority fallback:
SettingPlugin-specificFramework fallback
STTchannels.qqbot.stttools.media.audio.models[0]
TTSchannels.qqbot.ttsmessages.tts
{
  channels: {
    qqbot: {
      stt: {
        provider: "your-provider",
        model: "your-stt-model",
      },
      tts: {
        provider: "your-provider",
        model: "your-tts-model",
        voice: "your-voice",
      },
    },
  },
}
Set enabled: false on either to disable.

Target formats

FormatDescription
qqbot:c2c:OPENIDPrivate chat (C2C)
qqbot:group:GROUP_OPENIDGroup chat
qqbot:channel:CHANNEL_IDGuild channel
Each bot has its own set of user OpenIDs. An OpenID received by Bot A cannot be used to send messages via Bot B.

Slash commands

Built-in commands intercepted before the AI queue:
CommandDescription
/bot-pingLatency test
/bot-versionShow the OpenClaw framework version
/bot-helpList all commands
/bot-upgradeShow the QQBot upgrade guide link
/bot-logsExport recent gateway logs as a file
Append ? to any command for usage help (for example /bot-upgrade ?).

Troubleshooting

  • Bot replies “gone to Mars”: credentials not configured or Gateway not started.
  • No inbound messages: verify appId and clientSecret are correct, and the bot is enabled on the QQ Open Platform.
  • Proactive messages not arriving: QQ may intercept bot-initiated messages if the user hasn’t interacted recently.
  • Voice not transcribed: ensure STT is configured and the provider is reachable.