Regional platforms
ربات QQ
QQ Bot از طریق API رسمی QQ Bot (WebSocket gateway) به OpenClaw متصل میشود. این Plugin از گفتوگوی خصوصی C2C، @پیامهای گروهی، و پیامهای کانال guild همراه با رسانههای غنی (تصویر، صوت، ویدیو، فایل) پشتیبانی میکند.
وضعیت: Plugin قابل دانلود. پیامهای مستقیم، گفتوگوهای گروهی، کانالهای guild، و رسانه پشتیبانی میشوند. واکنشها و رشتهها پشتیبانی نمیشوند.
نصب
پیش از راهاندازی، QQ Bot را نصب کنید:
openclaw plugins install @openclaw/qqbot
راهاندازی
- به QQ Open Platform بروید و کد QR را با QQ روی تلفن خود اسکن کنید تا ثبتنام / ورود انجام شود.
- روی Create Bot کلیک کنید تا یک ربات QQ جدید ساخته شود.
- AppID و AppSecret را در صفحه تنظیمات ربات پیدا و کپی کنید.
AppSecret بهصورت متن ساده ذخیره نمیشود — اگر صفحه را بدون ذخیره آن ترک کنید، باید یک مورد جدید دوباره ایجاد کنید.
- کانال را اضافه کنید:
openclaw channels add --channel qqbot --token "AppID:AppSecret"
- Gateway را بازراهاندازی کنید.
مسیرهای راهاندازی تعاملی:
openclaw channels add
openclaw configure --section channels
پیکربندی
پیکربندی حداقلی:
{
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" },
},
},
}
نکتهها:
- عقبگرد محیطی فقط برای حساب پیشفرض QQ Bot اعمال میشود.
openclaw channels add --channel qqbot --token-file ...فقط AppSecret را فراهم میکند؛ AppID باید از قبل در پیکربندی یاQQBOT_APP_IDتنظیم شده باشد.clientSecretورودی SecretRef را هم میپذیرد، نه فقط یک رشته متن ساده.- رشتههای نشانگر قدیمی
secretref:/...مقدارهای معتبرclientSecretنیستند؛ از شیءهای ساختیافته SecretRef مانند مثال بالا استفاده کنید.
راهاندازی چندحسابی
چند QQ bot را زیر یک نمونه OpenClaw اجرا کنید:
{
channels: {
qqbot: {
enabled: true,
appId: "111111111",
clientSecret: "secret-of-bot-1",
accounts: {
bot2: {
enabled: true,
appId: "222222222",
clientSecret: "secret-of-bot-2",
},
},
},
},
}
هر حساب اتصال WebSocket خودش را راهاندازی میکند و یک کش توکن مستقل
(ایزولهشده با appId) نگه میدارد.
یک ربات دوم را از طریق CLI اضافه کنید:
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"
گفتوگوهای گروهی
پشتیبانی گفتوگوی گروهی QQ Bot از OpenIDهای گروه QQ استفاده میکند، نه نامهای نمایشی. ربات را به یک گروه اضافه کنید، سپس آن را mention کنید یا گروه را طوری پیکربندی کنید که بدون mention اجرا شود.
{
channels: {
qqbot: {
groupPolicy: "allowlist",
groupAllowFrom: ["member_openid"],
groups: {
"*": {
requireMention: true,
historyLimit: 50,
toolPolicy: "restricted",
},
GROUP_OPENID: {
name: "Release room",
requireMention: false,
ignoreOtherMentions: true,
historyLimit: 20,
prompt: "Keep replies short and operational.",
},
},
},
},
}
groups["*"] پیشفرضها را برای هر گروه تنظیم میکند، و یک ورودی مشخص
groups.GROUP_OPENID آن پیشفرضها را برای یک گروه بازنویسی میکند. تنظیمات گروه
شامل موارد زیر است:
requireMention: پیش از پاسخ ربات، یک @mention لازم باشد. پیشفرض:true.ignoreOtherMentions: پیامهایی را که شخص دیگری را mention میکنند اما ربات را نه، حذف کند.historyLimit: پیامهای گروهی اخیرِ بدون mention را بهعنوان زمینه برای نوبت mention شده بعدی نگه دارد. برای غیرفعالسازی روی0تنظیم کنید.toolPolicy:full،restricted، یاnoneبرای ابزارهای محدود به گروه.name: برچسب خوانا که در گزارشها و زمینه گروه استفاده میشود.prompt: دستور رفتاری مخصوص هر گروه که به زمینه عامل افزوده میشود.
حالتهای فعالسازی mention و always هستند. requireMention: true به
mention نگاشت میشود؛ requireMention: false به always نگاشت میشود. بازنویسی فعالسازی
در سطح نشست، اگر وجود داشته باشد، بر پیکربندی اولویت دارد.
صف ورودی بهازای هر همتا است. همتاهای گروهی سقف صف بزرگتری میگیرند، هنگام پر شدن پیامهای انسانی را جلوتر از گفتوگوی نوشتهشده توسط ربات نگه میدارند، و فوران پیامهای عادی گروهی را در یک نوبت دارای انتساب ادغام میکنند. دستورهای اسلش همچنان یکییکی اجرا میشوند.
صدا (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 کانال/سراسری ادغام میشوند.
پیوستهای صوتی ورودی QQ بهصورت فراداده رسانه صوتی در اختیار عاملها قرار میگیرند و همزمان
فایلهای صوتی خام را بیرون از MediaPaths عمومی نگه میدارند. پاسخهای متن ساده
[[audio_as_voice]] وقتی TTS پیکربندی شده باشد، TTS را تولید میکنند و یک پیام صوتی بومی QQ میفرستند.
رفتار بارگذاری/تبدیل کدک صوت خروجی را نیز میتوان با
channels.qqbot.audioFormatPolicy تنظیم کرد:
sttDirectFormatsuploadDirectFormatstranscodeEnabled
قالبهای هدف
| قالب | توضیح |
|---|---|
qqbot:c2c:OPENID |
گفتوگوی خصوصی (C2C) |
qqbot:group:GROUP_OPENID |
گفتوگوی گروهی |
qqbot:channel:CHANNEL_ID |
کانال guild |
هر ربات مجموعه OpenIDهای کاربر خودش را دارد. یک OpenID دریافتشده توسط Bot A نمیتواند برای ارسال پیام از طریق Bot B استفاده شود.
دستورهای اسلش
دستورهای داخلی که پیش از صف هوش مصنوعی گرفته میشوند:
| دستور | توضیح |
|---|---|
/bot-ping |
آزمون تأخیر |
/bot-version |
نمایش نسخه چارچوب OpenClaw |
/bot-help |
فهرست کردن همه دستورها |
/bot-me |
نمایش شناسه کاربر QQ فرستنده (openid) برای راهاندازی allowFrom/groupAllowFrom |
/bot-upgrade |
نمایش پیوند راهنمای ارتقای QQBot |
/bot-logs |
خروجی گرفتن از گزارشهای اخیر gateway بهصورت فایل |
/bot-approve |
تأیید یک اقدام در انتظار QQ Bot (برای مثال، تأیید بارگذاری C2C یا گروهی) از طریق جریان بومی. |
برای راهنمای استفاده، به هر دستور ? اضافه کنید (برای مثال /bot-upgrade ?).
دستورهای مدیر (/bot-me, /bot-upgrade, /bot-logs, /bot-clear-storage, /bot-streaming, /bot-approve) فقط مخصوص پیام مستقیم هستند و نیاز دارند openid فرستنده در یک فهرست صریح و غیر wildcard به نام allowFrom باشد. یک wildcard به شکل allowFrom: ["*"] گفتوگو را مجاز میکند اما دسترسی به دستورهای مدیر نمیدهد. پیامهای گروهی ابتدا با groupAllowFrom مطابقت داده میشوند و سپس به allowFrom عقبگرد میکنند. اجرای دستور مدیر در گروه، بهجای حذف بیصدا، یک راهنما برمیگرداند.
معماری موتور
QQ Bot بهصورت یک موتور خودکفا داخل Plugin ارائه میشود:
- هر حساب مالک یک پشته منبع ایزوله است (اتصال WebSocket، کلاینت API، کش توکن، ریشه ذخیرهسازی رسانه) که با
appIdکلیدگذاری میشود. حسابها هرگز وضعیت ورودی/خروجی را به اشتراک نمیگذارند. - گزارشگر چندحسابی، خطهای گزارش را با حساب مالک برچسبگذاری میکند تا وقتی چند ربات را زیر یک gateway اجرا میکنید، عیبیابیها قابل جداسازی بمانند.
- مسیرهای ورودی، خروجی، و پل gateway یک ریشه واحد بار رسانهای را زیر
~/.openclaw/mediaبه اشتراک میگذارند، بنابراین بارگذاریها، دانلودها، و کشهای تبدیل کدک زیر یک دایرکتوری محافظتشده قرار میگیرند، نه درختی جدا برای هر زیرسامانه. - تحویل رسانه غنی برای هدفهای C2C و گروهی از یک مسیر
sendMediaمیگذرد. فایلهای محلی و بافرهای بالاتر از آستانه فایل بزرگ از نقطههای پایانی بارگذاری قطعهای QQ استفاده میکنند، در حالی که بارهای کوچکتر از API رسانه یکمرحلهای استفاده میکنند. - اعتبارنامهها میتوانند بهعنوان بخشی از snapshotهای استاندارد اعتبارنامه OpenClaw پشتیبانگیری و بازیابی شوند؛ موتور هنگام بازیابی، پشته منبع هر حساب را بدون نیاز به جفتسازی QR-code تازه دوباره متصل میکند.
ورود با کد QR
بهعنوان جایگزینی برای چسباندن دستی AppID:AppSecret، موتور از یک جریان ورود با کد QR برای پیوند دادن QQ Bot به OpenClaw پشتیبانی میکند:
- مسیر راهاندازی QQ Bot را اجرا کنید (برای مثال
openclaw channels add --channel qqbot) و هنگام درخواست، جریان کد QR را انتخاب کنید. - کد QR تولیدشده را با برنامه تلفن متصل به QQ Bot هدف اسکن کنید.
- جفتسازی را روی تلفن تأیید کنید. OpenClaw اعتبارنامههای برگشتی را در
credentials/زیر دامنه حساب درست پایدار میکند.
درخواستهای تأیید تولیدشده توسط خود ربات (برای مثال، جریانهای «اجازه این اقدام داده شود؟» که توسط API QQ Bot ارائه میشوند) بهصورت درخواستهای بومی OpenClaw ظاهر میشوند که میتوانید بهجای پاسخ دادن از طریق کلاینت خام QQ، با /bot-approve بپذیرید.
عیبیابی
- ربات پاسخ میدهد "gone to Mars": اعتبارنامهها پیکربندی نشدهاند یا Gateway شروع نشده است.
- پیام ورودی وجود ندارد: بررسی کنید
appIdوclientSecretدرست باشند، و ربات روی QQ Open Platform فعال باشد. - پاسخهای تکراری به خودش: OpenClaw شاخصهای مرجع خروجی QQ را بهعنوان
نوشتهشده توسط ربات ثبت میکند و رویدادهای ورودیای را که
msgIdxفعلی آنها با همان حساب ربات مطابقت دارد نادیده میگیرد. این کار از حلقههای پژواک پلتفرم جلوگیری میکند و همزمان همچنان به کاربران اجازه میدهد پیامهای قبلی ربات را نقلقول کنند یا به آنها پاسخ دهند. - راهاندازی با
--token-fileهمچنان پیکربندینشده نشان داده میشود:--token-fileفقط AppSecret را تنظیم میکند. همچنان بهappIdدر پیکربندی یاQQBOT_APP_IDنیاز دارید. - پیامهای پیشدستانه نمیرسند: QQ ممکن است پیامهای آغازشده توسط ربات را در صورتی که کاربر اخیراً تعاملی نداشته باشد رهگیری کند.
- صدا رونویسی نمیشود: مطمئن شوید STT پیکربندی شده و ارائهدهنده در دسترس است.