Developer and self-hosted
Twitch
پشتیبانی از چت Twitch از طریق رابط چت (IRC) این سرویس و با استفاده از کلاینت Twurple. OpenClaw با یک حساب ربات Twitch وارد میشود، برای هر حساب پیکربندیشده به یک کانال میپیوندد و در همان کانال پاسخ میدهد.
نصب
Twitch بهعنوان یک Plugin رسمی عرضه میشود و بخشی از نصب هسته نیست.
رجیستری npm
openclaw plugins install @openclaw/twitchنسخه محلی مخزن
openclaw plugins install ./path/to/local/twitch-pluginplugins install، Plugin را ثبت و فعال میکند. انتخاب Twitch هنگام openclaw onboard یا openclaw channels add آن را در صورت نیاز نصب میکند. برای دنبالکردن نسخه انتشار فعلی، از نام ساده بسته استفاده کنید؛ فقط برای نصبهای بازتولیدپذیر یک نسخه دقیق را ثابت کنید. به OpenClaw 2026.4.10 یا جدیدتر نیاز دارد.
جزئیات: Pluginها
راهاندازی سریع
نصب Plugin
بخش نصب در بالا را ببینید.
ایجاد حساب ربات Twitch
یک حساب اختصاصی Twitch برای ربات ایجاد کنید (یا از یک حساب موجود استفاده کنید).
ایجاد اطلاعات اعتبارسنجی
از مولد توکن Twitch استفاده کنید:
- گزینه Bot Token را انتخاب کنید
- بررسی کنید که دامنههای دسترسی
chat:readوchat:writeانتخاب شده باشند - مقادیر Client ID و Access Token را کپی کنید
یافتن شناسه کاربری Twitch
با استفاده از https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ یک نام کاربری را به شناسه کاربری Twitch تبدیل کنید.
پیکربندی توکن
- متغیر محیطی:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(فقط حساب پیشفرض) - یا پیکربندی:
channels.twitch.accessToken
اگر هر دو تنظیم شده باشند، پیکربندی اولویت دارد (متغیر محیطی فقط برای حساب پیشفرض نقش جایگزین را دارد).
راهاندازی Gateway
openclaw gateway runپیکربندی حداقلی:
{ channels: { twitch: { enabled: true, username: "openclaw", // حساب Twitch ربات (برای احراز هویت) accessToken: "oauth:abc123...", // توکن دسترسی OAuth (یا استفاده از متغیر محیطی OPENCLAW_TWITCH_ACCESS_TOKEN) clientId: "xyz789...", // شناسه کلاینت از Token Generator channel: "yourchannel", // چت کدام کانال Twitch باید پیوسته شود (الزامی) allowFrom: ["123456789"], // (توصیهشده) فقط شناسه کاربری Twitch شما }, },}چیستی آن
- یک کانال Twitch تحت مالکیت Gateway.
- مسیریابی قطعی: پاسخها همیشه به همان کانال Twitch بازمیگردند که پیام از آن آمده است.
- هر کانال پیوستهشده به یک کلید نشست گروهی مجزا به نام
agent:<agentId>:twitch:group:<channel>نگاشت میشود. usernameحساب ربات است (حساب احراز هویتکننده) وchannelاتاق چتی است که باید به آن پیوست. هر ورودی حساب دقیقاً به یک کانال میپیوندد.- توکنها با پیشوند
oauth:یا بدون آن کار میکنند؛ OpenClaw هر دو حالت را یکسانسازی میکند (دستیار راهاندازی قالبoauth:را انتظار دارد).
دوام پیامهای ورودی
OpenClaw هر پیام پذیرفتهشده چت Twitch را پیش از ارسال عادی، بهصورت پایدار در صف قرار میدهد. پیامهای در انتظار یا قابلتلاش مجدد پس از راهاندازی دوباره Gateway باقی میمانند، برای کانال پیکربندیشده بهشکل ترتیبی پردازش میشوند و تا زمانی که رکورد تکمیل فعال یا نگهداریشده وجود دارد، از شناسه پیام Twitch برای جلوگیری از ورودیهای تکراری صف استفاده میکنند.
پس از آنکه کلاینت یک PRIVMSG را پذیرفت، چت Twitch آن را دوباره پخش نمیکند. این سازوکار از بازه خرابی محلی میان پذیرش و ارسال محافظت میکند، اما نمیتواند پیامهایی را که پیش از پذیرش پایدار از دست رفتهاند بازیابی کند. اگر خود افزودن به صف ناموفق باشد، OpenClaw خطا را ثبت میکند؛ اتصال مجدد از Twitch نمیخواهد آن پیام را دوباره ارسال کند.
تازهسازی توکن (اختیاری)
توکنهای مولد توکن Twitch را OpenClaw نمیتواند تازهسازی کند؛ پس از انقضا آنها را دوباره ایجاد کنید (چند ساعت دوام دارند و نیازی به ثبت برنامه نیست).
برای تازهسازی خودکار، برنامه خود را در کنسول توسعهدهندگان Twitch ایجاد کنید و موارد زیر را اضافه کنید:
{ channels: { twitch: { clientSecret: "your_client_secret", refreshToken: "your_refresh_token", }, },}با تنظیم هر دو مقدار، Plugin از یک ارائهدهنده احراز هویت با قابلیت تازهسازی استفاده میکند که توکنها را پیش از انقضا تمدید و هر تازهسازی را ثبت میکند. بدون refreshToken، پیام token refresh disabled (no refresh token) را ثبت میکند؛ بدون clientSecret، به یک توکن ایستا (بدون قابلیت تازهسازی) برمیگردد.
پشتیبانی از چند حساب
از channels.twitch.accounts همراه با اطلاعات اعتبارسنجی مختص هر حساب استفاده کنید. برای الگوی مشترک، پیکربندی را ببینید.
نمونه (یک حساب ربات در دو کانال):
{ channels: { twitch: { accounts: { channel1: { username: "openclaw", accessToken: "oauth:abc123...", clientId: "xyz789...", channel: "yourchannel", }, channel2: { username: "openclaw", accessToken: "oauth:def456...", clientId: "uvw012...", channel: "secondchannel", }, }, }, },}کنترل دسترسی
allowFrom یک فهرست مجاز سختگیرانه از شناسههای کاربری Twitch است. وقتی تنظیم شده باشد، allowedRoles نادیده گرفته میشود؛ برای استفاده از دسترسی مبتنی بر نقش، allowFrom را تنظیمنشده باقی بگذارید.
نقشهای موجود: "moderator"، "owner"، "vip"، "subscriber"، "all".
فهرست مجاز شناسه کاربری (امنترین)
{ channels: { twitch: { accounts: { default: { allowFrom: ["123456789", "987654321"], }, }, }, },}مبتنی بر نقش
{ channels: { twitch: { accounts: { default: { allowedRoles: ["moderator", "vip"], }, }, }, },}غیرفعالکردن الزام @mention
مقدار پیشفرض requireMention برابر با true است. برای پاسخدادن به همه پیامهای مجاز:
{ channels: { twitch: { accounts: { default: { requireMention: false, }, }, }, },}عیبیابی
ابتدا فرمانهای تشخیصی را اجرا کنید:
openclaw doctoropenclaw channels status --probeربات به پیامها پاسخ نمیدهد
- کنترل دسترسی را بررسی کنید: مطمئن شوید شناسه کاربری شما در
allowFromقرار دارد؛ یا برای آزمایش، موقتاًallowFromرا حذف وallowedRoles: ["all"]را تنظیم کنید. - محدودیت منشن را بررسی کنید: با
requireMention: true(مقدار پیشفرض)، پیامها باید نام کاربری ربات را @mention کنند. - حضور ربات در کانال را بررسی کنید: ربات فقط به کانالی میپیوندد که در
channelنامگذاری شده است.
مشکلات توکن
خطای «اتصال ناموفق بود» یا خطاهای احراز هویت:
- بررسی کنید
accessTokenمقدار توکن دسترسی OAuth باشد (پیشوندoauth:اختیاری است) - بررسی کنید توکن دامنههای دسترسی
chat:readوchat:writeرا داشته باشد - اگر از تازهسازی توکن استفاده میکنید، بررسی کنید
clientSecretوrefreshTokenتنظیم شده باشند
تازهسازی توکن کار نمیکند
گزارشها را برای رویدادهای تازهسازی بررسی کنید:
استفاده از منبع توکن محیطی برای mybotتوکن دسترسی برای کاربر 123456 تازهسازی شد (انقضا پس از 14400s)اگر token refresh disabled (no refresh token) را میبینید:
- مطمئن شوید
clientSecretارائه شده است - مطمئن شوید
refreshTokenارائه شده است
پیکربندی
پیکربندی حساب
usernamestringrequiredنام کاربری ربات (حساب احراز هویتکننده).
accessTokenstringrequiredتوکن دسترسی OAuth با chat:read و chat:write (پیکربندی یا متغیر محیطی برای حساب پیشفرض).
clientIdstringrequiredشناسه کلاینت Twitch (از Token Generator یا برنامه شما). در طرحواره اختیاری است، اما برای اتصال الزامی است.
channelstringrequiredکانالی که باید به آن پیوست.
enabledbooleandefault: trueاین حساب را فعال میکند.
clientSecretstringاختیاری: برای تازهسازی خودکار توکن.
refreshTokenstringاختیاری: برای تازهسازی خودکار توکن.
expiresInnumberزمان انقضای توکن برحسب ثانیه (ردیابی تازهسازی).
obtainmentTimestampnumberبرچسب زمانی دریافت توکن (ردیابی تازهسازی).
allowFromstring[]فهرست مجاز شناسههای کاربری. وقتی تنظیم شود، نقشها نادیده گرفته میشوند.
allowedRoles'Array<"moderator"requireMentionbooleandefault: trueبرای فعالشدن ربات به @mention نیاز دارد.
responsePrefixstringجایگزینی پیشوند پاسخ خروجی برای این حساب.
گزینههای ارائهدهنده
channels.twitch.enabled- فعال/غیرفعالکردن راهاندازی کانالchannels.twitch.username/accessToken/clientId/channel- پیکربندی سادهشده تکحسابی (حساب ضمنیdefault؛ برaccounts.defaultاولویت دارد)channels.twitch.accounts.<accountName>- پیکربندی چندحسابی (همه فیلدهای حساب در بالا)channels.twitch.defaultAccount- نام حسابی که پیشفرض استchannels.twitch.markdown.tables- حالت رندر جدول Markdown (off|bullets|code|block)
نمونه کامل:
{ channels: { twitch: { enabled: true, username: "openclaw", accessToken: "oauth:abc123...", clientId: "xyz789...", channel: "yourchannel", clientSecret: "secret123...", refreshToken: "refresh456...", allowFrom: ["123456789"], accounts: { second: { username: "mybot", accessToken: "oauth:def456...", clientId: "uvw012...", channel: "your_channel", enabled: true, expiresIn: 14400, obtainmentTimestamp: 1706092800000, allowedRoles: ["moderator"], }, }, }, },}کنشهای ابزار
عامل میتواند از طریق کنش send ابزار پیام، پیامهای Twitch را ارسال کند:
{ channel: "twitch", action: "send", to: "#mychannel", message: "سلام Twitch!",}to اختیاری است و مقدار پیشفرض آن channel پیکربندیشده حساب است.
ایمنی و عملیات
- با توکنها مانند گذرواژهها رفتار کنید - هرگز توکنها را در git ثبت نکنید.
- برای رباتهای طولانیمدت از تازهسازی خودکار توکن استفاده کنید.
- برای کنترل دسترسی، بهجای نامهای کاربری از فهرستهای مجاز شناسهٔ کاربر استفاده کنید.
- برای رویدادهای تازهسازی توکن و وضعیت اتصال، لاگها را پایش کنید.
- دامنهٔ دسترسی توکنها را به حداقل برسانید - فقط
chat:readوchat:writeرا درخواست کنید. - اگر به مشکل برخوردید: پس از اطمینان از اینکه هیچ فرایند دیگری مالک نشست نیست، Gateway را راهاندازی مجدد کنید.
محدودیتها
- 500 نویسه برای هر پیام؛ پاسخهای طولانیتر در مرز واژهها به بخشهای کوچکتر تقسیم میشوند.
- Markdown پیش از ارسال حذف میشود (گفتوگوی Twitch متن ساده است؛ خطهای جدید به فاصله تبدیل میشوند).
- OpenClaw هیچ محدودیت نرخی از جانب خود اعمال نمیکند؛ کلاینت گفتوگوی Twurple محدودیتهای نرخ Twitch را مدیریت میکند.
مرتبط
- مسیریابی کانال — مسیریابی نشست برای پیامها
- نمای کلی کانالها — همهٔ کانالهای پشتیبانیشده
- گروهها — رفتار گفتوگوی گروهی و محدودسازی بر اساس اشاره
- جفتسازی — احراز هویت پیام مستقیم و جریان جفتسازی
- امنیت — مدل دسترسی و مقاومسازی