Developer and self-hosted
IRC
استخدم IRC عندما تريد تشغيل OpenClaw في القنوات التقليدية (#room) والرسائل المباشرة.
ثبّت Plugin الرسمي لـ IRC، ثم اضبطه ضمن channels.irc.
البدء السريع
- ثبّت Plugin:
openclaw plugins install @openclaw/irc- عيّن على الأقل المضيف والاسم المستعار والقنوات المطلوب الانضمام إليها في
~/.openclaw/openclaw.json:
{ channels: { irc: { enabled: true, host: "irc.example.com", port: 6697, tls: true, nick: "openclaw-bot", channels: ["#openclaw"], }, },}- شغّل Gateway أو أعد تشغيله:
openclaw gateway runيُفضّل استخدام خادم IRC خاص لتنسيق عمل الروبوتات. إذا كنت تستخدم شبكة IRC عامة عن قصد، فمن الخيارات الشائعة Libera.Chat وOFTC وSnoonet. تجنّب القنوات العامة التي يسهل توقّعها لحركة اتصالات القناة الخلفية للروبوتات أو الأسراب.
إعدادات الاتصال
| المفتاح | القيمة الافتراضية | الملاحظات |
|---|---|---|
host |
لا توجد (مطلوبة) | اسم مضيف خادم IRC |
port |
6697 مع TLS، و6667 بدونه |
1-65535 |
tls |
true |
اضبطه على false فقط عند استخدام نص صريح عن قصد |
nick |
لا توجد (مطلوبة) | الاسم المستعار للروبوت |
username |
الاسم المستعار، وإلا openclaw |
اسم مستخدم IRC |
realname |
OpenClaw |
حقل الاسم الحقيقي/GECOS |
password / passwordFile |
لا توجد | كلمة مرور الخادم؛ يجب أن يكون الملف ملفًا عاديًا |
channels |
لا توجد | القنوات المطلوب الانضمام إليها (["#openclaw"]) |
accounts / defaultAccount |
لا توجد | إعداد حسابات متعددة؛ تملأ متغيرات البيئة الحساب الافتراضي فقط |
إعدادات الأمان الافتراضية
- يستخدم IRC مقابس TCP/TLS خام خارج توجيه الوكيل الأمامي الذي يديره مشغّل OpenClaw. في عمليات النشر التي تشترط مرور كل حركة الخروج عبر ذلك الوكيل الأمامي، اضبط
channels.irc.enabled=falseما لم تُعتمد حركة خروج IRC المباشرة صراحةً. - تكون القيمة الافتراضية لـ
channels.irc.dmPolicyهي"pairing": يحصل مرسلو الرسائل المباشرة غير المعروفين على رمز إقران توافق عليه باستخدامopenclaw pairing approve irc <code>. - تكون القيمة الافتراضية لـ
channels.irc.groupPolicyهي"allowlist". - عند استخدام
groupPolicy="allowlist"، اضبطchannels.irc.groupsلتعريف القنوات المسموح بها. - استخدم TLS (
channels.irc.tls=true) ما لم تكن تقبل النقل بنص صريح عن قصد.
التحكم في الوصول
توجد «بوابتان» منفصلتان لقنوات IRC:
- الوصول إلى القناة (
groupPolicy+groups): ما إذا كان الروبوت يقبل الرسائل من قناة ما أساسًا. - وصول المرسل (
groupAllowFrom/ groups["#channel"].allowFromلكل قناة): من يُسمح له بتشغيل الروبوت داخل تلك القناة.
مفاتيح الإعداد:
- قائمة السماح للرسائل المباشرة (وصول مرسل الرسائل المباشرة):
channels.irc.allowFrom - قائمة سماح مرسلي المجموعة (وصول مرسل القناة):
channels.irc.groupAllowFrom - عناصر التحكم لكل قناة (القناة + المرسل + قواعد الإشارة):
channels.irc.groups["#channel"]معrequireMentionوallowFromوenabledوtoolsوtoolsBySenderوskillsوsystemPrompt - يسمح
channels.irc.groupPolicy="open"بالقنوات غير المضبوطة (مع استمرار اشتراط الإشارة افتراضيًا)
يجب أن تستخدم إدخالات قائمة السماح هويات مرسل ثابتة (nick!user@host).
يمكن تغيير المطابقة بالاسم المستعار وحده، ولا تُفعّل إلا عندما تكون channels.irc.dangerouslyAllowNameMatching: true.
خطأ شائع: allowFrom للرسائل المباشرة وليس للقنوات
إذا رأيت سجلات مثل:
irc: drop group sender alice!ident@host (policy=allowlist)
...فهذا يعني أن المرسل لم يكن مسموحًا له بإرسال رسائل المجموعة/القناة. أصلح ذلك بإحدى الطريقتين:
- ضبط
channels.irc.groupAllowFrom(عام لجميع القنوات)، أو - ضبط قوائم سماح المرسلين لكل قناة:
channels.irc.groups["#channel"].allowFrom
مثال (السماح لأي شخص في #openclaw بالتحدث إلى الروبوت):
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#openclaw": { allowFrom: ["*"] }, }, }, },}تشغيل الردود (الإشارات)
حتى إذا كانت القناة مسموحًا بها (عبر groupPolicy + groups) وكان المرسل مسموحًا له، يشترط OpenClaw افتراضيًا الإشارة في سياقات المجموعات. يُعدّ الروبوت مُشارًا إليه عندما تحتوي الرسالة على الاسم المستعار المتصل للروبوت أو تطابق أنماط الإشارة المضبوطة لديك.
يعني ذلك أنك قد ترى سجلات مثل drop channel … (missing-mention) ما لم تتضمن الرسالة نمط إشارة يطابق الروبوت.
لجعل الروبوت يرد في قناة IRC من دون الحاجة إلى إشارة، عطّل اشتراط الإشارة لتلك القناة:
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#openclaw": { requireMention: false, allowFrom: ["*"], }, }, }, },}أو للسماح بجميع قنوات IRC (من دون قائمة سماح لكل قناة) مع الاستمرار في الرد من دون إشارات:
{ channels: { ir: { groupPolicy: "open", groups: { "*": { requireMention: false, allowFrom: ["*"] }, }, }, },}ملاحظة أمنية (موصى بها للقنوات العامة)
إذا سمحت بـ allowFrom: ["*"] في قناة عامة، فيمكن لأي شخص توجيه مطالبات إلى الروبوت.
لتقليل المخاطر، قيّد الأدوات لتلك القناة.
الأدوات نفسها لجميع الموجودين في القناة
{ channels: { irc: { groups: { "#openclaw": { allowFrom: ["*"], tools: { deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"], }, }, }, }, },}أدوات مختلفة لكل مرسل (يحصل المالك على صلاحيات أكبر)
استخدم toolsBySender لتطبيق سياسة أكثر صرامة على "*" وسياسة أكثر تساهلًا على اسمك المستعار:
{ channels: { irc: { groups: { "#openclaw": { allowFrom: ["*"], toolsBySender: { "*": { deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"], }, "id:alice": { deny: ["gateway", "nodes", "cron"], }, }, }, }, }, },}ملاحظات:
- يجب أن تستخدم مفاتيح
toolsBySenderبادئات صريحة (channel:وid:وe164:وusername:وname:). بالنسبة إلى IRC، استخدمid:مع قيمة هوية المرسل:id:aliceأوid:alice!~alice@203.0.113.7لمطابقة أقوى. - ما تزال المفاتيح القديمة بلا بادئات مقبولة، وتُطابق بوصفها
id:فقط، وتصدر تحذير إيقاف تدريجي. - تسود أول سياسة مرسل مطابقة؛ وتكون
"*"هي الخيار الاحتياطي لحرف البدل.
لمزيد من المعلومات حول الوصول إلى المجموعات مقارنةً باشتراط الإشارة (وكيفية تفاعلهما)، راجع: /channels/groups.
NickServ
للتعريف لدى NickServ بعد الاتصال:
{ channels: { irc: { nickserv: { enabled: true, service: "NickServ", password: "your-nickserv-password", }, }, },}يُنفّذ تعريف NickServ افتراضيًا كلما عُيّنت كلمة مرور (لا يلزم ضبط enabled على false إلا لإلغاء الاشتراك). تكون القيمة الافتراضية لـ service هي NickServ؛ ويُعد passwordFile بديلًا عن password المضمّنة.
تسجيل اختياري لمرة واحدة عند الاتصال (يتطلب register: true وجود registerEmail):
{ channels: { irc: { nickserv: { register: true, registerEmail: "bot@example.com", }, }, },}عطّل register بعد تسجيل الاسم المستعار لتجنب محاولات REGISTER المتكررة.
متغيرات البيئة
يدعم الحساب الافتراضي:
IRC_HOSTIRC_PORTIRC_TLSIRC_NICKIRC_USERNAMEIRC_REALNAMEIRC_PASSWORDIRC_CHANNELS(مفصولة بفواصل)IRC_NICKSERV_PASSWORDIRC_NICKSERV_REGISTER_EMAIL
لا يمكن ضبط IRC_HOST من ملف .env لمساحة عمل؛ راجع ملفات .env لمساحة العمل.
استكشاف الأخطاء وإصلاحها
- إذا اتصل الروبوت لكنه لم يرد مطلقًا في القنوات، فتحقق من
channels.irc.groupsومن احتمال إسقاط الرسائل بسبب اشتراط الإشارة (missing-mention). إذا أردته أن يرد من دون تنبيهات، فاضبطrequireMention:falseللقناة. - إذا فشل تسجيل الدخول، فتحقق من توفر الاسم المستعار وكلمة مرور الخادم.
- إذا فشل TLS على شبكة مخصصة، فتحقق من إعدادات المضيف والمنفذ والشهادة.
ذو صلة
- نظرة عامة على القنوات — جميع القنوات المدعومة
- الإقران — مصادقة الرسائل المباشرة ومسار الإقران
- المجموعات — سلوك المحادثات الجماعية واشتراط الإشارة
- توجيه القنوات — توجيه جلسات الرسائل
- الأمان — نموذج الوصول والتحصين