Regional platforms
Bot QQ
QQ Bot terhubung ke OpenClaw melalui QQ Bot API resmi (Gateway WebSocket).
Chat pribadi C2C dan penyebutan @ dalam grup adalah jenis chat utama, dengan media
lengkap (gambar, suara, video, file). Pesan kanal guild didukung hanya untuk
teks dan gambar URL jarak jauh; unggahan suara, video, file, serta gambar
lokal/Base64 tidak tersedia di kanal guild. Reaksi dan utas tidak didukung
di mana pun.
Status: plugin resmi yang dapat diunduh.
Instalasi
openclaw plugins install @openclaw/qqbotPenyiapan
- Buka QQ Open Platform dan pindai kode QR dengan QQ di ponsel Anda untuk mendaftar / masuk.
- Klik Create Bot untuk membuat bot QQ baru.
- Temukan AppID dan AppSecret pada halaman pengaturan bot lalu salin keduanya.
- Tambahkan kanal:
openclaw channels add --channel qqbot --token "AppID:AppSecret"- Mulai ulang Gateway.
Ketahanan pesan masuk
Untuk peristiwa giliran Gateway QQ, OpenClaw mempertahankan peristiwa mentah sebelum memajukan urutan resume Gateway yang tersimpan. Giliran yang tertunda atau dapat dicoba ulang tetap bertahan setelah Gateway dimulai ulang, tetap diserialkan per percakapan, dan menggunakan ID peristiwa penyedia untuk mencegah entri antrean duplikat selama catatan penyelesaian aktif atau yang dipertahankan masih ada.
Jika penerimaan persisten gagal, OpenClaw memutus soket Gateway saat ini tanpa memajukan urutan. Jalur penyambungan kembali/resume kemudian dapat meminta kembali peristiwa yang belum dikomit. Pengiriman tetap dilakukan setidaknya satu kali melintasi batas antrean-ke-agen, sehingga crash saat serah terima dapat memutar ulang suatu giliran.
Penyiapan interaktif:
openclaw channels addWizard juga menawarkan pengikatan kode QR sebagai alternatif untuk mengetik AppID/AppSecret secara manual: pindai kode dengan aplikasi ponsel yang ditautkan ke QQ Bot target untuk menyelesaikan pengikatan. OpenClaw mempertahankan kredensial yang dikembalikan dalam cakupan konfigurasi akun.
Konfigurasi
Konfigurasi minimal:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecret: "YOUR_APP_SECRET", }, },}Variabel lingkungan akun default (hanya akun tingkat teratas):
QQBOT_APP_IDQQBOT_CLIENT_SECRET
AppSecret berbasis file:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecretFile: "/path/to/qqbot-secret.txt", }, },}AppSecret SecretRef lingkungan:
{ channels: { qqbot: { enabled: true, appId: "YOUR_APP_ID", clientSecret: { source: "env", provider: "default", id: "QQBOT_CLIENT_SECRET" }, }, },}Catatan:
openclaw channels add --channel qqbot --token-file ...hanya menetapkan AppSecret;appIdharus sudah ditetapkan dalam konfigurasi atauQQBOT_APP_ID.clientSecretmenerima string teks biasa, jalur file (clientSecretFile), atau objek SecretRef terstruktur.- String penanda lama
secretref:.../secretref-env:...ditolak untukclientSecret; gunakan objek SecretRef terstruktur sebagai gantinya.
Streaming
{ channels: { qqbot: { streaming: { mode: "partial", // streaming blok: "partial" (default) atau "off" nativeTransport: true, // gunakan API stream_messages C2C resmi QQ untuk DM }, }, },}streaming.mode: "off"menonaktifkan streaming blok untuk akun.streaming.nativeTransport: truemelakukan streaming balasan C2C (DM) melalui API resmistream_messagesmilik QQ; target grup/kanal tidak terpengaruh.- Skalar lama
streaming: true|falsedan kuncistreaming.c2cStreamApidimigrasikan ke bentuk ini melaluiopenclaw doctor --fix. /bot-streaming on|offmengaktifkan atau menonaktifkan konfigurasi yang sama dari DM.
Kebijakan akses
allowFrom/groupAllowFrommembatasi siapa yang dapat mengobrol dengan bot dalam konteks C2C / grup.dmPolicy/groupPolicy(open|allowlist|disabled) mengontrol mode penerapan.dmPolicyditetapkan secara default keallowlistsetelahallowFrommemiliki entri konkret (bukan wildcard), jika tidak makaopen.groupPolicyditetapkan secara default keallowlistsetelahgroupAllowFromatauallowFrommemiliki entri konkret, jika tidak makaopen.- Perintah garis miring "Auth: allowlist" memerlukan entri eksplisit bukan wildcard dalam
allowFrom(ataugroupAllowFromuntuk pemanggilan grup), terlepas daridmPolicy/groupPolicy— lihat Perintah garis miring.
Penyiapan multiakun
Jalankan beberapa bot QQ dalam satu instans OpenClaw:
{ channels: { qqbot: { enabled: true, appId: "111111111", clientSecret: "secret-of-bot-1", accounts: { bot2: { enabled: true, appId: "222222222", clientSecret: "secret-of-bot-2", }, }, }, },}Setiap akun memiliki koneksi WebSocket, klien API, dan cache token
yang terisolasi, dengan kunci appId. Baris log diberi tag ID akun pemilik agar
diagnostik tetap dapat dipisahkan saat Anda menjalankan beberapa bot dalam satu Gateway.
Tambahkan bot kedua melalui CLI:
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"Chat grup
Dukungan grup menggunakan OpenID grup QQ, bukan nama tampilan. Tambahkan bot ke grup, lalu sebut bot tersebut atau konfigurasikan grup agar berjalan tanpa penyebutan.
{ 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: "Buat balasan tetap singkat dan operasional.", }, }, }, },}groups["*"] menetapkan default untuk setiap grup; entri konkret groups.GROUP_OPENID
menggantikan default tersebut untuk satu grup. Pengaturan grup:
| Bidang | Default | Deskripsi |
|---|---|---|
requireMention |
true |
Memerlukan penyebutan @ sebelum bot membalas. |
commandLevel |
all |
Perintah garis miring bawaan yang dapat dijalankan dalam grup (lihat di bawah). |
ignoreOtherMentions |
false |
Mengabaikan pesan yang menyebut orang lain tetapi tidak menyebut bot. |
historyLimit |
50 |
Pesan terbaru tanpa penyebutan yang disimpan sebagai konteks untuk giliran berikutnya yang menyebut bot. 0 menonaktifkan riwayat. |
tools |
— | Mengizinkan/menolak alat untuk seluruh grup. |
toolsBySender |
— | Penggantian alat per pengirim; lihat Grup. |
name |
prefiks openid | Label ramah yang digunakan dalam log dan konteks grup. |
prompt |
default bawaan | Prompt perilaku per grup yang ditambahkan ke konteks agen. |
commandLevel menerima:
| Tingkat | Perilaku |
|---|---|
all |
Perintah bawaan yang ada tetap tersedia. Beberapa tetap disembunyikan dari menu, tetapi pengguna yang diotorisasi masih dapat menjalankannya dalam grup. |
safety |
/help, /btw, /stop tetap terlihat dalam grup; perintah sensitif (/config, /tools, /bash, dan lainnya) harus dijalankan dalam chat pribadi. |
strict |
Hanya kontrol sesi grup yang diperlukan untuk operasi ketat yang diizinkan. /stop tetap berfungsi agar pengirim yang diotorisasi dapat menghentikan proses aktif. |
Entri QQBot lama toolPolicy telah dihentikan. Jalankan openclaw doctor --fix untuk memigrasikannya ke tools.
Mode aktivasi adalah mention dan always. requireMention: true dipetakan ke
mention; requireMention: false dipetakan ke always. Penggantian aktivasi tingkat sesi,
jika ada, lebih diutamakan daripada konfigurasi.
Antrean pesan masuk dibuat per peer. Peer grup mendapatkan batas antrean yang lebih besar (50 dibandingkan 20 untuk peer langsung), mengeluarkan pesan buatan bot sebelum pesan manusia saat penuh, dan menggabungkan rentetan pesan grup normal menjadi satu giliran beratribusi. Perintah garis miring dijalankan satu per satu, terlepas dari batch penggabungan apa pun.
Suara (STT / TTS)
STT dan TTS mendukung konfigurasi dua tingkat dengan fallback prioritas:
| Pengaturan | Khusus plugin | Fallback kerangka kerja |
|---|---|---|
| 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" }, }, }, }, }, }, },}Tetapkan enabled: false pada salah satunya untuk menonaktifkannya. Penggantian TTS tingkat akun menggunakan
bentuk yang sama seperti messages.tts dan digabungkan secara mendalam di atas konfigurasi TTS kanal/global.
Permintaan STT mengalami batas waktu setelah 60 detik secara default. STT khusus plugin menggunakan
penggantian models.providers.<id>.timeoutSeconds yang dipilih. STT audio kerangka kerja
menggunakan tools.media.audio.models[0].timeoutSeconds, kemudian
tools.media.audio.timeoutSeconds, lalu penggantian penyedia yang dipilih.
Lampiran suara QQ yang masuk diekspos kepada agen sebagai metadata media audio
sembari menjaga file suara mentah tetap berada di luar MediaPaths generik. [[audio_as_voice]]
dalam balasan teks biasa menyintesis TTS dan mengirim pesan suara QQ native saat
TTS dikonfigurasi.
Perilaku unggah/transkode audio keluar juga dapat disesuaikan dengan
channels.qqbot.audioFormatPolicy:
sttDirectFormatsuploadDirectFormatstranscodeEnabled
Format target
| Format | Deskripsi |
|---|---|
qqbot:c2c:OPENID |
Chat pribadi (C2C) |
qqbot:group:GROUP_OPENID |
Chat grup |
qqbot:channel:CHANNEL_ID |
Kanal guild |
Perintah garis miring
Perintah bawaan yang dicegat sebelum antrean AI:
| Perintah | Autentikasi | Cakupan | Deskripsi |
|---|---|---|---|
/bot-ping |
— | apa pun | Uji latensi |
/bot-help |
— | apa pun | Cantumkan semua perintah |
/bot-me |
— | hanya privat | Tampilkan ID pengguna QQ pengirim (openid) untuk penyiapan allowFrom / groupAllowFrom |
/bot-version |
— | hanya privat | Tampilkan versi kerangka kerja OpenClaw dan versi plugin |
/bot-upgrade |
— | hanya privat | Tampilkan tautan panduan peningkatan QQBot |
/bot-approve |
daftar izin | hanya privat | Kelola konfigurasi persetujuan eksekusi perintah (aktif / nonaktif / selalu / atur ulang / status) |
/bot-logs |
daftar izin | hanya privat | Ekspor log Gateway terbaru sebagai berkas |
/bot-clear-storage |
daftar izin | hanya privat | Hapus unduhan yang di-cache di direktori media QQBot |
/bot-streaming |
daftar izin | hanya privat | Aktifkan atau nonaktifkan balasan streaming C2C |
/bot-group-allways |
daftar izin | hanya privat | Alihkan mode aktivasi grup default (wajib menyebut vs. selalu aktif) |
Tambahkan ? ke perintah apa pun untuk mendapatkan bantuan penggunaan (misalnya /bot-upgrade ?).
Perintah "Autentikasi: daftar izin" juga mengharuskan openid pengirim tercantum dalam
daftar allowFrom eksplisit tanpa karakter pengganti (groupAllowFrom diprioritaskan untuk
perintah yang diberikan dari grup, dengan fallback ke allowFrom). Karakter pengganti
allowFrom: ["*"] mengizinkan percakapan, tetapi tidak mengizinkan perintah ini. Menjalankan salah satunya
di luar percakapan privat atau tanpa otorisasi akan menampilkan petunjuk, bukan
mengabaikan pesan secara diam-diam.
/bot-me, /bot-version, dan /bot-upgrade hanya dapat digunakan dalam percakapan privat, tetapi tidak
memerlukan daftar izin — setiap pengirim C2C dapat menjalankannya.
Saat persetujuan eksekusi QQ Bot menggunakan fallback percakapan yang sama secara default, klik tombol
persetujuan native mengikuti daftar izin perintah eksplisit tanpa karakter pengganti yang sama. Untuk
memberikan akses khusus persetujuan tanpa akses perintah yang lebih luas, konfigurasikan
channels.qqbot.execApprovals.approvers. Persetujuan eksekusi native diaktifkan secara
default.
Media dan penyimpanan
- Media masuk, keluar, dan jembatan Gateway berbagi satu root payload di bawah
~/.openclaw/media/qqbot(mengikutiOPENCLAW_HOMEjika ditetapkan), sehingga unggahan, unduhan, dan cache transkode tetap berada di dalam satu direktori yang terlindungi. - Pengiriman media kaya untuk target C2C dan grup melewati satu jalur
sendMedia. Berkas lokal dan buffer dalam memori sebesar 5 MiB atau lebih menggunakan endpoint unggahan bertahap QQ; payload yang lebih kecil serta sumber URL jarak jauh/Base64 menggunakan API unggahan sekali jalan. - Jika peningkatan langsung menginterupsi Gateway sebelum selesai menulis
openclaw.json, plugin memulihkanappId/clientSecretterakhir yang diketahui untuk akun tersebut dari snapshot internal saat dimulai berikutnya (tanpa pernah menimpa perubahan konfigurasi yang disengaja), sehingga pemindaian ulang kode QR tidak diperlukan.
Pemecahan masalah
- Gateway tidak dimulai / tidak ada pesan masuk: pastikan
appIddanclientSecretsudah benar dan bot diaktifkan di QQ Open Platform. Kredensial yang tidak ada ditampilkan sebagai "QQBot belum dikonfigurasi (appId atau clientSecret tidak ada)". - Penyiapan dengan
--token-filemasih menunjukkan belum dikonfigurasi:--token-filehanya menetapkan AppSecret.appIdtetap harus ditetapkan dalam konfigurasi atauQQBOT_APP_ID. - Balasan grup bertubi-tubi bertabrakan: antrean masuk mengeluarkan pesan yang dibuat bot sebelum pesan manusia ketika antrean rekan penuh, dan menggabungkan rentetan pesan grup normal (bukan perintah) menjadi satu giliran dengan atribusi, sehingga banjir percakapan bot tidak akan menghambat pesan manusia.
- Pesan proaktif tidak diterima: QQ mungkin memblokir pesan yang dimulai bot jika pengguna tidak berinteraksi baru-baru ini.
- Suara tidak ditranskripsikan: pastikan STT dikonfigurasi dan penyedia dapat dijangkau.