Developer and self-hosted
Twitch
دعم دردشة Twitch عبر واجهة الدردشة (IRC) الخاصة بـ Twitch باستخدام عميل Twurple. يسجّل OpenClaw الدخول بحساب روبوت Twitch، وينضم إلى قناة واحدة لكل حساب مُعدّ، ويرد في تلك القناة.
التثبيت
يُوزَّع Twitch بصفته Plugin رسميًا؛ وهو ليس جزءًا من التثبيت الأساسي.
سجل npm
openclaw plugins install @openclaw/twitchنسخة محلية
openclaw plugins install ./path/to/local/twitch-pluginيسجّل plugins install الـ Plugin ويفعّله. يؤدي اختيار Twitch أثناء openclaw onboard أو openclaw channels add إلى تثبيته عند الطلب. استخدم اسم الحزمة المجرّد لمتابعة الإصدار الحالي؛ ولا تثبّت إصدارًا محددًا بدقة إلا لعمليات التثبيت القابلة لإعادة الإنتاج. يتطلب OpenClaw 2026.4.10 أو إصدارًا أحدث.
التفاصيل: Plugins
الإعداد السريع
ثبّت الـ 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", // Bot's Twitch account (authenticates) accessToken: "oauth:abc123...", // OAuth access token (or use OPENCLAW_TWITCH_ACCESS_TOKEN env var) clientId: "xyz789...", // Client ID from Token Generator channel: "yourchannel", // Which Twitch channel's chat to join (required) allowFrom: ["123456789"], // (recommended) Your Twitch user ID only }, },}ماهيته
- قناة Twitch يملكها Gateway.
- توجيه حتمي: تعود الردود دائمًا إلى قناة Twitch التي وردت منها الرسالة.
- ترتبط كل قناة منضم إليها بمفتاح جلسة مجموعة معزول
agent:<agentId>:twitch:group:<channel>. - يمثّل
usernameحساب الروبوت (الذي يجري المصادقة)، بينما يحددchannelغرفة الدردشة المطلوب الانضمام إليها. ينضم كل إدخال حساب إلى قناة واحدة بالضبط. - تعمل الرموز مع البادئة
oauth:أو من دونها؛ يطبّع OpenClaw الصيغتين (ويتوقع معالج الإعداد الصيغة التي تتضمنoauth:).
تحديث الرمز (اختياري)
لا يستطيع OpenClaw تحديث الرموز الصادرة من مولّد رموز Twitch؛ أنشئها مجددًا عند انتهاء صلاحيتها (تدوم بضع ساعات، ولا يلزم تسجيل تطبيق).
للتحديث التلقائي، أنشئ تطبيقك الخاص في لوحة مطوري 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"], }, }, }, },}تعطيل اشتراط الإشارة بـ @
القيمة الافتراضية لـ requireMention هي true. للرد على جميع الرسائل المسموح بها:
{ channels: { twitch: { accounts: { default: { requireMention: false, }, }, }, },}استكشاف الأخطاء وإصلاحها
شغّل أولًا أوامر التشخيص:
openclaw doctoropenclaw channels status --probeالروبوت لا يستجيب للرسائل
- تحقّق من التحكم في الوصول: تأكد من وجود معرّف المستخدم الخاص بك في
allowFrom، أو أزلallowFromمؤقتًا واضبطallowedRoles: ["all"]للاختبار. - تحقّق من بوابة الإشارة: عند ضبط
requireMention: true(القيمة الافتراضية)، يجب أن تشير الرسائل إلى اسم مستخدم الروبوت باستخدام @. - تحقّق من وجود الروبوت في القناة: لا ينضم الروبوت إلا إلى القناة المذكورة في
channel.
مشكلات الرمز
أخطاء "فشل الاتصال" أو أخطاء المصادقة:
- تحقّق من أن
accessTokenهو قيمة رمز وصول OAuth (البادئةoauth:اختيارية) - تحقّق من أن الرمز يتضمن النطاقين
chat:readوchat:write - إذا كنت تستخدم تحديث الرمز، فتحقّق من ضبط
clientSecretوrefreshToken
تحديث الرمز لا يعمل
افحص السجلات بحثًا عن أحداث التحديث:
Using env token source for mybotAccess token refreshed for user 123456 (expires in 14400s)إذا ظهر token refresh disabled (no refresh token):
- تأكد من توفير
clientSecret - تأكد من توفير
refreshToken
الإعداد
إعداد الحساب
usernamestringrequiredاسم مستخدم الروبوت (الحساب الذي يجري المصادقة).
accessTokenstringrequiredرمز وصول OAuth يتضمن chat:read وchat:write (عبر الإعداد أو متغير البيئة للحساب الافتراضي).
clientIdstringrequiredمعرّف عميل Twitch (من مولّد الرموز أو تطبيقك). اختياري في المخطط، لكنه مطلوب للاتصال.
channelstringrequiredالقناة المطلوب الانضمام إليها.
enabledbooleandefault: trueفعّل هذا الحساب.
clientSecretstringاختياري: للتحديث التلقائي للرمز.
refreshTokenstringاختياري: للتحديث التلقائي للرمز.
expiresInnumberمدة صلاحية الرمز بالثواني (لتتبّع التحديث).
obtainmentTimestampnumberالطابع الزمني لوقت الحصول على الرمز (لتتبّع التحديث).
allowFromstring[]قائمة سماح لمعرّفات المستخدمين. عند ضبطها، تُتجاهل الأدوار.
allowedRoles'Array<"moderator"requireMentionbooleandefault: trueاشترط الإشارة بـ @ لتشغيل الروبوت.
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"], }, }, }, },}إجراءات الأداة
يمكن للوكيل إرسال رسائل Twitch عبر الإجراء send لأداة الرسائل:
{ channel: "twitch", action: "send", to: "#mychannel", message: "Hello Twitch!",}الحقل to اختياري، وتكون قيمته الافتراضية channel المضبوطة للحساب.
الأمان والتشغيل
- تعامل مع الرموز مثل كلمات المرور - لا تُثبّت الرموز أبدًا في git.
- استخدم التحديث التلقائي للرمز للروبوتات التي تعمل لفترات طويلة.
- استخدم قوائم السماح لمعرّفات المستخدمين بدلًا من أسماء المستخدمين للتحكم في الوصول.
- راقب السجلات لمتابعة أحداث تحديث الرمز وحالة الاتصال.
- قلّل نطاقات الرموز إلى الحد الأدنى - لا تطلب سوى
chat:readوchat:write. - إذا تعذّر عليك المتابعة: أعد تشغيل Gateway بعد التأكد من عدم امتلاك أي عملية أخرى للجلسة.
الحدود
- 500 حرف لكل رسالة؛ تُقسّم الردود الأطول عند حدود الكلمات.
- تُزال صياغة Markdown قبل الإرسال (دردشة Twitch نص عادي؛ وتتحول الأسطر الجديدة إلى مسافات).
- لا يضيف OpenClaw أي تقييد لمعدل الطلبات من جانبه؛ يتولى عميل دردشة Twurple معالجة حدود معدل Twitch.
ذو صلة
- توجيه القنوات — توجيه جلسات الرسائل
- نظرة عامة على القنوات — جميع القنوات المدعومة
- المجموعات — سلوك دردشة المجموعات وبوابة الإشارة
- الاقتران — مصادقة الرسائل المباشرة وتدفق الاقتران
- الأمان — نموذج الوصول والتعزيز الأمني