Developer and self-hosted

Tlon

Tlon یک پیام‌رسان غیرمتمرکز است که بر پایه Urbit ساخته شده است. OpenClaw به ship شما در 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", // توصیه می‌شود: ship شما، همیشه مجاز    },  },}

پس از ویرایش مستقیم پیکربندی، Gateway را دوباره راه‌اندازی کنید. سپس به ربات پیام خصوصی بدهید یا در یک کانال گروهی با @ به آن اشاره کنید.

دوام ورودی

OpenClaw رویدادهای پذیرفته‌شده پیام خصوصی و گفت‌وگوی گروهی Tlon را پیش از ارسال به عامل ذخیره می‌کند. نوبت‌های در انتظار یا قابل‌تلاش‌مجدد پس از راه‌اندازی مجدد Gateway باقی می‌مانند و کار برای هر کانال گروهی یا همتای مستقیم به‌صورت سریالی ادامه می‌یابد. شناسه‌های پایدار پیام Urbit نیز تا زمانی که رکورد صف یا رکورد تکمیل نگه‌داری‌شده آن‌ها وجود داشته باشد، از پردازش دوباره رویداد بازتحویل‌شده جلوگیری می‌کنند.

تحویل در مرز صف به عامل حداقل یک‌بار انجام می‌شود: خرابی هنگام تحویل می‌تواند موجب پخش مجدد یک نوبت شود. بنابراین اقدام‌های عامل که اثر جانبی خارجی ایجاد می‌کنند، باید در صورت عملی‌بودن هم‌توان باقی بمانند.

shipهای خصوصی/LAN

