Developer and self-hosted
Tlon
Tlon هو برنامج مراسلة لامركزي مبني على Urbit. يتصل OpenClaw بسفينة Urbit الخاصة بك ويستجيب للرسائل المباشرة ورسائل الدردشة الجماعية. تتطلب الردود الجماعية إشارة @ افتراضيًا، مع إضافة قواعد التخويل ومسار موافقة المالك فوق ذلك.
الحالة: Plugin مضمّن. تُدعم الرسائل المباشرة وإشارات المجموعات وسلاسل المحادثات والنص المنسّق وتحميل الصور وتنزيلها ونظام موافقة المالك. أما التفاعلات والاستطلاعات فغير مدعومة.
Plugin المضمّن
يأتي Tlon مضمّنًا في إصدارات OpenClaw الحالية؛ ولا تحتاج الحزم الجاهزة إلى تثبيت منفصل.
في إصدار أقدم أو تثبيت مخصص يستبعده، ثبّته من npm:
openclaw plugins install @openclaw/tlonاستخدم اسم الحزمة المجرّد لتتبّع وسم الإصدار الحالي. ولا تثبّت إصدارًا محددًا (@openclaw/tlon@x.y.z)
إلا لعمليات التثبيت القابلة لإعادة الإنتاج.
من نسخة محلية من المستودع:
openclaw plugins install ./path/to/local/tlon-pluginالتفاصيل: الإضافات
الإعداد
openclaw channels add --channel tlon --ship ~sampel-palnet --url https://your-ship-host --code lidlut-tabwed-pillex-ridrupأو عدّل الإعدادات مباشرةً:
{ channels: { tlon: { enabled: true, ship: "~sampel-palnet", url: "https://your-ship-host", code: "lidlut-tabwed-pillex-ridrup", ownerShip: "~your-main-ship", // موصى به: سفينتك، مخوّلة دائمًا }, },}أعد تشغيل Gateway بعد تعديل الإعدادات مباشرةً. ثم أرسل رسالة مباشرة إلى الروبوت أو أشر إليه باستخدام @ في قناة جماعية.
السفن الخاصة/ضمن الشبكة المحلية
يحظر OpenClaw أسماء المضيفين ونطاقات عناوين IP الخاصة/الداخلية افتراضيًا للحماية من SSRF. إذا كانت سفينتك تعمل على شبكة خاصة (المضيف المحلي أو عنوان IP ضمن الشبكة المحلية أو اسم مضيف داخلي)، ففعّل ذلك صراحةً:
{ channels: { tlon: { url: "http://localhost:8080", network: { dangerouslyAllowPrivateNetwork: true, }, }, },}ينطبق هذا على أهداف مثل http://localhost:8080 وhttp://192.168.x.x:8080 و
http://my-ship.local:8080. لا تفعّل هذا إلا لعنوان URL لسفينة تثق بها؛ إذ يعطّل حماية SSRF
لطلبات HTTP الخاصة بذلك الحساب.
القنوات الجماعية
ثبّت القنوات يدويًا، أو فعّل الاكتشاف التلقائي:
{ channels: { tlon: { groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"], autoDiscoverChannels: true, }, },}تكون القيمة الافتراضية لـautoDiscoverChannels هي false عند عدم تعيينها في الإعدادات؛ ويعرض معالج الإعداد
«نعم» كإجابة افتراضية للمطالبة ويكتب true صراحةً. عند تفعيلها، يستعلم OpenClaw عن المجموعات المنضم إليها عند بدء التشغيل،
ويراقب القنوات الجديدة عند قبول دعوات المجموعات، ويعيد التحقق كل دقيقتين.
التحكم في الوصول
قائمة السماح للرسائل المباشرة (فارغة = لا يُسمح بأي رسائل مباشرة ما لم يكن المرسل هو ownerShip):
{ channels: { tlon: { dmAllowlist: ["~zod", "~nec"], }, },}يكون تخويل المجموعات افتراضيًا restricted لكل قناة. عيّن defaultAuthorizedShips لتحديد
خط أساس، وتجاوزه لكل عُش قناة:
{ channels: { tlon: { defaultAuthorizedShips: ["~zod"], authorization: { channelRules: { "chat/~host-ship/general": { mode: "restricted", allowedShips: ["~zod", "~nec"], }, "chat/~host-ship/announcements": { mode: "open", }, }, }, }, },}بمجرد أن يرد الروبوت داخل سلسلة محادثة، فإنه يواصل الاستجابة للرسائل اللاحقة في تلك السلسلة من دون الحاجة إلى إشارة أخرى.
المالك ونظام الموافقة
{ channels: { tlon: { ownerShip: "~your-main-ship", }, },}تكون سفينة المالك مخوّلة في كل مكان: تُقبل دعوات الرسائل المباشرة تلقائيًا دائمًا، وتُقبل دعوات المجموعات
تلقائيًا دائمًا، وتجتاز رسائل القنوات التخويل دائمًا. ولا يلزم أن يكون المالك موجودًا في
dmAllowlist أو defaultAuthorizedShips أو groupInviteAllowlist.
عند تعيين ownerShip، لا تُسقط الطلبات غير المخوّلة فحسب، بل تُضاف إلى قائمة انتظار
الموافقات المعلّقة وتُرسل رسالة مباشرة إلى المالك:
- طلبات الرسائل المباشرة من سفن غير موجودة في
dmAllowlist - الإشارات في القنوات التي لا يجتاز فيها المرسل التخويل
- دعوات المجموعات من سفن غير موجودة في
groupInviteAllowlist(عند إيقاف القبول التلقائي، أو عند تشغيله لكن الداعي غير موجود في قائمة السماح)
يرد المالك برسالة مباشرة لاتخاذ إجراء بشأن طلب:
| رد المالك | التأثير |
|---|---|
approve / deny / block |
يتخذ إجراءً بشأن أحدث موافقة معلّقة |
approve <id> / deny <id> |
يتخذ إجراءً بشأن موافقة محددة حسب المعرّف |
block |
يحظر السفينة أيضًا حظرًا أصليًا كي لا تتمكن من إعادة الاتصال |
unblock ~ship |
يلغي حظرًا أصليًا |
blocked |
يسرد السفن المحظورة حاليًا |
pending |
يسرد طلبات الموافقة المعلّقة |
من دون إعداد ownerShip، تُسقط الرسائل المباشرة وإشارات القنوات غير المخوّلة ويُسجّل ذلك فقط؛
ولا تظهر مطالبة بالموافقة.
إعدادات القبول التلقائي
اقبل تلقائيًا دعوات الرسائل المباشرة من السفن الموجودة بالفعل في dmAllowlist (يُقبل المالك تلقائيًا دائمًا
بغض النظر عن هذه العلامة):
{ channels: { tlon: { autoAcceptDmInvites: true, }, },}اقبل تلقائيًا دعوات المجموعات من قائمة سماح (يتوقف بأمان: عند ضبط autoAcceptGroupInvites: true ووجود
groupInviteAllowlist فارغة، لا تُقبل أي دعوة من غير المالك):
{ channels: { tlon: { autoAcceptGroupInvites: true, groupInviteAllowlist: ["~zod"], }, },}إعادة التحميل الفوري عبر مخزن إعدادات Urbit
تُنسخ معظم الإعدادات أعلاه (dmAllowlist وgroupInviteAllowlist وgroupChannels
وdefaultAuthorizedShips وautoDiscoverChannels وautoAcceptDmInvites
وautoAcceptGroupInvites وownerShip وshowModelSignature) إلى وكيل
%settings الخاص بالسفينة (المكتب moltbot، والحاوية tlon) عند التشغيل الأول، ثم تُقرأ مباشرةً منه،
لذلك تُطبّق التغييرات التي تُجرى عبر عميل Landscape أو أوامر إعدادات Skills المضمّنة دون
إعادة تشغيل Gateway. كما تُحفظ channelRules والموافقات المعلّقة هناك بتنسيق JSON. وتظل
إعدادات الملف مصدر الحقيقة للقيم التي لم تُكتب قط في مخزن الإعدادات.
أهداف التسليم (CLI/cron)
استخدمها مع openclaw message send أو تسليم cron:
- رسالة مباشرة:
~sampel-palnetأوdm/~sampel-palnet - مجموعة:
chat/~host-ship/channelأوgroup:~host-ship/channel
Skills المضمّنة
يضم Plugin أداة @tloncorp/tlon-skill، وهي CLI
لعمليات Urbit المباشرة، وتصبح متاحة تلقائيًا بمجرد تثبيت Plugin:
- النشاط: الإشارات والردود والعناصر غير المقروءة
- القنوات: السرد والإنشاء وإعادة التسمية
- جهات الاتصال: سرد الملفات الشخصية أو جلبها أو تحديثها
- المجموعات: الإنشاء والانضمام ومسارات الدعوة/الطلب والأدوار
- الخطافات: إدارة خطافات القنوات
- الرسائل: السجل والبحث
- الرسائل المباشرة: الإرسال والتفاعل والقبول/الرفض
- المنشورات: التفاعل والحذف
- دفتر الملاحظات: النشر في قنوات اليوميات
- الإعدادات: إعادة التحميل الفوري لإعدادات Plugin عبر مخزن الإعدادات أعلاه
الإمكانات
| الميزة | الحالة |
|---|---|
| الرسائل المباشرة | مدعومة |
| المجموعات/القنوات | مدعومة (تتطلب إشارة افتراضيًا) |
| سلاسل المحادثات | مدعومة (يواصل الرد بعد انضمامه) |
| النص المنسّق | يُحوّل Markdown إلى تنسيق Tlon الأصلي |
| الصور | تُنزّل عند ورودها وتُرفع عند إرسالها |
| التفاعلات | فقط عبر Skills المضمّنة |
| الاستطلاعات | غير مدعومة |
| الأوامر الأصلية | للمالك فقط افتراضيًا |
استكشاف الأخطاء وإصلاحها
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctorالأعطال الشائعة:
- تجاهل الرسائل المباشرة: المرسل غير موجود في
dmAllowlistولم يُعدّownerShipلمسار الموافقة. - تجاهل رسائل المجموعات: لم تُكتشف القناة أو تُثبّت، أو لم يجتز المرسل التخويل مع عدم وجود
ownerShipلإضافة موافقة إلى قائمة الانتظار. - أخطاء الاتصال: تحقق من إمكانية الوصول إلى عنوان URL للسفينة؛ وعيّن
network.dangerouslyAllowPrivateNetworkللسفن المحلية. - أخطاء المصادقة: تتغير رموز تسجيل الدخول دوريًا — انسخ الرمز الحالي من سفينتك.
مرجع الإعدادات
الإعدادات الكاملة: الإعدادات
| المفتاح | المعنى |
|---|---|
channels.tlon.enabled |
تمكين/تعطيل بدء تشغيل القناة. |
channels.tlon.ship |
اسم سفينة Urbit الخاصة بالروبوت (مثل ~sampel-palnet). |
channels.tlon.url |
عنوان URL للسفينة (مثل https://sampel-palnet.tlon.network). |
channels.tlon.code |
رمز تسجيل الدخول إلى السفينة. |
channels.tlon.network.dangerouslyAllowPrivateNetwork |
السماح بعناوين URL لسفن المضيف المحلي/الشبكة المحلية (اشتراك صريح في SSRF). |
channels.tlon.ownerShip |
سفينة المالك: مخوّلة دائمًا وتتلقى طلبات الموافقة. |
channels.tlon.dmAllowlist |
السفن المسموح لها بإرسال رسائل مباشرة (فارغة = لا أحد سوى المالك). |
channels.tlon.autoAcceptDmInvites |
القبول التلقائي للرسائل المباشرة من السفن في dmAllowlist. |
channels.tlon.autoAcceptGroupInvites |
القبول التلقائي لدعوات المجموعات من groupInviteAllowlist. |
channels.tlon.groupInviteAllowlist |
السفن التي تُقبل دعوات المجموعات منها تلقائيًا. |
channels.tlon.autoDiscoverChannels |
الاكتشاف التلقائي لقنوات المجموعات المنضم إليها (الافتراضي: false). |
channels.tlon.groupChannels |
أعشاش القنوات المثبّتة يدويًا. |
channels.tlon.defaultAuthorizedShips |
السفن المخوّلة لكل القنوات (تُستخدم عند عدم تطابق أي قاعدة). |
channels.tlon.authorization.channelRules |
وضع المصادقة وقائمة السماح لكل عُش قناة. |
channels.tlon.showModelSignature |
إلحاق _[Generated by <model>]_ بالردود. |
channels.tlon.responsePrefix |
بادئة ثابتة تُضاف قبل الردود الصادرة. |
channels.tlon.accounts.<id> |
حسابات إضافية مسماة (إعدادات متعددة السفن). |
ملاحظات
- تحتاج الردود الجماعية إلى إشارة @ (مثل
~your-bot-ship) ما لم يكن الروبوت قد انضم بالفعل إلى سلسلة المحادثة. - تصل ردود سلاسل المحادثات داخل السلسلة؛ ويحصل الروبوت أيضًا على آخر 10 رسائل من سياق السلسلة مضافةً في بداية السياق للوكيل.
- يُحوّل النص المنسّق (الغامق والمائل والشيفرة والعناوين والقوائم) إلى تنسيق Tlon الأصلي.
- يؤدي إرسال رسالة واردة تطلب ملخصًا للقناة (مثل "لخّص هذه القناة") إلى تشغيل تلخيص مضمّن للسجل بدلًا من مسار الرد المعتاد.
ذو صلة
- نظرة عامة على القنوات — جميع القنوات المدعومة
- الاقتران — مصادقة الرسائل المباشرة ومسار الاقتران
- المجموعات — سلوك الدردشة الجماعية واشتراط الإشارة
- توجيه القنوات — توجيه الجلسات للرسائل
- الأمان — نموذج الوصول والتقوية