Regional platforms
QQ-бот
QQ Bot підключається до OpenClaw через офіційний API QQ Bot (WebSocket-шлюз).
Приватні чати C2C та @-згадки в групах є основними типами чатів із мультимедійним
вмістом (зображеннями, голосовими повідомленнями, відео та файлами). Повідомлення в каналах гільдій підтримують
лише текст і зображення за віддаленими URL; голосові повідомлення, відео, завантаження файлів і локальні/Base64
зображення в каналах гільдій недоступні. Реакції та гілки обговорень
ніде не підтримуються.
Статус: офіційний Plugin, доступний для завантаження.
Встановлення
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Майстер також пропонує прив’язування за допомогою QR-коду як альтернативу ручному введенню AppID/AppSecret: відскануйте код у телефонному застосунку, пов’язаному з цільовим 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 як Env 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 підтримують дворівневу конфігурацію з резервним переходом за пріоритетом:
| Налаштування | Специфічне для Plugin | Резервне значення фреймворку |
|---|---|---|
| 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 секунд. Специфічний для Plugin 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 МіБ або більше використовують кінцеві точки QQ для часткового передавання; менші корисні навантаження та джерела у вигляді віддалених URL/Base64 використовують API одноразового передавання. - Якщо гаряче оновлення перериває роботу Gateway до завершення запису
openclaw.json, під час наступного запуску плагін відновлює останні відоміappId/clientSecretдля цього облікового запису з внутрішнього знімка (ніколи не перезаписуючи навмисну зміну конфігурації), тому повторне сканування QR-коду не потрібне.
Усунення несправностей
- Gateway не запускається / немає вхідних повідомлень: переконайтеся, що
appIdіclientSecretправильні, а бот увімкнений на QQ Open Platform. Відсутні облікові дані відображаються як «QQBot not configured (missing appId or clientSecret)». - Налаштування за допомогою
--token-fileусе ще відображається як неналаштоване:--token-fileлише задає AppSecret.appIdусе одно потрібно задати в конфігурації абоQQBOT_APP_ID. - Пакетні відповіді групи конфліктують: коли черга співрозмовника заповнюється, вхідна черга видаляє повідомлення, створені ботом, раніше за повідомлення людей і об’єднує пакети звичайних (не командних) групових повідомлень в один хід із зазначенням авторства, тому потік повідомлень бота не повинен витісняти повідомлення людей.
- Проактивні повідомлення не надходять: QQ може блокувати повідомлення, ініційовані ботом, якщо користувач не взаємодіяв із ним останнім часом.
- Голос не транскрибується: переконайтеся, що STT налаштовано, а постачальник доступний.