Regional platforms
Бот QQ
QQ Bot подключается к OpenClaw через официальный API QQ Bot (Gateway WebSocket).
Основными типами чатов являются личные чаты C2C и @-упоминания в группах; поддерживаются различные
медиафайлы (изображения, голосовые сообщения, видео, файлы). Для сообщений в каналах гильдий поддерживаются
только текст и изображения по удалённым URL; голосовые сообщения, видео, загрузка файлов и локальные изображения или изображения в формате Base64
в каналах гильдий недоступны. Реакции и ветки
не поддерживаются нигде.
Статус: официальный загружаемый плагин.
Установка
openclaw plugins install @openclaw/qqbotНастройка
- Перейдите на открытую платформу QQ и отсканируйте QR-код с помощью приложения QQ на телефоне, чтобы зарегистрироваться или войти.
- Нажмите Create Bot, чтобы создать нового бота QQ.
- Найдите AppID и AppSecret на странице настроек бота и скопируйте их.
- Добавьте канал:
openclaw channels add --channel qqbot --token "AppID:AppSecret"- Перезапустите Gateway.
Интерактивная настройка:
openclaw channels addВместо ручного ввода AppID/AppSecret мастер также предлагает привязку по QR-коду: отсканируйте код в мобильном приложении, связанном с нужным QQ Bot, чтобы завершить привязку. OpenClaw сохраняет полученные учётные данные в области конфигурации учётной записи.
Конфигурация
Минимальная конфигурация:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecret: "YOUR_APP_SECRET", }, },}Переменные среды учётной записи по умолчанию (только учётная запись верхнего уровня):
QQBOT_APP_IDQQBOT_CLIENT_SECRET
AppSecret из файла:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecretFile: "/path/to/qqbot-secret.txt", }, },}AppSecret через SecretRef из переменной среды:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecret: { source: "env", provider: "default", id: "QQBOT_CLIENT_SECRET" }, }, },}Примечания:
openclaw channels add --channel qqbot --token-file ...задаёт только AppSecret;appIdдолжен быть уже задан в конфигурации илиQQBOT_APP_ID.clientSecretпринимает строку с открытым текстом, путь к файлу (clientSecretFile) или структурированный объект SecretRef.- Устаревшие строки-маркеры
secretref:.../secretref-env:...отклоняются дляclientSecret; вместо них используйте структурированный объект SecretRef.
Потоковая передача
{ channels: { qqbot: { streaming: { mode: "partial", // потоковая передача блоков: "partial" (по умолчанию) или "off" nativeTransport: true, // использовать официальный API stream_messages QQ для личных сообщений C2C }, }, },}streaming.mode: "off"отключает потоковую передачу блоков для учётной записи.streaming.nativeTransport: trueпередаёт ответы C2C (личные сообщения) потоково через официальный APIstream_messagesQQ; групповые цели и цели каналов не затрагиваются.- Устаревшие скалярные значения
streaming: true|falseи ключstreaming.c2cStreamApiпереносятся в эту структуру черезopenclaw doctor --fix. /bot-streaming on|offпереключает ту же конфигурацию из личного сообщения.
Политика доступа
allowFrom/groupAllowFromопределяют, кто может общаться с ботом в контекстах C2C / групп.dmPolicy/groupPolicy(open|allowlist|disabled) управляют режимом применения ограничений. По умолчаниюdmPolicyимеет значениеallowlist, еслиallowFromсодержит конкретную запись (без подстановочного знака), иначе —open. По умолчаниюgroupPolicyимеет значениеallowlist, еслиgroupAllowFromилиallowFromсодержит конкретную запись, иначе —open.- Для слеш-команд «Auth: allowlist» требуется явная запись без подстановочного знака в
allowFrom(илиgroupAllowFromдля вызовов из группы) независимо отdmPolicy/groupPolicy— см. Слеш-команды.
Настройка нескольких учётных записей
Запустите несколько ботов QQ в одном экземпляре OpenClaw:
{ channels: { qqbot: { enabled: true, appId: "111111111", clientSecret: "secret-of-bot-1", accounts: { bot2: { enabled: true, appId: "222222222", clientSecret: "secret-of-bot-2", }, }, }, },}Каждая учётная запись имеет отдельное WebSocket-соединение, клиент API и кеш
токенов, идентифицируемые по appId. Строки журнала помечаются идентификатором соответствующей учётной записи, чтобы
диагностические данные оставались разделёнными при запуске нескольких ботов через один Gateway.
Добавьте второго бота через CLI:
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"Групповые чаты
Для поддержки групп используются OpenID групп QQ, а не отображаемые имена. Добавьте бота в группу, затем упомяните его или настройте группу для работы без упоминания.
{ 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["*"] задаёт значения по умолчанию для каждой группы; конкретная запись groups.GROUP_OPENID
переопределяет эти значения для одной группы. Настройки группы:
| Поле | Значение по умолчанию | Описание |
|---|---|---|
requireMention |
true |
Требовать @-упоминание, прежде чем бот ответит. |
commandLevel |
all |
Какие встроенные слеш-команды могут выполняться в группе (см. ниже). |
ignoreOtherMentions |
false |
Отбрасывать сообщения, в которых упомянут кто-то другой, но не бот. |
historyLimit |
50 |
Недавние сообщения без упоминания, сохраняемые как контекст для следующего обращения с упоминанием. 0 отключает историю. |
tools |
— | Разрешить или запретить инструменты для всей группы. |
toolsBySender |
— | Переопределения инструментов для отдельных отправителей; см. Группы. |
name |
префикс openid | Понятная метка, используемая в журналах и контексте группы. |
prompt |
встроенное значение по умолчанию | Инструкция по поведению для отдельной группы, добавляемая в контекст агента. |
commandLevel принимает:
| Уровень | Поведение |
|---|---|
all |
Существующие встроенные команды остаются доступными. Некоторые из них скрыты в меню, но авторизованные пользователи по-прежнему могут выполнять их в группе. |
safety |
/help, /btw, /stop остаются видимыми в группе; конфиденциальные команды (/config, /tools, /bash и т. д.) необходимо выполнять в личном чате. |
strict |
Разрешены только элементы управления групповым сеансом, необходимые для строгого режима работы. /stop продолжает работать, чтобы авторизованный отправитель мог прервать активный запуск. |
Старые записи QQBot toolPolicy больше не используются. Выполните openclaw doctor --fix, чтобы перенести их в tools.
Режимы активации: mention и always. requireMention: true соответствует
mention; requireMention: false соответствует always. Переопределение активации
на уровне сеанса, если оно задано, имеет приоритет над конфигурацией.
Входящая очередь создаётся отдельно для каждого собеседника. Для групповых собеседников установлен больший предел очереди (50 вместо 20 для прямых собеседников); при заполнении сообщения бота удаляются раньше сообщений людей, а серии обычных групповых сообщений объединяются в один ход с указанием авторов. Слеш- команды выполняются по одной независимо от пакетов объединения.
Голос (STT / TTS)
STT и TTS поддерживают двухуровневую конфигурацию с резервным переходом по приоритету:
| Настройка | Для плагина | Резервное значение фреймворка |
|---|---|---|
| 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" }, }, }, }, }, }, },}Установите enabled: false для любого из них, чтобы отключить его. Переопределения TTS на уровне учётной записи используют
ту же структуру, что и messages.tts, и глубоко объединяются с конфигурацией TTS канала или глобальной конфигурацией.
По умолчанию время ожидания запросов STT истекает через 60 секунд. STT плагина использует
выбранное переопределение models.providers.<id>.timeoutSeconds. STT аудио на уровне фреймворка
сначала использует tools.media.audio.models[0].timeoutSeconds, затем
tools.media.audio.timeoutSeconds, а затем переопределение выбранного провайдера.
Входящие голосовые вложения QQ предоставляются агентам как метаданные аудиоматериалов,
при этом необработанные голосовые файлы не попадают в общий MediaPaths. [[audio_as_voice]]
в ответе с обычным текстом синтезирует TTS и отправляет нативное голосовое сообщение QQ, если
TTS настроен.
Поведение загрузки и перекодирования исходящего аудио также можно настроить с помощью
channels.qqbot.audioFormatPolicy:
sttDirectFormatsuploadDirectFormatstranscodeEnabled
Форматы целей
| Формат | Описание |
|---|---|
qqbot:c2c:OPENID |
Личный чат (C2C) |
qqbot:group:GROUP_OPENID |
Групповой чат |
qqbot:channel:CHANNEL_ID |
Канал гильдии |
Слеш-команды
Встроенные команды, перехватываемые до очереди ИИ:
| Команда | Авторизация | Область действия | Описание |
|---|---|---|---|
/bot-ping |
— | любая | Проверка задержки |
/bot-help |
— | любая | Вывести все команды |
/bot-me |
— | только личные чаты | Показать идентификатор пользователя QQ (openid) отправителя для настройки allowFrom / groupAllowFrom |
/bot-version |
— | только личные чаты | Показать версию платформы OpenClaw и версию плагина |
/bot-upgrade |
— | только личные чаты | Показать ссылку на руководство по обновлению QQBot |
/bot-approve |
список разрешений | только личные чаты | Управлять конфигурацией подтверждения выполнения команд (вкл. / выкл. / всегда / сброс / состояние) |
/bot-logs |
список разрешений | только личные чаты | Экспортировать последние журналы Gateway в виде файла |
/bot-clear-storage |
список разрешений | только личные чаты | Удалить кэшированные загрузки из каталога мультимедиа QQBot |
/bot-streaming |
список разрешений | только личные чаты | Включить или отключить потоковые ответы C2C |
/bot-group-allways |
список разрешений | только личные чаты | Переключить режим активации группы по умолчанию (требуется упоминание или всегда активен) |
Добавьте ? к любой команде, чтобы получить справку по её использованию (например, /bot-upgrade ?).
Команды с «Авторизация: список разрешений» дополнительно требуют, чтобы openid отправителя находился в
явном списке allowFrom без подстановочного знака (groupAllowFrom имеет приоритет для
команд, отправленных из группы; иначе используется allowFrom). Подстановочный знак
allowFrom: ["*"] разрешает общение в чате, но не выполнение этих команд. При запуске одной из них
вне личного чата или без авторизации возвращается подсказка, а сообщение не
отбрасывается без уведомления.
/bot-me, /bot-version и /bot-upgrade доступны только в личных чатах, но
не требуют списка разрешений — их может выполнить любой отправитель C2C.
Когда для подтверждений выполнения команд QQ Bot используется стандартный резервный вариант в том же чате, нажатия
встроенных кнопок подтверждения подчиняются тому же явному списку разрешённых команд без подстановочного знака. Чтобы
предоставить доступ только к подтверждениям без расширенного доступа к командам, настройте
channels.qqbot.execApprovals.approvers. Встроенные подтверждения выполнения команд включены по
умолчанию.
Мультимедиа и хранилище
- Входящие, исходящие и передаваемые через мост Gateway мультимедиа используют единый корневой каталог данных
~/.openclaw/media/qqbot(с учётомOPENCLAW_HOME, если он задан), поэтому отправленные, загруженные файлы и кэши перекодирования находятся в одном защищённом каталоге. - Доставка мультимедийного содержимого для адресатов C2C и групп выполняется через единый путь
sendMedia. Для локальных файлов и буферов в памяти размером 5 MiB или более используются конечные точки QQ для загрузки по частям; для данных меньшего размера и источников в виде удалённых URL или Base64 используется API однократной загрузки. - Если горячее обновление прерывает работу Gateway до завершения записи
openclaw.json, при следующем запуске плагин восстанавливает последние известныеappId/clientSecretдля этой учётной записи из внутреннего снимка (никогда не перезаписывая намеренное изменение конфигурации), поэтому повторное сканирование QR-кода не требуется.
Устранение неполадок
- Gateway не запускается / нет входящих сообщений: убедитесь, что
appIdиclientSecretуказаны верно, а бот включён на платформе QQ Open Platform. При отсутствии учётных данных отображается сообщение «QQBot не настроен (отсутствует appId или clientSecret)». - После настройки с помощью
--token-fileпо-прежнему отображается состояние «не настроено»:--token-fileзадаёт только AppSecret.appIdвсё равно необходимо указать в конфигурации илиQQBOT_APP_ID. - Пакетные ответы в группе конфликтуют: при заполнении очереди участника очередь входящих сообщений удаляет сообщения от ботов раньше сообщений от людей и объединяет серии обычных групповых сообщений (не команд) в один ход с указанием авторства, поэтому поток сообщений от ботов не должен лишать сообщения людей возможности обработки.
- Проактивные сообщения не доставляются: QQ может блокировать сообщения, инициированные ботом, если пользователь давно с ним не взаимодействовал.
- Голосовые сообщения не расшифровываются: убедитесь, что STT настроено, а провайдер доступен.