Developer and self-hosted
Nostr
Nostr یک Plugin کانال قابل دانلود (@openclaw/nostr) است که به OpenClaw امکان میدهد پیامهای مستقیم رمزگذاریشده NIP-04 را از طریق رلههای Nostr دریافت کند و به آنها پاسخ دهد. برای هر Gateway یک حساب؛ فقط پیامهای مستقیم.
نصب
openclaw plugins install @openclaw/nostrبرای دنبالکردن برچسب انتشار رسمی فعلی، از مشخصهٔ سادهٔ بسته استفاده کنید. فقط زمانی نسخهای دقیق را سنجاق کنید که به نصبی تکرارپذیر نیاز دارید.
از یک نسخهٔ محلی مخزن (گردشکارهای توسعه):
openclaw plugins install --link <path-to-local-nostr-plugin>پس از نصب یا فعالسازی Pluginها، Gateway را راهاندازی مجدد کنید. پس از نصب Plugin، فرایند راهاندازی اولیه (openclaw onboard) و openclaw channels add، کانال Nostr را از کاتالوگ مشترک کانالها ارائه میکنند.
راهاندازی غیرتعاملی
openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY"openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY" --relay-urls "wss://relay.damus.io,wss://relay.primal.net"برای نگهداشتن NOSTR_PRIVATE_KEY در محیط بهجای ذخیرهکردن کلید در پیکربندی، از --use-env استفاده کنید (فقط حساب پیشفرض).
راهاندازی سریع
- یک جفتکلید Nostr ایجاد کنید (در صورت نیاز):
# با استفاده از naknak key generate- آن را به پیکربندی اضافه کنید:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", }, },}- کلید را صادر کنید:
export NOSTR_PRIVATE_KEY="nsec1..."- Gateway را راهاندازی مجدد کنید.
مرجع پیکربندی
| کلید | نوع | پیشفرض | توضیحات |
|---|---|---|---|
privateKey |
string | الزامی | کلید خصوصی با قالب nsec یا هگز؛ ارجاع به راز مجاز است |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
نشانیهای رله (WebSocket) |
dmPolicy |
string | pairing |
سیاست دسترسی پیام مستقیم |
allowFrom |
string[] | [] |
کلیدهای عمومی فرستندگان مجاز |
enabled |
boolean | true |
فعال/غیرفعالکردن کانال |
name |
string | - | نام نمایشی |
profile |
object | - | فرادادهٔ نمایهٔ NIP-01 |
فرادادهٔ نمایه
دادههای نمایه بهصورت رویداد NIP-01 با kind:0 منتشر میشوند. میتوانید آن را از رابط کاربری کنترل (Channels -> Nostr -> Profile) مدیریت کنید یا مستقیماً در پیکربندی تنظیم کنید.
مثال:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", profile: { name: "openclaw", displayName: "OpenClaw", about: "ربات دستیار شخصی برای پیامهای مستقیم", picture: "https://example.com/avatar.png", banner: "https://example.com/banner.png", website: "https://example.com", nip05: "openclaw@example.com", lud16: "openclaw@example.com", }, }, },}نکتهها:
- نشانیهای نمایه باید از
https://استفاده کنند. - واردکردن دادهها از رلهها، فیلدها را ادغام و مقادیر بازنویسیشدهٔ محلی را حفظ میکند.
کنترل دسترسی
سیاستهای پیام مستقیم
- جفتسازی (پیشفرض): فرستندگان ناشناس یک کد جفتسازی دریافت میکنند.
- فهرست مجاز: فقط کلیدهای عمومی موجود در
allowFromمیتوانند پیام مستقیم بفرستند. - باز: پیامهای مستقیم ورودی عمومی (به
allowFrom: ["*"]نیاز دارد). - غیرفعال: پیامهای مستقیم ورودی نادیده گرفته میشوند.
نکتههای اعمال سیاست:
- امضاهای رویدادهای ورودی پیش از اعمال سیاست فرستنده و رمزگشایی NIP-04 تأیید میشوند؛ بنابراین رویدادهای جعلشده زودهنگام رد میشوند.
- پاسخهای جفتسازی بدون رمزگشایی یا پردازش متن اصلی پیام مستقیم ارسال میشوند.
- نرخ پیامهای مستقیم ورودی محدود میشود (در سطح کلی و برای هر فرستنده) و بارهای دادهٔ بیشازحد بزرگ پیش از رمزگشایی کنار گذاشته میشوند.
نمونهٔ فهرست مجاز
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", dmPolicy: "allowlist", allowFrom: ["npub1abc...", "npub1xyz..."], }, },}قالبهای کلید
قالبهای پذیرفتهشده:
- کلید خصوصی:
nsec...یا مقدار هگز ۶۴ نویسهای - کلیدهای عمومی (
allowFrom):npub...یا هگز
رلهها
پیشفرضها: relay.damus.io و nos.lol.
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"], }, },}نکتهها:
- برای افزونگی از ۲ تا ۳ رله استفاده کنید.
- از رلههای بیشازحد زیاد اجتناب کنید (تأخیر، تکرار).
- رلههای پولی میتوانند قابلیت اطمینان را بهبود دهند.
- رلههای محلی برای آزمایش مناسباند (
ws://localhost:7777).
پشتیبانی از پروتکل
| NIP | وضعیت | توضیحات |
|---|---|---|
| NIP-01 | پشتیبانیشده | قالب پایهٔ رویداد + فرادادهٔ نمایه |
| NIP-04 | پشتیبانیشده | پیامهای مستقیم رمزگذاریشده (kind:4) |
| NIP-17 | برنامهریزیشده | پیامهای مستقیم با بستهبندی هدیهای |
| NIP-44 | برنامهریزیشده | رمزگذاری نسخهبندیشده |
آزمایش
رلهٔ محلی
# راهاندازی strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}آزمایش دستی
- کلید عمومی ربات را از گزارشهای Gateway یا
openclaw channels statusیادداشت کنید (هگز؛ در صورت نیاز، آن را در کارخواه خود به npub تبدیل کنید). - یک کارخواه Nostr باز کنید (Amethyst، Damus و غیره).
- به کلید عمومی ربات پیام مستقیم بفرستید.
- پاسخ را تأیید کنید.
عیبیابی
پیامها دریافت نمیشوند
- معتبر بودن کلید خصوصی را تأیید کنید.
- مطمئن شوید نشانیهای رله در دسترساند و از
wss://استفاده میکنند (یا برای محیط محلی ازws://). - تأیید کنید
enabledبرابر باfalseنیست. - گزارشهای Gateway را برای خطاهای اتصال به رله بررسی کنید.
پاسخها ارسال نمیشوند
- بررسی کنید که رله نوشتن را میپذیرد.
- اتصال خروجی را تأیید کنید.
- مراقب محدودیتهای نرخ رله باشید.
پاسخهای تکراری
- هنگام استفاده از چند رله انتظار میرود.
- پیامها بر اساس شناسهٔ رویداد تکرارزدایی میشوند؛ فقط نخستین تحویل باعث ایجاد پاسخ میشود.
امنیت
- هرگز کلیدهای خصوصی را در مخزن ثبت نکنید.
- برای کلیدها از متغیرهای محیطی استفاده کنید.
- برای رباتهای محیط عملیاتی، استفاده از
allowlistرا در نظر بگیرید. - امضاها پیش از سیاست فرستنده تأیید میشوند و سیاست فرستنده پیش از رمزگشایی اعمال میشود؛ بنابراین رویدادهای جعلشده زودهنگام رد میشوند و فرستندگان ناشناس نمیتوانند پردازش کامل رمزنگاری را تحمیل کنند.
محدودیتها (محصول کمینهٔ پذیرفتنی)
- فقط پیامهای مستقیم (بدون گفتوگوی گروهی).
- بدون پیوست رسانهای.
- فقط NIP-04 (بستهبندی هدیهای NIP-17 برنامهریزی شده است).
مرتبط
- نمای کلی کانالها — همهٔ کانالهای پشتیبانیشده
- جفتسازی — احراز هویت پیام مستقیم و روند جفتسازی
- گروهها — رفتار گفتوگوی گروهی و محدودسازی بر اساس اشاره
- مسیریابی کانال — مسیریابی نشست برای پیامها
- امنیت — مدل دسترسی و مقاومسازی