Установка
Установите QQ Bot перед настройкой:Настройка
- Перейдите на QQ Open Platform и отсканируйте QR-код с помощью QQ на телефоне, чтобы зарегистрироваться или войти.
- Нажмите Create Bot, чтобы создать нового QQ-бота.
- Найдите AppID и AppSecret на странице настроек бота и скопируйте их.
AppSecret не хранится в открытом виде — если вы покинете страницу, не сохранив его, вам придется сгенерировать новый.
- Добавьте канал:
- Перезапустите Gateway.
Конфигурация
Минимальная конфигурация:QQBOT_APP_IDQQBOT_CLIENT_SECRET
- Резервное использование переменных окружения применяется только к учетной записи QQ Bot по умолчанию.
openclaw channels add --channel qqbot --token-file ...предоставляет только AppSecret; AppID уже должен быть задан в конфигурации илиQQBOT_APP_ID.clientSecretтакже принимает ввод SecretRef, а не только строку в открытом виде.- Устаревшие строки-маркеры
secretref:/...не являются допустимыми значениямиclientSecret; используйте структурированные объекты SecretRef, как в примере выше.
Настройка нескольких учетных записей
Запустите несколько QQ-ботов в одном экземпляре OpenClaw:appId).
Добавьте второго бота через CLI:
Групповые чаты
Поддержка групповых чатов QQ Bot использует OpenID групп QQ, а не отображаемые имена. Добавьте бота в группу, затем упомяните его или настройте группу для работы без упоминания.groups["*"] задает значения по умолчанию для каждой группы, а конкретная
запись groups.GROUP_OPENID переопределяет эти значения для одной группы.
Настройки группы включают:
requireMention: требовать @упоминание перед тем, как бот ответит. По умолчанию:true.commandLevel: управлять тем, какие встроенные слэш-команды могут выполняться в группах. По умолчанию:all, что сохраняет прежнее поведение групп QQBot, когда настройка опущена.ignoreOtherMentions: отбрасывать сообщения, в которых упоминают кого-то еще, но не бота.historyLimit: сохранять последние групповые сообщения без упоминания как контекст для следующего хода с упоминанием. Установите0, чтобы отключить.tools: разрешать/запрещать инструменты для всей группы.toolsBySender: переопределения групповых инструментов для отдельных отправителей; см. Группы.name: удобная метка, используемая в журналах и контексте группы.prompt: prompt поведения для отдельной группы, добавляемый к контексту агента.
commandLevel принимает:
all: оставить распознанные встроенные команды доступными, как раньше. Некоторые команды могут оставаться скрытыми из меню, но авторизованные пользователи по-прежнему могут запускать их в группе.safety: разрешить обычные команды совместной работы, такие как/help,/btwи/stop; попросить пользователей запускать чувствительные команды, такие как/config,/toolsи/bash, в личном чате.strict: разрешить только элементы управления групповой сессией, необходимые для строгой работы группы./stopпо-прежнему остается срочной командой, чтобы авторизованный отправитель мог прервать активный запуск.
toolPolicy выведены из использования. Запустите openclaw doctor --fix, чтобы перенести их в tools.
Режимы активации: mention и always. requireMention: true соответствует
mention; requireMention: false соответствует always. Переопределение активации
на уровне сессии, если оно есть, имеет приоритет над конфигурацией.
Входящая очередь ведется отдельно для каждого peer. Групповые peer получают больший лимит очереди, при заполнении
сохраняют человеческие сообщения впереди сообщений, написанных ботом, и объединяют всплески обычных
групповых сообщений в один атрибутированный ход. Слэш-команды по-прежнему выполняются по одной.
Голос (STT / TTS)
STT и TTS поддерживают двухуровневую конфигурацию с приоритетным fallback:| Настройка | Специфично для Plugin | Fallback фреймворка |
|---|---|---|
| STT | channels.qqbot.stt | tools.media.audio.models[0] |
| TTS | channels.qqbot.tts, channels.qqbot.accounts.<id>.tts | messages.tts |
enabled: false для любого из них, чтобы отключить.
Переопределения TTS на уровне аккаунта используют ту же форму, что и messages.tts, и глубоко сливаются
поверх конфигурации TTS канала/глобальной конфигурации.
Входящие голосовые вложения QQ предоставляются агентам как метаданные аудиомедиа, при этом
сырые голосовые файлы не попадают в общие MediaPaths. Ответы простым текстом [[audio_as_voice]]
синтезируют TTS и отправляют нативное голосовое сообщение QQ, когда TTS
настроен.
Поведение исходящей загрузки/транскодирования аудио также можно настроить через
channels.qqbot.audioFormatPolicy:
sttDirectFormatsuploadDirectFormatstranscodeEnabled
Целевые форматы
| Формат | Описание |
|---|---|
qqbot:c2c:OPENID | Личный чат (C2C) |
qqbot:group:GROUP_OPENID | Групповой чат |
qqbot:channel:CHANNEL_ID | Канал гильдии |
У каждого бота есть собственный набор пользовательских OpenID. OpenID, полученный Bot A, нельзя использовать для отправки сообщений через Bot B.
Слэш-команды
Встроенные команды, перехватываемые перед очередью ИИ:| Команда | Описание |
|---|---|
/bot-ping | Тест задержки |
/bot-version | Показать версию фреймворка OpenClaw |
/bot-help | Перечислить все команды |
/bot-me | Показать QQ user ID отправителя (openid) для настройки allowFrom/groupAllowFrom |
/bot-upgrade | Показать ссылку на руководство по обновлению QQBot |
/bot-logs | Экспортировать последние журналы Gateway как файл |
/bot-approve | Одобрить ожидающее действие QQ Bot (например, подтверждение загрузки в C2C или группу) через нативный поток. |
? к любой команде, чтобы получить справку по использованию (например, /bot-upgrade ?).
Административные команды (/bot-me, /bot-upgrade, /bot-logs, /bot-clear-storage, /bot-streaming, /bot-approve) доступны только в личных сообщениях и требуют, чтобы openid отправителя был в явном списке allowFrom без wildcard. Wildcard allowFrom: ["*"] разрешает чат, но не дает доступ к административным командам. Групповые сообщения сначала сопоставляются с groupAllowFrom, а затем используют fallback к allowFrom. Запуск административной команды в группе возвращает подсказку, а не молча отбрасывается.
Когда одобрения exec в QQ Bot используют стандартный fallback в тот же чат, нажатия нативных
кнопок одобрения следуют тому же явному allowlist команд без wildcard. Чтобы предоставить
доступ только к одобрениям без более широкого доступа к командам, настройте
channels.qqbot.execApprovals.approvers.
Архитектура движка
QQ Bot поставляется как самодостаточный движок внутри Plugin:- Каждый аккаунт владеет изолированным стеком ресурсов (соединение WebSocket, клиент API, кэш токенов, корень хранилища медиа), привязанным к
appId. Аккаунты никогда не разделяют входящее/исходящее состояние. - Логгер для нескольких аккаунтов помечает строки журнала аккаунтом-владельцем, чтобы диагностика оставалась разделяемой, когда вы запускаете несколько ботов под одним Gateway.
- Входящие, исходящие пути и пути моста Gateway используют один корень медианагрузки в
~/.openclaw/media, поэтому загрузки, скачивания и кэши транскодирования попадают в один защищенный каталог вместо дерева для каждой подсистемы. - Доставка rich media проходит через один путь
sendMediaдля целей C2C и групп. Локальные файлы и буферы выше порога большого файла используют chunked upload endpoints QQ, а меньшие нагрузки используют одноразовый media API. - Учетные данные можно сохранять в резервной копии и восстанавливать как часть стандартных снимков учетных данных OpenClaw; движок повторно подключает стек ресурсов каждого аккаунта при восстановлении без необходимости новой пары QR-кода.
Онбординг по QR-коду
В качестве альтернативы ручной вставкеAppID:AppSecret движок поддерживает поток онбординга по QR-коду для привязки QQ Bot к OpenClaw:
- Запустите путь настройки QQ Bot (например,
openclaw channels add --channel qqbot) и выберите поток QR-кода при запросе. - Отсканируйте сгенерированный QR-код телефонным приложением, привязанным к целевому QQ Bot.
- Одобрите сопряжение на телефоне. OpenClaw сохраняет возвращенные учетные данные в
credentials/в правильной области аккаунта.
/bot-approve, а не отвечая через сырой клиент QQ.
Устранение неполадок
- Бот отвечает «gone to Mars»: учетные данные не настроены или Gateway не запущен.
- Нет входящих сообщений: проверьте, что
appIdиclientSecretуказаны правильно, а бот включен на QQ Open Platform. - Повторяющиеся автоответы: OpenClaw записывает индексы исходящих ссылок QQ как
созданные ботом и игнорирует входящие события, у которых текущий
msgIdxсовпадает с той же учетной записью бота. Это предотвращает петли эха платформы, но при этом позволяет пользователям цитировать предыдущие сообщения бота или отвечать на них. - Настройка с
--token-fileпо-прежнему показывает, что конфигурация не выполнена:--token-fileзадает только AppSecret. Вам все еще нуженappIdв конфигурации илиQQBOT_APP_ID. - Проактивные сообщения не приходят: QQ может перехватывать сообщения, инициированные ботом, если пользователь давно не взаимодействовал с ним.
- Голос не транскрибируется: убедитесь, что STT настроен и провайдер доступен.