@-згадки в групах є основними типами чатів із мультимедійним
вмістом (зображеннями, голосовими повідомленнями, відео та файлами). Повідомлення в каналах гільдій підтримують
лише текст і зображення за віддаленими URL; голосові повідомлення, відео, завантаження файлів і локальні/Base64
зображення в каналах гільдій недоступні. Реакції та гілки обговорень
ніде не підтримуються.
Статус: офіційний Plugin, доступний для завантаження.
Встановлення
Налаштування
- Перейдіть на відкриту платформу 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 секунд. Специфічний для 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
Формати цілей
Кожен бот має власний набір 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 МіБ або більше використовують кінцеві точки 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 налаштовано, а постачальник доступний.