OpenClaw برای محافظت در برابر SSRF، نام‌های میزبان و بازه‌های IP خصوصی/داخلی را به‌طور پیش‌فرض مسدود می‌کند. اگر ship شما روی یک شبکه خصوصی (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 یک ship قابل‌اعتماد فعال کنید؛ زیرا محافظت SSRF را برای درخواست‌های HTTP آن حساب غیرفعال می‌کند.

کانال‌های گروهی

کانال‌ها را دستی سنجاق کنید یا کشف خودکار را فعال کنید:

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

اگر autoDiscoverChannels در پیکربندی تعیین نشده باشد، مقدار پیش‌فرض آن false است؛ راهنمای راه‌اندازی مقدار پیش‌فرض پرسش را بله قرار می‌دهد و true را صریحاً می‌نویسد. با فعال‌بودن آن، OpenClaw هنگام شروع گروه‌های پیوسته‌شده را scry می‌کند، با پذیرفته‌شدن دعوت‌های گروهی کانال‌های جدید را زیر نظر می‌گیرد و هر 2 دقیقه دوباره بررسی می‌کند.

کنترل دسترسی

فهرست مجاز پیام خصوصی (خالی = هیچ پیام خصوصی‌ای مجاز نیست، مگر اینکه فرستنده ownerShip باشد):

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

مجوزدهی گروه به‌طور پیش‌فرض برای هر کانال restricted است. برای تعیین یک خط مبنا، defaultAuthorizedShips را تنظیم کنید و برای هر nest کانال آن را بازنویسی کنید:

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

پس از اینکه ربات درون یک رشته پاسخ داد، بدون نیاز به اشاره دوباره، به پیام‌های بعدی همان رشته پاسخ می‌دهد.

برای الزام به یک اشاره صریح جدید در این پیگیری‌ها، channels.tlon.implicitMentions.threadParticipation: false را تنظیم کنید. بازنویسی‌های حساب از channels.tlon.accounts.<id>.implicitMentions استفاده می‌کنند. Tlon در حال حاضر واقعیت‌های replyToBot یا quotedBot را تولید نمی‌کند، بنابراین این پرچم‌ها در اینجا اثری ندارند.

مالک و سامانه تأیید

json5
{  channels: {    tlon: {      ownerShip: "~your-main-ship",    },  },}

ship مالک در همه‌جا مجاز است: دعوت‌های پیام خصوصی همیشه به‌طور خودکار پذیرفته می‌شوند، دعوت‌های گروهی همیشه به‌طور خودکار پذیرفته می‌شوند و پیام‌های کانال همیشه مجوزدهی را با موفقیت می‌گذرانند. مالک لازم نیست در dmAllowlist، defaultAuthorizedShips یا groupInviteAllowlist باشد.

وقتی ownerShip تنظیم شده باشد، درخواست‌های غیرمجاز صرفاً کنار گذاشته نمی‌شوند؛ آن‌ها یک تأیید در انتظار را به صف اضافه می‌کنند و به مالک پیام خصوصی می‌فرستند:

  • درخواست‌های پیام خصوصی از shipهایی که در dmAllowlist نیستند
  • اشاره‌ها در کانال‌هایی که فرستنده مجوزدهی را نمی‌گذراند
  • دعوت‌های گروهی از shipهایی که در groupInviteAllowlist نیستند (وقتی پذیرش خودکار خاموش است، یا روشن است اما دعوت‌کننده در فهرست مجاز نیست)

مالک برای اقدام درباره یک درخواست، در پیام خصوصی پاسخ می‌دهد:

پاسخ مالک اثر
approve / deny / block روی جدیدترین تأیید در انتظار اقدام می‌کند
approve <id> / deny <id> با شناسه روی یک تأیید مشخص اقدام می‌کند
block همچنین ship را به‌صورت بومی مسدود می‌کند تا نتواند دوباره متصل شود
unblock ~ship یک مسدودسازی بومی را برمی‌گرداند
blocked shipهای مسدودشده فعلی را فهرست می‌کند
pending درخواست‌های تأیید در انتظار را فهرست می‌کند

بدون پیکربندی ownerShip، پیام‌های خصوصی و اشاره‌های کانال غیرمجاز صرفاً کنار گذاشته و ثبت می‌شوند؛ هیچ درخواست تأییدی وجود ندارد.

تنظیمات پذیرش خودکار

دعوت‌های پیام خصوصی از shipهایی که از قبل در 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 متعلق به ship (desk با نام moltbot، bucket با نام 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 مربوط به ship در دسترس است؛ برای shipهای محلی network.dangerouslyAllowPrivateNetwork را تنظیم کنید.
  • خطاهای احراز هویت: کدهای ورود چرخش می‌کنند — کد فعلی را از ship خود کپی کنید.

مرجع پیکربندی

پیکربندی کامل: پیکربندی

کلید معنا
channels.tlon.enabled شروع کانال را فعال/غیرفعال می‌کند.
channels.tlon.ship نام ship ربات در Urbit (برای مثال ~sampel-palnet).
channels.tlon.url URL مربوط به ship (برای مثال https://sampel-palnet.tlon.network).
channels.tlon.code کد ورود ship.
channels.tlon.network.dangerouslyAllowPrivateNetwork URLهای localhost/LAN مربوط به ship را مجاز می‌کند (رضایت صریح برای SSRF).
channels.tlon.ownerShip ship مالک: همیشه مجاز است و درخواست‌های تأیید را دریافت می‌کند.
channels.tlon.dmAllowlist shipهایی که مجاز به ارسال پیام خصوصی هستند (خالی = هیچ‌کدام به‌جز مالک).
channels.tlon.autoAcceptDmInvites پیام‌های خصوصی از shipهای موجود در dmAllowlist را به‌طور خودکار می‌پذیرد.
channels.tlon.autoAcceptGroupInvites دعوت‌های گروهی از groupInviteAllowlist را به‌طور خودکار می‌پذیرد.
channels.tlon.groupInviteAllowlist shipهایی که دعوت‌های گروهی‌شان به‌طور خودکار پذیرفته می‌شود.
channels.tlon.autoDiscoverChannels کانال‌های گروهی پیوسته‌شده را به‌طور خودکار کشف می‌کند (پیش‌فرض: false).
channels.tlon.implicitMentions.threadParticipation به پیگیری‌های رشته مشارکت‌شده اجازه می‌دهد محدودیت اشاره را دور بزنند.
channels.tlon.groupChannels nestهای کانال که به‌صورت دستی سنجاق شده‌اند.
channels.tlon.defaultAuthorizedShips shipهای مجاز برای همه کانال‌ها (وقتی هیچ قاعده‌ای مطابقت ندارد استفاده می‌شود).
channels.tlon.authorization.channelRules حالت احراز مجوز + فهرست مجاز برای هر nest کانال.
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