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) فقط برای نصب‌های بازتولیدپذیر ثابت کنید.

از یک checkout محلی:

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

جزئیات: 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 را راه‌اندازی مجدد کنید. سپس به ربات پیام مستقیم بدهید یا در یک کانال گروهی با @ به آن اشاره کنید.

کشتی‌های خصوصی/LAN

OpenClaw برای محافظت در برابر SSRF، نام‌های میزبان و بازه‌های IP خصوصی/داخلی را به‌طور پیش‌فرض مسدود می‌کند. اگر کشتی شما در یک شبکه خصوصی اجرا می‌شود (localhost، IP شبکه LAN یا نام میزبان داخلی)، صریحاً آن را فعال کنید:

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 یا فرمان‌های تنظیمات Skill همراه، بدون راه‌اندازی مجدد Gateway اعمال می‌شوند. channelRules و تأییدهای در انتظار نیز به‌صورت JSON در آنجا پایدار می‌شوند. پیکربندی فایل برای مقادیری که هرگز در مخزن تنظیمات نوشته نشده‌اند، منبع حقیقت باقی می‌ماند.

مقصدهای تحویل (CLI/Cron)

همراه openclaw message send یا تحویل Cron استفاده کنید:

  • پیام مستقیم: ~sampel-palnet یا dm/~sampel-palnet
  • گروه: chat/~host-ship/channel یا group:~host-ship/channel

Skill همراه

این Plugin شامل @tloncorp/tlon-skill است؛ یک CLI برای عملیات مستقیم Urbit که پس از نصب Plugin به‌طور خودکار در دسترس قرار می‌گیرد:

  • فعالیت: اشاره‌ها، پاسخ‌ها، موارد خوانده‌نشده
  • کانال‌ها: فهرست‌کردن، ایجاد، تغییر نام
  • مخاطبان: فهرست‌کردن/دریافت/به‌روزرسانی نمایه‌ها
  • گروه‌ها: ایجاد، پیوستن، جریان‌های دعوت/درخواست، نقش‌ها
  • قلاب‌ها: مدیریت قلاب‌های کانال
  • پیام‌ها: تاریخچه، جست‌وجو
  • پیام‌های مستقیم: ارسال، واکنش، پذیرش/رد
  • پست‌ها: واکنش، حذف
  • دفترچه: ارسال پست به کانال‌های روزانه
  • تنظیمات: بارگذاری مجدد فوری پیکربندی Plugin از طریق مخزن تنظیمات بالا

قابلیت‌ها

ویژگی وضعیت
پیام‌های مستقیم پشتیبانی می‌شود
گروه‌ها/کانال‌ها پشتیبانی می‌شود (به‌طور پیش‌فرض مشروط به اشاره)
رشته‌ها پشتیبانی می‌شود (پس از پیوستن، به پاسخ‌دادن ادامه می‌دهد)
متن غنی Markdown به قالب بومی Tlon تبدیل می‌شود
تصاویر ورودی‌ها دریافت و خروجی‌ها بارگذاری می‌شوند
واکنش‌ها فقط از طریق Skill همراه
نظرسنجی‌ها پشتیبانی نمی‌شود
فرمان‌های بومی به‌طور پیش‌فرض فقط برای مالک

عیب‌یابی

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 کشتی‌های localhost/LAN را مجاز می‌کند (فعال‌سازی صریح 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) نیاز دارند، مگر اینکه ربات از قبل به آن رشته پیوسته باشد.
  • پاسخ‌های رشته‌ای درون همان رشته قرار می‌گیرند؛ همچنین ۱۰ پیام آخر زمینه رشته پیش از ورودی عامل افزوده می‌شوند.
  • متن غنی (پررنگ، مورب، کد، عنوان‌ها، فهرست‌ها) به قالب بومی Tlon تبدیل می‌شود.
  • ارسال پیام ورودی‌ای که خلاصه یک کانال را درخواست کند (برای مثال «این کانال را خلاصه کن») به‌جای جریان پاسخ عادی، خلاصه‌سازی داخلی تاریخچه را فعال می‌کند.

مرتبط

Was this useful?
On this page

On this page