@-wzmianki w grupach są podstawowymi typami czatów, z obsługą multimediów
(obrazów, głosu, wideo i plików). Wiadomości w kanałach gildii obsługują tylko
tekst i obrazy ze zdalnych adresów URL; głos, wideo, przesyłanie plików oraz obrazy
lokalne/Base64 nie są dostępne w kanałach gildii. Reakcje i wątki nie są
nigdzie obsługiwane.
Status: oficjalny Plugin do pobrania.
Instalacja
Konfiguracja początkowa
- Przejdź do QQ Open Platform i zeskanuj kod QR za pomocą aplikacji QQ na telefonie, aby się zarejestrować / zalogować.
- Kliknij Create Bot, aby utworzyć nowego bota QQ.
- Znajdź AppID i AppSecret na stronie ustawień bota i skopiuj je.
AppSecret nie jest przechowywany w postaci zwykłego tekstu. W przypadku opuszczenia strony bez zapisania trzeba wygenerować nowy.
- Dodaj kanał:
- Uruchom ponownie Gateway.
Konfiguracja
Konfiguracja minimalna:QQBOT_APP_IDQQBOT_CLIENT_SECRET
openclaw channels add --channel qqbot --token-file ...ustawia tylko AppSecret;appIdmusi już być ustawione w konfiguracji lubQQBOT_APP_ID.clientSecretprzyjmuje ciąg zwykłego tekstu, ścieżkę pliku (clientSecretFile) albo ustrukturyzowany obiekt SecretRef.- Starsze ciągi znaczników
secretref:.../secretref-env:...są odrzucane dlaclientSecret; zamiast nich należy użyć ustrukturyzowanego obiektu SecretRef.
Strumieniowanie
streaming.mode: "off"wyłącza strumieniowanie bloków dla konta.streaming.nativeTransport: trueprzesyła odpowiedzi C2C (wiadomości prywatne) strumieniowo przez oficjalne APIstream_messagesQQ; nie wpływa to na cele grupowe/kanałowe.- Starsze wartości skalarne
streaming: true|falsei kluczstreaming.c2cStreamApisą migrowane do tej struktury za pomocąopenclaw doctor --fix. /bot-streaming on|offprzełącza tę samą konfigurację z poziomu wiadomości prywatnej.
Zasady dostępu
allowFrom/groupAllowFromokreślają, kto może rozmawiać z botem w kontekście C2C / grupy.dmPolicy/groupPolicy(open|allowlist|disabled) sterują trybem egzekwowania.dmPolicyma domyślnie wartośćallowlist, gdyallowFromzawiera konkretny wpis (bez symbolu wieloznacznego), a w przeciwnym razieopen.groupPolicyma domyślnie wartośćallowlist, gdygroupAllowFromluballowFromzawiera konkretny wpis, a w przeciwnym razieopen.- Polecenia ukośnikowe „Auth: allowlist” wymagają jawnego wpisu bez symbolu wieloznacznego w
allowFrom(lubgroupAllowFromw przypadku wywołań grupowych), niezależnie oddmPolicy/groupPolicy— zobacz Polecenia ukośnikowe.
Konfiguracja wielu kont
Uruchamianie wielu botów QQ w jednej instancji OpenClaw:appId. Wiersze dziennika są oznaczane identyfikatorem konta właściciela,
dzięki czemu diagnostyka pozostaje rozdzielona podczas uruchamiania kilku botów w jednym Gateway.
Dodawanie drugiego bota za pomocą CLI:
Czaty grupowe
Obsługa grup używa identyfikatorów OpenID grup QQ, a nie nazw wyświetlanych. Dodaj bota do grupy, a następnie wspomnij o nim lub skonfiguruj grupę tak, aby działała bez wzmianki.groups["*"] ustawia wartości domyślne dla każdej grupy; konkretny wpis groups.GROUP_OPENID
zastępuje te wartości domyślne dla jednej grupy. Ustawienia grupy:
commandLevel przyjmuje:
Stare wpisy QQBot
toolPolicy zostały wycofane. Uruchom openclaw doctor --fix, aby zmigrować je do tools.
Tryby aktywacji to mention i always. requireMention: true odpowiada
mention; requireMention: false odpowiada always. Nadpisanie aktywacji
na poziomie sesji, jeśli istnieje, ma pierwszeństwo przed konfiguracją.
Kolejka przychodząca jest oddzielna dla każdego uczestnika. Uczestnicy grupowi mają większy limit kolejki (50 zamiast 20
dla uczestników bezpośrednich); po zapełnieniu kolejki wiadomości utworzone przez bota są usuwane przed wiadomościami
ludzi, a serie zwykłych wiadomości grupowych są scalane w jedną turę z przypisanym autorstwem. Polecenia
ukośnikowe są wykonywane pojedynczo, niezależnie od partii scalania.
Głos (STT / TTS)
STT i TTS obsługują dwupoziomową konfigurację z rezerwowym wyborem według priorytetu:enabled: false dla dowolnego z nich, aby go wyłączyć. Nadpisania TTS na poziomie konta używają
tej samej struktury co messages.tts i są głęboko scalane z konfiguracją TTS kanału/globalną.
Domyślny limit czasu żądań STT wynosi 60 sekund. STT specyficzne dla Pluginu używa
wybranego nadpisania models.providers.<id>.timeoutSeconds. STT dźwięku frameworka
używa kolejno tools.media.audio.models[0].timeoutSeconds,
tools.media.audio.timeoutSeconds, a następnie nadpisania wybranego dostawcy.
Przychodzące załączniki głosowe QQ są udostępniane agentom jako metadane multimediów audio,
a surowe pliki głosowe pozostają poza ogólnym MediaPaths. [[audio_as_voice]]
w odpowiedzi w postaci zwykłego tekstu syntetyzuje TTS i wysyła natywną wiadomość głosową QQ, gdy
TTS jest skonfigurowane.
Zachowanie przesyłania/transkodowania wychodzącego dźwięku można również dostosować za pomocą
channels.qqbot.audioFormatPolicy:
sttDirectFormatsuploadDirectFormatstranscodeEnabled
Formaty celów
Każdy bot ma własny zestaw identyfikatorów OpenID użytkowników. Identyfikatora OpenID otrzymanego przez Bota A nie można używać do wysyłania wiadomości za pośrednictwem Bota B.
Polecenia ukośnikowe
Wbudowane polecenia przechwytywane przed kolejką AI:
Do dowolnego polecenia można dodać
?, aby uzyskać pomoc dotyczącą jego użycia (na przykład /bot-upgrade ?).
Polecenia z „Autoryzacja: lista dozwolonych” wymagają ponadto, aby openid nadawcy znajdował się na
jawnej liście allowFrom bez symbolu wieloznacznego (groupAllowFrom ma pierwszeństwo dla
poleceń wydawanych w grupie, a w razie braku używane jest allowFrom). Symbol wieloznaczny
allowFrom: ["*"] zezwala na czat, ale nie na te polecenia. Uruchomienie jednego z nich
poza czatem prywatnym lub bez autoryzacji zwraca wskazówkę zamiast
po cichu odrzucać wiadomość.
/bot-me, /bot-version i /bot-upgrade są dostępne wyłącznie w czacie prywatnym, ale nie
wymagają listy dozwolonych — może je uruchomić dowolny nadawca C2C.
Gdy zatwierdzenia wykonywania poleceń QQ Bot korzystają z domyślnego mechanizmu rezerwowego w tym samym czacie, kliknięcia natywnych
przycisków zatwierdzania podlegają tej samej jawnej liście dozwolonych poleceń bez symbolu wieloznacznego. Aby
przyznać dostęp wyłącznie do zatwierdzania bez szerszego dostępu do poleceń, należy skonfigurować
channels.qqbot.execApprovals.approvers. Natywne zatwierdzanie wykonywania poleceń jest domyślnie
włączone.
Multimedia i pamięć masowa
- Przychodzące, wychodzące i przekazywane przez Gateway multimedia współdzielą jeden katalog główny ładunków w
~/.openclaw/media/qqbot(z uwzględnieniemOPENCLAW_HOME, jeśli jest ustawione), dzięki czemu wysyłane pliki, pobierane pliki i pamięci podręczne transkodowania pozostają w jednym chronionym katalogu. - Dostarczanie multimediów wzbogaconych do odbiorców C2C i grupowych odbywa się przez jedną ścieżkę
sendMedia. Pliki lokalne i bufory w pamięci o rozmiarze co najmniej 5 MiB korzystają z punktów końcowych QQ do przesyłania fragmentami; mniejsze ładunki oraz źródła w postaci zdalnych adresów URL/Base64 korzystają z jednorazowego interfejsu API przesyłania. - Jeśli aktualizacja na gorąco przerwie działanie Gateway przed zakończeniem zapisu
openclaw.json, przy następnym uruchomieniu plugin przywróci ostatnie znaneappId/clientSecretdla tego konta z wewnętrznej migawki (nigdy nie zastępując celowej zmiany konfiguracji), dzięki czemu ponowne skanowanie kodu QR nie jest wymagane.
Rozwiązywanie problemów
- Gateway nie uruchamia się / brak wiadomości przychodzących: należy sprawdzić, czy
appIdiclientSecretsą prawidłowe oraz czy bot jest włączony na platformie QQ Open Platform. Brak danych uwierzytelniających jest zgłaszany jako „QQBot nie jest skonfigurowany (brak appId lub clientSecret)”. - Konfiguracja za pomocą
--token-filenadal jest wyświetlana jako nieskonfigurowana:--token-fileustawia tylko AppSecret.appIdnadal musi być ustawione w konfiguracji lubQQBOT_APP_ID. - Serie odpowiedzi grupowych kolidują ze sobą: gdy kolejka uczestnika się zapełnia, kolejka przychodząca usuwa wiadomości utworzone przez bota przed wiadomościami utworzonymi przez ludzi i scala serie zwykłych (niebędących poleceniami) wiadomości grupowych w jedną turę z przypisanym autorstwem, dzięki czemu zalew komunikatów botów nie powinien blokować wiadomości od ludzi.
- Wiadomości proaktywne nie docierają: QQ może blokować wiadomości inicjowane przez bota, jeśli użytkownik nie nawiązał ostatnio interakcji.
- Głos nie jest transkrybowany: należy upewnić się, że STT jest skonfigurowane, a dostawca jest osiągalny.