Developer and self-hosted
Tlon
Tlon یک پیامرسان غیرمتمرکز است که بر پایه Urbit ساخته شده است. OpenClaw به ship شما در Urbit متصل میشود و به پیامهای خصوصی و پیامهای گفتوگوی گروهی پاسخ میدهد. پاسخهای گروهی بهطور پیشفرض نیازمند اشاره با @ هستند و قواعد مجوزدهی و جریان تأیید مالک نیز بر آن اعمال میشوند.
وضعیت: Plugin همراه. پیامهای خصوصی، اشارهها در گروه، رشتهها، متن غنی، بارگذاری/دریافت تصویر و یک سامانه تأیید مالک پشتیبانی میشوند. واکنشها و نظرسنجیها پشتیبانی نمیشوند.
Plugin همراه
Tlon در نسخههای فعلی OpenClaw بهصورت همراه عرضه میشود؛ بیلدهای بستهبندیشده به نصب جداگانه نیاز ندارند.
در بیلد قدیمیتر یا نصب سفارشیای که آن را شامل نمیشود، از npm نصب کنید:
openclaw plugins install @openclaw/tlonبرای دنبالکردن برچسب نسخه فعلی، از نام ساده بسته استفاده کنید. فقط برای نصبهای تکرارپذیر، یک نسخه (@openclaw/tlon@x.y.z)
را ثابت کنید.
از یک checkout محلی:
openclaw plugins install ./path/to/local/tlon-pluginجزئیات: 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", // توصیه میشود: ship شما، همیشه مجاز }, },}پس از ویرایش مستقیم پیکربندی، Gateway را دوباره راهاندازی کنید. سپس به ربات پیام خصوصی بدهید یا در یک کانال گروهی با @ به آن اشاره کنید.
دوام ورودی
OpenClaw رویدادهای پذیرفتهشده پیام خصوصی و گفتوگوی گروهی Tlon را پیش از ارسال به عامل ذخیره میکند. نوبتهای در انتظار یا قابلتلاشمجدد پس از راهاندازی مجدد Gateway باقی میمانند و کار برای هر کانال گروهی یا همتای مستقیم بهصورت سریالی ادامه مییابد. شناسههای پایدار پیام Urbit نیز تا زمانی که رکورد صف یا رکورد تکمیل نگهداریشده آنها وجود داشته باشد، از پردازش دوباره رویداد بازتحویلشده جلوگیری میکنند.
تحویل در مرز صف به عامل حداقل یکبار انجام میشود: خرابی هنگام تحویل میتواند موجب پخش مجدد یک نوبت شود. بنابراین اقدامهای عامل که اثر جانبی خارجی ایجاد میکنند، باید در صورت عملیبودن همتوان باقی بمانند.
shipهای خصوصی/LAN
OpenClaw برای محافظت در برابر SSRF، نامهای میزبان و بازههای IP خصوصی/داخلی را بهطور پیشفرض مسدود میکند. اگر ship شما روی یک شبکه خصوصی (localhost، IP شبکه LAN، نام میزبان داخلی) اجرا میشود، صریحاً آن را مجاز کنید:
{ 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 آن حساب غیرفعال میکند.
کانالهای گروهی
کانالها را دستی سنجاق کنید یا کشف خودکار را فعال کنید:
{ channels: { tlon: { groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"], autoDiscoverChannels: true, }, },}اگر autoDiscoverChannels در پیکربندی تعیین نشده باشد، مقدار پیشفرض آن false است؛ راهنمای راهاندازی مقدار پیشفرض
پرسش را بله قرار میدهد و true را صریحاً مینویسد. با فعالبودن آن، OpenClaw هنگام شروع گروههای پیوستهشده را scry میکند،
با پذیرفتهشدن دعوتهای گروهی کانالهای جدید را زیر نظر میگیرد و هر 2 دقیقه دوباره بررسی میکند.
کنترل دسترسی
فهرست مجاز پیام خصوصی (خالی = هیچ پیام خصوصیای مجاز نیست، مگر اینکه فرستنده ownerShip باشد):
{ channels: { tlon: { dmAllowlist: ["~zod", "~nec"], }, },}مجوزدهی گروه بهطور پیشفرض برای هر کانال restricted است. برای تعیین یک
خط مبنا، defaultAuthorizedShips را تنظیم کنید و برای هر nest کانال آن را بازنویسی کنید:
{ 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 را تولید نمیکند، بنابراین این پرچمها در اینجا اثری ندارند.
مالک و سامانه تأیید
{ 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 هستند، بهطور خودکار پذیرفته شوند (مالک صرفنظر
از این پرچم همیشه بهطور خودکار پذیرفته میشود):
{ channels: { tlon: { autoAcceptDmInvites: true, }, },}دعوتهای گروهی از یک فهرست مجاز بهطور خودکار پذیرفته شوند (در حالت نامطمئن بسته میشود: با autoAcceptGroupInvites: true و
یک groupInviteAllowlist خالی، هیچ دعوتی از غیرمالک پذیرفته نمیشود):
{ 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 همراه |
| نظرسنجیها | پشتیبانی نمیشود |
| فرمانهای بومی | بهطور پیشفرض فقط برای مالک |
عیبیابی
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 تبدیل میشود.
- ارسال یک پیام ورودی که درخواست خلاصهسازی کانال را دارد (برای مثال «این کانال را خلاصه کن») بهجای جریان عادی پاسخ، خلاصهسازی داخلی تاریخچه را فعال میکند.
مرتبط
- نمای کلی کانالها — همهٔ کانالهای پشتیبانیشده
- جفتسازی — احراز هویت پیام مستقیم و جریان جفتسازی
- گروهها — رفتار گفتوگوی گروهی و محدودسازی بر اساس اشاره
- مسیریابی کانال — مسیریابی نشست برای پیامها
- امنیت — مدل دسترسی و مقاومسازی