@-упоминания в группах; поддерживаются различные
медиафайлы (изображения, голосовые сообщения, видео, файлы). Для сообщений в каналах гильдий поддерживаются
только текст и изображения по удалённым URL; голосовые сообщения, видео, загрузка файлов и локальные изображения или изображения в формате Base64
в каналах гильдий недоступны. Реакции и ветки
не поддерживаются нигде.
Статус: официальный загружаемый плагин.
Установка
Настройка
- Перейдите на открытую платформу QQ и отсканируйте QR-код с помощью приложения QQ на телефоне, чтобы зарегистрироваться или войти.
- Нажмите Create Bot, чтобы создать нового бота QQ.
- Найдите AppID и AppSecret на странице настроек бота и скопируйте их.
AppSecret не хранится в виде открытого текста. Если вы покинете страницу, не сохранив его, потребуется создать новый.
- Добавьте канал:
- Перезапустите Gateway.
Конфигурация
Минимальная конфигурация:QQBOT_APP_IDQQBOT_CLIENT_SECRET
openclaw channels add --channel qqbot --token-file ...задаёт только AppSecret;appIdдолжен быть уже задан в конфигурации илиQQBOT_APP_ID.clientSecretпринимает строку с открытым текстом, путь к файлу (clientSecretFile) или структурированный объект SecretRef.- Устаревшие строки-маркеры
secretref:.../secretref-env:...отклоняются дляclientSecret; вместо них используйте структурированный объект SecretRef.
Потоковая передача
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:appId. Строки журнала помечаются идентификатором соответствующей учётной записи, чтобы
диагностические данные оставались разделёнными при запуске нескольких ботов через один Gateway.
Добавьте второго бота через CLI:
Групповые чаты
Для поддержки групп используются OpenID групп QQ, а не отображаемые имена. Добавьте бота в группу, затем упомяните его или настройте группу для работы без упоминания.groups["*"] задаёт значения по умолчанию для каждой группы; конкретная запись groups.GROUP_OPENID
переопределяет эти значения для одной группы. Настройки группы:
commandLevel принимает:
Старые записи QQBot
toolPolicy больше не используются. Выполните openclaw doctor --fix, чтобы перенести их в tools.
Режимы активации: mention и always. requireMention: true соответствует
mention; requireMention: false соответствует always. Переопределение активации
на уровне сеанса, если оно задано, имеет приоритет над конфигурацией.
Входящая очередь создаётся отдельно для каждого собеседника. Для групповых собеседников установлен больший предел очереди (50 вместо 20
для прямых собеседников); при заполнении сообщения бота удаляются раньше сообщений людей,
а серии обычных групповых сообщений объединяются в один ход с указанием авторов. Слеш-
команды выполняются по одной независимо от пакетов объединения.
Голос (STT / TTS)
STT и TTS поддерживают двухуровневую конфигурацию с резервным переходом по приоритету: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
Форматы целей
У каждого бота есть собственный набор OpenID пользователей. OpenID, полученный ботом A, нельзя использовать для отправки сообщений через бота B.
Слеш-команды
Встроенные команды, перехватываемые до очереди ИИ:
Добавьте
? к любой команде, чтобы получить справку по её использованию (например, /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 настроено, а провайдер доступен.