Developer and self-hosted

Tlon

Tlon هو برنامج مراسلة لامركزي مبني على Urbit. يتصل OpenClaw بسفينة Urbit الخاصة بك ويستجيب للرسائل المباشرة ورسائل الدردشة الجماعية. تتطلب الردود الجماعية إشارة @ افتراضيًا، مع إضافة قواعد التخويل ومسار موافقة المالك فوق ذلك.

الحالة: Plugin مضمّن. تُدعم الرسائل المباشرة وإشارات المجموعات وسلاسل المحادثات والنص المنسّق وتحميل الصور وتنزيلها ونظام موافقة المالك. أما التفاعلات والاستطلاعات فغير مدعومة.

Plugin المضمّن

يأتي Tlon مضمّنًا في إصدارات OpenClaw الحالية؛ ولا تحتاج الحزم الجاهزة إلى تثبيت منفصل.

في إصدار أقدم أو تثبيت مخصص يستبعده، ثبّته من npm:

bash
openclaw plugins install @openclaw/tlon

استخدم اسم الحزمة المجرّد لتتبّع وسم الإصدار الحالي. ولا تثبّت إصدارًا محددًا (@openclaw/tlon@x.y.z) إلا لعمليات التثبيت القابلة لإعادة الإنتاج.

من نسخة محلية من المستودع:

bash
openclaw plugins install ./path/to/local/tlon-plugin

التفاصيل: الإضافات

الإعداد

bash
openclaw channels add --channel tlon --ship ~sampel-palnet --url https://your-ship-host --code lidlut-tabwed-pillex-ridrup

أو عدّل الإعدادات مباشرةً:

json5
{  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 ضمن الشبكة المحلية أو اسم مضيف داخلي)، ففعّل ذلك صراحةً:

json5
{  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 الخاصة بذلك الحساب.

القنوات الجماعية

ثبّت القنوات يدويًا، أو فعّل الاكتشاف التلقائي:

json5
{  channels: {    tlon: {      groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"],      autoDiscoverChannels: true,    },  },}

تكون القيمة الافتراضية لـautoDiscoverChannels هي false عند عدم تعيينها في الإعدادات؛ ويعرض معالج الإعداد «نعم» كإجابة افتراضية للمطالبة ويكتب true صراحةً. عند تفعيلها، يستعلم OpenClaw عن المجموعات المنضم إليها عند بدء التشغيل، ويراقب القنوات الجديدة عند قبول دعوات المجموعات، ويعيد التحقق كل دقيقتين.

التحكم في الوصول

قائمة السماح للرسائل المباشرة (فارغة = لا يُسمح بأي رسائل مباشرة ما لم يكن المرسل هو ownerShip):

json5
{  channels: {    tlon: {      dmAllowlist: ["~zod", "~nec"],    },  },}

يكون تخويل المجموعات افتراضيًا restricted لكل قناة. عيّن defaultAuthorizedShips لتحديد خط أساس، وتجاوزه لكل عُش قناة:

json5
{  channels: {    tlon: {      defaultAuthorizedShips: ["~zod"],      authorization: {        channelRules: {          "chat/~host-ship/general": {            mode: "restricted",            allowedShips: ["~zod", "~nec"],          },          "chat/~host-ship/announcements": {            mode: "open",          },        },      },    },  },}

بمجرد أن يرد الروبوت داخل سلسلة محادثة، فإنه يواصل الاستجابة للرسائل اللاحقة في تلك السلسلة من دون الحاجة إلى إشارة أخرى.

المالك ونظام الموافقة

json5
{  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 (يُقبل المالك تلقائيًا دائمًا بغض النظر عن هذه العلامة):

json5
{  channels: {    tlon: {      autoAcceptDmInvites: true,    },  },}

اقبل تلقائيًا دعوات المجموعات من قائمة سماح (يتوقف بأمان: عند ضبط autoAcceptGroupInvites: true ووجود groupInviteAllowlist فارغة، لا تُقبل أي دعوة من غير المالك):

json5
{  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 المضمّنة
الاستطلاعات غير مدعومة
الأوامر الأصلية للمالك فقط افتراضيًا

استكشاف الأخطاء وإصلاحها

bash
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 الأصلي.
  • يؤدي إرسال رسالة واردة تطلب ملخصًا للقناة (مثل "لخّص هذه القناة") إلى تشغيل تلخيص مضمّن للسجل بدلًا من مسار الرد المعتاد.

ذو صلة

Was this useful?
On this page

On this page