Regional platforms
QQ-бот
QQ Bot підключається до OpenClaw через офіційний API QQ Bot (WebSocket Gateway).
Основними типами чатів є приватні чати 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 через 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.
Політика доступу
allowFrom/groupAllowFromвизначають, хто може спілкуватися з ботом у контекстах C2C / груп.dmPolicy/groupPolicy(open|allowlist|disabled) керують режимом застосування обмежень. Стандартним значеннямdmPolicyстаєallowlist, щойноallowFromмістить конкретний запис (не шаблон), інакше використовуєтьсяopen. Стандартним значеннямgroupPolicyстаєallowlist, щойноgroupAllowFromабоallowFromмістить конкретний запис, інакше використовуєтьсяopen.- Команди зі скісною рискою з «Автентифікація: список дозволених» потребують явного запису без шаблону в
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 і версію Plugin |
/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, під час наступного запуску Plugin відновить останні відоміappId/clientSecretдля цього облікового запису з внутрішнього знімка (ніколи не перезаписуючи навмисну зміну конфігурації), тому повторно сканувати QR-код не потрібно.
Усунення несправностей
- Gateway не запускається / немає вхідних повідомлень: переконайтеся, що
appIdіclientSecretправильні, а бота ввімкнено на QQ Open Platform. Відсутні облікові дані відображаються як «QQBot не налаштовано (відсутній appId або clientSecret)». - Після налаштування з
--token-fileусе ще відображається стан «не налаштовано»:--token-fileлише задає AppSecret.appIdусе одно потрібно задати в конфігурації абоQQBOT_APP_ID. - Пакетні відповіді в групах конфліктують: коли черга учасника заповнюється, вхідна черга видаляє повідомлення, створені ботом, раніше за повідомлення людей і об’єднує пакети звичайних (не командних) групових повідомлень в один хід із зазначенням авторства, тому потік повідомлень ботів не повинен витісняти повідомлення людей.
- Ініціативні повідомлення не надходять: QQ може блокувати повідомлення, ініційовані ботом, якщо користувач не взаємодіяв із ним нещодавно.
- Голос не транскрибується: переконайтеся, що STT налаштовано, а провайдер доступний.